unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
@ 2022-02-03 15:09 David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-02-21  2:11 ` Dmitry Gutov
                   ` (3 more replies)
  0 siblings, 4 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-02-03 15:09 UTC (permalink / raw)
  To: 53749


[-- Attachment #1.1: Type: text/plain, Size: 2058 bytes --]

I've recently been trying to use xref commands with a tags table in a
TeX repository, and many of the results are sub-optimal.  This is a
known issue -- within living memory there have been at least two
discussions related to it on help-gnu-emacs:

https://lists.gnu.org/archive/html/help-gnu-emacs/2018-06/msg00126.html
https://lists.gnu.org/archive/html/help-gnu-emacs/2021-07/msg00436.html

Neither discussion resulted in any code, at least not that I can find,
and the issues mentioned there remain.  For example,
xref-find-definitions on, say, '\mycommand' returns

No definitions found for: mycommand.

(The absence of the escape char in the search string makes the search
fail, as the tag name in the table will be '\mycommand'.)

Similarly, any xref command on 'my:citekey' will only search by default
for the half of the symbol under point, stopping at the colon.

There are many other behaviors that are suboptimal, as well, so in the
end I wrote a new xref backend for TeX buffers (cloning large portions
of the default etags backend), and wondered whether it might be welcome
in GNU Emacs.

A few remarks:

1. The code should work as it stands both in the AUCTeX and the in-tree
modes.  The AUCTeX hooks I've included in the patch are provisional, as
I would want to discuss with them how they would want to handle it,
should the patch be accepted in some form.

2. Along the way I found some issues with how etags parses TeX files,
issues which affect the usefulness of the xref commands, so I've made
changes in etags.c as well.  When running the test suite for etags the
only diffs occurred in the TeX-related sections of the resulting tags
file, and location information in those sections was good.

3. The patch as it stands enables all the changes by default to give
what I judge to be the best out-of-the-box experience, but wiser heads
may well have other ideas.

4. If it looks like the patch will make it into Emacs in some form, I'm
going to need to assign copyright, so I'd appreciate help with getting
that started.

Thanks,

David.

[-- Attachment #1.2: Type: text/html, Size: 2444 bytes --]

[-- Attachment #2: 0001-Provide-an-xref-backend-for-TeX-buffers.patch --]
[-- Type: text/x-patch, Size: 23052 bytes --]

From 9f5b2547fef5597f9c41e1c46f99746095a0834c Mon Sep 17 00:00:00 2001
From: David Fussner <dfussner@googlemail.com>
Date: Wed, 2 Feb 2022 13:31:51 +0000
Subject: [PATCH] Provide an xref backend for TeX buffers

* lib-src/etags.c (TeX_commands): Improve parsing of commands in TeX
buffers.
(TEX_defenv): Expand list of commands to tag by default in TeX
buffers.
(TeX_help):
* doc/emacs/maintaining.texi (Tag Syntax): Document new tagged
commands.

* lisp/textmodes/tex-mode.el (tex--xref-backend): New function to name
xref backend.
(tex-common-initialization): Set up xref backend for in-tree TeX
modes.
(tex-set-auctex-xref-backend): New function to do the same for AUCTeX
modes.
(xref-backend-identifier-at-point)
(xref-backend-identifier-completion-table)
(xref-backend-identifier-completion-ignore-case)
(xref-backend-definitions, xref-backend-apropos)
(xref-backend-references): New TeX implementations of the generic xref
backend functions.
(tex-xref-apropos-regexp, tex-xref-references-in-directory): New
helper functions for backend.
(tex-thingatpt-modes-list): New var.
(tex-thingatpt-is-texsymbol): New defcustom.
(tex-set-thingatpt-symbol): New command to apply value of previous
buffer-locally.
(tex--symbol-or-texsymbol): New helper function for previous.
(tex-thingatpt--beginning-of-texsymbol)
(tex-thingatpt--end-of-texsymbol): New functions to define texsymbol
"thing" for 'thing-at-point'.
(tex-thingatpt-syntax-table, tex-escape-char): New vars to do the
same.
(tex--thing-at-point): New function to return texsymbol
'thing-at-point'.
(tex-thingatpt-include-escape, tex-xref-try-alternate-forms): New
defcustoms to refine behavior of the xref backend.
(tex--include-escape-p): New function to do the same.
---
 doc/emacs/maintaining.texi |   9 +-
 lib-src/etags.c            |  83 ++++++++--
 lisp/textmodes/tex-mode.el | 331 +++++++++++++++++++++++++++++++++++++
 3 files changed, 411 insertions(+), 12 deletions(-)

diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index edcc6075f7..1de435246e 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -2565,8 +2565,13 @@ Tag Syntax
 @code{\section}, @code{\subsection}, @code{\subsubsection},
 @code{\eqno}, @code{\label}, @code{\ref}, @code{\cite},
 @code{\bibitem}, @code{\part}, @code{\appendix}, @code{\entry},
-@code{\index}, @code{\def}, @code{\newcommand}, @code{\renewcommand},
-@code{\newenvironment} and @code{\renewenvironment} are tags.
+@code{\index}, @code{\def}, @code{\edef}, @code{\gdef}, @code{\xdef},
+@code{\newcommand}, @code{\renewcommand}, @code{\newenvironment},
+@code{\renewenvironment}, @code{\DeclareRobustCommand},
+@code{\newrobustcmd}, @code{\renewrobustcmd}, @code{\let},
+@code{\csdef}, @code{\csedef}, @code{\csgdef}, @code{\csxdef},
+@code{\csletcs}, and @code{\cslet} are tags.  So too are the arguments
+of any starred variants of these commands, when such variants exist.
 
 Other commands can make tags as well, if you specify them in the
 environment variable @env{TEXTAGS} before invoking @command{etags}.  The
diff --git a/lib-src/etags.c b/lib-src/etags.c
index aa5bc8839d..e5269aa456 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -793,8 +793,12 @@ #define STDIN 0x1001		/* returned by getopt_long on --parse-stdin */
 "In LaTeX text, the argument of any of the commands '\\chapter',\n\
 '\\section', '\\subsection', '\\subsubsection', '\\eqno', '\\label',\n\
 '\\ref', '\\cite', '\\bibitem', '\\part', '\\appendix', '\\entry',\n\
-'\\index', '\\def', '\\newcommand', '\\renewcommand',\n\
-'\\newenvironment' or '\\renewenvironment' is a tag.\n\
+'\\index', '\\def', '\\edef', '\\gdef', '\\xdef', '\\newcommand',\n\
+'\\renewcommand', '\\newenvironment', '\\renewenvironment',\n\
+'\\DeclareRobustCommand, '\\newrobustcmd', '\\renewrobustcmd',\n\
+'\\let', '\\csdef', '\\csedef', '\\csgdef', '\\csxdef', '\\csletcs',\n\
+or '\\cslet' is a tag.  So is the argument of any of the starred\n\
+variants of these commands, when a starred variant exists.\n\
 \n\
 Other commands can be specified by setting the environment variable\n\
 'TEXTAGS' to a colon-separated list like, for example,\n\
@@ -5673,11 +5677,19 @@ Scheme_functions (FILE *inf)
 static linebuffer *TEX_toktab = NULL; /* Table with tag tokens */
 
 /* Default set of control sequences to put into TEX_toktab.
-   The value of environment var TEXTAGS is prepended to this.  */
+   The value of environment var TEXTAGS is prepended to this.
+   (2021) Add variants of '\def', some additional LaTeX commands,
+   and common variants from the 'etoolbox' package.  Also, add
+   starred variants of the commands if they exist.  Starred
+   variants need to appear before their unstarred versions. */
 static const char *TEX_defenv = "\
-:chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\
-:part:appendix:entry:index:def\
-:newcommand:renewcommand:newenvironment:renewenvironment";
+:chapter*:section*:subsection*:subsubsection*:part*:label:ref\
+:chapter:section:subsection:subsubsection:eqno:cite:bibitem\
+:part:appendix:entry:index:def:edef:gdef:xdef:newcommand*:newcommand\
+:renewcommand*:renewcommand:newenvironment*:newenvironment\
+:renewenvironment*:renewenvironment:DeclareRobustCommand*\
+:DeclareRobustCommand:renewrobustcmd*:renewrobustcmd:newrobustcmd*\
+:newrobustcmd:let:csdef:csedef:csgdef:csxdef:csletcs:cslet";
 
 static void TEX_decode_env (const char *, const char *);
 
@@ -5736,19 +5748,70 @@ TeX_commands (FILE *inf)
 	      {
 		char *p;
 		ptrdiff_t namelen, linelen;
-		bool opgrp = false;
+		bool opgrp = false, one_esc = false;
 
 		cp = skip_spaces (cp + key->len);
+		/* Skip the optional arguments to commands in the tags list so
+		   that these arguments don't end up as the name of the tag.
+		   The name will instead come from the argument in curly braces
+		   that follows the optional ones.  */
+		if (*cp == '[' || *cp == '(')
+		  {
+		    while (*cp != TEX_opgrp && *cp != '\0')
+		      cp++;
+		  }
 		if (*cp == TEX_opgrp)
 		  {
 		    opgrp = true;
 		    cp++;
 		  }
+		/* Jumping to a TeX command definition doesn't work in at
+		   least some of the editors that use ctags.  Changes in
+		   tex-mode.el in GNU Emacs address these issues for etags;
+		   uncomment the following five lines to get a quick & dirty
+		   improvement in programs using ctags as well, though some
+		   parts of the behavior will remain suboptimal.  The
+		   undocumented ctags option '--no-duplicates' may help.  */
+
+		/* if (CTAGS && *cp == TEX_esc) */
+		/*   { */
+		/*     cp++; */
+		/*     one_esc = true; */
+		/*   } */
+
+		/* Add optional argument brackets '(' and '[' so that these
+		   arguments don't appear in tag names.  Also add '=' as it's
+		   relational in the vast majority of cases.  */
 		for (p = cp;
-		     (!c_isspace (*p) && *p != '#' &&
-		      *p != TEX_opgrp && *p != TEX_clgrp);
+		     (!c_isspace (*p) && *p != '#' && *p != '=' &&
+		      *p != '[' && *p != '(' && *p != TEX_opgrp &&
+		      *p != TEX_clgrp);
 		     p++)
-		  continue;
+		  /* Allow only one escape char in a tag name, which
+		     (primarily) enables tagging a TeX command's different,
+		     possibly temporary, '\let' bindings.  */
+		  if (*p == TEX_esc)
+		    {
+		      if (!one_esc)
+			{
+			  one_esc = true;
+			  continue;
+			}
+		      else
+			break;
+		    }
+		  else
+		    continue;
+		/* Re-scan to catch (highly unusual) cases where a
+		   command name is of the form '\('.  */
+		if ((*p == '(' || *p == '[') && (p - cp) < 2)
+		  {
+		    for (p = cp;
+			 (!c_isspace (*p) && *p != '#' &&
+			  *p != TEX_opgrp && *p != TEX_clgrp);
+			 p++)
+		      continue;
+		  }
 		namelen = p - cp;
 		linelen = lb.len;
 		if (!opgrp || *p == TEX_clgrp)
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index ab94036d01..3a7178c055 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -1291,6 +1291,9 @@ tex-common-initialization
 	      (syntax-propertize-rules latex-syntax-propertize-rules))
   ;; TABs in verbatim environments don't do what you think.
   (setq-local indent-tabs-mode nil)
+  ;; Set up xref backend in TeX buffers.
+  (add-hook 'xref-backend-functions #'tex--xref-backend nil t)
+  (tex-set-thingatpt-symbol)
   ;; Other vars that should be buffer-local.
   (make-local-variable 'tex-command)
   (make-local-variable 'tex-start-of-header)
@@ -3659,6 +3662,334 @@ tex-chktex
       (process-send-region tex-chktex--process (point-min) (point-max))
       (process-send-eof tex-chktex--process))))
 
+\f
+;;; Xref backend
+
+;; Here we define an xref backend for TeX, adapting the default etags
+;; backend so that the main xref user commands (including
+;; `xref-find-definitions', `xref-find-apropos', and
+;; `xref-find-references' [on M-., C-M-., and M-?, respectively]) work
+;; in TeX buffers.  This mostly involves defining a new THING for
+;; `thing-at-point' (texsymbol), then substituting that THING for
+;; `symbol' in TeX buffers, at least by (configurable) default.  The
+;; TeX escape character will by default appear in the resulting string
+;; only when the xref command uses string search and not regexp
+;; search, though this too is configurable.  The new THING type also
+;; improves the accuracy of other commands that use `thing-at-point'
+;; in TeX buffers, like `project-find-regexp'.  TODO: Include commands
+;; that call `bounds-of-thing-at-point' (for example
+;; `isearch-forward-thing-at-point') in the mechanism.
+
+(defvar tex-thingatpt-modes-list
+  '(tex-mode doctex-mode latex-mode plain-tex-mode slitex-mode)
+  "Major modes where `thing-at-point' may use the `texsymbol' type.
+
+When a buffer's `major-mode' is in this list, and when
+`tex-thingatpt-is-texsymbol' is t (the default), any command in
+that buffer that calls `thing-at-point' with a `symbol' argument
+actually uses the `texsymbol' argument, instead.")
+
+(defcustom tex-thingatpt-is-texsymbol t
+  "When non-nil replace `symbol' by `texsymbol' for `thing-at-point'.
+
+This applies only to TeX buffers.  The `texsymbol' \"thing\"
+modifies the standard `symbol' for use in such buffers.
+
+When nil, restore the default behavior of `thing-at-point' in TeX
+buffers.
+
+Custom will automatically apply changes in all TeX buffers, but
+if you set the variable outside of Custom it won't take effect
+until you apply it with \\[tex-set-thingatpt-symbol].  Without a
+prefix argument (\\[universal-argument]) this applies only to the
+current buffer, but with one it applies to all TeX buffers in
+`buffer-list'.  (TeX buffers are those whose `major-mode' is a
+member of `tex-thingatpt-modes-list'.)"
+  :type 'boolean
+  :group 'tex-file
+  :initialize #'custom-initialize-default
+  :set (lambda (var val)
+         (set-default var val)
+         (tex-set-thingatpt-symbol t))
+  :version "29.1")
+
+(defcustom tex-thingatpt-include-escape '(xref-find-definitions
+                                          xref-find-definitions-other-window
+                                          xref-find-definitions-other-frame)
+  "If non-nil, include `tex-escape-char' in `thing-at-point'.
+
+This variable only takes effect when `tex-thingatpt-is-texsymbol'
+is t (the default), changing the argument passed to
+`thing-at-point' from `symbol' to `texsymbol'.  When that is the
+case, the values of this variable act as follows:
+
+When t, `thing-at-point' will always include a
+`tex-escape-char' (usually `\\'), should one be present, in the
+string it returns in TeX buffers.
+
+When nil, `thing-at-point' will never include the
+`tex-escape-char' in the string it returns in TeX buffers.
+
+Otherwise, it's a list of commands for which `thing-at-point'
+will always include the `tex-escape-char' in the string it
+returns.  The three xref commands listed by default may cease to
+function properly in TeX buffers if set to nil, but setting
+`tex-xref-try-alternate-forms' to t will rectify that."
+  :type '(choice (const :tag "Always include tex-escape-char" t)
+                 (const :tag "Never include tex-escape-char" nil)
+                 (set :tag "Include tex-escape-char for these commands"
+		      (repeat :inline t (symbol :tag "command"))))
+  :group 'tex-file
+  :version "29.1")
+
+(defcustom tex-xref-try-alternate-forms nil
+  "Non-nil means find definitions of alternate forms of commands.
+
+If `xref-find-definitions' returns nil for the current form of
+the TeX command name, try the alternative form, which will have
+the `tex-escape-char' (usually `\\') either stripped from or
+prepended to the current form, depending on whether or not the
+current form starts with that character.
+
+This may be particularly useful in documents that mix `\\def' and
+`\\csdef' when defining commands."
+  :type 'boolean
+  :group 'tex-file
+  :version "29.1")
+
+(defvar tex-escape-char ?\\
+  "The current TeX escape character.
+
+The `etags' program only recognizes `\\' (92) and `!' (33) as
+escape characters in TeX documents, and if it detects the latter
+it also uses `<>' as the TeX grouping construct rather than `{}'.
+Setting this variable to anything other than `\\' or `!' will not
+be useful without changes to `etags', at least for commands that
+search tags tables, such as \\[xref-find-definitions] and \
+\\[xref-find-apropos].")
+
+(defvar tex-thingatpt-syntax-table
+  (let* ((ost (if (boundp 'TeX-mode-syntax-table)
+                  TeX-mode-syntax-table
+                tex-mode-syntax-table))
+         (st (make-syntax-table ost)))
+    (modify-syntax-entry ?# "'" st)
+    (modify-syntax-entry ?= "'" st)
+    (modify-syntax-entry ?` "'" st)
+    (modify-syntax-entry ?\" "'" st)
+    (modify-syntax-entry ?' "'" st)
+    st)
+  "Syntax table for delimiting `thing-at-point' in TeX buffers.
+
+When `tex-thingatpt-is-texsymbol' is t, this syntax table helps
+to define what a `texsymbol' is.")
+
+(defun tex--xref-backend () 'tex)
+
+;; Setup AUCTeX modes.  (Should this be in AUCTeX itself?)
+
+(add-hook 'TeX-mode-hook #'tex-set-auctex-xref-backend)
+(add-hook 'TeX-mode-hook #'tex-set-thingatpt-symbol)
+
+(defun tex-set-auctex-xref-backend ()
+  (add-hook 'xref-backend-functions #'tex--xref-backend nil t))
+
+(declare-function xref-item-location "xref")
+(declare-function xref--project-root "xref" (project))
+(declare-function xref--convert-hits "xref" (hits regexp))
+(declare-function apropos-parse-pattern "apropos" (pattern))
+(declare-function semantic-symref-perform-search "semantic/symref")
+(declare-function semantic-symref-instantiate "semantic/symref")
+(declare-function project-external-roots "project")
+(declare-function find-tag--completion-ignore-case "etags")
+(declare-function etags--xref-find-definitions "etags")
+(declare-function etags--xref-apropos-additional "etags" (regexp))
+(declare-function cl-delete-if "cl-seq")
+(defvar etags-xref-prefer-current-file)
+
+(cl-defmethod xref-backend-identifier-at-point ((_backend (eql 'tex)))
+  (require 'etags)
+  (thing-at-point 'symbol t))
+
+(cl-defmethod xref-backend-identifier-completion-table ((_backend
+                                                         (eql 'tex)))
+  (tags-lazy-completion-table))
+
+(cl-defmethod xref-backend-identifier-completion-ignore-case ((_backend
+                                                               (eql 'tex)))
+  (find-tag--completion-ignore-case))
+
+(cl-defmethod xref-backend-definitions ((_backend (eql 'tex)) symbol)
+  (let* ((file (and buffer-file-name (expand-file-name buffer-file-name)))
+         (alt-sym (if (char-equal tex-escape-char (aref symbol 0))
+                      (substring symbol 1)
+                    (concat (string tex-escape-char) symbol)))
+         (prelim-definitions (etags--xref-find-definitions symbol))
+         (definitions (if (or prelim-definitions
+                              (not tex-xref-try-alternate-forms))
+                          prelim-definitions
+                        (etags--xref-find-definitions alt-sym)))
+         same-file-definitions)
+    (when (and etags-xref-prefer-current-file file)
+      (setq definitions
+            (cl-delete-if
+             (lambda (definition)
+               (when (equal file
+                            (xref-location-group
+                             (xref-item-location definition)))
+                 (push definition same-file-definitions)
+                 t))
+             definitions))
+      (setq definitions (nconc (nreverse same-file-definitions)
+                               definitions)))
+    definitions))
+
+(cl-defmethod xref-backend-apropos ((_backend (eql 'tex)) pattern)
+  (let ((regexp (tex-xref-apropos-regexp pattern)))
+    (nconc
+     (or
+      (etags--xref-find-definitions regexp t)
+      (etags--xref-find-definitions pattern t))
+     (etags--xref-apropos-additional regexp))))
+
+(cl-defmethod xref-backend-references ((_backend (eql 'tex)) identifier)
+  (mapcan
+   (lambda (dir)
+     (message "Searching %s..." dir)
+     (redisplay)
+     (prog1
+         (tex-xref-references-in-directory identifier dir)
+       (message "Searching %s... done" dir)))
+   (let ((pr (project-current t)))
+     (cons
+      (xref--project-root pr)
+      (project-external-roots pr)))))
+
+(defun tex-xref-apropos-regexp (pattern)
+  "Return a regexp from PATTERN similar to `apropos'.
+
+Unlike the standard xref function, if `regexp-quote' returns a
+string different from the original PATTERN, the TeX function
+passes that modified string, rather than PATTERN itself, to
+`apropos-parse-pattern'."
+  (let ((re (regexp-quote pattern)))
+    (apropos-parse-pattern
+     (if (string-equal re pattern)
+         ;; Split into words
+         (or (split-string pattern "[ \t]+" t)
+             (user-error "No word list given"))
+       re))))
+
+(defun tex-xref-references-in-directory (symbol dir)
+  "Find all references to SYMBOL in directory DIR.
+Return a list of xref values.
+
+This function uses the Semantic Symbol Reference API.  In TeX
+buffers the value returned when passing SYMBOL to `regexp-quote'
+becomes the default search term.  If this symref instantiation
+finds no matches, a second tries again with the original SYMBOL
+as search term, instead.  Both searches set keyword `searchtype:'
+to \\='regexp instead of xref's \\='symbol.
+
+See `semantic-symref-tool-alist' for details on which tools are
+used, and when.  See also `xref-references-in-directory' and
+comments in its code, the latter copied into the TeX
+implementation for convenience."
+  (cl-assert (directory-name-p dir))
+  (require 'semantic/symref)
+  (defvar semantic-symref-tool)
+  (defvar ede-minor-mode)
+
+  ;; Some symref backends use `ede-project-root-directory' as the root
+  ;; directory for the search, rather than `default-directory'. Since
+  ;; the caller has specified `dir', we bind `ede-minor-mode' to nil
+  ;; to force the backend to use `default-directory'.
+  (let* ((ede-minor-mode nil)
+         (default-directory dir)
+         ;; FIXME: Remove CScope and Global from the recognized tools?
+         ;; The current implementations interpret the symbol search as
+         ;; "find all calls to the given function", but not function
+         ;; definition. And they return nothing when passed a variable
+         ;; name, even a global one.
+         (semantic-symref-tool 'detect)
+         (case-fold-search nil)
+         (texsymbol (regexp-quote symbol))
+         (inst (semantic-symref-instantiate :searchfor texsymbol
+                                            :searchtype 'regexp
+                                            :searchscope 'subdirs
+                                            :resulttype 'line-and-text))
+         (alt-inst (semantic-symref-instantiate :searchfor symbol
+                                                :searchtype 'regexp
+                                                :searchscope 'subdirs
+                                                :resulttype 'line-and-text)))
+    (or
+     (xref--convert-hits (semantic-symref-perform-search inst)
+                         (format "%s" texsymbol))
+     (xref--convert-hits (semantic-symref-perform-search alt-inst)
+                         (format "%s" symbol)))))
+
+(put 'texsymbol 'beginning-op 'tex-thingatpt--beginning-of-texsymbol)
+
+(put 'texsymbol 'end-op 'tex-thingatpt--end-of-texsymbol)
+
+(defun tex-set-thingatpt-symbol (&optional all)
+  "Set meaning of `thing-at-point' `symbol' in (ALL?) TeX buffers.
+
+When `tex-thingatpt-is-texsymbol' is t, set `thing-at-point' to
+use the `texsymbol' \"thing\" instead of `symbol', otherwise
+maintain or restore the default.  Without an optional ALL make
+changes only in current buffer, with ALL make changes in all TeX
+buffers in `buffer-list'."
+  (interactive "P")
+  (require 'thingatpt)
+  (if all
+      (dolist (buf (buffer-list))
+        (with-current-buffer buf
+          (tex--symbol-or-texsymbol)))
+    (tex--symbol-or-texsymbol)))
+
+(defun tex--symbol-or-texsymbol ()
+  (when (memq major-mode tex-thingatpt-modes-list)
+    (if tex-thingatpt-is-texsymbol
+        (setq-local thing-at-point-provider-alist
+                    (add-to-list 'thing-at-point-provider-alist
+                            '(symbol . tex--thing-at-point)))
+      (setq-local thing-at-point-provider-alist
+                  (delete '(symbol . tex--thing-at-point)
+                          thing-at-point-provider-alist)))))
+
+(defun tex--thing-at-point ()
+  "Pass `thing' type `texsymbol' to `bounds-of-thing-at-point'.
+
+When `tex-thingatpt-is-texsymbol' is t, calls in TeX buffers to
+`thing-at-point' with argument `symbol' will use this function."
+  (let* ((sytab (make-syntax-table tex-thingatpt-syntax-table))
+         (bounds (with-syntax-table sytab
+                   (unless (char-equal tex-escape-char ?\\)
+                     (modify-syntax-entry ?\\ "_")
+                     (modify-syntax-entry tex-escape-char "\\")
+                     (modify-syntax-entry ?< "(>")
+                     (modify-syntax-entry ?> ")<"))
+                   (bounds-of-thing-at-point 'texsymbol))))
+    (when bounds
+      (buffer-substring-no-properties (car bounds) (cdr bounds)))))
+
+(defun tex--include-escape-p (command)
+  (or (eq tex-thingatpt-include-escape t)
+      (memq command tex-thingatpt-include-escape)))
+
+(defun tex-thingatpt--beginning-of-texsymbol ()
+  "Move point to the beginning of the current TeX symbol."
+  (and (re-search-backward "\\([][()]\\|\\(\\sw\\|\\s_\\|\\s.\\)+\\)")
+       (skip-syntax-backward "w_.")
+       (when (tex--include-escape-p this-command)
+         (skip-syntax-backward "\\/"))))
+
+(defun tex-thingatpt--end-of-texsymbol ()
+  "Move point to the end of the current TeX symbol."
+  (and (re-search-forward "\\([][()]\\|\\(\\sw\\|\\s_\\|\\s.\\)+\\)")
+       (skip-syntax-forward "w_.")))
+
 (make-obsolete-variable 'tex-mode-load-hook
                         "use `with-eval-after-load' instead." "28.1")
 (run-hooks 'tex-mode-load-hook)
-- 
2.17.6


^ permalink raw reply related	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-03 15:09 bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-02-21  2:11 ` Dmitry Gutov
  2022-02-21  9:48   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-09-08 13:25   ` Lars Ingebrigtsen
  2022-02-21 12:35 ` Arash Esbati
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 106+ messages in thread
From: Dmitry Gutov @ 2022-02-21  2:11 UTC (permalink / raw)
  To: David Fussner, 53749

Hi!

Let us first discuss whether we could make do without an additional Xref 
backend. Just to make sure.

On 03.02.2022 17:09, David Fussner via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:
> Similarly, any xref command on 'my:citekey' will only search by default
> for the half of the symbol under point, stopping at the colon.

etags's implementation of 'xref-backend-identifier-at-point' calls 
'find-tag--default', which consults 'find-tag-default-function' and
(get major-mode 'find-tag-default-function).

So if your main goal was to alter which string gets searched for (based 
on text around point), you can define a function which returns the 
necessary string (as you did in the patch) and then either set 
'find-tag-default-function' to that function, or put it on the 
'find-tag-default-function' property for the respective major mode 
functions.

> There are many other behaviors that are suboptimal, as well, so in the
> end I wrote a new xref backend for TeX buffers (cloning large portions
> of the default etags backend), and wondered whether it might be welcome
> in GNU Emacs.

Could you point out the other changes which were required?





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-21  2:11 ` Dmitry Gutov
@ 2022-02-21  9:48   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-02-21 17:28     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-02-21 23:55     ` Dmitry Gutov
  2022-09-08 13:25   ` Lars Ingebrigtsen
  1 sibling, 2 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-02-21  9:48 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 53749

(Resending to include the mailing list -- sorry!)

Hi Dmitry,

Many thanks for looking into this.

>
> So if your main goal was to alter which string gets searched for (based
> on text around point), you can define a function which returns the
> necessary string (as you did in the patch) and then either set
> 'find-tag-default-function' to that function, or put it on the
> 'find-tag-default-function' property for the respective major mode
> functions.
>
> > There are many other behaviors that are suboptimal, as well, so in the
> > end I wrote a new xref backend for TeX buffers (cloning large portions
> > of the default etags backend), and wondered whether it might be welcome
> > in GNU Emacs.
>
> Could you point out the other changes which were required?

As you've noticed, I tried at first to get by without a new backend,
but I ran into a few issues that I couldn't solve that way, hence the
current patch.  A couple of examples:

1. TeX is very generous with the characters it includes in its
symbols, so what looks like a standard symbol to it can look like a
regexp either to grep or to emacs, so I needed to changes things in
xref-find-apropos and in xref-find-references to take this into
account.  (See tex-xref-apropos-regexp and
tex-xref-references-in-directory.)  Sometimes using a search string
that had been put through regexp-quote was wrong, as when a user
provided their own regexp in the minibuffer, so in both those cases I
provided fallbacks to a different search in case the default search
came up empty.  I couldn't see how to do this without a new backend.

2.  A package like biblatex creates what amounts to a separate
namespace using the \newbibmacro mechanism, so pretty much every
biblatex style has both a \cite command and a cite bibmacro, and I
wanted to allow emacs to differentiate between them when using
xref-find-definitions.  Because users of the etoolbox package (like
biblatex) may well mix commands with and without the escape char "\",
I also provided a variable to allow users to find when a \command is
called using \csuse{command} instead.  Again, this required a fallback
search (see xref-backend-definitions) which I couldn't see how to
provide without a new backend.

Does this make any sense?  I can give more specific examples if you
like -- try running xref-find-references on a TeX command with "@" in
it.  (If memory serves, that behaved badly here on an unpatched emacs,
but maybe I'm misremembering.)

David.

On Mon, 21 Feb 2022 at 02:11, Dmitry Gutov <dgutov@yandex.ru> wrote:
>
> Hi!
>
> Let us first discuss whether we could make do without an additional Xref
> backend. Just to make sure.
>
> On 03.02.2022 17:09, David Fussner via Bug reports for GNU Emacs, the
> Swiss army knife of text editors wrote:
> > Similarly, any xref command on 'my:citekey' will only search by default
> > for the half of the symbol under point, stopping at the colon.
>
> etags's implementation of 'xref-backend-identifier-at-point' calls
> 'find-tag--default', which consults 'find-tag-default-function' and
> (get major-mode 'find-tag-default-function).
>
> So if your main goal was to alter which string gets searched for (based
> on text around point), you can define a function which returns the
> necessary string (as you did in the patch) and then either set
> 'find-tag-default-function' to that function, or put it on the
> 'find-tag-default-function' property for the respective major mode
> functions.
>
> > There are many other behaviors that are suboptimal, as well, so in the
> > end I wrote a new xref backend for TeX buffers (cloning large portions
> > of the default etags backend), and wondered whether it might be welcome
> > in GNU Emacs.
>
> Could you point out the other changes which were required?





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-03 15:09 bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-02-21  2:11 ` Dmitry Gutov
@ 2022-02-21 12:35 ` Arash Esbati
  2022-02-21 14:03   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-02-25 20:16 ` Augusto Stoffel
  2024-09-14 17:26 ` Mattias Engdegård
  3 siblings, 1 reply; 106+ messages in thread
From: Arash Esbati @ 2022-02-21 12:35 UTC (permalink / raw)
  To: 53749; +Cc: dfussner

David Fussner via "Bug reports for GNU Emacs, the Swiss army knife of
text editors" <bug-gnu-emacs@gnu.org> writes:

> diff --git a/lib-src/etags.c b/lib-src/etags.c
> index aa5bc8839d..e5269aa456 100644
> --- a/lib-src/etags.c
> +++ b/lib-src/etags.c
> [...]
>  /* Default set of control sequences to put into TEX_toktab.
> -   The value of environment var TEXTAGS is prepended to this.  */
> +   The value of environment var TEXTAGS is prepended to this.
> +   (2021) Add variants of '\def', some additional LaTeX commands,
> +   and common variants from the 'etoolbox' package.  Also, add
> +   starred variants of the commands if they exist.  Starred
> +   variants need to appear before their unstarred versions. */
>  static const char *TEX_defenv = "\
> -:chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\
> -:part:appendix:entry:index:def\
> -:newcommand:renewcommand:newenvironment:renewenvironment";
> +:chapter*:section*:subsection*:subsubsection*:part*:label:ref\
> +:chapter:section:subsection:subsubsection:eqno:cite:bibitem\
> +:part:appendix:entry:index:def:edef:gdef:xdef:newcommand*:newcommand\
> +:renewcommand*:renewcommand:newenvironment*:newenvironment\
> +:renewenvironment*:renewenvironment:DeclareRobustCommand*\
> +:DeclareRobustCommand:renewrobustcmd*:renewrobustcmd:newrobustcmd*\
> +:newrobustcmd:let:csdef:csedef:csgdef:csxdef:csletcs:cslet";

Hi David,

thanks for looking into this.  While you're at it, can you also please
add support for the former xparse \newcommand variants which are now
(now is October 2020) part of LaTeX kernel, namely:

\NewDocumentCommand
\RenewDocumentCommand
\ProvideDocumentCommand
\DeclareDocumentCommand
\NewDocumentEnvironment
\RenewDocumentEnvironment
\ProvideDocumentEnvironment
\DeclareDocumentEnvironment
\NewExpandableDocumentCommand
\RenewExpandableDocumentCommand
\ProvideExpandableDocumentCommand
\DeclareExpandableDocumentCommand

TIA.  Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-21 12:35 ` Arash Esbati
@ 2022-02-21 14:03   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-02-21 14:03 UTC (permalink / raw)
  To: Arash Esbati; +Cc: 53749

Hi Arash,

Thank you for the list!  I had fully intended to add the new LaTeX 3
commands but managed somehow to forget.  If you see anything else I've
omitted please let me know.

David.

On Mon, 21 Feb 2022 at 12:36, Arash Esbati <arash@gnu.org> wrote:
>
> David Fussner via "Bug reports for GNU Emacs, the Swiss army knife of
> text editors" <bug-gnu-emacs@gnu.org> writes:
>
> > diff --git a/lib-src/etags.c b/lib-src/etags.c
> > index aa5bc8839d..e5269aa456 100644
> > --- a/lib-src/etags.c
> > +++ b/lib-src/etags.c
> > [...]
> >  /* Default set of control sequences to put into TEX_toktab.
> > -   The value of environment var TEXTAGS is prepended to this.  */
> > +   The value of environment var TEXTAGS is prepended to this.
> > +   (2021) Add variants of '\def', some additional LaTeX commands,
> > +   and common variants from the 'etoolbox' package.  Also, add
> > +   starred variants of the commands if they exist.  Starred
> > +   variants need to appear before their unstarred versions. */
> >  static const char *TEX_defenv = "\
> > -:chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\
> > -:part:appendix:entry:index:def\
> > -:newcommand:renewcommand:newenvironment:renewenvironment";
> > +:chapter*:section*:subsection*:subsubsection*:part*:label:ref\
> > +:chapter:section:subsection:subsubsection:eqno:cite:bibitem\
> > +:part:appendix:entry:index:def:edef:gdef:xdef:newcommand*:newcommand\
> > +:renewcommand*:renewcommand:newenvironment*:newenvironment\
> > +:renewenvironment*:renewenvironment:DeclareRobustCommand*\
> > +:DeclareRobustCommand:renewrobustcmd*:renewrobustcmd:newrobustcmd*\
> > +:newrobustcmd:let:csdef:csedef:csgdef:csxdef:csletcs:cslet";
>
> Hi David,
>
> thanks for looking into this.  While you're at it, can you also please
> add support for the former xparse \newcommand variants which are now
> (now is October 2020) part of LaTeX kernel, namely:
>
> \NewDocumentCommand
> \RenewDocumentCommand
> \ProvideDocumentCommand
> \DeclareDocumentCommand
> \NewDocumentEnvironment
> \RenewDocumentEnvironment
> \ProvideDocumentEnvironment
> \DeclareDocumentEnvironment
> \NewExpandableDocumentCommand
> \RenewExpandableDocumentCommand
> \ProvideExpandableDocumentCommand
> \DeclareExpandableDocumentCommand
>
> TIA.  Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-21  9:48   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-02-21 17:28     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-02-21 23:56       ` Dmitry Gutov
  2022-02-21 23:55     ` Dmitry Gutov
  1 sibling, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-02-21 17:28 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 53749

Hi Dmitry,

I found a bit of time to test, and the problem with "@" in command
names appears when a search string for xref-find-references ends with
"@". The results returned will miss out valid hits, depending on what
follows the "@" in the actual command name in the TeX file.

Hope this might help,

David.

On Mon, 21 Feb 2022 at 09:48, David Fussner <dfussner@googlemail.com> wrote:
>
> (Resending to include the mailing list -- sorry!)
>
> Hi Dmitry,
>
> Many thanks for looking into this.
>
> >
> > So if your main goal was to alter which string gets searched for (based
> > on text around point), you can define a function which returns the
> > necessary string (as you did in the patch) and then either set
> > 'find-tag-default-function' to that function, or put it on the
> > 'find-tag-default-function' property for the respective major mode
> > functions.
> >
> > > There are many other behaviors that are suboptimal, as well, so in the
> > > end I wrote a new xref backend for TeX buffers (cloning large portions
> > > of the default etags backend), and wondered whether it might be welcome
> > > in GNU Emacs.
> >
> > Could you point out the other changes which were required?
>
> As you've noticed, I tried at first to get by without a new backend,
> but I ran into a few issues that I couldn't solve that way, hence the
> current patch.  A couple of examples:
>
> 1. TeX is very generous with the characters it includes in its
> symbols, so what looks like a standard symbol to it can look like a
> regexp either to grep or to emacs, so I needed to changes things in
> xref-find-apropos and in xref-find-references to take this into
> account.  (See tex-xref-apropos-regexp and
> tex-xref-references-in-directory.)  Sometimes using a search string
> that had been put through regexp-quote was wrong, as when a user
> provided their own regexp in the minibuffer, so in both those cases I
> provided fallbacks to a different search in case the default search
> came up empty.  I couldn't see how to do this without a new backend.
>
> 2.  A package like biblatex creates what amounts to a separate
> namespace using the \newbibmacro mechanism, so pretty much every
> biblatex style has both a \cite command and a cite bibmacro, and I
> wanted to allow emacs to differentiate between them when using
> xref-find-definitions.  Because users of the etoolbox package (like
> biblatex) may well mix commands with and without the escape char "\",
> I also provided a variable to allow users to find when a \command is
> called using \csuse{command} instead.  Again, this required a fallback
> search (see xref-backend-definitions) which I couldn't see how to
> provide without a new backend.
>
> Does this make any sense?  I can give more specific examples if you
> like -- try running xref-find-references on a TeX command with "@" in
> it.  (If memory serves, that behaved badly here on an unpatched emacs,
> but maybe I'm misremembering.)
>
> David.
>
> On Mon, 21 Feb 2022 at 02:11, Dmitry Gutov <dgutov@yandex.ru> wrote:
> >
> > Hi!
> >
> > Let us first discuss whether we could make do without an additional Xref
> > backend. Just to make sure.
> >
> > On 03.02.2022 17:09, David Fussner via Bug reports for GNU Emacs, the
> > Swiss army knife of text editors wrote:
> > > Similarly, any xref command on 'my:citekey' will only search by default
> > > for the half of the symbol under point, stopping at the colon.
> >
> > etags's implementation of 'xref-backend-identifier-at-point' calls
> > 'find-tag--default', which consults 'find-tag-default-function' and
> > (get major-mode 'find-tag-default-function).
> >
> > So if your main goal was to alter which string gets searched for (based
> > on text around point), you can define a function which returns the
> > necessary string (as you did in the patch) and then either set
> > 'find-tag-default-function' to that function, or put it on the
> > 'find-tag-default-function' property for the respective major mode
> > functions.
> >
> > > There are many other behaviors that are suboptimal, as well, so in the
> > > end I wrote a new xref backend for TeX buffers (cloning large portions
> > > of the default etags backend), and wondered whether it might be welcome
> > > in GNU Emacs.
> >
> > Could you point out the other changes which were required?





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-21  9:48   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-02-21 17:28     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-02-21 23:55     ` Dmitry Gutov
  1 sibling, 0 replies; 106+ messages in thread
From: Dmitry Gutov @ 2022-02-21 23:55 UTC (permalink / raw)
  To: David Fussner; +Cc: 53749

On 21.02.2022 11:48, David Fussner wrote:
> Sometimes using a search string
> that had been put through regexp-quote was wrong, as when a user
> provided their own regexp in the minibuffer, so in both those cases I
> provided fallbacks to a different search in case the default search
> came up empty.  I couldn't see how to do this without a new backend.

One way to deal with that is to treat all user inputs as regexps there. 
Perhaps some will have to be more verbose that ideal, but as long as the 
user is familiar with the regexp syntax, the behavior will be both 
powerful and predictable.

> 2.  A package like biblatex creates what amounts to a separate
> namespace using the \newbibmacro mechanism, so pretty much every
> biblatex style has both a \cite command and a cite bibmacro, and I
> wanted to allow emacs to differentiate between them when using
> xref-find-definitions.  Because users of the etoolbox package (like
> biblatex) may well mix commands with and without the escape char "\",
> I also provided a variable to allow users to find when a \command is
> called using \csuse{command} instead.  Again, this required a fallback
> search (see xref-backend-definitions) which I couldn't see how to
> provide without a new backend.

Could those be be disambiguated when the tags are scanned, instead? Then 
the user will tailor their input to find the one or the other.

Or if we want more fuzzier matching, perhaps creating mode-specific 
values of etags-xref-find-definitions-tag-order could help.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-21 17:28     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-02-21 23:56       ` Dmitry Gutov
  2022-02-22 15:19         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Dmitry Gutov @ 2022-02-21 23:56 UTC (permalink / raw)
  To: David Fussner; +Cc: 53749

On 21.02.2022 19:28, David Fussner wrote:
> Hi Dmitry,
> 
> I found a bit of time to test, and the problem with "@" in command
> names appears when a search string for xref-find-references ends with
> "@". The results returned will miss out valid hits, depending on what
> follows the "@" in the actual command name in the TeX file.

Sorry, I have very little familiarity with TeX.

Do you have a step-by-step scenario? Perhaps using one of the .texi 
manuals already existing in the repo?





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-21 23:56       ` Dmitry Gutov
@ 2022-02-22 15:19         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-02-23  2:21           ` Dmitry Gutov
  0 siblings, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-02-22 15:19 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 53749

[-- Attachment #1: Type: text/plain, Size: 3748 bytes --]

Hi Dmitry,

> Do you have a step-by-step scenario? Perhaps using one of the .texi
> manuals already existing in the repo?

I can't find a good example in the emacs repo, but I'll try to talk through
what happens with a code snippet from biblatex.sty, which I hope will
explain some of the issues we're discussing, even if it is a little
artificial.

\DeclareBiblatexOption{global,type}[string]{uniquename}[true]{%
  \ifcsdef{blx@opt@uniquename@#1}
    {\letcs\blx@uniquename{blx@opt@uniquename@#1}}
    {\blx@err@invopt{uniquename=#1}{}}}
\def\blx@opt@uniquename@false{false}
\def\blx@opt@uniquename@init{init}
\def\blx@opt@uniquename@true{full}
\def\blx@opt@uniquename@full{full}
\def\blx@opt@uniquename@allinit{allinit}
\def\blx@opt@uniquename@allfull{allfull}
\def\blx@opt@uniquename@mininit{mininit}
\def\blx@opt@uniquename@minfull{minfull}

If you do M-? on \ifcsdef{blx@opt@uniquename@#1} using the default backend,
the default search string is blx@opt@uniquename@, and you'll get two hits,
that line and the following one.  Stepping through
xref-references-in-directory shows that the semantic-symref search (using
grep) only finds those two using the :searchtype 'symbol, and they're
returned.  If you change 'symbol to 'regexp, grep finds all the matches in
that code snippet, but then xref--convert-hits uses (format "\\_<%s\\_>"),
which again loses all but the first two hits when it scans the list
provided by grep.  Either grep or emacs here will miss out on valid hits
unless you change both the semantic-symref instantiation and the format
specification.

> One way to deal with that is to treat all user inputs as regexps there.
Perhaps some will have to be more verbose that ideal, but as      > long as
the user is familiar with the regexp syntax, the behavior will be both
powerful and predictable

If I understand you right, I think that's what I'm trying to do, but
allowing for users who perhaps aren't too familiar with emacs regexps and
who might typically just accept the default search string offered by xref.

>  Could those be disambiguated when the tags are scanned, instead? Then
the user will tailor their input to find the one or the other.

If I understand you correctly, that's also what I try to do -- each tagged
command in the tags file is searched by the name of the tag, which in these
cases will either start with the escape char or not.  Looking at the
biblatex snippet, if you come across \csuse{blx@opt@uniquename@false}
somewhere in a file, and you want to see what the definition is, you can't
know apriori how it was defined, with \def or with \csdef.  This snippet
above mixes both styles, and I hoped that a user would be allowed to choose
whether to search for both styles without necessarily having to try both
forms of the string in separate searches.  In fact, as the code stands, it
only does the second search if the first one fails, so it still more or
less keeps the two command-naming styles separate.

The simplest fix is to remove the escape char from all tag names, which I
suggest to users of ctags in some commented-out code in etags.c. This does
lose the ability to differentiate \def'ed commands and \csdef'd ones,
especially as in some circumstances they can have the same name.  I'm not
sure how great a loss that is, on the other hand.  Is that what you had in
mind?

> Or if we want more fuzzier matching, perhaps creating mode-specific
values of etags-xref-find-definitions-tag-order could help.

Yeah, you're right, I'm pretty sure I could use a buffer-local value of
that variable to get xref-find-definitions to do the fuzzy matching I'm
after.  Does the discussion above at all help to convince you that there
are other issues that might still require a new backend?

David.

[-- Attachment #2: Type: text/html, Size: 4259 bytes --]

^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-22 15:19         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-02-23  2:21           ` Dmitry Gutov
  2022-02-23 10:45             ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Dmitry Gutov @ 2022-02-23  2:21 UTC (permalink / raw)
  To: David Fussner; +Cc: 53749

Hi David,

On 22.02.2022 17:19, David Fussner wrote:

>  > Do you have a step-by-step scenario? Perhaps using one of the .texi
>  > manuals already existing in the repo?
> 
> I can't find a good example in the emacs repo, but I'll try to talk 
> through what happens with a code snippet from biblatex.sty, which I hope 
> will explain some of the issues we're discussing, even if it is a little 
> artificial.

Thank you.

> \DeclareBiblatexOption{global,type}[string]{uniquename}[true]{%
>    \ifcsdef{blx@opt@uniquename@#1}
>      {\letcs\blx@uniquename{blx@opt@uniquename@#1}}
>      {\blx@err@invopt{uniquename=#1}{}}}
> \def\blx@opt@uniquename@false{false}
> \def\blx@opt@uniquename@init{init}
> \def\blx@opt@uniquename@true{full}
> \def\blx@opt@uniquename@full{full}
> \def\blx@opt@uniquename@allinit{allinit}
> \def\blx@opt@uniquename@allfull{allfull}
> \def\blx@opt@uniquename@mininit{mininit}
> \def\blx@opt@uniquename@minfull{minfull}
> 
> If you do M-? on \ifcsdef{blx@opt@uniquename@#1} using the default 
> backend, the default search string is blx@opt@uniquename@, and you'll 
> get two hits, that line and the following one.  Stepping through 
> xref-references-in-directory shows that the semantic-symref search 
> (using grep) only finds those two using the :searchtype 'symbol, and 
> they're returned.  If you change 'symbol to 'regexp, grep finds all the 
> matches in that code snippet, but then xref--convert-hits uses (format 
> "\\_<%s\\_>"), which again loses all but the first two hits when it 
> scans the list provided by grep.  Either grep or emacs here will miss 
> out on valid hits unless you change both the semantic-symref 
> instantiation and the format specification.

That might call for a different implementation of 'references' indeed.

But could you make 'blx@opt@uniquename' the default search string in 
that example? Does that make sense?

And if not, all in all, I wouldn't worry too much about 
xref-find-references, since TeX is more of a text format (IMHO) than a 
program with well-defined identifiers. Perhaps using project-find-regexp 
most of the time will save you a lot of the trouble?

>  > One way to deal with that is to treat all user inputs as regexps 
> there. Perhaps some will have to be more verbose that ideal, but as      
>  > long as the user is familiar with the regexp syntax, the behavior 
> will be both powerful and predictable
> 
> If I understand you right, I think that's what I'm trying to do, but 
> allowing for users who perhaps aren't too familiar with emacs regexps 
> and who might typically just accept the default search string offered by 
> xref.

I'm not sure how I feel about the extra "fuzziness" in the behavior 
which comes with this approach.

>  >  Could those be disambiguated when the tags are scanned, instead? 
> Then the user will tailor their input to find the one or the other.
> 
> If I understand you correctly, that's also what I try to do -- each 
> tagged command in the tags file is searched by the name of the tag, 
> which in these cases will either start with the escape char or not.  
> Looking at the biblatex snippet, if you come across 
> \csuse{blx@opt@uniquename@false} somewhere in a file, and you want to 
> see what the definition is, you can't know apriori how it was defined, 
> with \def or with \csdef.  This snippet above mixes both styles, and I 
> hoped that a user would be allowed to choose whether to search for both 
> styles without necessarily having to try both forms of the string in 
> separate searches.  In fact, as the code stands, it only does the second 
> search if the first one fails, so it still more or less keeps the two 
> command-naming styles separate.

The parser could create both qualified (with \def or \csdef) and 
unqualified entries for the same definition. Maybe make it optional 
(with -Q argument to etags). Then the user could search using any of 
these formats.

>  > Or if we want more fuzzier matching, perhaps creating mode-specific 
> values of etags-xref-find-definitions-tag-order could help.
> 
> Yeah, you're right, I'm pretty sure I could use a buffer-local value of 
> that variable to get xref-find-definitions to do the fuzzy matching I'm 
> after. Does the discussion above at all help to convince you that there 
> are other issues that might still require a new backend?

The suggestion about a buffer-local value of that var was made in the 
context of trying to make it work with the current etags backend. At 
least, in the first patch. If only because I don't really like to see 
duplicated code.

If we find another place where we really want to diverge, we could also 
try adding some behavior-altering variable first.

After that, we might as well add a new backend (I'm not really against 
it, just prefer to exhaust other options first), but hopefully someone 
else (more familiar with tex-mode) could take over this discussion at 
that point, and the subsequent responsibility for the added code. That 
person could be yourself too, under right conditions.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-23  2:21           ` Dmitry Gutov
@ 2022-02-23 10:45             ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-02-24  2:23               ` Dmitry Gutov
  0 siblings, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-02-23 10:45 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 53749

Hi Dmitry,

Thanks again for looking at all this, and for your patience.

On Wed, 23 Feb 2022 at 02:21, Dmitry Gutov <dgutov@yandex.ru> wrote:

>
> That might call for a different implementation of 'references' indeed.
>
> But could you make 'blx@opt@uniquename' the default search string in
> that example? Does that make sense?
>

I guess it might be possible to come up with a regexp to suppress the
@ in some positions in the string, but the bad news is that if you M-?
with that search string you get no results at all with the default
backend. Grep finds the same two as before, but the default format
specification eliminates even those.  So you're left looking at a
string in your buffer and xref is telling you it isn't there.

> And if not, all in all, I wouldn't worry too much about
> xref-find-references, since TeX is more of a text format (IMHO) than a
> program with well-defined identifiers. Perhaps using project-find-regexp
> most of the time will save you a lot of the trouble?
>

You're quite right that C-x p g works well in this instance, and I
tried to improve how thing-at-point finds search strings in TeX
buffers for this command.  I guess TeX is a little bit of a bad fit
both for text modes and for prog modes, but I confess I'm still uneasy
at the thought of M-? returning such misleading results.  What would
you think about putting project-find-regexp on M-? in TeX buffers?
That is, assuming I don't find reasonably common TeX constructs that
defeat it?

> > If I understand you right, I think that's what I'm trying to do, but
> > allowing for users who perhaps aren't too familiar with emacs regexps
> > and who might typically just accept the default search string offered by
> > xref.
>
> I'm not sure how I feel about the extra "fuzziness" in the behavior
> which comes with this approach.

I see your point here.

>
> The parser could create both qualified (with \def or \csdef) and
> unqualified entries for the same definition. Maybe make it optional
> (with -Q argument to etags). Then the user could search using any of
> these formats.
>

I guess we could make etags do some of the work, perhaps adding also a
distinction between tagged commands that require this duplication
(\def & \csdef) and those that don't (\chapter).  Aside from making
tags files a lot bigger, and possibly adding another option to a
program already overloaded with them -- neither of which is a
showstopper -- I suspect it could work pretty well for
xref-find-definitions.

>
> The suggestion about a buffer-local value of that var was made in the
> context of trying to make it work with the current etags backend. At
> least, in the first patch. If only because I don't really like to see
> duplicated code.
>
> If we find another place where we really want to diverge, we could also
> try adding some behavior-altering variable first.
>
> After that, we might as well add a new backend (I'm not really against
> it, just prefer to exhaust other options first), but hopefully someone
> else (more familiar with tex-mode) could take over this discussion at
> that point, and the subsequent responsibility for the added code. That
> person could be yourself too, under right conditions.

I certainly concur about duplicated code, and I really did try hard to
get by without a new backend, but I won't pretend that I exhausted all
or even nearly all of the possibilities. If I'm understanding you
correctly, you'd prefer a few, small changes to the backend code in
etags.el (and xref.el), should that be necessary, to a whole new
backend which limits changes to tex-mode.el.  If this understanding is
reasonably accurate, I can have another look at earlier iterations of
the code to see what I missed, and perhaps come up with something that
works right without so much duplication. It may well take me some
time, so apologies in advance for being slow.

David.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-23 10:45             ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-02-24  2:23               ` Dmitry Gutov
  2022-02-24 13:15                 ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Dmitry Gutov @ 2022-02-24  2:23 UTC (permalink / raw)
  To: David Fussner; +Cc: 53749

Hi David,

On 23.02.2022 12:45, David Fussner via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:

> I guess it might be possible to come up with a regexp to suppress the
> @ in some positions in the string, but the bad news is that if you M-?
> with that search string you get no results at all with the default
> backend. Grep finds the same two as before, but the default format
> specification eliminates even those.  So you're left looking at a
> string in your buffer and xref is telling you it isn't there.

That's odd. I've tried searching for 'blx@opt@uniquename' inside \...@, 
and 'grep -w' successfully finds it. Post-processing fails, apparently, 
but that depends on the contents of the syntax table. So one solution 
might be to update tex-mode's syntax table.

>> And if not, all in all, I wouldn't worry too much about
>> xref-find-references, since TeX is more of a text format (IMHO) than a
>> program with well-defined identifiers. Perhaps using project-find-regexp
>> most of the time will save you a lot of the trouble?
>>
> 
> You're quite right that C-x p g works well in this instance, and I
> tried to improve how thing-at-point finds search strings in TeX
> buffers for this command.  I guess TeX is a little bit of a bad fit
> both for text modes and for prog modes, but I confess I'm still uneasy
> at the thought of M-? returning such misleading results.  What would
> you think about putting project-find-regexp on M-? in TeX buffers?
> That is, assuming I don't find reasonably common TeX constructs that
> defeat it?

At the face of it, the suggestion seems odd (those command's features 
and user expectations are different), but it wouldn't be out of the 
question to circle back to it later.

>> The parser could create both qualified (with \def or \csdef) and
>> unqualified entries for the same definition. Maybe make it optional
>> (with -Q argument to etags). Then the user could search using any of
>> these formats.
>>
> 
> I guess we could make etags do some of the work, perhaps adding also a
> distinction between tagged commands that require this duplication
> (\def & \csdef) and those that don't (\chapter).  Aside from making
> tags files a lot bigger, and possibly adding another option to a
> program already overloaded with them -- neither of which is a
> showstopper -- I suspect it could work pretty well for
> xref-find-definitions.

IIUC tag files for LaTeX aren't going to be particularly big anyway 
(book projects are almost always smaller than even a mid-sized software 
project), so the size might never be a problem.

But then again, I could be very wrong about that.

>> The suggestion about a buffer-local value of that var was made in the
>> context of trying to make it work with the current etags backend. At
>> least, in the first patch. If only because I don't really like to see
>> duplicated code.
>>
>> If we find another place where we really want to diverge, we could also
>> try adding some behavior-altering variable first.
>>
>> After that, we might as well add a new backend (I'm not really against
>> it, just prefer to exhaust other options first), but hopefully someone
>> else (more familiar with tex-mode) could take over this discussion at
>> that point, and the subsequent responsibility for the added code. That
>> person could be yourself too, under right conditions.
> 
> I certainly concur about duplicated code, and I really did try hard to
> get by without a new backend, but I won't pretend that I exhausted all
> or even nearly all of the possibilities. If I'm understanding you
> correctly, you'd prefer a few, small changes to the backend code in
> etags.el (and xref.el), should that be necessary, to a whole new
> backend which limits changes to tex-mode.el.  If this understanding is
> reasonably accurate, I can have another look at earlier iterations of
> the code to see what I missed, and perhaps come up with something that
> works right without so much duplication. It may well take me some
> time, so apologies in advance for being slow.

Yes, please.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-24  2:23               ` Dmitry Gutov
@ 2022-02-24 13:15                 ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-02-24 13:15 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 53749

Thanks Dmitry.  I'll post back here when I've got something.

David.

On Thu, 24 Feb 2022 at 02:23, Dmitry Gutov <dgutov@yandex.ru> wrote:
>
> Hi David,
>
> On 23.02.2022 12:45, David Fussner via Bug reports for GNU Emacs, the
> Swiss army knife of text editors wrote:
>
> > I guess it might be possible to come up with a regexp to suppress the
> > @ in some positions in the string, but the bad news is that if you M-?
> > with that search string you get no results at all with the default
> > backend. Grep finds the same two as before, but the default format
> > specification eliminates even those.  So you're left looking at a
> > string in your buffer and xref is telling you it isn't there.
>
> That's odd. I've tried searching for 'blx@opt@uniquename' inside \...@,
> and 'grep -w' successfully finds it. Post-processing fails, apparently,
> but that depends on the contents of the syntax table. So one solution
> might be to update tex-mode's syntax table.
>
> >> And if not, all in all, I wouldn't worry too much about
> >> xref-find-references, since TeX is more of a text format (IMHO) than a
> >> program with well-defined identifiers. Perhaps using project-find-regexp
> >> most of the time will save you a lot of the trouble?
> >>
> >
> > You're quite right that C-x p g works well in this instance, and I
> > tried to improve how thing-at-point finds search strings in TeX
> > buffers for this command.  I guess TeX is a little bit of a bad fit
> > both for text modes and for prog modes, but I confess I'm still uneasy
> > at the thought of M-? returning such misleading results.  What would
> > you think about putting project-find-regexp on M-? in TeX buffers?
> > That is, assuming I don't find reasonably common TeX constructs that
> > defeat it?
>
> At the face of it, the suggestion seems odd (those command's features
> and user expectations are different), but it wouldn't be out of the
> question to circle back to it later.
>
> >> The parser could create both qualified (with \def or \csdef) and
> >> unqualified entries for the same definition. Maybe make it optional
> >> (with -Q argument to etags). Then the user could search using any of
> >> these formats.
> >>
> >
> > I guess we could make etags do some of the work, perhaps adding also a
> > distinction between tagged commands that require this duplication
> > (\def & \csdef) and those that don't (\chapter).  Aside from making
> > tags files a lot bigger, and possibly adding another option to a
> > program already overloaded with them -- neither of which is a
> > showstopper -- I suspect it could work pretty well for
> > xref-find-definitions.
>
> IIUC tag files for LaTeX aren't going to be particularly big anyway
> (book projects are almost always smaller than even a mid-sized software
> project), so the size might never be a problem.
>
> But then again, I could be very wrong about that.
>
> >> The suggestion about a buffer-local value of that var was made in the
> >> context of trying to make it work with the current etags backend. At
> >> least, in the first patch. If only because I don't really like to see
> >> duplicated code.
> >>
> >> If we find another place where we really want to diverge, we could also
> >> try adding some behavior-altering variable first.
> >>
> >> After that, we might as well add a new backend (I'm not really against
> >> it, just prefer to exhaust other options first), but hopefully someone
> >> else (more familiar with tex-mode) could take over this discussion at
> >> that point, and the subsequent responsibility for the added code. That
> >> person could be yourself too, under right conditions.
> >
> > I certainly concur about duplicated code, and I really did try hard to
> > get by without a new backend, but I won't pretend that I exhausted all
> > or even nearly all of the possibilities. If I'm understanding you
> > correctly, you'd prefer a few, small changes to the backend code in
> > etags.el (and xref.el), should that be necessary, to a whole new
> > backend which limits changes to tex-mode.el.  If this understanding is
> > reasonably accurate, I can have another look at earlier iterations of
> > the code to see what I missed, and perhaps come up with something that
> > works right without so much duplication. It may well take me some
> > time, so apologies in advance for being slow.
>
> Yes, please.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-03 15:09 bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-02-21  2:11 ` Dmitry Gutov
  2022-02-21 12:35 ` Arash Esbati
@ 2022-02-25 20:16 ` Augusto Stoffel
  2022-02-26  9:29   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-09-14 17:26 ` Mattias Engdegård
  3 siblings, 1 reply; 106+ messages in thread
From: Augusto Stoffel @ 2022-02-25 20:16 UTC (permalink / raw)
  To: 53749; +Cc: dfussner

Hi David,

I took a superficial look at this thread, and this seems very nice.

I was wondering why you want to be able to find the definition of macros
with @ in their name.  Those are "private" macros that the user
shouldn't have occasion to use.  Is it for a TeX programmer mode?

Let me also mention a library I wrote for analyzing TeX code (accessible
to Emacs via LSP):

    https://github.com/astoff/digestif

It's written in Lua (can run on the LuaTeX interpreter) and uses PEGs
for flexible parsing.  If you want to be very ambitious about what you
are able to parse, I think regexps are not sufficient.

Digestif can handle \cite{messed up reference} just fine, for example.

On Thu,  3 Feb 2022 at 15:09, David Fussner via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org> wrote:

> I've recently been trying to use xref commands with a tags table in a
> TeX repository, and many of the results are sub-optimal.  This is a
> known issue -- within living memory there have been at least two
> discussions related to it on help-gnu-emacs:
>
> https://lists.gnu.org/archive/html/help-gnu-emacs/2018-06/msg00126.html
> https://lists.gnu.org/archive/html/help-gnu-emacs/2021-07/msg00436.html
>
> Neither discussion resulted in any code, at least not that I can find,
> and the issues mentioned there remain.  For example,
> xref-find-definitions on, say, '\mycommand' returns
>
> No definitions found for: mycommand.
>
> (The absence of the escape char in the search string makes the search
> fail, as the tag name in the table will be '\mycommand'.)
>
> Similarly, any xref command on 'my:citekey' will only search by default
> for the half of the symbol under point, stopping at the colon.
>
> There are many other behaviors that are suboptimal, as well, so in the
> end I wrote a new xref backend for TeX buffers (cloning large portions
> of the default etags backend), and wondered whether it might be welcome
> in GNU Emacs.
>
> A few remarks:
>
> 1. The code should work as it stands both in the AUCTeX and the in-tree
> modes.  The AUCTeX hooks I've included in the patch are provisional, as
> I would want to discuss with them how they would want to handle it,
> should the patch be accepted in some form.
>
> 2. Along the way I found some issues with how etags parses TeX files,
> issues which affect the usefulness of the xref commands, so I've made
> changes in etags.c as well.  When running the test suite for etags the
> only diffs occurred in the TeX-related sections of the resulting tags
> file, and location information in those sections was good.
>
> 3. The patch as it stands enables all the changes by default to give
> what I judge to be the best out-of-the-box experience, but wiser heads
> may well have other ideas.
>
> 4. If it looks like the patch will make it into Emacs in some form, I'm
> going to need to assign copyright, so I'd appreciate help with getting
> that started.
>
> Thanks,
>
> David.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-25 20:16 ` Augusto Stoffel
@ 2022-02-26  9:29   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-02-26 10:56     ` Augusto Stoffel
  0 siblings, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-02-26  9:29 UTC (permalink / raw)
  To: Augusto Stoffel; +Cc: 53749

Hi Augusto,

On Fri, 25 Feb 2022 at 20:16, Augusto Stoffel <arstoffel@gmail.com> wrote:
>
> Hi David,

>
> I took a superficial look at this thread, and this seems very nice.

Thanks!

>
> I was wondering why you want to be able to find the definition of macros
> with @ in their name.  Those are "private" macros that the user
> shouldn't have occasion to use.  Is it for a TeX programmer mode?

I confess that TeX developers are indeed one of the main targets for
the feature as I envisioned it.  For creating and following \labels,
\refs, and \cites (of all sorts) I find RefTeX very handy, as well as
for jumping around \chapters and \sections and the like.  What I miss
when developing are the code-navigation features of something like
xref, which are (from the user point of view) both simple and
powerful.  My modest goal was to make Emacs' extensive infrastructure
work a little better out of the box for TeX documents, especially for
styles and other collections of macros.

>
> Let me also mention a library I wrote for analyzing TeX code (accessible
> to Emacs via LSP):
>
>     https://github.com/astoff/digestif
>
> It's written in Lua (can run on the LuaTeX interpreter) and uses PEGs
> for flexible parsing.  If you want to be very ambitious about what you
> are able to parse, I think regexps are not sufficient.
>
> Digestif can handle \cite{messed up reference} just fine, for example.
>

This looks very nice indeed, and if I'm reading it right provides a
replacement both for RefTeX and for the code-navigation features I'm
trying to implement.  I figure I'll continue trying to get improved
out-of-the-box features into core, and if I manage to satisfy Dmitry
we'll then have a choice, but in any case I'm going to have a longer
look at digestif when I get some time.

Thanks for the hint!

David.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-26  9:29   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-02-26 10:56     ` Augusto Stoffel
  2022-02-27 18:42       ` Arash Esbati
  0 siblings, 1 reply; 106+ messages in thread
From: Augusto Stoffel @ 2022-02-26 10:56 UTC (permalink / raw)
  To: David Fussner; +Cc: 53749

On Sat, 26 Feb 2022 at 09:29, David Fussner <dfussner@googlemail.com> wrote:

> Hi Augusto,
>
> On Fri, 25 Feb 2022 at 20:16, Augusto Stoffel <arstoffel@gmail.com> wrote:
>>
>> Hi David,
>
>>
>> I took a superficial look at this thread, and this seems very nice.
>
> Thanks!
>
>>
>> I was wondering why you want to be able to find the definition of macros
>> with @ in their name.  Those are "private" macros that the user
>> shouldn't have occasion to use.  Is it for a TeX programmer mode?
>
> I confess that TeX developers are indeed one of the main targets for
> the feature as I envisioned it.  For creating and following \labels,
> \refs, and \cites (of all sorts) I find RefTeX very handy, as well as
> for jumping around \chapters and \sections and the like.  What I miss
> when developing are the code-navigation features of something like
> xref, which are (from the user point of view) both simple and
> powerful.  My modest goal was to make Emacs' extensive infrastructure
> work a little better out of the box for TeX documents, especially for
> styles and other collections of macros.

Sorry for entering a tangent, but here's one more thing I dislike about
RefTeX you might want to consider.  If you type \label{something}, as
opposed to using the RefTeX command to add a label (or if you edit the
label by hand) then RefTeX will not reparse the document and get out of
sync.  Or at least that was the case when I still used RefTeX.  So it
might be worth considering some cache invalidation scheme there.
(Digestif has caching for multifile documents, but parsing a single file
is fast enough that this is not a problem I need to worry :-).)

>>
>> Let me also mention a library I wrote for analyzing TeX code (accessible
>> to Emacs via LSP):
>>
>>     https://github.com/astoff/digestif
>>
>> It's written in Lua (can run on the LuaTeX interpreter) and uses PEGs
>> for flexible parsing.  If you want to be very ambitious about what you
>> are able to parse, I think regexps are not sufficient.
>>
>> Digestif can handle \cite{messed up reference} just fine, for example.
>>
>
> This looks very nice indeed, and if I'm reading it right provides a
> replacement both for RefTeX and for the code-navigation features I'm
> trying to implement.

That's right.  Also command completion (including snippets, if that's
your thing) and Eldoc.

>  I figure I'll continue trying to get improved
> out-of-the-box features into core, and if I manage to satisfy Dmitry
> we'll then have a choice, but in any case I'm going to have a longer
> look at digestif when I get some time.

Let me mention one last thing, since you seem interested in a TeX
programming mode.

Digestif will not work great out of the box for programming because it
correctly considers @ to have catcode "other" (so it can't be part of
the name of a command).  But this is trivial to change and, in fact,
Digestif already has a "latex-prog" mode that simulates the correct
catcodes.  It would be easy to include a "latex-expl3" mode as well.

The problem is that there's no way for Emacs to communicate that one of
these programming modes is to be used.  This could be fixed in two ways:

A. by creating latex-prog and latex-expl3 derived modes in Emacs, or

B. adding heuristics to Digestif to decide if a given file is "document"
   or "code".

Do you have any thoughts about A?  Would there be any other benefits in
Emacs to justify the latex-prog and latex-expl3 major modes?  It seems
that (at least in AUCTeX) @ is always considered a letter, which may be
innocuous but is kinda wrong.

>
> Thanks for the hint!
>
> David.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-26 10:56     ` Augusto Stoffel
@ 2022-02-27 18:42       ` Arash Esbati
  2022-02-28  9:09         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Arash Esbati @ 2022-02-27 18:42 UTC (permalink / raw)
  To: Augusto Stoffel; +Cc: 53749, David Fussner

Augusto Stoffel <arstoffel@gmail.com> writes:

> If you type \label{something}, as opposed to using the RefTeX command
> to add a label (or if you edit the label by hand) then RefTeX will not
> reparse the document and get out of sync.

If you know the known labels to RefTeX are out of sync, you can issue
`C-c )' with a prefix argument:

,----[ C-h f reftex-reference RET ]
| reftex-reference is an interactive native compiled Lisp function in
| ‘reftex-ref.el’.
| 
| (reftex-reference &optional TYPE NO-INSERT CUT)
| 
| Make a LaTeX reference.  Look only for labels of a certain TYPE.
| With prefix arg, force to rescan buffer for labels.  This should only be
| necessary if you have recently entered labels yourself without using
| reftex-label.  Rescanning of the buffer can also be requested from the
| label selection menu.
| The function returns the selected label or nil.
| If NO-INSERT is non-nil, do not insert \ref command, just return label.
| When called with 2 C-u prefix args, disable magic word recognition.
| 
|   Probably introduced at or before Emacs version 20.1.
| 
`----

Or in the labels *RefTeX select* buffer, you have these choices:

 r / C-u r  Reparse document / Reparse entire document.

I usually hit r when I don't find the label I'm looking for.

> Or at least that was the case when I still used RefTeX.  So it might
> be worth considering some cache invalidation scheme there.

The question is if it's worth the effort where a remedy is already in
place.

Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-27 18:42       ` Arash Esbati
@ 2022-02-28  9:09         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-02-28 11:54           ` Arash Esbati
  2022-02-28 13:05           ` Augusto Stoffel
  0 siblings, 2 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-02-28  9:09 UTC (permalink / raw)
  To: Arash Esbati; +Cc: 53749, Augusto Stoffel

Hi Augusto,

For what it's worth, I've always just done what Arash suggests when
RefTeX gets out of sync, and haven't had any issues with it that I can
remember.  (To be fair, my use cases haven't exactly been exotic.)

> The problem is that there's no way for Emacs to communicate that one of
> these programming modes is to be used.  This could be fixed in two ways:
>
> A. by creating latex-prog and latex-expl3 derived modes in Emacs, or
>
> B. adding heuristics to Digestif to decide if a given file is "document"
>    or "code".
>
> Do you have any thoughts about A?  Would there be any other benefits in
> Emacs to justify the latex-prog and latex-expl3 major modes?  It seems
> that (at least in AUCTeX) @ is always considered a letter, which may be
> innocuous but is kinda wrong.

The only thought I have is that it sounds like a new major mode would
be overkill for what you need here.  I would think that a variable or
defcustom might do the trick, or at most maybe a minor mode?  When
navigating code I really want to be able to follow the commands to
their source no matter whether the command is internal or for users,
though I can see how in a code-completion setting you might want to be
able to separate the two more cleanly.  Obviously, I'm not the person
you need to convince about all of this -- that would be Arash and the
emacs maintainers, themselves.

Best,

David.

On Sun, 27 Feb 2022 at 18:43, Arash Esbati <arash@gnu.org> wrote:
>
> Augusto Stoffel <arstoffel@gmail.com> writes:
>
> > If you type \label{something}, as opposed to using the RefTeX command
> > to add a label (or if you edit the label by hand) then RefTeX will not
> > reparse the document and get out of sync.
>
> If you know the known labels to RefTeX are out of sync, you can issue
> `C-c )' with a prefix argument:
>
> ,----[ C-h f reftex-reference RET ]
> | reftex-reference is an interactive native compiled Lisp function in
> | ‘reftex-ref.el’.
> |
> | (reftex-reference &optional TYPE NO-INSERT CUT)
> |
> | Make a LaTeX reference.  Look only for labels of a certain TYPE.
> | With prefix arg, force to rescan buffer for labels.  This should only be
> | necessary if you have recently entered labels yourself without using
> | reftex-label.  Rescanning of the buffer can also be requested from the
> | label selection menu.
> | The function returns the selected label or nil.
> | If NO-INSERT is non-nil, do not insert \ref command, just return label.
> | When called with 2 C-u prefix args, disable magic word recognition.
> |
> |   Probably introduced at or before Emacs version 20.1.
> |
> `----
>
> Or in the labels *RefTeX select* buffer, you have these choices:
>
>  r / C-u r  Reparse document / Reparse entire document.
>
> I usually hit r when I don't find the label I'm looking for.
>
> > Or at least that was the case when I still used RefTeX.  So it might
> > be worth considering some cache invalidation scheme there.
>
> The question is if it's worth the effort where a remedy is already in
> place.
>
> Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-28  9:09         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-02-28 11:54           ` Arash Esbati
  2022-02-28 13:11             ` Augusto Stoffel
  2022-02-28 13:05           ` Augusto Stoffel
  1 sibling, 1 reply; 106+ messages in thread
From: Arash Esbati @ 2022-02-28 11:54 UTC (permalink / raw)
  To: David Fussner; +Cc: 53749, Augusto Stoffel

David Fussner <dfussner@googlemail.com> writes:

>> The problem is that there's no way for Emacs to communicate that one of
>> these programming modes is to be used.  This could be fixed in two ways:
>>
>> A. by creating latex-prog and latex-expl3 derived modes in Emacs, or
>>
>> B. adding heuristics to Digestif to decide if a given file is "document"
>>    or "code".
>>
>> Do you have any thoughts about A?  Would there be any other benefits in
>> Emacs to justify the latex-prog and latex-expl3 major modes?  It seems
>> that (at least in AUCTeX) @ is always considered a letter, which may be
>> innocuous but is kinda wrong.
>
> The only thought I have is that it sounds like a new major mode would
> be overkill for what you need here.  I would think that a variable or
> defcustom might do the trick, or at most maybe a minor mode?

Sorry if I'm missing something here, I wasn't tracking this thread.  But
does doctex-mode (or docTeX in AUCTeX) fit the bill here?

Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-28  9:09         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-02-28 11:54           ` Arash Esbati
@ 2022-02-28 13:05           ` Augusto Stoffel
  1 sibling, 0 replies; 106+ messages in thread
From: Augusto Stoffel @ 2022-02-28 13:05 UTC (permalink / raw)
  To: David Fussner; +Cc: 53749, Arash Esbati

On Mon, 28 Feb 2022 at 09:09, David Fussner <dfussner@googlemail.com> wrote:

> For what it's worth, I've always just done what Arash suggests when
> RefTeX gets out of sync, and haven't had any issues with it that I can
> remember.  (To be fair, my use cases haven't exactly been exotic.)

Sure, I'm aware you have to do the manual resync when using RefTeX.  I
just think it's a totally unnecessary hurdle at this time and age.  I
used to advice the RefTeX commands so they would reparse the document
every time, and this worked just fine.  (Granted, I never worked on
anything over 100 pages or so, but it should also be possible to reparse
individual files of a multifile project so that the file sizes never
become an issue.)

>> The problem is that there's no way for Emacs to communicate that one of
>> these programming modes is to be used.  This could be fixed in two ways:
>>
>> A. by creating latex-prog and latex-expl3 derived modes in Emacs, or
>>
>> B. adding heuristics to Digestif to decide if a given file is "document"
>>    or "code".
>>
>> Do you have any thoughts about A?  Would there be any other benefits in
>> Emacs to justify the latex-prog and latex-expl3 major modes?  It seems
>> that (at least in AUCTeX) @ is always considered a letter, which may be
>> innocuous but is kinda wrong.
>
> The only thought I have is that it sounds like a new major mode would
> be overkill for what you need here.  I would think that a variable or
> defcustom might do the trick, or at most maybe a minor mode?  When
> navigating code I really want to be able to follow the commands to
> their source no matter whether the command is internal or for users,
> though I can see how in a code-completion setting you might want to be
> able to separate the two more cleanly.  Obviously, I'm not the person
> you need to convince about all of this -- that would be Arash and the
> emacs maintainers, themselves.

Okay, thanks for your insight.

>
> Best,
>
> David.
>
> On Sun, 27 Feb 2022 at 18:43, Arash Esbati <arash@gnu.org> wrote:
>>
>> Augusto Stoffel <arstoffel@gmail.com> writes:
>>
>> > If you type \label{something}, as opposed to using the RefTeX command
>> > to add a label (or if you edit the label by hand) then RefTeX will not
>> > reparse the document and get out of sync.
>>
>> If you know the known labels to RefTeX are out of sync, you can issue
>> `C-c )' with a prefix argument:
>>
>> ,----[ C-h f reftex-reference RET ]
>> | reftex-reference is an interactive native compiled Lisp function in
>> | ‘reftex-ref.el’.
>> |
>> | (reftex-reference &optional TYPE NO-INSERT CUT)
>> |
>> | Make a LaTeX reference.  Look only for labels of a certain TYPE.
>> | With prefix arg, force to rescan buffer for labels.  This should only be
>> | necessary if you have recently entered labels yourself without using
>> | reftex-label.  Rescanning of the buffer can also be requested from the
>> | label selection menu.
>> | The function returns the selected label or nil.
>> | If NO-INSERT is non-nil, do not insert \ref command, just return label.
>> | When called with 2 C-u prefix args, disable magic word recognition.
>> |
>> |   Probably introduced at or before Emacs version 20.1.
>> |
>> `----
>>
>> Or in the labels *RefTeX select* buffer, you have these choices:
>>
>>  r / C-u r  Reparse document / Reparse entire document.
>>
>> I usually hit r when I don't find the label I'm looking for.
>>
>> > Or at least that was the case when I still used RefTeX.  So it might
>> > be worth considering some cache invalidation scheme there.
>>
>> The question is if it's worth the effort where a remedy is already in
>> place.
>>
>> Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-28 11:54           ` Arash Esbati
@ 2022-02-28 13:11             ` Augusto Stoffel
  2022-02-28 19:04               ` Arash Esbati
  0 siblings, 1 reply; 106+ messages in thread
From: Augusto Stoffel @ 2022-02-28 13:11 UTC (permalink / raw)
  To: Arash Esbati; +Cc: 53749, David Fussner

On Mon, 28 Feb 2022 at 12:54, Arash Esbati <arash@gnu.org> wrote:

> Sorry if I'm missing something here, I wasn't tracking this thread.  But
> does doctex-mode (or docTeX in AUCTeX) fit the bill here?

Ah, I forgot about that one.  I mean basically that, but for files like
plain.tex or tikz.code.tex; or also when writing a .sty file directly
for personal purposes only.

But since tex-mode and derived ones always pretend @ is a letter, I
guess there's no real need for a dedicated TeX programming mode.

Now, how about expl3 code, where _ and : are letters too?





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-28 13:11             ` Augusto Stoffel
@ 2022-02-28 19:04               ` Arash Esbati
  2022-03-01  8:46                 ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Arash Esbati @ 2022-02-28 19:04 UTC (permalink / raw)
  To: Augusto Stoffel; +Cc: 53749, David Fussner

Augusto Stoffel <arstoffel@gmail.com> writes:

> Now, how about expl3 code, where _ and : are letters too?

AUCTeX has a style file expl3.el[1] which changes the syntax for "_" and
":".  Can't tell about the builtin tex/latex-mode.

Best, Arash

Footnotes:
[1]  http://git.savannah.gnu.org/cgit/auctex.git/tree/style/expl3.el





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-28 19:04               ` Arash Esbati
@ 2022-03-01  8:46                 ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-03-01  8:46 UTC (permalink / raw)
  To: Arash Esbati; +Cc: 53749, Augusto Stoffel

Unless I'm missing something, the in-tree code hasn't (yet) made any
syntax changes for expl3.

Best,

David.

On Mon, 28 Feb 2022 at 19:04, Arash Esbati <arash@gnu.org> wrote:
>
> Augusto Stoffel <arstoffel@gmail.com> writes:
>
> > Now, how about expl3 code, where _ and : are letters too?
>
> AUCTeX has a style file expl3.el[1] which changes the syntax for "_" and
> ":".  Can't tell about the builtin tex/latex-mode.
>
> Best, Arash
>
> Footnotes:
> [1]  http://git.savannah.gnu.org/cgit/auctex.git/tree/style/expl3.el





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-21  2:11 ` Dmitry Gutov
  2022-02-21  9:48   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-09-08 13:25   ` Lars Ingebrigtsen
  2022-09-08 13:34     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 106+ messages in thread
From: Lars Ingebrigtsen @ 2022-09-08 13:25 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 53749, David Fussner

Dmitry Gutov <dgutov@yandex.ru> writes:

> Let us first discuss whether we could make do without an additional
> Xref backend. Just to make sure.

(I'm going through old bug reports that unfortunately weren't resolved
at the time.)

I've only skimmed this bug report, so I might well have missed
something.  Was there a conclusion here as to what should be done?  It
looks like useful functionality to me (but it's been years since I've
written tex-y stuff).

In any case, if this is to be applied, we'd need to have a copyright
assignment to the FSF on file.  David, would you be willing to sign
that?





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-09-08 13:25   ` Lars Ingebrigtsen
@ 2022-09-08 13:34     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-09-08 13:39       ` Lars Ingebrigtsen
  0 siblings, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-09-08 13:34 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 53749, Dmitry Gutov

Hi Lars,

The conclusion at the time was that the patch needed reworking before
Dmitry was happy with it, and I've not yet found enough time to do so,
though I'm still fully intending to make the necessary changes. Please
leave the bug open so I can restart the conversation when I have a
better patch. (Oh, and I'm more than happy to sign the copyright
assignment whenever Dmitry judges the patch to be ready.)

Thanks for the reminder.

David.

On Thu, 8 Sept 2022 at 14:25, Lars Ingebrigtsen <larsi@gnus.org> wrote:
>
> Dmitry Gutov <dgutov@yandex.ru> writes:
>
> > Let us first discuss whether we could make do without an additional
> > Xref backend. Just to make sure.
>
> (I'm going through old bug reports that unfortunately weren't resolved
> at the time.)
>
> I've only skimmed this bug report, so I might well have missed
> something.  Was there a conclusion here as to what should be done?  It
> looks like useful functionality to me (but it's been years since I've
> written tex-y stuff).
>
> In any case, if this is to be applied, we'd need to have a copyright
> assignment to the FSF on file.  David, would you be willing to sign
> that?





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-09-08 13:34     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-09-08 13:39       ` Lars Ingebrigtsen
  2022-09-08 15:50         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Lars Ingebrigtsen @ 2022-09-08 13:39 UTC (permalink / raw)
  To: David Fussner; +Cc: 53749, Dmitry Gutov

David Fussner <dfussner@googlemail.com> writes:

> The conclusion at the time was that the patch needed reworking before
> Dmitry was happy with it, and I've not yet found enough time to do so,
> though I'm still fully intending to make the necessary changes. Please
> leave the bug open so I can restart the conversation when I have a
> better patch.

Of course.

> (Oh, and I'm more than happy to sign the copyright
> assignment whenever Dmitry judges the patch to be ready.)

Here's the form to get started:


Please email the following information to assign@gnu.org, and we
will send you the assignment form for your past and future changes.

Please use your full legal name (in ASCII characters) as the subject
line of the message.
----------------------------------------------------------------------
REQUEST: SEND FORM FOR PAST AND FUTURE CHANGES

[What is the name of the program or package you're contributing to?]
Emacs

[Did you copy any files or text written by someone else in these changes?
Even if that material is free software, we need to know about it.]

[Do you have an employer who might have a basis to claim to own
your changes?  Do you attend a school which might make such a claim?]

[For the copyright registration, what country are you a citizen of?]

[What year were you born?]

[Please write your email address here.]

[Please write your postal address here.]

[Which files have you changed so far, and which new files have you written
so far?]





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-09-08 13:39       ` Lars Ingebrigtsen
@ 2022-09-08 15:50         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-09-03  9:08           ` Stefan Kangas
  0 siblings, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-09-08 15:50 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 53749, Dmitry Gutov

Thanks Lars, will do.

On Thu, 8 Sept 2022 at 14:39, Lars Ingebrigtsen <larsi@gnus.org> wrote:
>
> David Fussner <dfussner@googlemail.com> writes:
>
> > The conclusion at the time was that the patch needed reworking before
> > Dmitry was happy with it, and I've not yet found enough time to do so,
> > though I'm still fully intending to make the necessary changes. Please
> > leave the bug open so I can restart the conversation when I have a
> > better patch.
>
> Of course.
>
> > (Oh, and I'm more than happy to sign the copyright
> > assignment whenever Dmitry judges the patch to be ready.)
>
> Here's the form to get started:
>
>
> Please email the following information to assign@gnu.org, and we
> will send you the assignment form for your past and future changes.
>
> Please use your full legal name (in ASCII characters) as the subject
> line of the message.
> ----------------------------------------------------------------------
> REQUEST: SEND FORM FOR PAST AND FUTURE CHANGES
>
> [What is the name of the program or package you're contributing to?]
> Emacs
>
> [Did you copy any files or text written by someone else in these changes?
> Even if that material is free software, we need to know about it.]
>
> [Do you have an employer who might have a basis to claim to own
> your changes?  Do you attend a school which might make such a claim?]
>
> [For the copyright registration, what country are you a citizen of?]
>
> [What year were you born?]
>
> [Please write your email address here.]
>
> [Please write your postal address here.]
>
> [Which files have you changed so far, and which new files have you written
> so far?]





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-09-08 15:50         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-09-03  9:08           ` Stefan Kangas
  2023-09-03 10:03             ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Stefan Kangas @ 2023-09-03  9:08 UTC (permalink / raw)
  To: David Fussner; +Cc: 53749, Lars Ingebrigtsen, Dmitry Gutov

David Fussner <dfussner@googlemail.com> writes:

> Thanks Lars, will do.
>
> On Thu, 8 Sept 2022 at 14:39, Lars Ingebrigtsen <larsi@gnus.org> wrote:
>>
>> David Fussner <dfussner@googlemail.com> writes:
>>
>> > The conclusion at the time was that the patch needed reworking before
>> > Dmitry was happy with it, and I've not yet found enough time to do so,
>> > though I'm still fully intending to make the necessary changes. Please
>> > leave the bug open so I can restart the conversation when I have a
>> > better patch.
>>
>> Of course.

That was a year ago.  Have you made any progress here?





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-03  9:08           ` Stefan Kangas
@ 2023-09-03 10:03             ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-09-03 10:46               ` Stefan Kangas
  0 siblings, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-03 10:03 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: 53749, Lars Ingebrigtsen, Dmitry Gutov

[-- Attachment #1: Type: text/plain, Size: 891 bytes --]

Hi Stefan

Thanks for the nudge. I do in fact have a patch that I'm just about finding
time to test, so I'll try to get it to the list within a week or two.

Thanks, and best,

David.

On Sun, 3 Sept 2023, 10:08 Stefan Kangas, <stefankangas@gmail.com> wrote:

> David Fussner <dfussner@googlemail.com> writes:
>
> > Thanks Lars, will do.
> >
> > On Thu, 8 Sept 2022 at 14:39, Lars Ingebrigtsen <larsi@gnus.org> wrote:
> >>
> >> David Fussner <dfussner@googlemail.com> writes:
> >>
> >> > The conclusion at the time was that the patch needed reworking before
> >> > Dmitry was happy with it, and I've not yet found enough time to do so,
> >> > though I'm still fully intending to make the necessary changes. Please
> >> > leave the bug open so I can restart the conversation when I have a
> >> > better patch.
> >>
> >> Of course.
>
> That was a year ago.  Have you made any progress here?
>

[-- Attachment #2: Type: text/html, Size: 1693 bytes --]

^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-03 10:03             ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-09-03 10:46               ` Stefan Kangas
  2023-09-13 11:10                 ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Stefan Kangas @ 2023-09-03 10:46 UTC (permalink / raw)
  To: David Fussner; +Cc: 53749, Lars Ingebrigtsen, Dmitry Gutov

David Fussner <dfussner@googlemail.com> writes:

> Thanks for the nudge. I do in fact have a patch that I'm just about finding
> time to test, so I'll try to get it to the list within a week or two.

Sounds good, and thank you.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-03 10:46               ` Stefan Kangas
@ 2023-09-13 11:10                 ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-09-13 13:42                   ` Stefan Kangas
  2023-09-13 15:23                   ` Dmitry Gutov
  0 siblings, 2 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-13 11:10 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: 53749, Lars Ingebrigtsen, Dmitry Gutov

[-- Attachment #1: Type: text/plain, Size: 1592 bytes --]

Hi Dmitry,

I've belatedly found some time to get the xref commands working better
in TeX buffers, this time using the default etags backend, as you
requested last year.  The basic strategy remains the same -- create a
new thing-at-point argument "texsymbol" which replaces "symbol" in a
definable set of major modes, then pass the resulting search term to
xref.  Changes in etags.c ensure that the various TeX modes and the
tags tables are cooperating with each other, and I added a new option
to etags (--tex-alt-forms) to handle some of the complexities of the
TeX escape character (as you suggested).  I also manipulate some
variables buffer-locally to make things like project-find-regexp and
isearch-forward-thing-at-point work better in such buffers.

I attach a patch against current master. There is another patch which
contains changes to the test suite in test/manual/etags, but I'll
leave that one in case the changes I've made to etags.c need further
work.

I've sent patches to AUCTeX trying to fix a couple of issues there
with xref-find-references. There's more work to be done on related
issues in tex-mode.el, too, but this patch is a start.

Thanks,

David.

P.S. I'm also starting the copyright assignment process, in case these
changes prove acceptable.

On Sun, 3 Sept 2023 at 11:46, Stefan Kangas <stefankangas@gmail.com> wrote:
>
> David Fussner <dfussner@googlemail.com> writes:
>
> > Thanks for the nudge. I do in fact have a patch that I'm just about finding
> > time to test, so I'll try to get it to the list within a week or two.
>
> Sounds good, and thank you.

[-- Attachment #2: 0001-Fix-behavior-of-xref-commands-in-TeX-buffers.patch --]
[-- Type: text/x-patch, Size: 23126 bytes --]

From d5a77bd1dc45e0638df3e4c763a168912c93b5b5 Mon Sep 17 00:00:00 2001
From: David Fussner <dfussner@googlemail.com>
Date: Wed, 13 Sep 2023 11:59:54 +0100
Subject: [PATCH] Fix behavior of xref commands in TeX buffers

* lib-src/etags.c (longopts): Add new option --tex-alt-forms.
(TeX_commands): Improve parsing of commands in TeX buffers.
(TEX_defenv): Expand list of commands to tag by default in TeX
buffers.
(TeX_help):
* doc/emacs/maintaining.texi (Tag Syntax): Document new tagged
commands and new user option.
(Identifier Search): Add note about auto-mode-alist and
xref-find-references.

* lisp/textmodes/tex-mode.el (tex-common-initialization): Set up xref
modifications for in-tree TeX modes.
(tex-thingatpt-modes-list): New var.
(tex-thingatpt-is-texsymbol): New defcustom.
(tex-set-thingatpt-symbol): New command to apply value of previous
buffer-locally.
(tex--symbol-or-texsymbol): New helper function for previous.
(tex--thing-at-point): New function to return texsymbol
'thing-at-point'.
(tex-thingatpt--beginning-of-texsymbol)
(tex-thingatpt--end-of-texsymbol): New functions to define texsymbol
"thing" for 'thing-at-point'.
(tex-thingatpt-syntax-table, tex-escape-char): New vars to do the
same.
(tex-thingatpt-include-escape): New defcustom to refine behavior of
previous.
(tex--include-escape-p): New function to do the same.
(tex-thingatpt-syntax-table): New function to access and modify the
syntax table of the same name.
---
 doc/emacs/maintaining.texi |  33 +++++-
 lib-src/etags.c            | 122 ++++++++++++++++++---
 lisp/textmodes/tex-mode.el | 216 +++++++++++++++++++++++++++++++++++++
 3 files changed, 357 insertions(+), 14 deletions(-)

diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index a95335f3df2..44b8b304026 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -2457,6 +2457,13 @@ Identifier Search
 referenced.  The XREF mode commands are available in this buffer, see
 @ref{Xref Commands}.
 
+When invoked in a buffer whose major mode uses the @code{etags}
+backend, @kbd{M-?} searches files and buffers whose major mode matches
+that of the original buffer.  It guesses that mode from file
+extensions, so if @kbd{M-?} seems to be skipping relevant buffers or
+files, try customizing the variable @code{auto-mode-alist} to include
+the missing extensions (@pxref{Choosing Modes}).
+
 @vindex xref-auto-jump-to-first-xref
   If the value of the variable @code{xref-auto-jump-to-first-xref} is
 @code{t}, @code{xref-find-references} automatically jumps to the first
@@ -2672,8 +2679,23 @@ Tag Syntax
 @code{\section}, @code{\subsection}, @code{\subsubsection},
 @code{\eqno}, @code{\label}, @code{\ref}, @code{\cite},
 @code{\bibitem}, @code{\part}, @code{\appendix}, @code{\entry},
-@code{\index}, @code{\def}, @code{\newcommand}, @code{\renewcommand},
-@code{\newenvironment} and @code{\renewenvironment} are tags.
+@code{\index}, @code{\def}, @code{\edef}, @code{\gdef}, @code{\xdef},
+@code{\newcommand}, @code{\renewcommand}, @code{\newenvironment},
+@code{\renewenvironment}, @code{\DeclareRobustCommand},
+@code{\newrobustcmd}, @code{\renewrobustcmd}, @code{\providecommand},
+@code{\providerobustcmd}, @code{\NewDocumentCommand},
+@code{\RenewDocumentCommand}, @code{\ProvideDocumentCommand},
+@code{\DeclareDocumentCommand}, @code{\NewExpandableDocumentCommand},
+@code{\RenewExpandableDocumentCommand},
+@code{\ProvideExpandableDocumentCommand},
+@code{\DeclareExpandableDocumentCommand},
+@code{\NewDocumentEnvironment}, @code{\RenewDocumentEnvironment},
+@code{\ProvideDocumentEnvironment},
+@code{\DeclareDocumentEnvironment}, @code{\csdef}, @code{\csedef},
+@code{\csgdef}, @code{\csxdef}, @code{\csletcs}, @code{\cslet},
+@code{\letcs}, and @code{\let} are tags.  So too are the arguments of
+any starred variants of these commands, when such variants currently
+exist.
 
 Other commands can make tags as well, if you specify them in the
 environment variable @env{TEXTAGS} before invoking @command{etags}.  The
@@ -2689,6 +2711,13 @@ Tag Syntax
 specifies (using Bourne shell syntax) that the commands
 @samp{\mycommand} and @samp{\myothercommand} also define tags.
 
+The @samp{--tex-alt-forms} option causes each tag to have two names,
+one with and one without the @TeX{} escape character, usually
+@samp{\}.  This may be helpful when mixing traditional @TeX{} or
+@LaTeX{} constructs (@samp{\def}) with newer constructs from the
+@samp{etoolbox} package (@samp{\csdef}).  Use of this option will
+double the size of any @TeX{}-related sections in your tags file.
+
 @item
 In Lisp code, any function defined with @code{defun}, any variable
 defined with @code{defvar} or @code{defconst}, and in general the
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 147ecbd7c1b..3a6682fe451 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -475,6 +475,7 @@ #define xrnew(op, n, m) ((op) = xnrealloc (op, n, (m) * sizeof *(op)))
 static bool ignoreindent;	/* -I: ignore indentation in C */
 static int packages_only;	/* --packages-only: in Ada, only tag packages*/
 static int class_qualify;	/* -Q: produce class-qualified tags in C++/Java */
+static int tex_alt_forms;       /* --tex-alt-forms: tag names w/ and w/o escape */
 static int debug;		/* --debug */
 
 /* STDIN is defined in LynxOS system headers */
@@ -509,6 +510,7 @@ #define STDIN 0x1001		/* returned by getopt_long on --parse-stdin */
   { "no-regex",           no_argument,       NULL,               'R'   },
   { "ignore-case-regex",  required_argument, NULL,               'c'   },
   { "parse-stdin",        required_argument, NULL,               STDIN },
+  { "tex-alt-forms",      no_argument,       &tex_alt_forms,     1     },
   { "version",            no_argument,       NULL,               'V'   },
 
 #if CTAGS /* Ctags options */
@@ -792,12 +794,28 @@ #define STDIN 0x1001		/* returned by getopt_long on --parse-stdin */
 "In LaTeX text, the argument of any of the commands '\\chapter',\n\
 '\\section', '\\subsection', '\\subsubsection', '\\eqno', '\\label',\n\
 '\\ref', '\\cite', '\\bibitem', '\\part', '\\appendix', '\\entry',\n\
-'\\index', '\\def', '\\newcommand', '\\renewcommand',\n\
-'\\newenvironment' or '\\renewenvironment' is a tag.\n\
+'\\index', '\\def', '\\edef', '\\gdef', '\\xdef', '\\newcommand',\n\
+'\\renewcommand', '\\newenvironment', '\\renewenvironment',\n\
+'\\DeclareRobustCommand, '\\newrobustcmd', '\\renewrobustcmd',\n\
+'\\providecommand', '\\providerobustcmd', '\\NewDocumentCommand',\n\
+'\\RenewDocumentCommand', '\\ProvideDocumentCommand',\n\
+'\\DeclareDocumentCommand', '\\NewExpandableDocumentCommand',\n\
+'\\RenewExpandableDocumentCommand', '\\ProvideExpandableDocumentCommand',\n\
+'\\DeclareExpandableDocumentCommand', '\\NewDocumentEnvironment',\n\
+'\\RenewDocumentEnvironment', '\\ProvideDocumentEnvironment',\n\
+'\\DeclareDocumentEnvironment', '\\csdef', '\\csedef', '\\csgdef',\n\
+'\\csxdef', '\\csletcs', '\\cslet', '\\letcs', or '\\let' is a tag.\n\
+So is the argument of any of the starred variants of these commands,\n\
+when a starred variant currently exists.\n\
 \n\
 Other commands can be specified by setting the environment variable\n\
 'TEXTAGS' to a colon-separated list like, for example,\n\
-     TEXTAGS=\"mycommand:myothercommand\".";
+     TEXTAGS=\"mycommand:myothercommand\".\n\
+\n\
+The '--tex-alt-forms' option causes each tag to have two names, one\n\
+with and one without the TeX escape char, usually '\\'.  This may be\n\
+helpful when mixing traditional TeX or LaTeX constructs ('\\def')\n\
+with newer constructs from the 'etoolbox' package ('\\csdef').";
 
 
 static const char *Texinfo_suffixes [] =
@@ -5735,12 +5753,27 @@ Scheme_functions (FILE *inf)
 
 static linebuffer *TEX_toktab = NULL; /* Table with tag tokens */
 
-/* Default set of control sequences to put into TEX_toktab.
-   The value of environment var TEXTAGS is prepended to this.  */
+/* Default set of control sequences to put into TEX_toktab.  The value of
+   environment var TEXTAGS is prepended to this.  (2023) Add variants of
+   '\def', some additional LaTeX (and former xparse) commands, and common
+   variants from the 'etoolbox' package.  Also, add starred variants of the
+   commands if they exist. */
 static const char *TEX_defenv = "\
-:chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\
-:part:appendix:entry:index:def\
-:newcommand:renewcommand:newenvironment:renewenvironment";
+:chapter*:section*:subsection*:subsubsection*:part*:label:ref\
+:chapter:section:subsection:subsubsection:eqno:cite:bibitem:part\
+:appendix:entry:index:def:edef:gdef:xdef:newcommand*:newcommand\
+:renewcommand*:renewcommand:newenvironment*:newenvironment\
+:renewenvironment*:renewenvironment:DeclareRobustCommand*\
+:DeclareRobustCommand:renewrobustcmd*:renewrobustcmd\
+:newrobustcmd*:newrobustcmd:providecommand*:providecommand\
+:providerobustcmd*:providerobustcmd:NewDocumentCommand\
+:RenewDocumentCommand:ProvideDocumentCommand\
+:DeclareDocumentCommand:NewExpandableDocumentCommand\
+:RenewExpandableDocumentCommand:ProvideExpandableDocumentCommand\
+:DeclareExpandableDocumentCommand:NewDocumentEnvironment\
+:RenewDocumentEnvironment:ProvideDocumentEnvironment\
+:DeclareDocumentEnvironment:csdef:csedef:csgdef:csxdef:csletcs\
+:cslet:letcs:let";
 
 static void TEX_decode_env (const char *, const char *);
 
@@ -5752,6 +5785,7 @@ TeX_commands (FILE *inf)
 {
   char *cp;
   linebuffer *key;
+  char newname[UCHAR_MAX];
 
   char TEX_esc = '\0';
   char TEX_opgrp UNINIT, TEX_clgrp UNINIT;
@@ -5799,19 +5833,73 @@ TeX_commands (FILE *inf)
 	      {
 		char *p;
 		ptrdiff_t namelen, linelen;
-		bool opgrp = false;
+		bool opgrp = false, one_esc = false;
 
 		cp = skip_spaces (cp + key->len);
+		/* Skip the optional arguments to commands in the tags list so
+		   that these arguments don't end up as the name of the tag.
+		   The name will instead come from the argument in curly braces
+		   that follows the optional ones.  */
+		if (*cp == '[' || *cp == '(')
+		  {
+		    while (*cp != TEX_opgrp && *cp != '\0')
+		      cp++;
+		  }
 		if (*cp == TEX_opgrp)
 		  {
 		    opgrp = true;
 		    cp++;
 		  }
+		/* Jumping to a TeX command definition doesn't work in at least
+		   some of the editors that use ctags.  Using the
+		   '--tex-alt-forms' option to strip TEX_esc should provide
+		   minor improvements, though overall the behavior is still
+		   suboptimal.  (With --tex-alt-forms we print each tag twice,
+		   once with and once without TEX_esc in the tag name.  See
+		   below.)  The undocumented ctags option '--no-duplicates' may
+		   also help.  Changes in tex-mode.el in GNU Emacs address the
+		   majority of these issues for etags, though the
+		   '--tex-alt-forms' option can also be useful there. */
+
+		if (tex_alt_forms && *cp == TEX_esc)
+		  {
+		    cp++;
+		    one_esc = true;
+		  }
+
+		/* Add optional argument brackets '(' and '[' to the loop test
+		   so that these arguments don't appear in tag names.  Also add
+		   '=' as it's relational in the vast majority of cases.  */
 		for (p = cp;
-		     (!c_isspace (*p) && *p != '#' &&
-		      *p != TEX_opgrp && *p != TEX_clgrp);
+		     (!c_isspace (*p) && *p != '#' && *p != '=' &&
+		      *p != '[' && *p != '(' && *p != TEX_opgrp &&
+		      *p != TEX_clgrp);
 		     p++)
-		  continue;
+		  /* Allow only one escape char in a tag name, which
+		     (primarily) enables tagging a TeX command's different,
+		     possibly temporary, '\let' bindings.  */
+		  if (*p == TEX_esc)
+		    {
+		      if (!one_esc)
+			{
+			  one_esc = true;
+			  continue;
+			}
+		      else
+			break;
+		    }
+		  else
+		    continue;
+		/* Re-run the scan to catch (highly unusual) cases where a
+		   command name is of the form '\('.  */
+		if ((*p == '(' || *p == '[') && (p - cp) < 2)
+		  {
+		    for (p = cp;
+			 (!c_isspace (*p) && *p != '#' &&
+			  *p != TEX_opgrp && *p != TEX_clgrp);
+			 p++)
+		      continue;
+		  }
 		namelen = p - cp;
 		linelen = lb.len;
 		if (!opgrp || *p == TEX_clgrp)
@@ -5820,6 +5908,16 @@ TeX_commands (FILE *inf)
 		      p++;
 		    linelen = p - lb.buffer + 1;
 		  }
+		/* With --tex-alt-forms we strip any TEX_esc from the name (see
+		   above), print the tag with TEX_esc prepended to the bare tag
+		   name, then print the same tag again with the bare tag
+		   name. */
+		if (tex_alt_forms)
+		  {
+		  snprintf (newname, UCHAR_MAX, "%c%s", TEX_esc, cp);
+		  make_tag (newname, namelen + 1, true,
+			    lb.buffer, linelen, lineno, linecharno);
+		  }
 		make_tag (cp, namelen, true,
 			  lb.buffer, linelen, lineno, linecharno);
 		goto tex_next_line; /* We only tag a line once */
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index a26e7b9c83a..3de4a093e09 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -1277,6 +1277,8 @@ tex-common-initialization
 	      (syntax-propertize-rules latex-syntax-propertize-rules))
   ;; TABs in verbatim environments don't do what you think.
   (setq-local indent-tabs-mode nil)
+  ;; Set up xref backend in TeX buffers.
+  (tex-set-thingatpt-symbol)
   ;; Other vars that should be buffer-local.
   (make-local-variable 'tex-command)
   (make-local-variable 'tex-start-of-header)
@@ -3724,6 +3726,220 @@ tex-chktex
                    (kill-buffer (process-buffer process)))))))
       (process-send-region tex-chktex--process (point-min) (point-max))
       (process-send-eof tex-chktex--process))))
+\f
+;;; Xref / Etags tweaks
+
+;; Rather than define a new xref backend for TeX, we tweak the default
+;; etags backend so that the main xref user commands (including
+;; `xref-find-definitions', `xref-find-apropos', and
+;; `xref-find-references' [on M-., C-M-., and M-?, respectively]) work
+;; in TeX buffers.  This mostly involves defining a new THING for
+;; `thing-at-point' (texsymbol), then substituting that THING for
+;; `symbol' in TeX buffers, at least by (configurable) default.  The
+;; TeX escape character will by default appear in the resulting string
+;; only when the xref command uses string search and not regexp
+;; search, though this too is configurable.  The new THING type also
+;; improves the accuracy of other commands that use `thing-at-point'
+;; in TeX buffers, like `isearch-forward-thing-at-point' (on M-s M-.)
+;; and `project-find-regexp' (on C-x p g).  Indeed,
+;; `project-find-regexp' sometimes works better in TeX buffers than
+;; `xref-find-references'.
+
+(defvar tex-thingatpt-modes-list
+  '(tex-mode doctex-mode latex-mode plain-tex-mode slitex-mode ams-tex-mode)
+  "Major modes where `thing-at-point' may use the `texsymbol' type.
+
+When a buffer's `major-mode' is in this list, and when
+`tex-thingatpt-is-texsymbol' is t (the default), any command in
+that buffer that calls `thing-at-point' with a `symbol' argument
+actually uses the `texsymbol' argument, instead.")
+
+(defcustom tex-thingatpt-is-texsymbol t
+  "When non-nil replace `symbol' by `texsymbol' for `thing-at-point'.
+
+This applies only to TeX buffers.  The `texsymbol' \"thing\"
+modifies the standard `symbol' for use in such buffers.
+
+When nil, restore the default behavior of `thing-at-point' in TeX
+buffers.
+
+Custom will automatically apply changes in all TeX buffers, but
+if you set the variable outside of Custom it won't take effect
+until you apply it with \\[tex-set-thingatpt-symbol].  Without a
+prefix argument (\\[universal-argument]) this applies only to the
+current buffer, but with one it applies to all TeX buffers in
+`buffer-list'.  (TeX buffers are those whose `major-mode' is a
+member of `tex-thingatpt-modes-list'.)"
+  :type 'boolean
+  :group 'tex-file
+  :group 'TeX-misc
+  :initialize #'custom-initialize-default
+  :set (lambda (var val)
+         (set-default var val)
+         (tex-set-thingatpt-symbol t))
+  :version "30.1")
+
+(defcustom tex-thingatpt-include-escape '(xref-find-definitions
+                                          xref-find-definitions-other-window
+                                          xref-find-definitions-other-frame)
+  "If non-nil, include `tex-escape-char' in `thing-at-point'.
+
+This variable only takes effect when `tex-thingatpt-is-texsymbol'
+is t (the default), changing the argument passed to
+`thing-at-point' from `symbol' to `texsymbol'.  When that is the
+case, the values of this variable act as follows:
+
+When t, `thing-at-point' will always include a
+`tex-escape-char' (usually `\\'), should one be present, in the
+string it returns in TeX buffers.
+
+When nil, `thing-at-point' will never include the
+`tex-escape-char' in the string it returns in TeX buffers.
+
+Otherwise, it's a list of commands for which `thing-at-point'
+will always include the `tex-escape-char' in the string it
+returns.  The three xref commands listed by default may cease to
+function properly in TeX buffers if set to nil, but using the
+`--tex-alt-forms' option when creating your tags table with
+`etags' will rectify that."
+  :type '(choice (const :tag "Always include tex-escape-char" t)
+                 (const :tag "Never include tex-escape-char" nil)
+                 (set :tag "Include tex-escape-char for these commands"
+		      (repeat :inline t (symbol :tag "command"))))
+  :group 'tex-file
+  :group 'TeX-misc
+  :version "30.1")
+
+(defvar tex-escape-char ?\\
+  "The current, possibly buffer-local, TeX escape character.
+
+The `etags' program only recognizes `\\' (92) and `!' (33) as
+escape characters in TeX documents, and if it detects the latter
+it also uses `<>' as the TeX grouping construct rather than `{}'.
+Setting this variable to anything other than `\\' or `!' is
+possible but will not be useful without changes to `etags', at
+least for commands that search tags tables, such as
+`xref-find-definitions' (\\[xref-find-definitions]) and \
+`xref-find-apropos' (\\[xref-find-apropos]).")
+
+(defvar tex-thingatpt-syntax-table
+  (let* ((ost (if (boundp 'TeX-mode-syntax-table)
+                  TeX-mode-syntax-table
+                tex-mode-syntax-table))
+         (st (make-syntax-table ost)))
+    (modify-syntax-entry ?# "'" st)
+    (modify-syntax-entry ?= "'" st)
+    (modify-syntax-entry ?` "'" st)
+    (modify-syntax-entry ?\" "'" st)
+    (modify-syntax-entry ?' "'" st)
+    st)
+  "Syntax table for delimiting `thing-at-point' in TeX buffers.
+
+When `tex-thingatpt-is-texsymbol' is t, this syntax table helps
+to define what a `texsymbol' is.  To access it use the
+`tex-thingatpt-syntax-table' function.")
+
+(defun tex-thingatpt-syntax-table ()
+  "Return a syntax table for `thing-at-point' in TeX buffers.
+
+It modifies the pre-defined syntax table depending both on the
+setting of the `tex-escape-char' variable, which may be buffer
+local, and on whether we're using AUCTeX or the in-tree tex-mode."
+  (let ((nst (make-syntax-table tex-thingatpt-syntax-table))
+        (escsy (if (boundp 'TeX-mode-syntax-table)
+                   ?\\
+                 ?/)))
+    (cond ((char-equal tex-escape-char ?\\))
+          ((char-equal tex-escape-char ?!)
+           (modify-syntax-entry ?\\ "_" nst)
+           (modify-syntax-entry tex-escape-char (char-to-string escsy) nst)
+           (modify-syntax-entry ?< "(>" nst)
+           (modify-syntax-entry ?> ")<" nst))
+          (t
+           (modify-syntax-entry ?\\ "_" nst)
+           (modify-syntax-entry tex-escape-char (char-to-string escsy) nst)))
+    nst))
+
+;; Setup AUCTeX modes.  (Should this be in AUCTeX itself?)
+(add-hook 'TeX-mode-hook #'tex-set-thingatpt-symbol)
+
+;; `xref-find-references' needs this when called from a latex-mode
+;; buffer in order to search files or buffers with a .tex suffix
+;; (including the buffer from which it has been called).  We append it
+;; to `auto-mode-alist' so as not to interfere with the usual
+;; mode-setting apparatus.
+(add-to-list 'auto-mode-alist '("\\.[tT]e[xX]\\'" . latex-mode) t)
+
+(dolist (texmode tex-thingatpt-modes-list)
+  (put texmode 'find-tag-default-function 'tex--thing-at-point))
+
+(put 'texsymbol 'beginning-op 'tex-thingatpt--beginning-of-texsymbol)
+
+(put 'texsymbol 'end-op 'tex-thingatpt--end-of-texsymbol)
+
+(declare-function cl-substitute "cl-seq" (cl-new cl-old cl-seq &rest cl-keys))
+
+(defun tex-set-thingatpt-symbol (&optional all)
+  "Set meaning of `thing-at-point' `symbol' in (ALL?) TeX buffers.
+
+When `tex-thingatpt-is-texsymbol' is t, set `thing-at-point' to
+use the `texsymbol' \"thing\" instead of `symbol', otherwise
+maintain or restore the default.  Without an optional ALL make
+changes only in current buffer, with ALL make changes in all TeX
+buffers in `buffer-list'."
+  (interactive "P")
+  (require 'thingatpt)
+  (if all
+      (dolist (buf (buffer-list))
+        (with-current-buffer buf
+          (tex--symbol-or-texsymbol)))
+    (tex--symbol-or-texsymbol)))
+
+(defun tex--symbol-or-texsymbol ()
+  (when (memq major-mode tex-thingatpt-modes-list)
+    (if tex-thingatpt-is-texsymbol
+        (setq-local thing-at-point-provider-alist
+                    (add-to-list 'thing-at-point-provider-alist
+                                 '(symbol . tex--thing-at-point))
+                    isearch-forward-thing-at-point
+                    (cl-substitute 'texsymbol 'symbol
+                                   isearch-forward-thing-at-point))
+      (setq-local thing-at-point-provider-alist
+                  (delete '(symbol . tex--thing-at-point)
+                          thing-at-point-provider-alist)
+                  isearch-forward-thing-at-point
+                  (cl-substitute 'symbol 'texsymbol
+                                 isearch-forward-thing-at-point)))))
+
+(defun tex--thing-at-point ()
+  "Pass `thing' type `texsymbol' to `bounds-of-thing-at-point'.
+
+When `tex-thingatpt-is-texsymbol' is t, calls in TeX buffers to
+`thing-at-point' with argument `symbol' will instead use the
+argument `texsymbol'.  Otherwise it will call `find-tag-default'."
+  (if tex-thingatpt-is-texsymbol
+      (let ((bounds (bounds-of-thing-at-point 'texsymbol)))
+        (when bounds
+          (buffer-substring-no-properties (car bounds) (cdr bounds))))
+    (find-tag-default)))
+
+(defun tex--include-escape-p (command)
+  (or (eq tex-thingatpt-include-escape t)
+      (memq command tex-thingatpt-include-escape)))
+
+(defun tex-thingatpt--beginning-of-texsymbol ()
+  "Move point to the beginning of the current TeX symbol."
+  (with-syntax-table (tex-thingatpt-syntax-table)
+    (and (re-search-backward "\\([][()]\\|\\(\\sw\\|\\s_\\|\\s.\\)+\\)")
+         (skip-syntax-backward "w_.")
+         (when (tex--include-escape-p this-command)
+           (skip-syntax-backward "\\/")))))
+
+(defun tex-thingatpt--end-of-texsymbol ()
+  "Move point to the end of the current TeX symbol."
+  (with-syntax-table (tex-thingatpt-syntax-table)
+    (and (re-search-forward "\\([][()]\\|\\(\\sw\\|\\s_\\|\\s.\\)+\\)")
+         (skip-syntax-forward "w_."))))
 
 (make-obsolete-variable 'tex-mode-load-hook
                         "use `with-eval-after-load' instead." "28.1")
-- 
2.35.8


^ permalink raw reply related	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-13 11:10                 ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-09-13 13:42                   ` Stefan Kangas
  2023-09-13 15:23                   ` Dmitry Gutov
  1 sibling, 0 replies; 106+ messages in thread
From: Stefan Kangas @ 2023-09-13 13:42 UTC (permalink / raw)
  To: David Fussner; +Cc: 53749, Lars Ingebrigtsen, Dmitry Gutov

David Fussner <dfussner@googlemail.com> writes:

> P.S. I'm also starting the copyright assignment process, in case these
> changes prove acceptable.

That's great, thanks.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-13 11:10                 ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-09-13 13:42                   ` Stefan Kangas
@ 2023-09-13 15:23                   ` Dmitry Gutov
  2023-09-13 17:01                     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-09-13 19:16                     ` Eli Zaretskii
  1 sibling, 2 replies; 106+ messages in thread
From: Dmitry Gutov @ 2023-09-13 15:23 UTC (permalink / raw)
  To: David Fussner, Stefan Kangas; +Cc: 53749, Lars Ingebrigtsen

Hi David!

Thanks for the new patch.

I'm skipping over the etags parser changes (others might comment, I'm 
just assuming they are good).

And "thing at point" code is, I think, at your discretion (if the result 
is useful, then that seems good). I would probably not call the function 
the same way given that we don't install this "thing" globally, just 
using it from several the major modes in a particular way. Anyway, that 
is a minor affair.

I'd like to suggest two simplifications for the xref-related stuff, if 
those work for you.

On 13/09/2023 14:10, David Fussner via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:

> <...> I also manipulate some
> variables buffer-locally to make things like project-find-regexp and
> isearch-forward-thing-at-point work better in such buffers.

These won't be affected either way, right? Because project-find-regexp 
defaults its input to (thing-at-point 'symbol t), and isearch... 
probably also uses "symbol" if you ask it to.

So... why not just make tex-thingatpt-include-escape a boolean? What 
commands need to be distinguished that way? I think 'find-tag' (it's 
obsolete but still used sometimes) would need to obey this var as well.

And the second thing: you're putting the symbol on major modes.

+(dolist (texmode tex-thingatpt-modes-list)
+  (put texmode 'find-tag-default-function 'tex--thing-at-point))

Why not set the variable find-tag-default-function instead? That seems 
easier and more appropriate to do inside a major mode function.

Thanks.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-13 15:23                   ` Dmitry Gutov
@ 2023-09-13 17:01                     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-09-13 23:59                       ` Dmitry Gutov
  2023-09-13 19:16                     ` Eli Zaretskii
  1 sibling, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-13 17:01 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 53749, Lars Ingebrigtsen, Stefan Kangas

Hi Dmitry,

Thanks for the feedback!

> These won't be affected either way, right? Because project-find-regexp
> defaults its input to (thing-at-point 'symbol t), and isearch...
> probably also uses "symbol" if you ask it to.
>
> So... why not just make tex-thingatpt-include-escape a boolean? What
> commands need to be distinguished that way? I think 'find-tag' (it's
> obsolete but still used sometimes) would need to obey this var as well.

xref-find-apropos and xref-find-references don't work well (or at all)
with the escape char included in the search string, so I was keeping
that char away from them. (The buffer-local variables I manipulate for
project-find-regexp and isearch-forward-thing-at-point have to do with
ensuring they use the texsymbol thing in the first place -- see
tex--symbol-or-texsymbol.) Does that make sense?

I'll look at find-tag, too; thanks for pointing that out.

> Why not set the variable find-tag-default-function instead? That seems
> easier and more appropriate to do inside a major mode function.

I settled on putting the symbol on the modes because I thought it was
simpler than setting the variable buffer-locally in all the in-tree
and AUCTeX modes, but I'll revisit this and see whether I can come up
with something better.

Thanks again.

On Wed, 13 Sept 2023 at 16:23, Dmitry Gutov <dgutov@yandex.ru> wrote:
>
> Hi David!
>
> Thanks for the new patch.
>
> I'm skipping over the etags parser changes (others might comment, I'm
> just assuming they are good).
>
> And "thing at point" code is, I think, at your discretion (if the result
> is useful, then that seems good). I would probably not call the function
> the same way given that we don't install this "thing" globally, just
> using it from several the major modes in a particular way. Anyway, that
> is a minor affair.
>
> I'd like to suggest two simplifications for the xref-related stuff, if
> those work for you.r along the lines of your
>
> On 13/09/2023 14:10, David Fussner via Bug reports for GNU Emacs, the
> Swiss army knife of text editors wrote:
>
> > <...> I also manipulate some
> > variables buffer-locally to make things like project-find-regexp and
> > isearch-forward-thing-at-point work better in such buffers.
>
> These won't be affected either way, right? Because project-find-regexp
> defaults its input to (thing-at-point 'symbol t), and isearch...
> probably also uses "symbol" if you ask it to.
>
> So... why not just make tex-thingatpt-include-escape a boolean? What
> commands need to be distinguished that way? I think 'find-tag' (it's
> obsolete but still used sometimes) would need to obey this var as well.
>
> And the second thing: you're putting the symbol on major modes.
>
> +(dolist (texmode tex-thingatpt-modes-list)
> +  (put texmode 'find-tag-default-function 'tex--thing-at-point))
>
> Why not set the variable find-tag-default-function instead? That seems
> easier and more appropriate to do inside a major mode function.r along the lines of your
>
> Thanks.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-13 15:23                   ` Dmitry Gutov
  2023-09-13 17:01                     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-09-13 19:16                     ` Eli Zaretskii
  2023-09-13 20:25                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 106+ messages in thread
From: Eli Zaretskii @ 2023-09-13 19:16 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 53749, larsi, stefankangas, dfussner

> Cc: 53749@debbugs.gnu.org, Lars Ingebrigtsen <larsi@gnus.org>
> Date: Wed, 13 Sep 2023 18:23:13 +0300
> From: Dmitry Gutov <dgutov@yandex.ru>
> 
> I'm skipping over the etags parser changes (others might comment, I'm 
> just assuming they are good).

They look OK to me at first glance, but we need to make sure the etags
tests still succeed after this change, and the new option should be
documented in the man page.  Bonus points for adding to the etags test
suite a test where this option is activated.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-13 19:16                     ` Eli Zaretskii
@ 2023-09-13 20:25                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-09-14  5:14                         ` Eli Zaretskii
  0 siblings, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-13 20:25 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 53749, Lars Ingebrigtsen, Stefan Kangas, Dmitry Gutov

[-- Attachment #1: Type: text/plain, Size: 864 bytes --]

Thanks Eli.

I'll have a look at the man page, and also at an additional test for the
suite. I did run the test suite, and all the diffs were where they should
be; I can send a patch that I have if you'd like, but if I'm going to add
tests maybe you'd prefer to wait?

On Wed, 13 Sept 2023, 20:16 Eli Zaretskii, <eliz@gnu.org> wrote:

> > Cc: 53749@debbugs.gnu.org, Lars Ingebrigtsen <larsi@gnus.org>
> > Date: Wed, 13 Sep 2023 18:23:13 +0300
> > From: Dmitry Gutov <dgutov@yandex.ru>
> >
> > I'm skipping over the etags parser changes (others might comment, I'm
> > just assuming they are good).
>
> They look OK to me at first glance, but we need to make sure the etags
> tests still succeed after this change, and the new option should be
> documented in the man page.  Bonus points for adding to the etags test
> suite a test where this option is activated.
>

[-- Attachment #2: Type: text/html, Size: 1470 bytes --]

^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-13 17:01                     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-09-13 23:59                       ` Dmitry Gutov
  2023-09-14  6:10                         ` Eli Zaretskii
  2023-09-14 16:11                         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 2 replies; 106+ messages in thread
From: Dmitry Gutov @ 2023-09-13 23:59 UTC (permalink / raw)
  To: David Fussner; +Cc: 53749, Lars Ingebrigtsen, Stefan Kangas

On 13/09/2023 20:01, David Fussner via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:

>> These won't be affected either way, right? Because project-find-regexp
>> defaults its input to (thing-at-point 'symbol t), and isearch...
>> probably also uses "symbol" if you ask it to.
>>
>> So... why not just make tex-thingatpt-include-escape a boolean? What
>> commands need to be distinguished that way? I think 'find-tag' (it's
>> obsolete but still used sometimes) would need to obey this var as well.
> 
> xref-find-apropos and xref-find-references don't work well (or at all)
> with the escape char included in the search string, so I was keeping
> that char away from them. (The buffer-local variables I manipulate for
> project-find-regexp and isearch-forward-thing-at-point have to do with
> ensuring they use the texsymbol thing in the first place -- see
> tex--symbol-or-texsymbol.) Does that make sense?

Hmm, I suppose I skipped over that part of the patch too quickly.

Here's a potential problem with replacing the notion of "symbol": some 
other existing code (also working with TeX/LaTeX) might disagree, as it 
might have some existing notion of what a "symbol" in those modes is (as 
defined by the syntax table).

In general, we change the notion of a symbol by either changing the 
mode's syntax table, or by augmenting its effect using 
syntax-propertize-function (which, for example, could propertize the 
backslashes inside the buffer as "symbol constituent"). The latter might 
actually be a change that would affect how 'M-x xref-find-references' 
works (it will likely start to consider those \tags as symbol 
occurrences together with the backslash). But like other changes of what 
is considered to be a "symbol" in a major mode, it could conflict with 
existing code.

Anyway, I'm not saying you have to change the approach, but that's 
something to be aware of.

And to look at it from another direction: if the default implementation 
of xref-find-references (and etags uses the very generic one) doesn't 
work for you, perhaps it would be worth it to define a TeX-specific Xref 
backend. That would perhaps take 20-30 lines of code total, most of them 
delegating to the etags backend, or the default impl. But while 
delegating, you can modify the passed argument - e.g. if it included a 
backslash, you could forward it to the default impl for "find 
references" without a backslash. Or - alternatively - call 
(project-find-regexp "...") with a more complex regexp of your choice. 
The first alternative could look like this:

   (cl-defmethod xref-backend-references ((_backend (eql 'tex-etags)) 
identifier)
     (xref-backend-references 'etags (string-remove-prefix "\\" 
identifier)))

> I'll look at find-tag, too; thanks for pointing that out.

Doing the above choice on the level of Xref backend's methods 
would/should automatically make it work for all commands appropriately.

>> Why not set the variable find-tag-default-function instead? That seems
>> easier and more appropriate to do inside a major mode function.
> 
> I settled on putting the symbol on the modes because I thought it was
> simpler than setting the variable buffer-locally in all the in-tree
> and AUCTeX modes, but I'll revisit this and see whether I can come up
> with something better.

Do AUCTeX modes inherit from tex-mode? Or all call 
tex-common-initialization? Then you could set that variable locally 
inside that function once.

All in all, it might not be wise to modify the behavior of third-party 
packages from inside Emacs this way (they might have other expectations, 
or there's going to appear a new major mode that needs the same 
treatment anyway).

Setting a variable to be used through mode inheritance or delegation is 
fine, but if that doesn't help, I would probably stop at defining a 
helper function or two and documenting how it should be used. And then 
maybe work with AUCTeX people to get the remaining necessary changes in 
from their side (or just leaving that up to the user, depending on how 
functional the default config ends up being).





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-13 20:25                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-09-14  5:14                         ` Eli Zaretskii
  0 siblings, 0 replies; 106+ messages in thread
From: Eli Zaretskii @ 2023-09-14  5:14 UTC (permalink / raw)
  To: David Fussner; +Cc: 53749, larsi, stefankangas, dgutov

> From: David Fussner <dfussner@googlemail.com>
> Date: Wed, 13 Sep 2023 21:25:28 +0100
> Cc: Dmitry Gutov <dgutov@yandex.ru>, Stefan Kangas <stefankangas@gmail.com>, 53749@debbugs.gnu.org, 
> 	Lars Ingebrigtsen <larsi@gnus.org>
> 
> I'll have a look at the man page, and also at an additional test for the suite. I did run the test suite, and
> all the diffs were where they should be; I can send a patch that I have if you'd like, but if I'm going to
> add tests maybe you'd prefer to wait?

Sure, we will wait.  There's no rush.  Let's have a complete patch
that covers all the aspects of this, and install it in one go.
Meanwhile you will also have time to work on the other review
comments.

Thanks.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-13 23:59                       ` Dmitry Gutov
@ 2023-09-14  6:10                         ` Eli Zaretskii
  2023-09-15 18:45                           ` Tassilo Horn
  2023-09-14 16:11                         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 106+ messages in thread
From: Eli Zaretskii @ 2023-09-14  6:10 UTC (permalink / raw)
  To: Dmitry Gutov, Stefan Monnier, Tassilo Horn
  Cc: 53749, larsi, stefankangas, dfussner

> Cc: 53749@debbugs.gnu.org, Lars Ingebrigtsen <larsi@gnus.org>,
>  Stefan Kangas <stefankangas@gmail.com>
> Date: Thu, 14 Sep 2023 02:59:33 +0300
> From: Dmitry Gutov <dgutov@yandex.ru>
> 
> On 13/09/2023 20:01, David Fussner via Bug reports for GNU Emacs, the 
> Swiss army knife of text editors wrote:
> 
> >> These won't be affected either way, right? Because project-find-regexp
> >> defaults its input to (thing-at-point 'symbol t), and isearch...
> >> probably also uses "symbol" if you ask it to.
> >>
> >> So... why not just make tex-thingatpt-include-escape a boolean? What
> >> commands need to be distinguished that way? I think 'find-tag' (it's
> >> obsolete but still used sometimes) would need to obey this var as well.
> > 
> > xref-find-apropos and xref-find-references don't work well (or at all)
> > with the escape char included in the search string, so I was keeping
> > that char away from them. (The buffer-local variables I manipulate for
> > project-find-regexp and isearch-forward-thing-at-point have to do with
> > ensuring they use the texsymbol thing in the first place -- see
> > tex--symbol-or-texsymbol.) Does that make sense?
> 
> Hmm, I suppose I skipped over that part of the patch too quickly.
> 
> Here's a potential problem with replacing the notion of "symbol": some 
> other existing code (also working with TeX/LaTeX) might disagree, as it 
> might have some existing notion of what a "symbol" in those modes is (as 
> defined by the syntax table).
> 
> In general, we change the notion of a symbol by either changing the 
> mode's syntax table, or by augmenting its effect using 
> syntax-propertize-function (which, for example, could propertize the 
> backslashes inside the buffer as "symbol constituent"). The latter might 
> actually be a change that would affect how 'M-x xref-find-references' 
> works (it will likely start to consider those \tags as symbol 
> occurrences together with the backslash). But like other changes of what 
> is considered to be a "symbol" in a major mode, it could conflict with 
> existing code.
> 
> Anyway, I'm not saying you have to change the approach, but that's 
> something to be aware of.
> 
> And to look at it from another direction: if the default implementation 
> of xref-find-references (and etags uses the very generic one) doesn't 
> work for you, perhaps it would be worth it to define a TeX-specific Xref 
> backend. That would perhaps take 20-30 lines of code total, most of them 
> delegating to the etags backend, or the default impl. But while 
> delegating, you can modify the passed argument - e.g. if it included a 
> backslash, you could forward it to the default impl for "find 
> references" without a backslash. Or - alternatively - call 
> (project-find-regexp "...") with a more complex regexp of your choice. 
> The first alternative could look like this:
> 
>    (cl-defmethod xref-backend-references ((_backend (eql 'tex-etags)) 
> identifier)
>      (xref-backend-references 'etags (string-remove-prefix "\\" 
> identifier)))
> 
> > I'll look at find-tag, too; thanks for pointing that out.
> 
> Doing the above choice on the level of Xref backend's methods 
> would/should automatically make it work for all commands appropriately.
> 
> >> Why not set the variable find-tag-default-function instead? That seems
> >> easier and more appropriate to do inside a major mode function.
> > 
> > I settled on putting the symbol on the modes because I thought it was
> > simpler than setting the variable buffer-locally in all the in-tree
> > and AUCTeX modes, but I'll revisit this and see whether I can come up
> > with something better.
> 
> Do AUCTeX modes inherit from tex-mode? Or all call 
> tex-common-initialization? Then you could set that variable locally 
> inside that function once.
> 
> All in all, it might not be wise to modify the behavior of third-party 
> packages from inside Emacs this way (they might have other expectations, 
> or there's going to appear a new major mode that needs the same 
> treatment anyway).
> 
> Setting a variable to be used through mode inheritance or delegation is 
> fine, but if that doesn't help, I would probably stop at defining a 
> helper function or two and documenting how it should be used. And then 
> maybe work with AUCTeX people to get the remaining necessary changes in 
> from their side (or just leaving that up to the user, depending on how 
> functional the default config ends up being).

I think we should add Stefan and Tassilo (CCed) to this discussion, as
they might have valuable comments about this.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-13 23:59                       ` Dmitry Gutov
  2023-09-14  6:10                         ` Eli Zaretskii
@ 2023-09-14 16:11                         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-09-14 23:55                           ` Dmitry Gutov
  1 sibling, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-14 16:11 UTC (permalink / raw)
  To: Dmitry Gutov, Eli Zaretskii; +Cc: 53749, Lars Ingebrigtsen, Stefan Kangas

Hi Dmitry,

Once again, many thanks for the feedback. I'm still not certain I
agree about the risks involved in creating a new "thing" type, as it
really only appears in a small number of commands and then only in TeX
buffers, and generally I tried to design the code to keep out of the
way of anything outside of such buffers, but needless to say you see
further and more clearly than I can. I've been reviewing your comments
and my code, and have a few ideas and questions about how to go
forward. Though I haven't coded it yet, it's possible that the
simplest (and least intrusive) approach to follow would do something
like this:

1. Get rid of the new texsymbol "thing" and just use a buffer-local
value of find-tag-default-function and a rather more thoroughly
modified syntax table to control what "symbol" means, but _only_ in
the context of commands that use find-tag-default-function. I think
I'd lose the ability to change the behavior of
isearch-forward-thing-at-point and project-find-regexp, as I can't see
how to temporarily modify the syntax table there, though perhaps I'm
missing something.

2. Simply eliminate the TeX escape character entirely, both from tag
names in a TAGS file and from any thing-at-point in a TeX buffer. I
think this would eliminate the need to distinguish among the various
xref commands in terms of whether they can or can't handle the escape
character. It would also eliminate the need for the new user option in
etags.c, as there would no longer be any code to cope with the escape
character when finding a (thing-at-point 'symbol). This is slightly
less powerful than the default I proposed, but there are probably many
use cases where it won't matter at all (though it would for my own,
possibly eccentric, use case).

Does this sound to you like a plausible way forward?

I've tried to reach out to the AUCTeX developers to see what they
might want to do about setting the value of local variables there, and
anything they come up with should be doable.

 Thanks again.

On Thu, 14 Sept 2023 at 00:59, Dmitry Gutov <dgutov@yandex.ru> wrote:
>
> On 13/09/2023 20:01, David Fussner via Bug reports for GNU Emacs, the
> Swiss army knife of text editors wrote:
>
> >> These won't be affected either way, right? Because project-find-regexp
> >> defaults its input to (thing-at-point 'symbol t), and isearch...
> >> probably also uses "symbol" if you ask it to.
> >>
> >> So... why not just make tex-thingatpt-include-escape a boolean? What
> >> commands need to be distinguished that way? I think 'find-tag' (it's
> >> obsolete but still used sometimes) would need to obey this var as well.
> >
> > xref-find-apropos and xref-find-references don't work well (or at all)
> > with the escape char included in the search string, so I was keeping
> > that char away from them. (The buffer-local variables I manipulate for
> > project-find-regexp and isearch-forward-thing-at-point have to do with
> > ensuring they use the texsymbol thing in the first place -- see
> > tex--symbol-or-texsymbol.) Does that make sense?
>
> Hmm, I suppose I skipped over that part of the patch too quickly.
>
> Here's a potential problem with replacing the notion of "symbol": some
> other existing code (also working with TeX/LaTeX) might disagree, as it
> might have some existing notion of what a "symbol" in those modes is (as
> defined by the syntax table).
>
> In general, we change the notion of a symbol by either changing the
> mode's syntax table, or by augmenting its effect using
> syntax-propertize-function (which, for example, could propertize the
> backslashes inside the buffer as "symbol constituent"). The latter might
> actually be a change that would affect how 'M-x xref-find-references'
> works (it will likely start to consider those \tags as symbol
> occurrences together with the backslash). But like other changes of what
> is considered to be a "symbol" in a major mode, it could conflict with
> existing code.
>
> Anyway, I'm not saying you have to change the approach, but that's
> something to be aware of.
>
> And to look at it from another direction: if the default implementation
> of xref-find-references (and etags uses the very generic one) doesn't
> work for you, perhaps it would be worth it to define a TeX-specific Xref
> backend. That would perhaps take 20-30 lines of code total, most of them
> delegating to the etags backend, or the default impl. But while
> delegating, you can modify the passed argument - e.g. if it included a
> backslash, you could forward it to the default impl for "find
> references" without a backslash. Or - alternatively - call
> (project-find-regexp "...") with a more complex regexp of your choice.
> The first alternative could look like this:
>
>    (cl-defmethod xref-backend-references ((_backend (eql 'tex-etags))
> identifier)
>      (xref-backend-references 'etags (string-remove-prefix "\\"
> identifier)))
>
> > I'll look at find-tag, too; thanks for pointing that out.
>
> Doing the above choice on the level of Xref backend's methods
> would/should automatically make it work for all commands appropriately.
>
> >> Why not set the variable find-tag-default-function instead? That seems
> >> easier and more appropriate to do inside a major mode function.
> >
> > I settled on putting the symbol on the modes because I thought it was
> > simpler than setting the variable buffer-locally in all the in-tree
> > and AUCTeX modes, but I'll revisit this and see whether I can come up
> > with something better.
>
> Do AUCTeX modes inherit from tex-mode? Or all call
> tex-common-initialization? Then you could set that variable locally
> inside that function once.
>
> All in all, it might not be wise to modify the behavior of third-party
> packages from inside Emacs this way (they might have other expectations,
> or there's going to appear a new major mode that needs the same
> treatment anyway).
>
> Setting a variable to be used through mode inheritance or delegation is
> fine, but if that doesn't help, I would probably stop at defining a
> helper function or two and documenting how it should be used. And then
> maybe work with AUCTeX people to get the remaining necessary changes in
> from their side (or just leaving that up to the user, depending on how
> functional the default config ends up being).





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-14 16:11                         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-09-14 23:55                           ` Dmitry Gutov
  2023-09-15  6:47                             ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Dmitry Gutov @ 2023-09-14 23:55 UTC (permalink / raw)
  To: David Fussner, Eli Zaretskii; +Cc: 53749, Lars Ingebrigtsen, Stefan Kangas

Hi David,

On 14/09/2023 19:11, David Fussner via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:

> Once again, many thanks for the feedback. I'm still not certain I
> agree about the risks involved in creating a new "thing" type, as it
> really only appears in a small number of commands and then only in TeX
> buffers, and generally I tried to design the code to keep out of the
> way of anything outside of such buffers, but needless to say you see
> further and more clearly than I can. I've been reviewing your comments
> and my code, and have a few ideas and questions about how to go
> forward. Though I haven't coded it yet, it's possible that the
> simplest (and least intrusive) approach to follow would do something
> like this:

I agree that the risks are probably low, and my review stems from the 
general approach that doing global modifications to the environment can 
lead to problems. It might or might not happen in your case. If anything 
happens, though, the same modifications tend to make it harder to 
investigate, e.g. to find where a particular bit of behavior comes from. 
So the more local an implementation of a feature can be, is generally 
the better.

But I'm no maintainer of tex-mode, and whatever choices are made here 
won't have effect outside of TeX, so if somebody wants to disagree with 
me, they're more than welcome to.

> 1. Get rid of the new texsymbol "thing" and just use a buffer-local
> value of find-tag-default-function and a rather more thoroughly
> modified syntax table to control what "symbol" means, but _only_ in
> the context of commands that use find-tag-default-function. I think
> I'd lose the ability to change the behavior of
> isearch-forward-thing-at-point and project-find-regexp, as I can't see
> how to temporarily modify the syntax table there, though perhaps I'm
> missing something.

I'm suggesting this approach together with defining a "new" backend for 
TeX. Quotes because while it's going to have its own name, it's mostly 
going to perform forwarding to an existing backend (etags).

This should make it practical for you to treat identifiers in 
xref-backend-definitions differently from that in 
xref-backend-references and xref-backend-apropos.

If you define find-tag-default-function, you don't have to change the 
syntax table too: it might be easier to search around with a regexp.

But for the new backend, you can also define the method 
xref-backend-identifier-at-point, where you would invoke the necessary 
bounds-of-thing logic. Then you won't need a change in 
find-tag-default-function.

Either way, though, the major modes will need to set up 
xref-backend-functions instead (with add-hook). This could also be done 
in a minor mode, which you'd enable in any TeX-related major modes that 
you use.

> 2. Simply eliminate the TeX escape character entirely, both from tag
> names in a TAGS file and from any thing-at-point in a TeX buffer. I
> think this would eliminate the need to distinguish among the various
> xref commands in terms of whether they can or can't handle the escape
> character. It would also eliminate the need for the new user option in
> etags.c, as there would no longer be any code to cope with the escape
> character when finding a (thing-at-point 'symbol). This is slightly
> less powerful than the default I proposed, but there are probably many
> use cases where it won't matter at all (though it would for my own,
> possibly eccentric, use case).

I wanted to ask whether including the backslash is important enough (it 
should not matter too much for disambiguation), but I figured it must 
be, otherwise you wouldn't go to all this effort.

If not, it would simplify things a lot, though.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-14 23:55                           ` Dmitry Gutov
@ 2023-09-15  6:47                             ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-15  6:47 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 53749, Eli Zaretskii, Lars Ingebrigtsen, Stefan Kangas

[-- Attachment #1: Type: text/plain, Size: 4134 bytes --]

Thanks Dmitry,

I'll make another stab at a "new" backend, as suggested. I'll have a look
at the escape char thing, too, and see how I feel about dropping it. It
shouldn't take 18 months this time!

Best,

David.

On Fri, 15 Sept 2023, 00:55 Dmitry Gutov, <dgutov@yandex.ru> wrote:

> Hi David,
>
> On 14/09/2023 19:11, David Fussner via Bug reports for GNU Emacs, the
> Swiss army knife of text editors wrote:
>
> > Once again, many thanks for the feedback. I'm still not certain I
> > agree about the risks involved in creating a new "thing" type, as it
> > really only appears in a small number of commands and then only in TeX
> > buffers, and generally I tried to design the code to keep out of the
> > way of anything outside of such buffers, but needless to say you see
> > further and more clearly than I can. I've been reviewing your comments
> > and my code, and have a few ideas and questions about how to go
> > forward. Though I haven't coded it yet, it's possible that the
> > simplest (and least intrusive) approach to follow would do something
> > like this:
>
> I agree that the risks are probably low, and my review stems from the
> general approach that doing global modifications to the environment can
> lead to problems. It might or might not happen in your case. If anything
> happens, though, the same modifications tend to make it harder to
> investigate, e.g. to find where a particular bit of behavior comes from.
> So the more local an implementation of a feature can be, is generally
> the better.
>
> But I'm no maintainer of tex-mode, and whatever choices are made here
> won't have effect outside of TeX, so if somebody wants to disagree with
> me, they're more than welcome to.
>
> > 1. Get rid of the new texsymbol "thing" and just use a buffer-local
> > value of find-tag-default-function and a rather more thoroughly
> > modified syntax table to control what "symbol" means, but _only_ in
> > the context of commands that use find-tag-default-function. I think
> > I'd lose the ability to change the behavior of
> > isearch-forward-thing-at-point and project-find-regexp, as I can't see
> > how to temporarily modify the syntax table there, though perhaps I'm
> > missing something.
>
> I'm suggesting this approach together with defining a "new" backend for
> TeX. Quotes because while it's going to have its own name, it's mostly
> going to perform forwarding to an existing backend (etags).
>
> This should make it practical for you to treat identifiers in
> xref-backend-definitions differently from that in
> xref-backend-references and xref-backend-apropos.
>
> If you define find-tag-default-function, you don't have to change the
> syntax table too: it might be easier to search around with a regexp.
>
> But for the new backend, you can also define the method
> xref-backend-identifier-at-point, where you would invoke the necessary
> bounds-of-thing logic. Then you won't need a change in
> find-tag-default-function.
>
> Either way, though, the major modes will need to set up
> xref-backend-functions instead (with add-hook). This could also be done
> in a minor mode, which you'd enable in any TeX-related major modes that
> you use.
>
> > 2. Simply eliminate the TeX escape character entirely, both from tag
> > names in a TAGS file and from any thing-at-point in a TeX buffer. I
> > think this would eliminate the need to distinguish among the various
> > xref commands in terms of whether they can or can't handle the escape
> > character. It would also eliminate the need for the new user option in
> > etags.c, as there would no longer be any code to cope with the escape
> > character when finding a (thing-at-point 'symbol). This is slightly
> > less powerful than the default I proposed, but there are probably many
> > use cases where it won't matter at all (though it would for my own,
> > possibly eccentric, use case).
>
> I wanted to ask whether including the backslash is important enough (it
> should not matter too much for disambiguation), but I figured it must
> be, otherwise you wouldn't go to all this effort.
>
> If not, it would simplify things a lot, though.
>

[-- Attachment #2: Type: text/html, Size: 5016 bytes --]

^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-14  6:10                         ` Eli Zaretskii
@ 2023-09-15 18:45                           ` Tassilo Horn
  2023-09-16  5:53                             ` Ikumi Keita
  0 siblings, 1 reply; 106+ messages in thread
From: Tassilo Horn @ 2023-09-15 18:45 UTC (permalink / raw)
  To: Eli Zaretskii
  Cc: 53749, Ikumi Keita, dfussner, stefankangas, Dmitry Gutov, larsi,
	Stefan Monnier

Eli Zaretskii <eliz@gnu.org> writes:

Hi Eli & all, thanks for inviting me to the discussion.  I'm adding
Keita, too, because he's currently the by far most active AUCTeX
developer.

>> Do AUCTeX modes inherit from tex-mode?

Not currently but in Keita's feature/fix-mode-names-overlap branch which
will probably become AUCTeX 14, I guess.

>> Or all call tex-common-initialization? Then you could set that
>> variable locally inside that function once.

Again, not right now but probably in the future.

>> All in all, it might not be wise to modify the behavior of
>> third-party packages from inside Emacs this way (they might have
>> other expectations, or there's going to appear a new major mode that
>> needs the same treatment anyway).
>> 
>> Setting a variable to be used through mode inheritance or delegation
>> is fine, but if that doesn't help, I would probably stop at defining
>> a helper function or two and documenting how it should be used. And
>> then maybe work with AUCTeX people to get the remaining necessary
>> changes in from their side (or just leaving that up to the user,
>> depending on how functional the default config ends up being).

That sounds reasonable.

Bye,
Tassilo





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-15 18:45                           ` Tassilo Horn
@ 2023-09-16  5:53                             ` Ikumi Keita
  2023-09-17  8:49                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Ikumi Keita @ 2023-09-16  5:53 UTC (permalink / raw)
  To: Tassilo Horn
  Cc: 53749, dfussner, Stefan Monnier, Dmitry Gutov, larsi,
	Eli Zaretskii, stefankangas

Hi all,

>>>>> Tassilo Horn <tsdh@gnu.org> writes:
>>> Do AUCTeX modes inherit from tex-mode?

> Not currently but in Keita's feature/fix-mode-names-overlap branch

Currently, no. In feater/fix-mode-names-overlap branch, the major mode
iheritance relations are:

text-mode      --+-- TeX-mode
                 +-- Texinfo-mode

TeX-mode       --+-- plain-TeX-mode
                 +-- LaTeX-mode
                 +-- ConTeXt-mode

plain-TeX-mode --+-- AmSTeX-mode
                 +-- japanese-plain-TeX-mode

LaTeX-mode     --+-- docTeX-mode
                 +-- japanese-LaTeX-mode

(There are ConTeXt-en-mode and ConTeXt-nl-mode as well, but my current
personal plain is to delete them.)

I don't think it's a good idea to inherit from tex-mode; it isn't
diffcult to change the "top" mode from text-mode with tex-mode, but in
that case LaTeX-mode can't have both built-in latex-mode and TeX-mode as
its parent mode.

(Maybe an exception is Texinfo-mode. It would make sense to have
built-in texinfo-mode as parent of Texinfo-mode. If there is a good
reason to do so, I won't object strongly.)

> which will probably become AUCTeX 14, I guess.

I hope so. :-)

>>> Or all call tex-common-initialization? Then you could set that
>>> variable locally inside that function once.

> Again, not right now but probably in the future.

Currently, they don't call tex-common-initialization, but we can do so
in TeX-mode. (But I haven't consider its pros and cons deeply yet.)

Best regards,
Ikumi Keita
#StandWithUkraine #StopWarInUkraine





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-16  5:53                             ` Ikumi Keita
@ 2023-09-17  8:49                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-04-22 13:06                                 ` Arash Esbati
  0 siblings, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-17  8:49 UTC (permalink / raw)
  To: Ikumi Keita
  Cc: 53749, Tassilo Horn, Stefan Monnier, Dmitry Gutov, larsi,
	Eli Zaretskii, stefankangas

Hi Tassilo and Keita,

Thanks for the clarifications. If you look at the current patch to
tex-mode.el, there's one function call added to TeX-mode-hook, mainly
for my own testing purposes, but no matter what the final patch looks
like it should only similarly require a single function call in an
AUCTeX hook to activate the new xref code there, along with one in
tex-common-initialization for the in-tree modes. If and when all
parties are satisfied by the patch I'll certainly be in touch with you
to find out how you'd prefer to handle activating it (or not) in
AUCTeX. The current state of affairs is a convenience for me and for
anyone else who cares to test the code.

Thanks again,

David.

On Sat, 16 Sept 2023 at 06:53, Ikumi Keita <ikumi@ikumi.que.jp> wrote:
>
> Hi all,
>
> >>>>> Tassilo Horn <tsdh@gnu.org> writes:
> >>> Do AUCTeX modes inherit from tex-mode?
>
> > Not currently but in Keita's feature/fix-mode-names-overlap branch
>
> Currently, no. In feater/fix-mode-names-overlap branch, the major mode
> iheritance relations are:
>
> text-mode      --+-- TeX-mode
>                  +-- Texinfo-mode
>
> TeX-mode       --+-- plain-TeX-mode
>                  +-- LaTeX-mode
>                  +-- ConTeXt-mode
>
> plain-TeX-mode --+-- AmSTeX-mode
>                  +-- japanese-plain-TeX-mode
>
> LaTeX-mode     --+-- docTeX-mode
>                  +-- japanese-LaTeX-mode
>
> (There are ConTeXt-en-mode and ConTeXt-nl-mode as well, but my current
> personal plain is to delete them.)
>
> I don't think it's a good idea to inherit from tex-mode; it isn't
> diffcult to change the "top" mode from text-mode with tex-mode, but in
> that case LaTeX-mode can't have both built-in latex-mode and TeX-mode as
> its parent mode.
>
> (Maybe an exception is Texinfo-mode. It would make sense to have
> built-in texinfo-mode as parent of Texinfo-mode. If there is a good
> reason to do so, I won't object strongly.)
>
> > which will probably become AUCTeX 14, I guess.
>
> I hope so. :-)
>
> >>> Or all call tex-common-initialization? Then you could set that
> >>> variable locally inside that function once.
>
> > Again, not right now but probably in the future.
>
> Currently, they don't call tex-common-initialization, but we can do so
> in TeX-mode. (But I haven't consider its pros and cons deeply yet.)
>
> Best regards,
> Ikumi Keita
> #StandWithUkraine #StopWarInUkraine





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2023-09-17  8:49                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-04-22 13:06                                 ` Arash Esbati
  2024-04-22 14:56                                   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-04-29 14:15                                   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 2 replies; 106+ messages in thread
From: Arash Esbati @ 2024-04-22 13:06 UTC (permalink / raw)
  To: David Fussner
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Stefan Monnier, Tassilo Horn,
	Eli Zaretskii, stefankangas

David Fussner <dfussner@googlemail.com> writes:

> Thanks for the clarifications. If you look at the current patch to
> tex-mode.el, there's one function call added to TeX-mode-hook, mainly
> for my own testing purposes, but no matter what the final patch looks
> like it should only similarly require a single function call in an
> AUCTeX hook to activate the new xref code there, along with one in
> tex-common-initialization for the in-tree modes. If and when all
> parties are satisfied by the patch I'll certainly be in touch with you
> to find out how you'd prefer to handle activating it (or not) in
> AUCTeX. The current state of affairs is a convenience for me and for
> anyone else who cares to test the code.

Hi David,

I justed wanted to come back on this report and ask if there is any
progress?  It would be nice to get Xref working within TeX buffers.

TIA.  Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-04-22 13:06                                 ` Arash Esbati
@ 2024-04-22 14:56                                   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-04-22 16:15                                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-04-23 12:04                                     ` Arash Esbati
  2024-04-29 14:15                                   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 2 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-04-22 14:56 UTC (permalink / raw)
  To: Arash Esbati
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Stefan Monnier, Tassilo Horn,
	Eli Zaretskii, stefankangas

Hi Arash,

Thanks for the nudge. I am in fact in the final stages of preparing a
new patch to get xref working in TeX buffers. As usual, the main
complexities are in xref-find-references, and while I have you here I
wonder whether I could ask your thoughts about addressing one part of
this complexity.

The semantic/symref backend used by xref-find-references greps in
files matching the major-mode of the buffer where the user calls the
command. It looks in semantic-symref-filepattern-alist for
file-extensions matching the major-mode, and if that fails it looks in
auto-mode-alist. When both fail to produce any file extensions it
tells the user to customize semantic-symref-filepattern-alist. Also,
if it finds things in s-s-f-a, it doesn't go on to auto-mode-alist, so
s-s-f-a has to be complete in order to be useful. In effect, we need
s-s-f-a to hold all the extensions for all the modes that can appear
as values of major-mode, and I notice that AUCTeX has started to
populate that alist, though incompletely. I'm also aware that many
packages add their own extensions to files which are basically TeX or
LaTeX files, and I wonder whether we can really keep up with the whole
of CTAN in terms of providing complete lists of extensions for
s-s-f-a.

As an example of where we are, if you open a plain-tex-mode (or
plain-TeX-mode) file and M-? with point on some standard word you'll
currently get the message to customize s-s-f-a, because
auto-mode-alist has only tex-mode and s-s-f-a doesn't cover them,
either.

I ask you Arash, therefore, as an AUCTeX and emacs developer, and I
ask any other developers also, whether you'd prefer me just to put
together as complete a list as possible for addition to s-s-f-a --
with patches for AUCTeX for all the new modes there -- or, and this is
what I'm finishing up now, whether you'd consider it overkill to have
code that constructs (or modifies) entries in s-s-f-a by searching in
auto-mode-alist and in the buffer-list for all the file extensions
emacs knows about that relate to the current major-mode. Changes in
s-s-f-a wouldn't be persistent across sessions, but they would allow a
user to open a file with any file extension, run latex-mode, and M-?
would work in that buffer, and search that buffer from another buffer
with a related major-mode, all without needing any user intervention.
It would also allow customizations in auto-mode-alist to appear in
s-s-f-a automatically, which seems convenient to me.

If your answer is "show me the code", I'll do that shortly, but I
wondered whether anyone had any preliminary thoughts on the matter.

Best, and sorry for the long question,

David.

On Mon, 22 Apr 2024 at 14:06, Arash Esbati <arash@gnu.org> wrote:
>
> David Fussner <dfussner@googlemail.com> writes:
>
> > Thanks for the clarifications. If you look at the current patch to
> > tex-mode.el, there's one function call added to TeX-mode-hook, mainly
> > for my own testing purposes, but no matter what the final patch looks
> > like it should only similarly require a single function call in an
> > AUCTeX hook to activate the new xref code there, along with one in
> > tex-common-initialization for the in-tree modes. If and when all
> > parties are satisfied by the patch I'll certainly be in touch with you
> > to find out how you'd prefer to handle activating it (or not) in
> > AUCTeX. The current state of affairs is a convenience for me and for
> > anyone else who cares to test the code.
>
> Hi David,
>
> I justed wanted to come back on this report and ask if there is any
> progress?  It would be nice to get Xref working within TeX buffers.
>
> TIA.  Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-04-22 14:56                                   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-04-22 16:15                                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-04-22 16:37                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-04-23 12:04                                     ` Arash Esbati
  1 sibling, 1 reply; 106+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-04-22 16:15 UTC (permalink / raw)
  To: David Fussner
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Arash Esbati, stefankangas,
	Tassilo Horn, Eli Zaretskii

> auto-mode-alist. When both fail to produce any file extensions it
> tells the user to customize semantic-symref-filepattern-alist.

Yes, this is not ideal.

I think ideally we'd build a regexp from `auto-mode-alist` and
`major-mode-remap-alist/defaults`, tho it may require additional info.

E.g. we may need to complement that with additional "related modes"
(e.g. html modes may want to mention `php-mode` as "related").


        Stefan






^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-04-22 16:15                                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-04-22 16:37                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-04-22 17:16                                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-04-22 16:37 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Arash Esbati, stefankangas,
	Tassilo Horn, Eli Zaretskii

Thank you, Stefan -- I didn't know about
major-mode-remap-alist/defaults. Do you think TeX and friends are
handled by emacs distinctively enough to warrant keeping some
specialist extension-handling code in tex-mode.el, or do you think
some changes should be more generally available, in grep.el, say? (I'm
wondering whether it might be useful, for example, for
semantic-symref-derive-find-filepatterns to add extensions from
auto-mode-alist even when some extensions are found in
semantic-symref-filepattern-alist.)

David.

On Mon, 22 Apr 2024 at 17:15, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>
> > auto-mode-alist. When both fail to produce any file extensions it
> > tells the user to customize semantic-symref-filepattern-alist.
>
> Yes, this is not ideal.
>
> I think ideally we'd build a regexp from `auto-mode-alist` and
> `major-mode-remap-alist/defaults`, tho it may require additional info.
>
> E.g. we may need to complement that with additional "related modes"
> (e.g. html modes may want to mention `php-mode` as "related").
>
>
>         Stefan
>





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-04-22 16:37                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-04-22 17:16                                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-04-22 17:25                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-04-24  0:09                                           ` Dmitry Gutov
  0 siblings, 2 replies; 106+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-04-22 17:16 UTC (permalink / raw)
  To: David Fussner
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Arash Esbati, stefankangas,
	Tassilo Horn, Eli Zaretskii

> (I'm wondering whether it might be useful, for example, for
> semantic-symref-derive-find-filepatterns to add extensions from
> auto-mode-alist even when some extensions are found in
> semantic-symref-filepattern-alist.)

Assuming we can get good enough results from `auto-mode-alist and
friends, I think we'd want to mark `semantic-symref-filepattern-alist`
as obsolete.
But before that, we need to check the assumption.

In the short term, for AUCTeX the only workable option seems to be to
add entries to `semantic-symref-filepattern-alist`.


        Stefan






^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-04-22 17:16                                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-04-22 17:25                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-04-24  0:09                                           ` Dmitry Gutov
  1 sibling, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-04-22 17:25 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Arash Esbati, Stefan Kangas,
	Tassilo Horn, Eli Zaretskii

[-- Attachment #1: Type: text/plain, Size: 797 bytes --]

Thank you. I hope one or two others might join in, but I'll have some code
to look over in a few days, in any case.

David.

On Mon, 22 Apr 2024, 18:16 Stefan Monnier, <monnier@iro.umontreal.ca> wrote:

> > (I'm wondering whether it might be useful, for example, for
> > semantic-symref-derive-find-filepatterns to add extensions from
> > auto-mode-alist even when some extensions are found in
> > semantic-symref-filepattern-alist.)
>
> Assuming we can get good enough results from `auto-mode-alist and
> friends, I think we'd want to mark `semantic-symref-filepattern-alist`
> as obsolete.
> But before that, we need to check the assumption.
>
> In the short term, for AUCTeX the only workable option seems to be to
> add entries to `semantic-symref-filepattern-alist`.
>
>
>         Stefan
>
>

[-- Attachment #2: Type: text/html, Size: 1192 bytes --]

^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-04-22 14:56                                   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-04-22 16:15                                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-04-23 12:04                                     ` Arash Esbati
  2024-04-23 13:21                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 106+ messages in thread
From: Arash Esbati @ 2024-04-23 12:04 UTC (permalink / raw)
  To: David Fussner
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Stefan Monnier, Tassilo Horn,
	Eli Zaretskii, stefankangas

David Fussner <dfussner@googlemail.com> writes:

> Thanks for the nudge. I am in fact in the final stages of preparing a
> new patch to get xref working in TeX buffers.

Thanks for the update.

> The semantic/symref backend used by xref-find-references greps in
> files matching the major-mode of the buffer where the user calls the
> command. It looks in semantic-symref-filepattern-alist for
> file-extensions matching the major-mode, and if that fails it looks in
> auto-mode-alist. When both fail to produce any file extensions it
> tells the user to customize semantic-symref-filepattern-alist. Also,
> if it finds things in s-s-f-a, it doesn't go on to auto-mode-alist, so
> s-s-f-a has to be complete in order to be useful. In effect, we need
> s-s-f-a to hold all the extensions for all the modes that can appear
> as values of major-mode, and I notice that AUCTeX has started to
> populate that alist, though incompletely.

I'm not familiar with the way xref works, but reading the above, xref
doesn't care about modes set per file variables, is this correct?

> I'm also aware that many packages add their own extensions to files
> which are basically TeX or LaTeX files, and I wonder whether we can
> really keep up with the whole of CTAN in terms of providing complete
> lists of extensions for s-s-f-a.

I think this is almost impossible.  Besides the effort, take for example
the .cnf extension which is used by other programs as well, so
associating it with LaTeX-mode wouldn't make sense, IMO.  Finally, I
think many packages are written in .dtx format and the ones with many
files with different extensions (.def, .enc, .fd, ...) usually extract
them from the .dtx via an .ins file, so the edited source is inside the
.dtx, and we don't need to care about these extensions.

> As an example of where we are, if you open a plain-tex-mode (or
> plain-TeX-mode) file and M-? with point on some standard word you'll
> currently get the message to customize s-s-f-a, because
> auto-mode-alist has only tex-mode and s-s-f-a doesn't cover them,
> either.

This is possibly the next mess since .tex can be plain-TeX, ConTeXt,
LaTeX ...  So in general, I second what Stefan M. wrote in his other
message, but respecting/using file local variables could help here (if
it doesn't work ATM, see above), e.g.:

--8<---------------cut here---------------start------------->8---
\beginsection 1. Introduction.
This is the start of the introduction.
\bye

%%% Local Variables:
%%% mode: plain-TeX
%%% TeX-master: t
%%% End:
--8<---------------cut here---------------end--------------->8---

HTH.  Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-04-23 12:04                                     ` Arash Esbati
@ 2024-04-23 13:21                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-04-23 13:21 UTC (permalink / raw)
  To: Arash Esbati
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Stefan Monnier, Tassilo Horn,
	Eli Zaretskii, stefankangas

Thanks for the reply, Arash.

> I'm not familiar with the way xref works, but reading the above, xref
> doesn't care about modes set per file variables, is this correct?

As far as I know, the default xref-find-references deals strictly in
file extensions.

> I think this is almost impossible.  Besides the effort, take for example
> the .cnf extension which is used by other programs as well, so
> associating it with LaTeX-mode wouldn't make sense, IMO.

Agreed -- this may be an argument against my current approach. I hope,
however, that the way xref-find-references searches by directory or by
project should limit spurious searching when a more common extension
appears on a TeX file.

> This is possibly the next mess since .tex can be plain-TeX, ConTeXt,
> LaTeX ...

I guess currently I'm thinking that this is sort of a feature, as
searching for symbols in files/buffers from many closely-related modes
may produce useful matches. The code I'm finishing up tends to search
more files rather than fewer, but it should be possible to prune this
if it's deemed too messy.

> So in general, I second what Stefan M. wrote in his other
> message, but respecting/using file local variables could help here.

Currently, the code takes into account file-local variables only by
including in the search list extensions of TeX-related buffers, which
may well only have become TeX-related due to such variables.

I'll post a patch as soon as I solve an outstanding issue or two, and
we'll see where we are.

Thank you indeed for your help,

David.

On Tue, 23 Apr 2024 at 13:04, Arash Esbati <arash@gnu.org> wrote:
>
> David Fussner <dfussner@googlemail.com> writes:
>
> > Thanks for the nudge. I am in fact in the final stages of preparing a
> > new patch to get xref working in TeX buffers.
>
> Thanks for the update.
>
> > The semantic/symref backend used by xref-find-references greps in
> > files matching the major-mode of the buffer where the user calls the
> > command. It looks in semantic-symref-filepattern-alist for
> > file-extensions matching the major-mode, and if that fails it looks in
> > auto-mode-alist. When both fail to produce any file extensions it
> > tells the user to customize semantic-symref-filepattern-alist. Also,
> > if it finds things in s-s-f-a, it doesn't go on to auto-mode-alist, so
> > s-s-f-a has to be complete in order to be useful. In effect, we need
> > s-s-f-a to hold all the extensions for all the modes that can appear
> > as values of major-mode, and I notice that AUCTeX has started to
> > populate that alist, though incompletely.
>
> I'm not familiar with the way xref works, but reading the above, xref
> doesn't care about modes set per file variables, is this correct?
>
> > I'm also aware that many packages add their own extensions to files
> > which are basically TeX or LaTeX files, and I wonder whether we can
> > really keep up with the whole of CTAN in terms of providing complete
> > lists of extensions for s-s-f-a.
>
> I think this is almost impossible.  Besides the effort, take for example
> the .cnf extension which is used by other programs as well, so
> associating it with LaTeX-mode wouldn't make sense, IMO.  Finally, I
> think many packages are written in .dtx format and the ones with many
> files with different extensions (.def, .enc, .fd, ...) usually extract
> them from the .dtx via an .ins file, so the edited source is inside the
> .dtx, and we don't need to care about these extensions.
>
> > As an example of where we are, if you open a plain-tex-mode (or
> > plain-TeX-mode) file and M-? with point on some standard word you'll
> > currently get the message to customize s-s-f-a, because
> > auto-mode-alist has only tex-mode and s-s-f-a doesn't cover them,
> > either.
>
> This is possibly the next mess since .tex can be plain-TeX, ConTeXt,
> LaTeX ...  So in general, I second what Stefan M. wrote in his other
> message, but respecting/using file local variables could help here (if
> it doesn't work ATM, see above), e.g.:
>
> --8<---------------cut here---------------start------------->8---
> \beginsection 1. Introduction.
> This is the start of the introduction.
> \bye
>
> %%% Local Variables:
> %%% mode: plain-TeX
> %%% TeX-master: t
> %%% End:
> --8<---------------cut here---------------end--------------->8---
>
> HTH.  Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-04-22 17:16                                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-04-22 17:25                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-04-24  0:09                                           ` Dmitry Gutov
  2024-04-24  9:02                                             ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 106+ messages in thread
From: Dmitry Gutov @ 2024-04-24  0:09 UTC (permalink / raw)
  To: Stefan Monnier, David Fussner
  Cc: 53749, Ikumi Keita, Arash Esbati, stefankangas, Tassilo Horn,
	Eli Zaretskii

On 22/04/2024 20:16, Stefan Monnier via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:
>> (I'm wondering whether it might be useful, for example, for
>> semantic-symref-derive-find-filepatterns to add extensions from
>> auto-mode-alist even when some extensions are found in
>> semantic-symref-filepattern-alist.)
> Assuming we can get good enough results from `auto-mode-alist and
> friends, I think we'd want to mark `semantic-symref-filepattern-alist`
> as obsolete.
> But before that, we need to check the assumption.

Last I checked, semantic-symref-filepattern-alist had explicit entries 
only for languages whose auto-mode-alist entries were deemed too complex 
to parse out the matching extensions from the corresponding regexps.

Or had other difficulties like the c-or-c++-mode dispatcher.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-04-24  0:09                                           ` Dmitry Gutov
@ 2024-04-24  9:02                                             ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-04-24  9:02 UTC (permalink / raw)
  To: Dmitry Gutov
  Cc: 53749, Ikumi Keita, Arash Esbati, stefankangas, Tassilo Horn,
	Eli Zaretskii, Stefan Monnier

Thanks, Dmitry.

> Last I checked, semantic-symref-filepattern-alist had explicit entries
> only for languages whose auto-mode-alist entries were deemed too complex
> to parse out the matching extensions from the corresponding regexps.
>
> Or had other difficulties like the c-or-c++-mode dispatcher.

That makes sense, and clarifies a few things for me. I guess TeX has
the "plain-tex or latex or context or ams-tex" dispatcher and also
in-tree vs. AUCTeX mode names, both of which at least for the moment
make semantic-symref-filepattern-alist seem a better fit.

Best,

David.

On Wed, 24 Apr 2024 at 01:09, Dmitry Gutov <dgutov@yandex.ru> wrote:
>
> On 22/04/2024 20:16, Stefan Monnier via Bug reports for GNU Emacs, the
> Swiss army knife of text editors wrote:
> >> (I'm wondering whether it might be useful, for example, for
> >> semantic-symref-derive-find-filepatterns to add extensions from
> >> auto-mode-alist even when some extensions are found in
> >> semantic-symref-filepattern-alist.)
> > Assuming we can get good enough results from `auto-mode-alist and
> > friends, I think we'd want to mark `semantic-symref-filepattern-alist`
> > as obsolete.
> > But before that, we need to check the assumption.
>
> Last I checked, semantic-symref-filepattern-alist had explicit entries
> only for languages whose auto-mode-alist entries were deemed too complex
> to parse out the matching extensions from the corresponding regexps.
>
> Or had other difficulties like the c-or-c++-mode dispatcher.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-04-22 13:06                                 ` Arash Esbati
  2024-04-22 14:56                                   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-04-29 14:15                                   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-02  0:43                                     ` Dmitry Gutov
                                                       ` (2 more replies)
  1 sibling, 3 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-04-29 14:15 UTC (permalink / raw)
  To: Arash Esbati
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Stefan Monnier, Tassilo Horn,
	Eli Zaretskii, stefankangas

[-- Attachment #1: Type: text/plain, Size: 2615 bytes --]

Hi Dmitry and Arash,

Here's my third attempt at a working xref backend for TeX. I'll try
quickly to summarize what's in it:

1. I've modified etags so that it creates findable tags for as many
different sorts of TeX construct as possible, including those written
in the new expl3 syntax. I've now removed the escape character from
the tag names, as this simplifies code all around.

2. 4 of the 6 xref backend functions just call the etags backend.

3. xref-backend-identifier-at-point is modified to provide new regexps
for delineating TeX symbols, and there's also code to cope with expl3
constructs slightly differently in M-? than in the other two main xref
commands.

4. xref-backend-references is a wrapper for the standard backend, the
wrapper doing two things: first, it tries to accumulate as many file
extensions for the current major-mode as emacs knows about, and second
it creates a bespoke syntax-propertize-function for strings that
aren't entirely composed of symbol or word characters. It applies this
function to file-visiting buffers and lets xref apply it in the
*xref-temp buffer, though I had to add a one-liner in xref.el to fix
what I believe is a minor bug there preventing syntax-propertize from
doing its work when the temp buffer holds text from a new file. (I can
provide a recipe for this if you want.)

5. Slightly unrelatedly, I've added new syntax-propertize-rules to
latex-mode so that expl3 constructs with the underscore aren't
fontified as subscripts, which makes such code unreadable. I'm happy
to split this off as another patch.

All comments gratefully received, and thanks,

David.

On Mon, 22 Apr 2024 at 14:06, Arash Esbati <arash@gnu.org> wrote:
>
> David Fussner <dfussner@googlemail.com> writes:
>
> > Thanks for the clarifications. If you look at the current patch to
> > tex-mode.el, there's one function call added to TeX-mode-hook, mainly
> > for my own testing purposes, but no matter what the final patch looks
> > like it should only similarly require a single function call in an
> > AUCTeX hook to activate the new xref code there, along with one in
> > tex-common-initialization for the in-tree modes. If and when all
> > parties are satisfied by the patch I'll certainly be in touch with you
> > to find out how you'd prefer to handle activating it (or not) in
> > AUCTeX. The current state of affairs is a convenience for me and for
> > anyone else who cares to test the code.
>
> Hi David,
>
> I justed wanted to come back on this report and ask if there is any
> progress?  It would be nice to get Xref working within TeX buffers.
>
> TIA.  Best, Arash

[-- Attachment #2: 0001-Provide-a-modified-xref-backend-for-TeX-buffers.patch --]
[-- Type: text/x-patch, Size: 30939 bytes --]

From 64a4f7c7b89b4475a3841b54288c25bcc4ebde3d Mon Sep 17 00:00:00 2001
From: David Fussner <dfussner@googlemail.com>
Date: Mon, 29 Apr 2024 15:05:03 +0100
Subject: [PATCH] Provide a modified xref backend for TeX buffers

* lib-src/etags.c (TeX_commands): Improve parsing of commands in TeX
buffers.
(TEX_defenv): Expand list of commands to tag by default in TeX
buffers.
(TeX_help):
* doc/emacs/maintaining.texi (Tag Syntax): Document new tagged
commands.
(Identifier Search): Add note about semantic-symref-filepattern-alist,
auto-mode-alist, and xref-find-references.

* lisp/progmodes/xref.el (xref--collect-matches): Ensure
syntax-propertize actually runs in the *xref-temp buffer for each
new file searched.
* lisp/textmodes/tex-mode.el (tex-font-lock-suscript): Disable
subscript face in expl3 constructs.
(latex-syntax-propertize-rules): Add two new rules to give symbol
syntax to the standard components of expl3 constructs.
(tex-common-initialization): Set up xref backend for in-tree TeX
modes.
(tex--thing-at-point, tex-thingatpt--beginning-of-symbol)
(tex-thingatpt--end-of-symbol, tex--bounds-of-symbol-at-point):
New functions to return 'thing-at-point' for xref backend.
(tex-esc-and-group-chars): New var to do the same.
(xref-backend-identifier-at-point): New TeX backend method to provide
symbols for processing by xref.
(xref-backend-identifier-completion-table)
(xref-backend-identifier-completion-ignore-case)
(xref-backend-definitions, xref-backend-apropos): Placeholders to
call the standard 'etags' xref backend methods.
(xref-backend-references): Wrapper to call the default xref backend
method, finding as many relevant files as possible and using a bespoke
syntax-propertize-function.
(tex--collect-file-extensions, tex-xref-syntax-function): Helper
function and macro for previous.
(tex-find-references-syntax-table, tex--buffers-list)
(tex--last-ref-syntax-flag, tex--old-syntax-function): New vars for
same.
---
 doc/emacs/maintaining.texi |  34 +++-
 lib-src/etags.c            | 183 ++++++++++++++++++--
 lisp/progmodes/xref.el     |   1 +
 lisp/textmodes/tex-mode.el | 336 ++++++++++++++++++++++++++++++++++++-
 4 files changed, 537 insertions(+), 17 deletions(-)

diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 579098c81b1..2fbb964a7a0 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -2529,6 +2529,15 @@ Identifier Search
 referenced.  The XREF mode commands are available in this buffer, see
 @ref{Xref Commands}.
 
+When invoked in a buffer whose major mode uses the @code{etags} backend,
+@kbd{M-?} searches files and buffers whose major mode matches that of
+the original buffer.  It guesses that mode from file extensions, so if
+@kbd{M-?} seems to be skipping relevant buffers or files, try
+customizing either the variable @code{semantic-symref-filepattern-alist}
+(if your buffer's major mode already has an entry in it), or
+@code{auto-mode-alist} (if not), thereby informing @code{xref} of the
+missing extensions (@pxref{Choosing Modes}).
+
 @vindex xref-auto-jump-to-first-xref
   If the value of the variable @code{xref-auto-jump-to-first-xref} is
 @code{t}, @code{xref-find-references} automatically jumps to the first
@@ -2749,8 +2758,29 @@ Tag Syntax
 @code{\section}, @code{\subsection}, @code{\subsubsection},
 @code{\eqno}, @code{\label}, @code{\ref}, @code{\cite},
 @code{\bibitem}, @code{\part}, @code{\appendix}, @code{\entry},
-@code{\index}, @code{\def}, @code{\newcommand}, @code{\renewcommand},
-@code{\newenvironment} and @code{\renewenvironment} are tags.
+@code{\index}, @code{\def}, @code{\edef}, @code{\gdef}, @code{\xdef},
+@code{\newcommand}, @code{\renewcommand}, @code{\newenvironment},
+@code{\renewenvironment}, @code{\DeclareRobustCommand},
+@code{\newrobustcmd}, @code{\renewrobustcmd}, @code{\providecommand},
+@code{\providerobustcmd}, @code{\NewDocumentCommand},
+@code{\RenewDocumentCommand}, @code{\ProvideDocumentCommand},
+@code{\DeclareDocumentCommand}, @code{\NewExpandableDocumentCommand},
+@code{\RenewExpandableDocumentCommand},
+@code{\ProvideExpandableDocumentCommand},
+@code{\DeclareExpandableDocumentCommand},
+@code{\NewDocumentEnvironment}, @code{\RenewDocumentEnvironment},
+@code{\ProvideDocumentEnvironment},
+@code{\DeclareDocumentEnvironment}, @code{\csdef}, @code{\csedef},
+@code{\csgdef}, @code{\csxdef}, @code{\csletcs}, @code{\cslet},
+@code{\letcs}, @code{\let}, \@code{\cs_new_protected_nopar},
+@code{\cs_new_protected}, @code{\cs_new_nopar}, @code{\cs_new_eq},
+@code{\cs_new}, @code{\cs_set_protected_nopar},
+@code{\cs_set_protected}, @code{\cs_set_nopar}, @code{\cs_set_eq},
+@code{\cs_set}, @code{\cs_gset_protected_nopar},
+@code{\cs_gset_protected}, @code{\cs_gset_nopar}, @code{\cs_gset_eq},
+@code{\cs_gset}, @code{\cs_generate_from_arg_count}, and
+@code{\cs_generate_variant} are tags.  So too are the arguments of any
+starred variants of these commands.
 
 Other commands can make tags as well, if you specify them in the
 environment variable @env{TEXTAGS} before invoking @command{etags}.  The
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 032cfa8010b..8b79e92abf1 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -792,8 +792,24 @@ #define STDIN 0x1001		/* returned by getopt_long on --parse-stdin */
 "In LaTeX text, the argument of any of the commands '\\chapter',\n\
 '\\section', '\\subsection', '\\subsubsection', '\\eqno', '\\label',\n\
 '\\ref', '\\cite', '\\bibitem', '\\part', '\\appendix', '\\entry',\n\
-'\\index', '\\def', '\\newcommand', '\\renewcommand',\n\
-'\\newenvironment' or '\\renewenvironment' is a tag.\n\
+'\\index', '\\def', '\\edef', '\\gdef', '\\xdef', '\\newcommand',\n\
+'\\renewcommand', '\\newenvironment', '\\renewenvironment',\n\
+'\\DeclareRobustCommand', '\\newrobustcmd', '\\renewrobustcmd',\n\
+'\\providecommand', '\\providerobustcmd', '\\NewDocumentCommand',\n\
+'\\RenewDocumentCommand', '\\ProvideDocumentCommand',\n\
+'\\DeclareDocumentCommand', '\\NewExpandableDocumentCommand',\n\
+'\\RenewExpandableDocumentCommand', '\\ProvideExpandableDocumentCommand',\n\
+'\\DeclareExpandableDocumentCommand', '\\NewDocumentEnvironment',\n\
+'\\RenewDocumentEnvironment', '\\ProvideDocumentEnvironment',\n\
+'\\DeclareDocumentEnvironment','\\csdef', '\\csedef', '\\csgdef',\n\
+'\\csxdef', '\\csletcs', '\\cslet', '\\letcs', '\\let',\n\
+'\\cs_new_protected_nopar', '\\cs_new_protected', '\\cs_new_nopar',\n\
+'\\cs_new_eq', '\\cs_new', '\\cs_set_protected_nopar',\n\
+'\\cs_set_protected', '\\cs_set_nopar', '\\cs_set_eq', '\\cs_set',\n\
+'\\cs_gset_protected_nopar', '\\cs_gset_protected', '\\cs_gset_nopar',\n\
+'\\cs_gset_eq', '\\cs_gset', '\\cs_generate_from_arg_count', or\n\
+'\\cs_generate_variant' is a tag.  So is the argument of any starred\n\
+variant of these commands.\n\
 \n\
 Other commands can be specified by setting the environment variable\n\
 'TEXTAGS' to a colon-separated list like, for example,\n\
@@ -5736,11 +5752,25 @@ Scheme_functions (FILE *inf)
 static linebuffer *TEX_toktab = NULL; /* Table with tag tokens */
 
 /* Default set of control sequences to put into TEX_toktab.
-   The value of environment var TEXTAGS is prepended to this.  */
+   The value of environment var TEXTAGS is prepended to this.
+   (2024) Add variants of '\def', some additional LaTeX (and
+   former xparse) commands, common variants from the
+   'etoolbox' package, and the main expl3 commands. */
 static const char *TEX_defenv = "\
-:chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\
-:part:appendix:entry:index:def\
-:newcommand:renewcommand:newenvironment:renewenvironment";
+:label:ref:chapter:section:subsection:subsubsection:eqno:cite:bibitem\
+:part:appendix:entry:index:def:edef:gdef:xdef:newcommand:renewcommand\
+:newenvironment:renewenvironment:DeclareRobustCommand:renewrobustcmd\
+:newrobustcmd:providecommand:providerobustcmd:NewDocumentCommand\
+:RenewDocumentCommand:ProvideDocumentCommand:DeclareDocumentCommand\
+:NewExpandableDocumentCommand:RenewExpandableDocumentCommand\
+:ProvideExpandableDocumentCommand:DeclareExpandableDocumentCommand\
+:NewDocumentEnvironment:RenewDocumentEnvironment\
+:ProvideDocumentEnvironment:DeclareDocumentEnvironment:csdef\
+:csedef:csgdef:csxdef:csletcs:cslet:letcs:let:cs_new_protected_nopar\
+:cs_new_protected:cs_new_nopar:cs_new_eq:cs_new:cs_set_protected_nopar\
+:cs_set_protected:cs_set_nopar:cs_set_eq:cs_set:cs_gset_protected_nopar\
+:cs_gset_protected:cs_gset_nopar:cs_gset_eq:cs_gset\
+:cs_generate_from_arg_count:cs_generate_variant";
 
 static void TEX_decode_env (const char *, const char *);
 
@@ -5799,19 +5829,137 @@ TeX_commands (FILE *inf)
 	      {
 		char *p;
 		ptrdiff_t namelen, linelen;
-		bool opgrp = false;
+		bool opgrp = false, one_esc = false, is_explthree = false;
 
 		cp = skip_spaces (cp + key->len);
+
+		/* 1. The canonical expl3 syntax looks something like this:
+		   \cs_new:Npn \__hook_tl_gput:Nn { \ERROR }.  First, if we
+		   want to tag any such commands, we include only the part
+		   before the colon (cs_new) in TEX_defenv or TEXTAGS.  Second,
+		   etags skips the argument specifier (including the colon)
+		   after the tag token, so that it doesn't become the tag name.
+		   Third, we set the boolean 'is_explthree' to true so that we
+		   can remove the argument specifier from the actual tag name
+		   (__hook_tl_gput).  This all allows us to include expl3
+		   constructs in TEX_defenv or in the environment variable
+		   TEXTAGS without requiring a change of separator, and it also
+		   allows us to find the definition of variant commands (with
+		   different argument specifiers) defined using, for example,
+		   \cs_generate_variant:Nn.  Please note that the expl3 spec
+		   requires etags to pay more attention to whitespace in the
+		   code.
+
+		   2. We also automatically remove the asterisk from starred
+		   variants of all commands, without the need to include the
+		   starred commands explicitly in TEX_defenv or TEXTAGS. */
+		if (*cp == ':')
+		  {
+		    while (!c_isspace (*cp) && *cp != TEX_opgrp)
+		      cp++;
+		    cp = skip_spaces (cp);
+		    is_explthree = true;
+		  }
+		else if (*cp == '*')
+		  cp++;
+
+		/* Skip the optional arguments to commands in the tags list so
+		   that these arguments don't end up as the name of the tag.
+		   The name will instead come from the argument in curly braces
+		   that follows the optional ones. */
+		while (*cp != '\0' && *cp != '%')
+		  {
+		    if (*cp == '[')
+		      {
+			while (*cp != ']' && *cp != '\0' && *cp != '%')
+			  cp++;
+		      }
+		    else if (*cp == '(')
+		      {
+			while (*cp != ')' && *cp != '\0' && *cp != '%')
+			  cp++;
+		      }
+		    else if (*cp == ']' || *cp == ')')
+		      cp++;
+		    else
+		      break;
+		  }
 		if (*cp == TEX_opgrp)
 		  {
 		    opgrp = true;
 		    cp++;
+		    cp = skip_spaces (cp); /* For expl3 code. */
 		  }
+
+		/* Removing the TeX escape character from tag names simplifies
+		   things for editors finding tagged commands in TeX buffers.
+		   This applies to Emacs but also to the tag-finding behavior
+		   of at least some of the editors that use ctags, though in
+		   the latter case this will remain suboptimal.  The
+		   undocumented ctags option '--no-duplicates' may help. */
+		if (*cp == TEX_esc)
+		  {
+		    cp++;
+		    one_esc = true;
+		  }
+
+		/* Testing !c_isspace && !c_ispunct is simpler, but halts
+		   processing at too many places.  The list as it stands tries
+		   both to ensure that tag names will derive from macro names
+		   rather than from optional parameters to those macros, and
+		   also to return findable names while still allowing for
+		   unorthodox constructs. */
 		for (p = cp;
-		     (!c_isspace (*p) && *p != '#' &&
-		      *p != TEX_opgrp && *p != TEX_clgrp);
+		     (!c_isspace (*p) && *p != '#' && *p != '=' &&
+		      *p != '[' && *p != '(' && *p != TEX_opgrp &&
+		      *p != TEX_clgrp && *p != '"' && *p != '\'' &&
+		      *p != '%' && *p != ',' && *p != '|' && *p != '$');
 		     p++)
-		  continue;
+		  /* In expl3 code we remove the argument specification from
+		     the tag name.  More generally we allow only one (deleted)
+		     escape char in a tag name, which (primarily) enables
+		     tagging a TeX command's different, possibly temporary,
+		     '\let' bindings. */
+		  if (is_explthree && *p == ':')
+		    break;
+		  else if (*p == TEX_esc)
+		    { /* Second part of test is for, e.g., \cslet. */
+		      if (!one_esc && !opgrp)
+			{
+			  one_esc = true;
+			  continue;
+			}
+		      else
+			break;
+		    }
+		  else
+		    continue;
+		/* For TeX files, tags without a name are basically cruft, and
+		   in some situations they can produce spurious and confusing
+		   matches.  Try to catch as many cases as possible where a
+		   command name is of the form '\(', but avoid, as far as
+		   possible, the spurious matches. */
+		if (p == cp)
+		  {
+		    switch (*p)
+		      { /* Include =? */
+		      case '(': case '[': case '"': case '\'':
+		      case '\\': case '!': case '=': case ',':
+		      case '|': case '$':
+			p++;
+			break;
+		      case '{': case '}': case '<': case '>':
+			if (!opgrp)
+			  {
+			      p++;
+			      if (*p == '\0' || *p == '%')
+				goto tex_next_line;
+			  }
+			break;
+		      default:
+			break;
+		      }
+		  }
 		namelen = p - cp;
 		linelen = lb.len;
 		if (!opgrp || *p == TEX_clgrp)
@@ -5820,9 +5968,18 @@ TeX_commands (FILE *inf)
 		      p++;
 		    linelen = p - lb.buffer + 1;
 		  }
-		make_tag (cp, namelen, true,
-			  lb.buffer, linelen, lineno, linecharno);
-		goto tex_next_line; /* We only tag a line once */
+		if (namelen)
+		  make_tag (cp, namelen, true,
+			    lb.buffer, linelen, lineno, linecharno);
+		/* Lines with more than one \def or \let are surprisingly
+		   common in TeX files, especially in the system files that
+		   form the basis of the various TeX formats.  This tags them
+		   all. */
+		/* goto tex_next_line; /\* We only tag a line once *\/ */
+		while (*cp != '\0' && *cp != '%' && *cp != TEX_esc)
+		  cp++;
+		if (*cp != TEX_esc)
+		  goto tex_next_line;
 	      }
 	}
     tex_next_line:
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 755c3db04fd..1d2d4904b06 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -2129,6 +2129,7 @@ xref--collect-matches
           (erase-buffer))
         (insert text)
         (goto-char (point-min))
+        (setq syntax-propertize--done 0)
         (xref--collect-matches-1 regexp file line
                                  (point)
                                  (point-max)
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index 97c950267c6..d990a2dbfa9 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -647,7 +647,8 @@ tex-font-lock-suscript
 		  (setq pos (1- pos) odd (not odd)))
 		odd))
     (if (eq (char-after pos) ?_)
-	`(face subscript display (raise ,(car tex-font-script-display)))
+        (unless (equal (get-text-property pos 'syntax-table) '(3))
+	  `(face subscript display (raise ,(car tex-font-script-display))))
       `(face superscript display (raise ,(cadr tex-font-script-display))))))
 
 (defun tex-font-lock-match-suscript (limit)
@@ -695,7 +696,25 @@ tex-verbatim-environments
      ("\\\\\\(?:end\\|begin\\) *\\({[^\n{}]*}\\)"
       (1 (ignore
           (tex-env-mark (match-beginning 0)
-                        (match-beginning 1) (match-end 1))))))))
+                        (match-beginning 1) (match-end 1)))))
+     ;; The next two rules change the syntax of `:' and `_' in expl3
+     ;; constructs, so that `tex-font-lock-suscript' can fontify them
+     ;; more accurately.
+     ((concat "\\(\\(?:[\\\\[:space:]{]_\\|"
+              "[\\\\{[:space:]][^][_[:space:][:cntrl:][:digit:]\\\\{}()/=]+\\)"
+              "\\(?:_+\\(?:[^][[:space:][:cntrl:][:digit:]:\\\\{}()/#_=]+\\|"
+              "#+[1-9]\\)\\)+\\)\\([:_]?\\)")
+      (1 (ignore
+          (let* ((expr (buffer-substring-no-properties (match-beginning 1)
+                                                       (match-end 1)))
+                 (list (seq-positions expr ?_)))
+            (dolist (pos list)
+              (put-text-property (+ pos (match-beginning 1))
+                                 (1+ (+ pos (match-beginning 1)))
+                                 'syntax-table (string-to-syntax "_"))))))
+      (2 "_"))
+     ("\\\\[[:alpha:]]+\\(:\\)[[:alpha:][:space:]\n]"
+      (1 "_")))))
 
 (defun tex-env-mark (cmd start end)
   (when (= cmd (line-beginning-position))
@@ -1291,6 +1310,8 @@ tex-common-initialization
 	      (syntax-propertize-rules latex-syntax-propertize-rules))
   ;; TABs in verbatim environments don't do what you think.
   (setq-local indent-tabs-mode nil)
+  ;; Set up xref backend in TeX buffers.
+  (add-hook 'xref-backend-functions #'tex--xref-backend nil t)
   ;; Other vars that should be buffer-local.
   (make-local-variable 'tex-command)
   (make-local-variable 'tex-start-of-header)
@@ -3742,6 +3763,317 @@ tex-chktex
       (process-send-region tex-chktex--process (point-min) (point-max))
       (process-send-eof tex-chktex--process))))
 
+\f
+;;; Xref backend
+
+;; Here we lightly adapt the default etags backend for xref so that
+;; the main xref user commands (including `xref-find-definitions',
+;; `xref-find-apropos', and `xref-find-references' [on M-., C-M-., and
+;; M-?, respectively]) work in TeX buffers.  The only methods we
+;; actually modify are `xref-backend-identifier-at-point' and
+;; `xref-backend-references'.  Many of the complications here, and in
+;; `etags' itself, are due to the necessity of parsing both the old
+;; TeX syntax and the new expl3 syntax, which will continue to appear
+;; together in documents for the foreseeable future.  Synchronizing
+;; Emacs and `etags' this way aims to improve the user experience "out
+;; of the box."
+
+(defvar tex-esc-and-group-chars '(?\\ ?{ ?})
+  "The current TeX escape and grouping characters.
+
+The `etags' program only recognizes `\\' (92) and `!' (33) as
+escape characters in TeX documents, and if it detects the latter
+it also uses `<>' as the TeX grouping construct rather than `{}'.
+The TeX `xref-backend-identifier-at-point' method uses these
+three characters to delimit the `thing-at-point' in TeX buffers,
+so this variable should contain at least these three, though you
+can optionally add other characters if the default set of TeX
+symbol delimiters is inadequate for your documents.  (The
+functions `tex-thingatpt--beginning-of-symbol'
+`tex-thingatpt--end-of-symbol' construct the regexp.)  Setting
+the escape and grouping chars to anything other than `\\{}' or
+`!<>' will not be useful without changes to `etags', at least for
+commands that search tags tables, such as
+\\[xref-find-definitions] and \\[xref-find-apropos].")
+
+;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
+;; AUCTeX is doing the same for its modes.
+(defvar semantic-symref-filepattern-alist)
+(with-eval-after-load 'semantic/symref/grep
+  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
+                     "*.bbl" "*.drv" "*.hva")
+        semantic-symref-filepattern-alist)
+  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
+        semantic-symref-filepattern-alist)
+  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))
+
+(defun tex--xref-backend () 'tex-etags)
+
+;; Setup AUCTeX modes (for testing purposes only).
+
+(add-hook 'TeX-mode-hook #'tex-set-auctex-xref-backend)
+
+(defun tex-set-auctex-xref-backend ()
+  (add-hook 'xref-backend-functions #'tex--xref-backend nil t))
+
+;; `xref-find-references' currently may need this when called from a
+;; latex-mode buffer in order to search files or buffers with a .tex
+;; suffix (including the buffer from which it has been called).  We
+;; append it to `auto-mode-alist' so as not to interfere with the usual
+;; mode-setting apparatus.  Changes here and in AUCTeX should soon
+;; render it unnecessary.
+(add-to-list 'auto-mode-alist '("\\.[tT]e[xX]\\'" . latex-mode) t)
+
+(cl-defmethod xref-backend-identifier-at-point ((_backend (eql 'tex-etags)))
+  (require 'etags)
+  (tex--thing-at-point))
+
+;; The detection of `_' and `:' is a primitive method for determining
+;; whether point is on an expl3 construct.  It may fail in some
+;; instances.
+(defun tex--thing-at-point ()
+  "Demarcate `thing-at-point' for TeX `xref' backend."
+  (let ((bounds (tex--bounds-of-symbol-at-point)))
+    (when bounds
+      (let ((texsym (buffer-substring-no-properties (car bounds) (cdr bounds))))
+        (if (and (not (string-match-p "reference" (symbol-name this-command)))
+                 (seq-contains-p texsym ?_)
+                 (seq-contains-p texsym ?:))
+            (seq-take texsym (seq-position texsym ?:))
+          texsym)))))
+
+(defun tex-thingatpt--beginning-of-symbol ()
+  (and
+   (re-search-backward (concat "[]["
+                               (mapconcat #'regexp-quote
+                                          (mapcar #'char-to-string
+                                                  tex-esc-and-group-chars))
+                               "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))
+   (forward-char)))
+
+(defun tex-thingatpt--end-of-symbol ()
+  (and
+   (re-search-forward (concat "[]["
+                              (mapconcat #'regexp-quote
+                                          (mapcar #'char-to-string
+                                                  tex-esc-and-group-chars))
+                              "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))
+   (backward-char)))
+
+(defun tex--bounds-of-symbol-at-point ()
+  "Simplify `bounds-of-thing-at-point' for TeX `xref' backend."
+  (let ((orig (point)))
+    (ignore-errors
+      (save-excursion
+	(tex-thingatpt--end-of-symbol)
+	(tex-thingatpt--beginning-of-symbol)
+	(let ((beg (point)))
+	  (if (<= beg orig)
+	      (let ((real-end
+		     (progn
+		       (tex-thingatpt--end-of-symbol)
+		       (point))))
+		(cond ((and (<= orig real-end) (< beg real-end))
+		       (cons beg real-end))
+                      ((and (= orig real-end) (= beg real-end))
+		       (cons beg (1+ beg)))))))))));; For 1-char TeX commands.
+
+(cl-defmethod xref-backend-identifier-completion-table ((_backend
+                                                         (eql 'tex-etags)))
+  (xref-backend-identifier-completion-table 'etags))
+
+(cl-defmethod xref-backend-identifier-completion-ignore-case ((_backend
+                                                               (eql
+                                                                'tex-etags)))
+  (xref-backend-identifier-completion-ignore-case 'etags))
+
+(cl-defmethod xref-backend-definitions ((_backend (eql 'tex-etags)) symbol)
+  (xref-backend-definitions 'etags symbol))
+
+(cl-defmethod xref-backend-apropos ((_backend (eql 'tex-etags)) pattern)
+  (xref-backend-apropos 'etags pattern))
+
+;; The `xref-backend-references' method requires more code than the
+;; others for at least two main reasons: TeX authors have typically been
+;; free in their invention of new file types with new suffixes, and they
+;; have also tended sometimes to include non-symbol characters in
+;; command names.  When combined with the default Semantic Symbol
+;; Reference API, these two characteristics of TeX code mean that a
+;; command like `xref-find-references' would often fail to find any hits
+;; for a symbol at point, including the one under point in the current
+;; buffer, or it would find only some instances and skip others.
+
+(defun tex-find-references-syntax-table ()
+  (let ((st (if (boundp 'TeX-mode-syntax-table)
+                 (make-syntax-table TeX-mode-syntax-table)
+               (make-syntax-table tex-mode-syntax-table))))
+    st))
+
+(defmacro tex-xref-syntax-function (str beg end)
+  (let* (grpb tempstr
+              (shrtstr (if end
+                           (progn
+                             (setq tempstr (seq-take str (1- (length str))))
+                             (if beg
+                                 (setq tempstr (seq-drop tempstr 1))
+                               tempstr))
+                         (seq-drop str 1)))
+              (grpa (if (and beg end)
+                        (prog1
+                            (list 1 "_")
+                          (setq grpb (list 2 "_")))
+                      (list 1 "_")))
+              (re (concat beg (regexp-quote shrtstr) end))
+              (temp-rule (if grpb
+                             (list re grpa grpb)
+                           (list re grpa))))
+    `(syntax-propertize-rules ,temp-rule)))
+
+(defun tex--collect-file-extensions ()
+  (let* ((mlist (when (rassq major-mode auto-mode-alist)
+		  (seq-filter
+		   (lambda (elt)
+		     (eq (cdr elt) major-mode))
+		   auto-mode-alist)))
+	 (lcsym (intern-soft (downcase (symbol-name major-mode))))
+	 (lclist (and lcsym
+		      (not (eq lcsym major-mode))
+		      (rassq lcsym auto-mode-alist)
+		      (seq-filter
+		       (lambda (elt)
+			 (eq (cdr elt) lcsym))
+		       auto-mode-alist)))
+	 (shortsym (when (stringp mode-name)
+		     (intern-soft (concat (string-trim-right mode-name "/.*")
+					  "-mode"))))
+	 (lcshortsym (when (stringp mode-name)
+		       (intern-soft (downcase
+				     (concat
+				      (string-trim-right mode-name "/.*")
+				      "-mode")))))
+	 (shlist (and shortsym
+		      (not (eq shortsym major-mode))
+		      (not (eq shortsym lcsym))
+		      (rassq shortsym auto-mode-alist)
+		      (seq-filter
+		       (lambda (elt)
+			 (eq (cdr elt) shortsym))
+		       auto-mode-alist)))
+	 (lcshlist (and lcshortsym
+			(not (eq lcshortsym major-mode))
+			(not (eq lcshortsym lcsym))
+			(rassq lcshortsym auto-mode-alist)
+			(seq-filter
+			 (lambda (elt)
+			   (eq (cdr elt) lcshortsym))
+			 auto-mode-alist)))
+	 (exts (when (or mlist lclist shlist lcshlist)
+		 (seq-union (seq-map #'car lclist)
+			    (seq-union (seq-map #'car mlist)
+				       (seq-union (seq-map #'car lcshlist)
+						  (seq-map #'car shlist))))))
+	 (ed-exts (when exts
+		    (seq-map
+		     (lambda (elt)
+		       (concat "*" (string-trim  elt "\\\\" "\\\\'")))
+		     exts))))
+    ed-exts))
+
+(defvar tex--buffers-list nil)
+(defvar-local tex--last-ref-syntax-flag nil)
+(defvar-local tex--old-syntax-function nil)
+
+(cl-defmethod xref-backend-references ((_backend (eql 'tex-etags)) identifier)
+  "Find references of IDENTIFIER in TeX buffers and files."
+  (require 'semantic/symref/grep)
+  (let (bufs texbufs
+             (mode major-mode))
+    (dolist (buf (buffer-list))
+      (if (eq (buffer-local-value 'major-mode buf) mode)
+          (push buf bufs)
+        (when (string-match-p ".*\\.[tT]e[xX]" (buffer-name buf))
+          (push buf texbufs))))
+    (unless (seq-set-equal-p tex--buffers-list bufs)
+      (let* ((amalist (tex--collect-file-extensions))
+	     (extlist (alist-get mode semantic-symref-filepattern-alist))
+	     (extlist-new (seq-uniq
+                           (seq-union amalist extlist #'string-match-p))))
+	(setq tex--buffers-list bufs)
+	(dolist (buf bufs)
+	  (when-let ((fbuf (buffer-file-name buf))
+		     (ext (file-name-extension fbuf))
+		     (finext (concat "*." ext))
+		     ((not (seq-find (lambda (elt) (string-match-p elt finext))
+				     extlist-new)))
+		     ((push finext extlist-new)))))
+	(unless (seq-set-equal-p extlist-new extlist)
+	  (setf (alist-get mode semantic-symref-filepattern-alist)
+                extlist-new))))
+    (let* (setsyntax
+           (punct (with-syntax-table (tex-find-references-syntax-table)
+                    (seq-positions identifier (list ?w ?_)
+			           (lambda (elt sycode)
+			             (not (memq (char-syntax elt) sycode))))))
+           (end (and punct
+                     (memq (1- (length identifier)) punct)
+                     (> (length identifier) 1)
+                     (concat "\\("
+                             (regexp-quote
+                              (string (elt identifier
+                                           (1- (length identifier)))))
+                             "\\)")))
+           (beg (and punct
+                     (memq 0 punct)
+                     (concat "\\("
+                             (regexp-quote (string (elt identifier 0)))
+                             "\\)")))
+           (text-mode-hook
+            (if (or end beg)
+                (progn
+                  (setq setsyntax (lambda ()
+		                    (setq-local syntax-propertize-function
+                                                (eval
+                                                 `(tex-xref-syntax-function
+                                                   ,identifier ,beg ,end)))
+                                    (setq-local TeX-style-hook-applied-p t)))
+                  (cons setsyntax text-mode-hook))
+              text-mode-hook)))
+      (unless (memq 'doctex-mode (derived-mode-all-parents mode))
+        (setq bufs (append texbufs bufs)))
+      (dolist (buf bufs)
+        (with-current-buffer buf
+          (if (or end beg)
+              (progn
+                (unless (local-variable-p 'tex--old-syntax-function)
+                  (setq tex--old-syntax-function syntax-propertize-function))
+                (setq-local syntax-propertize-function
+                            (eval
+                             `(tex-xref-syntax-function
+                               ,identifier ,beg ,end)))
+                (setq syntax-propertize--done 0)
+                (setq tex--last-ref-syntax-flag t))
+            ;; If we've computed a bespoke `syntax-propertize-function'
+            ;; then this returns the buffer to the status quo ante
+            ;; bellum on the next invocation of M-? that searches it.
+            (when tex--last-ref-syntax-flag
+              (setq-local syntax-propertize-function
+                          (eval
+                           `(tex-xref-syntax-function
+                             ,identifier nil nil)))
+              (setq syntax-propertize--done 0)))))
+      (unwind-protect
+          (xref-backend-references nil identifier)
+        (dolist (buf bufs)
+          (with-current-buffer buf
+            (when buffer-file-truename
+              (if (or end beg)
+                  (setq-local syntax-propertize-function
+                              tex--old-syntax-function)
+                (when tex--last-ref-syntax-flag
+                  (setq-local syntax-propertize-function
+                              tex--old-syntax-function)
+                  (setq tex--last-ref-syntax-flag nil))))))))))
+
 (make-obsolete-variable 'tex-mode-load-hook
                         "use `with-eval-after-load' instead." "28.1")
 (run-hooks 'tex-mode-load-hook)
-- 
2.35.8


^ permalink raw reply related	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-04-29 14:15                                   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-05-02  0:43                                     ` Dmitry Gutov
  2024-05-02 13:32                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-02  6:47                                     ` Arash Esbati
  2024-05-03 14:10                                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2 siblings, 1 reply; 106+ messages in thread
From: Dmitry Gutov @ 2024-05-02  0:43 UTC (permalink / raw)
  To: David Fussner, Arash Esbati
  Cc: 53749, Ikumi Keita, stefankangas, Tassilo Horn, Eli Zaretskii,
	Stefan Monnier

On 29/04/2024 17:15, David Fussner via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:
> though I had to add a one-liner in xref.el to fix
> what I believe is a minor bug there preventing syntax-propertize from
> doing its work when the temp buffer holds text from a new file. (I can
> provide a recipe for this if you want.)

Yes, could you please expand on it separately?

The rest of the patch description just makes sense to me, and I'd be 
happy to leave (or not) the detailed review to whoever reviews TeX 
contributions around here, but this is something I'll need to pay 
special attention to.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-04-29 14:15                                   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-02  0:43                                     ` Dmitry Gutov
@ 2024-05-02  6:47                                     ` Arash Esbati
  2024-05-02 13:34                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-03 14:10                                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2 siblings, 1 reply; 106+ messages in thread
From: Arash Esbati @ 2024-05-02  6:47 UTC (permalink / raw)
  To: David Fussner
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Stefan Monnier, Tassilo Horn,
	Eli Zaretskii, stefankangas

David Fussner <dfussner@googlemail.com> writes:

> Here's my third attempt at a working xref backend for TeX. I'll try
> quickly to summarize what's in it:
>
> 1. I've modified etags so that it creates findable tags for as many
> different sorts of TeX construct as possible, including those written
> in the new expl3 syntax. I've now removed the escape character from
> the tag names, as this simplifies code all around.

Hi David,

Thanks.  I trust your code works, so I have 2 minor comments.

> 5. Slightly unrelatedly, I've added new syntax-propertize-rules to
> latex-mode so that expl3 constructs with the underscore aren't
> fontified as subscripts, which makes such code unreadable. I'm happy
> to split this off as another patch.

I think this makes sense.  AFAIK, Stefan M. looks after tex-mode.el, so
he can the review it.

> @@ -5736,11 +5752,25 @@ Scheme_functions (FILE *inf)
>  static linebuffer *TEX_toktab = NULL; /* Table with tag tokens */
>  
>  /* Default set of control sequences to put into TEX_toktab.
> -   The value of environment var TEXTAGS is prepended to this.  */
> +   The value of environment var TEXTAGS is prepended to this.
> +   (2024) Add variants of '\def', some additional LaTeX (and
> +   former xparse) commands, common variants from the
> +   'etoolbox' package, and the main expl3 commands. */
>  static const char *TEX_defenv = "\
> -:chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\
> -:part:appendix:entry:index:def\
> -:newcommand:renewcommand:newenvironment:renewenvironment";
> +:label:ref:chapter:section:subsection:subsubsection:eqno:cite:bibitem\

I suggest to add 'Ref' and 'footref' as well which are part of LaTeX
kernel.

> +(defvar tex-esc-and-group-chars '(?\\ ?{ ?})

(defvar tex-esc-and-group-chars '(?\\ ?\{ ?\})

> +  "The current TeX escape and grouping characters.

Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-02  0:43                                     ` Dmitry Gutov
@ 2024-05-02 13:32                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-03 13:42                                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-07  2:06                                         ` Dmitry Gutov
  0 siblings, 2 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-02 13:32 UTC (permalink / raw)
  To: Dmitry Gutov
  Cc: 53749, Ikumi Keita, Arash Esbati, Stefan Monnier, Tassilo Horn,
	Eli Zaretskii, stefankangas

[-- Attachment #1: Type: text/plain, Size: 2558 bytes --]

Hi Dmitry,

Thanks for looking over the patch. Here's the recipe for the purported
bug in xref.el:

1. Please apply my patch to tex-mode.el (and xref.el).

2. I've attached xref-bug.zip, which contains a directory with 4
identical LaTeX files and one LaTeX file with a single additional
character. Please extract it.

3. emacs -Q

4. C-x C-f xref-bug/mwea.ltx, and please don't visit the other 4
files.

5. Put point on \__hook_debug:n in line 6.

6. M-?, RTN, ... RTN, RTN.

The xref buffer should offer 5 hits, one from each file in the
directory.

7. Comment out the the line I added to xref--collect-matches,
byte-compile and load the file.

8. With point in the same place, M-?, RTN, ... RTN, RTN.

The xref buffer should offer 3 hits. The first is from the
file-visiting buffer (where I also set syntax-propertize--done to 0,
because in my testing there could be some issues here, too). The
second hit is from the first file opened in *xref-temp. Here,
syntax-propertize runs to line-end, and all is well. The next two
files are missed, because syntax-propertize--done is set to line-end
and they have exactly the same line length as file two, and therefore
syntax-propertize thinks that's good enough and doesn't actually
change anything. The fifth file has an additional character in line 6,
so syntax-propertize decides it needs to work on this line because
line-end > syntax-propertize--done.

You can put point on, say, \documentclass, and you'll get all 5 hits,
because this string doesn't begin or end with a non-word, non-symbol
character, and syntax-propertize doesn't need to run. You can make the
search string "\documentclass" and you'll get 2 hits, as line 1 has
the same length in all 5 files. (It's worth trying "\usepackage" as
the search string, too.)

That's my diagnosis anyway. Does it make sense?

Thanks,

David.

On Thu, 2 May 2024 at 01:43, Dmitry Gutov <dgutov@yandex.ru> wrote:
>
> On 29/04/2024 17:15, David Fussner via Bug reports for GNU Emacs, the
> Swiss army knife of text editors wrote:
> > though I had to add a one-liner in xref.el to fix
> > what I believe is a minor bug there preventing syntax-propertize from
> > doing its work when the temp buffer holds text from a new file. (I can
> > provide a recipe for this if you want.)
>
> Yes, could you please expand on it separately?
>
> The rest of the patch description just makes sense to me, and I'd be
> happy to leave (or not) the detailed review to whoever reviews TeX
> contributions around here, but this is something I'll need to pay
> special attention to.

[-- Attachment #2: xref-bug.zip --]
[-- Type: application/zip, Size: 1588 bytes --]

^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-02  6:47                                     ` Arash Esbati
@ 2024-05-02 13:34                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-02 13:34 UTC (permalink / raw)
  To: Arash Esbati
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Stefan Monnier, Tassilo Horn,
	Eli Zaretskii, stefankangas

Thanks for the review, Arash, and I'll make those changes.

Best, David.

On Thu, 2 May 2024 at 07:47, Arash Esbati <arash@gnu.org> wrote:
>
> David Fussner <dfussner@googlemail.com> writes:
>
> > Here's my third attempt at a working xref backend for TeX. I'll try
> > quickly to summarize what's in it:
> >
> > 1. I've modified etags so that it creates findable tags for as many
> > different sorts of TeX construct as possible, including those written
> > in the new expl3 syntax. I've now removed the escape character from
> > the tag names, as this simplifies code all around.
>
> Hi David,
>
> Thanks.  I trust your code works, so I have 2 minor comments.
>
> > 5. Slightly unrelatedly, I've added new syntax-propertize-rules to
> > latex-mode so that expl3 constructs with the underscore aren't
> > fontified as subscripts, which makes such code unreadable. I'm happy
> > to split this off as another patch.
>
> I think this makes sense.  AFAIK, Stefan M. looks after tex-mode.el, so
> he can the review it.
>
> > @@ -5736,11 +5752,25 @@ Scheme_functions (FILE *inf)
> >  static linebuffer *TEX_toktab = NULL; /* Table with tag tokens */
> >
> >  /* Default set of control sequences to put into TEX_toktab.
> > -   The value of environment var TEXTAGS is prepended to this.  */
> > +   The value of environment var TEXTAGS is prepended to this.
> > +   (2024) Add variants of '\def', some additional LaTeX (and
> > +   former xparse) commands, common variants from the
> > +   'etoolbox' package, and the main expl3 commands. */
> >  static const char *TEX_defenv = "\
> > -:chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\
> > -:part:appendix:entry:index:def\
> > -:newcommand:renewcommand:newenvironment:renewenvironment";
> > +:label:ref:chapter:section:subsection:subsubsection:eqno:cite:bibitem\
>
> I suggest to add 'Ref' and 'footref' as well which are part of LaTeX
> kernel.
>
> > +(defvar tex-esc-and-group-chars '(?\\ ?{ ?})
>
> (defvar tex-esc-and-group-chars '(?\\ ?\{ ?\})
>
> > +  "The current TeX escape and grouping characters.
>
> Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-02 13:32                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-05-03 13:42                                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-07  2:27                                           ` Dmitry Gutov
  2024-05-07  2:06                                         ` Dmitry Gutov
  1 sibling, 1 reply; 106+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-03 13:42 UTC (permalink / raw)
  To: David Fussner
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Arash Esbati, stefankangas,
	Tassilo Horn, Eli Zaretskii

> Thanks for looking over the patch. Here's the recipe for the purported
> bug in xref.el:

The problem stems from xref.el's constant abuse of
`inhibit-modification-hooks`.  Binding this var to t should be done only
in exceptional circumstances and should ideally be accompanied by a
comment explaining why it's necessary.


        Stefan






^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-04-29 14:15                                   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-02  0:43                                     ` Dmitry Gutov
  2024-05-02  6:47                                     ` Arash Esbati
@ 2024-05-03 14:10                                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-04  8:26                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
                                                         ` (3 more replies)
  2 siblings, 4 replies; 106+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-03 14:10 UTC (permalink / raw)
  To: David Fussner
  Cc: 53749, Ikumi Keita, Tassilo Horn, Arash Esbati, stefankangas,
	Dmitry Gutov, Eli Zaretskii

Hi,

Apparently I'm the `tex-mode.el` guy, so I tried to take a look.

> diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
> index 97c950267c6..d990a2dbfa9 100644
> --- a/lisp/textmodes/tex-mode.el
> +++ b/lisp/textmodes/tex-mode.el
> @@ -695,7 +696,25 @@ tex-verbatim-environments
>       ("\\\\\\(?:end\\|begin\\) *\\({[^\n{}]*}\\)"
>        (1 (ignore
>            (tex-env-mark (match-beginning 0)
> -                        (match-beginning 1) (match-end 1))))))))
> +                        (match-beginning 1) (match-end 1)))))
> +     ;; The next two rules change the syntax of `:' and `_' in expl3
> +     ;; constructs, so that `tex-font-lock-suscript' can fontify them
> +     ;; more accurately.
> +     ((concat "\\(\\(?:[\\\\[:space:]{]_\\|"
> +              "[\\\\{[:space:]][^][_[:space:][:cntrl:][:digit:]\\\\{}()/=]+\\)"
> +              "\\(?:_+\\(?:[^][[:space:][:cntrl:][:digit:]:\\\\{}()/#_=]+\\|"
> +              "#+[1-9]\\)\\)+\\)\\([:_]?\\)")

Can you add in the comment some URL pointing to some relevant expl3
documentation which "explains" why the above regexp makes sense?
Also I don't clearly see how the above regexp distinguishes expl3 code
from "normal" LaTeX code, so the comment should say something about it.

Side note: I'd avoid [:space:] whose exact meaning is rarely quite what
we need.
Side note: backslash doesn't need to be backslashed in [...].

> +      (1 (ignore
> +          (let* ((expr (buffer-substring-no-properties (match-beginning 1)
> +                                                       (match-end 1)))
> +                 (list (seq-positions expr ?_)))
> +            (dolist (pos list)
> +              (put-text-property (+ pos (match-beginning 1))
> +                                 (1+ (+ pos (match-beginning 1)))
> +                                 'syntax-table (string-to-syntax "_"))))))
> +      (2 "_"))
> +     ("\\\\[[:alpha:]]+\\(:\\)[[:alpha:][:space:]\n]"
> +      (1 "_")))))

Currently we "skip" inappropriate underscores via
`tex-font-lock-match-suscript` and/or by adding a particular `face` text
property rather than via `syntax-table/propertize`.

For algorithmic reasons, it's better to minimize the work done in
`syntax-propertize-function` as much as possible (font-lock is more lazy
than `syntax-propertize`), so I recommend you try and moving the above
to font-lock rules.

> +(defvar tex-esc-and-group-chars '(?\\ ?{ ?})
> +  "The current TeX escape and grouping characters.

I recommend you backslash escape the { and } above (although it's not
indispensable, `emacs-lisp-mode` will parse the code better).
More importantly, the docstring doesn't explain what this list
means/does.  E.g. does the order matter?  Can it be longer than 3 elements?

From the current docstring I can't guess what would be the consequence
of adding/removing elements to/from this list.

> +;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
> +;; AUCTeX is doing the same for its modes.
> +(defvar semantic-symref-filepattern-alist)
> +(with-eval-after-load 'semantic/symref/grep
> +  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
> +                     "*.bbl" "*.drv" "*.hva")
> +        semantic-symref-filepattern-alist)
> +  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
> +        semantic-symref-filepattern-alist)
> +  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))

We know `semantic-symref-filepattern-alist` will exist when
`semantic/symref/grep` is loaded, but not before, so I'd put the
`defvar` inside the `with-eval-after-load`.

> +;; Setup AUCTeX modes (for testing purposes only).
> +
> +(add-hook 'TeX-mode-hook #'tex-set-auctex-xref-backend)
> +
> +(defun tex-set-auctex-xref-backend ()
> +  (add-hook 'xref-backend-functions #'tex--xref-backend nil t))

I assume this will be sent to AUCTeX and is not meant to be in
`tex-mode.el`, right?

> +;; `xref-find-references' currently may need this when called from a
> +;; latex-mode buffer in order to search files or buffers with a .tex
> +;; suffix (including the buffer from which it has been called).  We
> +;; append it to `auto-mode-alist' so as not to interfere with the usual
> +;; mode-setting apparatus.  Changes here and in AUCTeX should soon
> +;; render it unnecessary.
> +(add-to-list 'auto-mode-alist '("\\.[tT]e[xX]\\'" . latex-mode) t)

Maybe I have not followed the whole discussion closely enough, but at
least to me the above "soon" is very unclear.
I'll assume that this code will be removed before we install the patch.
If not, please explain in the comment why this specific hack is needed
and how it works.

> +(cl-defmethod xref-backend-references ((_backend (eql 'tex-etags)) identifier)
> +  "Find references of IDENTIFIER in TeX buffers and files."
> +  (require 'semantic/symref/grep)
> +  (let (bufs texbufs
> +             (mode major-mode))
> +    (dolist (buf (buffer-list))
> +      (if (eq (buffer-local-value 'major-mode buf) mode)
> +          (push buf bufs)
> +        (when (string-match-p ".*\\.[tT]e[xX]" (buffer-name buf))
> +          (push buf texbufs))))
> +    (unless (seq-set-equal-p tex--buffers-list bufs)
> +      (let* ((amalist (tex--collect-file-extensions))
> +	     (extlist (alist-get mode semantic-symref-filepattern-alist))
> +	     (extlist-new (seq-uniq
> +                           (seq-union amalist extlist #'string-match-p))))

After sinking the `defvar` above, you'll need to add a new `defvar` for
`semantic-symref-filepattern-alist` just after the `require`.

> +                (setq-local syntax-propertize-function
> +                            (eval
> +                             `(tex-xref-syntax-function
> +                               ,identifier ,beg ,end)))

Why do we need to change `syntax-propertize-function` and why do we need
`eval`?

> +                (setq syntax-propertize--done 0)

This is not sufficient.  You want to `syntax-ppss-flush-cache`.


        Stefan






^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-03 14:10                                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-05-04  8:26                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-04 14:32                                       ` Arash Esbati
                                                         ` (2 subsequent siblings)
  3 siblings, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-04  8:26 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: 53749, Ikumi Keita, Tassilo Horn, Arash Esbati, stefankangas,
	Dmitry Gutov, Eli Zaretskii

Thank you very much, Stefan, for taking the time to review the patch.
In short, it plainly needs some work, but I'm rather short of time
this weekend so will respond properly and I hope more coherently
Monday or Tuesday.

Best, David.

On Fri, 3 May 2024 at 15:11, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>
> Hi,
>
> Apparently I'm the `tex-mode.el` guy, so I tried to take a look.
>
> > diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
> > index 97c950267c6..d990a2dbfa9 100644
> > --- a/lisp/textmodes/tex-mode.el
> > +++ b/lisp/textmodes/tex-mode.el
> > @@ -695,7 +696,25 @@ tex-verbatim-environments
> >       ("\\\\\\(?:end\\|begin\\) *\\({[^\n{}]*}\\)"
> >        (1 (ignore
> >            (tex-env-mark (match-beginning 0)
> > -                        (match-beginning 1) (match-end 1))))))))
> > +                        (match-beginning 1) (match-end 1)))))
> > +     ;; The next two rules change the syntax of `:' and `_' in expl3
> > +     ;; constructs, so that `tex-font-lock-suscript' can fontify them
> > +     ;; more accurately.
> > +     ((concat "\\(\\(?:[\\\\[:space:]{]_\\|"
> > +              "[\\\\{[:space:]][^][_[:space:][:cntrl:][:digit:]\\\\{}()/=]+\\)"
> > +              "\\(?:_+\\(?:[^][[:space:][:cntrl:][:digit:]:\\\\{}()/#_=]+\\|"
> > +              "#+[1-9]\\)\\)+\\)\\([:_]?\\)")
>
> Can you add in the comment some URL pointing to some relevant expl3
> documentation which "explains" why the above regexp makes sense?
> Also I don't clearly see how the above regexp distinguishes expl3 code
> from "normal" LaTeX code, so the comment should say something about it.
>
> Side note: I'd avoid [:space:] whose exact meaning is rarely quite what
> we need.
> Side note: backslash doesn't need to be backslashed in [...].
>
> > +      (1 (ignore
> > +          (let* ((expr (buffer-substring-no-properties (match-beginning 1)
> > +                                                       (match-end 1)))
> > +                 (list (seq-positions expr ?_)))
> > +            (dolist (pos list)
> > +              (put-text-property (+ pos (match-beginning 1))
> > +                                 (1+ (+ pos (match-beginning 1)))
> > +                                 'syntax-table (string-to-syntax "_"))))))
> > +      (2 "_"))
> > +     ("\\\\[[:alpha:]]+\\(:\\)[[:alpha:][:space:]\n]"
> > +      (1 "_")))))
>
> Currently we "skip" inappropriate underscores via
> `tex-font-lock-match-suscript` and/or by adding a particular `face` text
> property rather than via `syntax-table/propertize`.
>
> For algorithmic reasons, it's better to minimize the work done in
> `syntax-propertize-function` as much as possible (font-lock is more lazy
> than `syntax-propertize`), so I recommend you try and moving the above
> to font-lock rules.
>
> > +(defvar tex-esc-and-group-chars '(?\\ ?{ ?})
> > +  "The current TeX escape and grouping characters.
>
> I recommend you backslash escape the { and } above (although it's not
> indispensable, `emacs-lisp-mode` will parse the code better).
> More importantly, the docstring doesn't explain what this list
> means/does.  E.g. does the order matter?  Can it be longer than 3 elements?
>
> From the current docstring I can't guess what would be the consequence
> of adding/removing elements to/from this list.
>
> > +;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
> > +;; AUCTeX is doing the same for its modes.
> > +(defvar semantic-symref-filepattern-alist)
> > +(with-eval-after-load 'semantic/symref/grep
> > +  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
> > +                     "*.bbl" "*.drv" "*.hva")
> > +        semantic-symref-filepattern-alist)
> > +  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
> > +        semantic-symref-filepattern-alist)
> > +  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))
>
> We know `semantic-symref-filepattern-alist` will exist when
> `semantic/symref/grep` is loaded, but not before, so I'd put the
> `defvar` inside the `with-eval-after-load`.
>
> > +;; Setup AUCTeX modes (for testing purposes only).
> > +
> > +(add-hook 'TeX-mode-hook #'tex-set-auctex-xref-backend)
> > +
> > +(defun tex-set-auctex-xref-backend ()
> > +  (add-hook 'xref-backend-functions #'tex--xref-backend nil t))
>
> I assume this will be sent to AUCTeX and is not meant to be in
> `tex-mode.el`, right?
>
> > +;; `xref-find-references' currently may need this when called from a
> > +;; latex-mode buffer in order to search files or buffers with a .tex
> > +;; suffix (including the buffer from which it has been called).  We
> > +;; append it to `auto-mode-alist' so as not to interfere with the usual
> > +;; mode-setting apparatus.  Changes here and in AUCTeX should soon
> > +;; render it unnecessary.
> > +(add-to-list 'auto-mode-alist '("\\.[tT]e[xX]\\'" . latex-mode) t)
>
> Maybe I have not followed the whole discussion closely enough, but at
> least to me the above "soon" is very unclear.
> I'll assume that this code will be removed before we install the patch.
> If not, please explain in the comment why this specific hack is needed
> and how it works.
>
> > +(cl-defmethod xref-backend-references ((_backend (eql 'tex-etags)) identifier)
> > +  "Find references of IDENTIFIER in TeX buffers and files."
> > +  (require 'semantic/symref/grep)
> > +  (let (bufs texbufs
> > +             (mode major-mode))
> > +    (dolist (buf (buffer-list))
> > +      (if (eq (buffer-local-value 'major-mode buf) mode)
> > +          (push buf bufs)
> > +        (when (string-match-p ".*\\.[tT]e[xX]" (buffer-name buf))
> > +          (push buf texbufs))))
> > +    (unless (seq-set-equal-p tex--buffers-list bufs)
> > +      (let* ((amalist (tex--collect-file-extensions))
> > +          (extlist (alist-get mode semantic-symref-filepattern-alist))
> > +          (extlist-new (seq-uniq
> > +                           (seq-union amalist extlist #'string-match-p))))
>
> After sinking the `defvar` above, you'll need to add a new `defvar` for
> `semantic-symref-filepattern-alist` just after the `require`.
>
> > +                (setq-local syntax-propertize-function
> > +                            (eval
> > +                             `(tex-xref-syntax-function
> > +                               ,identifier ,beg ,end)))
>
> Why do we need to change `syntax-propertize-function` and why do we need
> `eval`?
>
> > +                (setq syntax-propertize--done 0)
>
> This is not sufficient.  You want to `syntax-ppss-flush-cache`.
>
>
>         Stefan
>





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-03 14:10                                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-04  8:26                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-05-04 14:32                                       ` Arash Esbati
  2024-05-04 14:54                                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-07 13:15                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-15 15:47                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  3 siblings, 1 reply; 106+ messages in thread
From: Arash Esbati @ 2024-05-04 14:32 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: 53749, Ikumi Keita, Dmitry Gutov, David Fussner, stefankangas,
	Tassilo Horn, Eli Zaretskii

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
>> index 97c950267c6..d990a2dbfa9 100644
>> --- a/lisp/textmodes/tex-mode.el
>> +++ b/lisp/textmodes/tex-mode.el
>> @@ -695,7 +696,25 @@ tex-verbatim-environments
>>       ("\\\\\\(?:end\\|begin\\) *\\({[^\n{}]*}\\)"
>>        (1 (ignore
>>            (tex-env-mark (match-beginning 0)
>> -                        (match-beginning 1) (match-end 1))))))))
>> +                        (match-beginning 1) (match-end 1)))))
>> +     ;; The next two rules change the syntax of `:' and `_' in expl3
>> +     ;; constructs, so that `tex-font-lock-suscript' can fontify them
>> +     ;; more accurately.
>> +     ((concat "\\(\\(?:[\\\\[:space:]{]_\\|"
>> +              "[\\\\{[:space:]][^][_[:space:][:cntrl:][:digit:]\\\\{}()/=]+\\)"
>> +              "\\(?:_+\\(?:[^][[:space:][:cntrl:][:digit:]:\\\\{}()/#_=]+\\|"
>> +              "#+[1-9]\\)\\)+\\)\\([:_]?\\)")
>
> Can you add in the comment some URL pointing to some relevant expl3
> documentation which "explains" why the above regexp makes sense?
> Also I don't clearly see how the above regexp distinguishes expl3 code
> from "normal" LaTeX code, so the comment should say something about
> it.

FWIW, I'm not sure if there is an URL for that, but in interface3.pdf,
chap.1, you'll find:

    1.1 Naming functions and variables

    LATEX3 does not use @ as a "letter"" for defining internal macros.
    Instead, the symbols _ and : are used in internal macro names to provide
    structure. The name of each function is divided into logical units using
    _, while : separates the name of the function from the argument
    specifier ("arg-spec"). This describes the arguments expected by the
    function. In most cases, each argument is represented by a single
    letter. The complete list of arg-spec letters for a function is referred
    to as the signature of the function.

So expect things like this:

    \tl_set:Nn \l_mya_tl { A }
    \tl_set:Nn \l_myb_tl { B }
    \tl_set:Nf \l_mya_tl { \l_mya_tl \l_myb_tl }

>> +;; Setup AUCTeX modes (for testing purposes only).
>> +
>> +(add-hook 'TeX-mode-hook #'tex-set-auctex-xref-backend)
>> +
>> +(defun tex-set-auctex-xref-backend ()
>> +  (add-hook 'xref-backend-functions #'tex--xref-backend nil t))
>
> I assume this will be sent to AUCTeX and is not meant to be in
> `tex-mode.el`, right?

That would have been a question from my side, but I saw that "testing
purposes only" and skipped it for this round.

Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-04 14:32                                       ` Arash Esbati
@ 2024-05-04 14:54                                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-04 21:15                                           ` Arash Esbati
  0 siblings, 1 reply; 106+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-04 14:54 UTC (permalink / raw)
  To: Arash Esbati
  Cc: 53749, Ikumi Keita, Dmitry Gutov, David Fussner, stefankangas,
	Tassilo Horn, Eli Zaretskii

> FWIW, I'm not sure if there is an URL for that, but in interface3.pdf,
> chap.1, you'll find:
[...]
> So expect things like this:
>
>     \tl_set:Nn \l_mya_tl { A }
>     \tl_set:Nn \l_myb_tl { B }
>     \tl_set:Nf \l_mya_tl { \l_mya_tl \l_myb_tl }

But that is *also* valid LaTeX, with a different meaning (i.e. where
`_` has its subscript meaning).  So we need some other info in order to
know which of the two we're dealing with.

Maybe that info is simply "assume LaTeX3 if the _ is followed by several
letters" or some such heuristic, but the comment should say so.


        Stefan






^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-04 14:54                                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-05-04 21:15                                           ` Arash Esbati
  0 siblings, 0 replies; 106+ messages in thread
From: Arash Esbati @ 2024-05-04 21:15 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: 53749, Ikumi Keita, Dmitry Gutov, David Fussner, stefankangas,
	Tassilo Horn, Eli Zaretskii

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> But that is *also* valid LaTeX, with a different meaning (i.e. where
> `_` has its subscript meaning).  So we need some other info in order to
> know which of the two we're dealing with.

That's true.  AFAIK, one has to deal with:

  • \_ in ordinary text like foo\_bar
  • _ in math mode like $a_b$
  • expl3 macros like \tl_set:Nn
  • expl3 macros like \__kernel_kern:n

> Maybe that info is simply "assume LaTeX3 if the _ is followed by several
> letters" or some such heuristic, but the comment should say so.

Last time I looked at this, my conclusion was: Deal with \_ and _ in
usual .tex files and expect expl3 macros in .dtx file only.

Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-02 13:32                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-03 13:42                                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-05-07  2:06                                         ` Dmitry Gutov
  1 sibling, 0 replies; 106+ messages in thread
From: Dmitry Gutov @ 2024-05-07  2:06 UTC (permalink / raw)
  To: David Fussner
  Cc: 53749, Ikumi Keita, Arash Esbati, Stefan Monnier, Tassilo Horn,
	Eli Zaretskii, stefankangas

On 02/05/2024 16:32, David Fussner via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:
> Hi Dmitry,
> 
> Thanks for looking over the patch. Here's the recipe for the purported
> bug in xref.el:
> 
> 1. Please apply my patch to tex-mode.el (and xref.el).
> 
> 2. I've attached xref-bug.zip, which contains a directory with 4
> identical LaTeX files and one LaTeX file with a single additional
> character. Please extract it.
> 
> 3. emacs -Q
> 
> 4. C-x C-f xref-bug/mwea.ltx, and please don't visit the other 4
> files.
> 
> 5. Put point on \__hook_debug:n in line 6.
> 
> 6. M-?, RTN, ... RTN, RTN.
> 
> The xref buffer should offer 5 hits, one from each file in the
> directory.
> 
> 7. Comment out the the line I added to xref--collect-matches,
> byte-compile and load the file.
> 
> 8. With point in the same place, M-?, RTN, ... RTN, RTN.
> 
> The xref buffer should offer 3 hits. The first is from the
> file-visiting buffer (where I also set syntax-propertize--done to 0,
> because in my testing there could be some issues here, too). The
> second hit is from the first file opened in *xref-temp. Here,
> syntax-propertize runs to line-end, and all is well. The next two
> files are missed, because syntax-propertize--done is set to line-end
> and they have exactly the same line length as file two, and therefore
> syntax-propertize thinks that's good enough and doesn't actually
> change anything. The fifth file has an additional character in line 6,
> so syntax-propertize decides it needs to work on this line because
> line-end > syntax-propertize--done.
> 
> You can put point on, say, \documentclass, and you'll get all 5 hits,
> because this string doesn't begin or end with a non-word, non-symbol
> character, and syntax-propertize doesn't need to run. You can make the
> search string "\documentclass" and you'll get 2 hits, as line 1 has
> the same length in all 5 files. (It's worth trying "\usepackage" as
> the search string, too.)
> 
> That's my diagnosis anyway. Does it make sense?

Thank you, David, for the thorough scenario. I see the problem now.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-03 13:42                                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-05-07  2:27                                           ` Dmitry Gutov
  2024-05-09  3:00                                             ` Dmitry Gutov
  0 siblings, 1 reply; 106+ messages in thread
From: Dmitry Gutov @ 2024-05-07  2:27 UTC (permalink / raw)
  To: Stefan Monnier, David Fussner
  Cc: 53749, Ikumi Keita, Arash Esbati, stefankangas, Tassilo Horn,
	Eli Zaretskii

On 03/05/2024 16:42, Stefan Monnier via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:
>> Thanks for looking over the patch. Here's the recipe for the purported
>> bug in xref.el:
> The problem stems from xref.el's constant abuse of
> `inhibit-modification-hooks`.  Binding this var to t should be done only
> in exceptional circumstances and should ideally be accompanied by a
> comment explaining why it's necessary.

Well, the reason is performance: I've tried to wring out the most out of 
it, given that we have to parse the buffer for syntax in Elisp, and 
that'll always have a certain overhead.

The difference between inhibiting and not could be up to 20% of runtime.

David's fix makes things slower (just due to having us do the necessary 
work), but still has an edge over having no inhibit-modification-hooks.

That remaining improvement is around 4-7% in my testing, though, so 
maybe it's the point where we should prioritize simplicity.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-03 14:10                                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-04  8:26                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-04 14:32                                       ` Arash Esbati
@ 2024-05-07 13:15                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-15 15:47                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  3 siblings, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-07 13:15 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: 53749, Ikumi Keita, Tassilo Horn, Arash Esbati, stefankangas,
	Dmitry Gutov, Eli Zaretskii

[-- Attachment #1: Type: text/plain, Size: 12692 bytes --]

Hi Stefan,

I apologize in advance if my reply gets lengthy.

> Also I don't clearly see how the above regexp distinguishes expl3 code
> from "normal" LaTeX code, so the comment should say something about it.

You are quite right that the regexp can (and does) match "normal"
LaTeX code, and I can see that this isn't acceptable as it stands. The
only way to be sure about ":" and "_" is to determine whether they're
inside a matched pair of \ExplSyntaxOn \ExplSyntaxOff macros (or in a
file which does something like \ProvidesExpl[File|Class]). The file
case can, I think, be sorted by modifying the syntax table as part of
setting up the relevant major modes. The temporary toggling of
ExplSyntax is trickier, but I have some proof-of-concept code that
adds a function to the `syntax-propertize-extend-region-functions'
hook that creates a list (`tex-expl-region-list`) of the start and end
of all such regions in a buffer and updates it whenever
`syntax-propertize` runs. In the `syntax-propertize-function` we test
whether hits are inside one of these regions and only change the
syntax when they are. (A very lightly-tested and incomplete patch on
top of my earlier patch is attached. It only applies to the "_" now,
but would need extending to the other sub-matches, too.)

> Currently we "skip" inappropriate underscores via
> `tex-font-lock-match-suscript` and/or by adding a particular `face` text
> property rather than via `syntax-table/propertize`.
>
> For algorithmic reasons, it's better to minimize the work done in
> `syntax-propertize-function` as much as possible (font-lock is more lazy
> than `syntax-propertize`), so I recommend you try and moving the above
> to font-lock rules.

The reason I've been using `syntax-propertize` rather than `font-lock`
is because the former may confer advantages when using
`xref-find-references`, but that in turn depends on how we decide to
define that function in the `tex-etags` backend. Please see below. In
any case, I think I can easily use `tex-expl-region-list` in a test
for how to fontify "_", so if you don't object to the addition of
`tex-expl-region-set` to the
`syntax-propertize-extend-region-functions' hook then we should be
able to get pretty close to a rigorous demarcation between "normal"
LaTeX and expl3 code in this context.

> > +                (setq-local syntax-propertize-function
> > +                            (eval
> > +                             `(tex-xref-syntax-function
> > +                               ,identifier ,beg ,end)))
>
> Why do we need to change `syntax-propertize-function` and why do we need
> `eval`?
>
> > +                (setq syntax-propertize--done 0)
>
> This is not sufficient.  You want to `syntax-ppss-flush-cache`.

We only need `eval` because I'm confused about the handling of macros
-- I have some code in progress to fix this. As for why we need to
change `syntax-propertize-function`, that's the core of the issue with
`xref-find-references`. In the current patch, the wrapper for the
standard `xref-backend-references` gathers file extensions and also
tests whether the search string begins and/or ends with a non-word,
non-symbol character. In `xref-references-in-directory` the only hits
offered to the user match (format "\\_<%s\\_>" ...), so I create a
bespoke `syntax-propertize-function` to ensure that the search string
matches that format. (Actually, I would need to improve that to cope
with searches for "\command" in code that looks like
"\let\command\othercommand" -- even when the "\" has the right syntax
the search fails because the "t" in "let" doesn't.)

My mental model for `syntax-propertize` was/is insufficient, as you
point out, so your improvement ensures that buffers return to the
status quo ante after the search is complete, but it's still an open
question whether we want to do this at all. I see at least 3 options:

1. The maximalist approach, which tries to ensure that any TeX symbol
may be searched for successfully, even if the syntax of its components
is inconvenient. My patch is a (faulty) attempt at this.

2. The minimalist approach, providing no bespoke
`syntax-propertize-function`, and accepting failure when searching
some strings, especially strings which aren't offered up by
default. (In the above example, "command" would be the default offered
up, so manual intervention is needed to search for "\command".) In
this case I'd be very keen to have the expl3 "_" and ":" code actually
in `syntax-propertize`, because then searches for expl3 constructs
(without the "\") would work. (I'd also be very keen on having
something similar in AUCTeX, though their current method works fine in
most files.)

3. The non-standard approach, the `tex-etags` backend calling a
variant of `project-find-regexp` instead of `xref-backend-references`
when someone presses M-?. We could supply file extensions to search,
as now, and allow the choice of projects and/or directories, as now,
but the output will always be very non-standard, more like
`xref-backend-apropos` than `xref-backend-references`. The syntax of
the search string won't matter, and the problem will be "too many
hits" rather than "too few or none".

If you have any thoughts on the matter I'd be all ears.

> > +(add-to-list 'auto-mode-alist '("\\.[tT]e[xX]\\'" . latex-mode) t)
>
> Maybe I have not followed the whole discussion closely enough, but at
> least to me the above "soon" is very unclear.
> I'll assume that this code will be removed before we install the patch.
> If not, please explain in the comment why this specific hack is needed
> and how it works.

As soon as AUCTeX has "*.[tT]e[xX]" in its contributions to
`semantic-symref-filepattern-alist` this will be redundant. As it
stands, not searching *.tex files for symbols in LaTeX-mode buffers
is kind of terrible.

> > +;; Setup AUCTeX modes (for testing purposes only).
> > +
> > +(add-hook 'TeX-mode-hook #'tex-set-auctex-xref-backend)
> > +
> > +(defun tex-set-auctex-xref-backend ()
> > +  (add-hook 'xref-backend-functions #'tex--xref-backend nil t))
>
> I assume this will be sent to AUCTeX and is not meant to be in
> `tex-mode.el`, right?

Yes.

Please assume I agree with all of your other corrections and
clarifications, and that I'll modify the patch accordingly. Once
again, thank you for the careful review, and my apologies for
occupying too much of your time.

Best, David.

On Fri, 3 May 2024 at 15:11, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>
> Hi,
>
> Apparently I'm the `tex-mode.el` guy, so I tried to take a look.
>
> > diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
> > index 97c950267c6..d990a2dbfa9 100644
> > --- a/lisp/textmodes/tex-mode.el
> > +++ b/lisp/textmodes/tex-mode.el
> > @@ -695,7 +696,25 @@ tex-verbatim-environments
> >       ("\\\\\\(?:end\\|begin\\) *\\({[^\n{}]*}\\)"
> >        (1 (ignore
> >            (tex-env-mark (match-beginning 0)
> > -                        (match-beginning 1) (match-end 1))))))))
> > +                        (match-beginning 1) (match-end 1)))))
> > +     ;; The next two rules change the syntax of `:' and `_' in expl3
> > +     ;; constructs, so that `tex-font-lock-suscript' can fontify them
> > +     ;; more accurately.
> > +     ((concat "\\(\\(?:[\\\\[:space:]{]_\\|"
> > +              "[\\\\{[:space:]][^][_[:space:][:cntrl:][:digit:]\\\\{}()/=]+\\)"
> > +              "\\(?:_+\\(?:[^][[:space:][:cntrl:][:digit:]:\\\\{}()/#_=]+\\|"
> > +              "#+[1-9]\\)\\)+\\)\\([:_]?\\)")
>
> Can you add in the comment some URL pointing to some relevant expl3
> documentation which "explains" why the above regexp makes sense?
> Also I don't clearly see how the above regexp distinguishes expl3 code
> from "normal" LaTeX code, so the comment should say something about it.
>
> Side note: I'd avoid [:space:] whose exact meaning is rarely quite what
> we need.
> Side note: backslash doesn't need to be backslashed in [...].
>
> > +      (1 (ignore
> > +          (let* ((expr (buffer-substring-no-properties (match-beginning 1)
> > +                                                       (match-end 1)))
> > +                 (list (seq-positions expr ?_)))
> > +            (dolist (pos list)
> > +              (put-text-property (+ pos (match-beginning 1))
> > +                                 (1+ (+ pos (match-beginning 1)))
> > +                                 'syntax-table (string-to-syntax "_"))))))
> > +      (2 "_"))
> > +     ("\\\\[[:alpha:]]+\\(:\\)[[:alpha:][:space:]\n]"
> > +      (1 "_")))))
>
> Currently we "skip" inappropriate underscores via
> `tex-font-lock-match-suscript` and/or by adding a particular `face` text
> property rather than via `syntax-table/propertize`.
>
> For algorithmic reasons, it's better to minimize the work done in
> `syntax-propertize-function` as much as possible (font-lock is more lazy
> than `syntax-propertize`), so I recommend you try and moving the above
> to font-lock rules.
>
> > +(defvar tex-esc-and-group-chars '(?\\ ?{ ?})
> > +  "The current TeX escape and grouping characters.
>
> I recommend you backslash escape the { and } above (although it's not
> indispensable, `emacs-lisp-mode` will parse the code better).
> More importantly, the docstring doesn't explain what this list
> means/does.  E.g. does the order matter?  Can it be longer than 3 elements?
>
> From the current docstring I can't guess what would be the consequence
> of adding/removing elements to/from this list.
>
> > +;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
> > +;; AUCTeX is doing the same for its modes.
> > +(defvar semantic-symref-filepattern-alist)
> > +(with-eval-after-load 'semantic/symref/grep
> > +  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
> > +                     "*.bbl" "*.drv" "*.hva")
> > +        semantic-symref-filepattern-alist)
> > +  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
> > +        semantic-symref-filepattern-alist)
> > +  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))
>
> We know `semantic-symref-filepattern-alist` will exist when
> `semantic/symref/grep` is loaded, but not before, so I'd put the
> `defvar` inside the `with-eval-after-load`.
>
> > +;; Setup AUCTeX modes (for testing purposes only).
> > +
> > +(add-hook 'TeX-mode-hook #'tex-set-auctex-xref-backend)
> > +
> > +(defun tex-set-auctex-xref-backend ()
> > +  (add-hook 'xref-backend-functions #'tex--xref-backend nil t))
>
> I assume this will be sent to AUCTeX and is not meant to be in
> `tex-mode.el`, right?
>
> > +;; `xref-find-references' currently may need this when called from a
> > +;; latex-mode buffer in order to search files or buffers with a .tex
> > +;; suffix (including the buffer from which it has been called).  We
> > +;; append it to `auto-mode-alist' so as not to interfere with the usual
> > +;; mode-setting apparatus.  Changes here and in AUCTeX should soon
> > +;; render it unnecessary.
> > +(add-to-list 'auto-mode-alist '("\\.[tT]e[xX]\\'" . latex-mode) t)
>
> Maybe I have not followed the whole discussion closely enough, but at
> least to me the above "soon" is very unclear.
> I'll assume that this code will be removed before we install the patch.
> If not, please explain in the comment why this specific hack is needed
> and how it works.
>
> > +(cl-defmethod xref-backend-references ((_backend (eql 'tex-etags)) identifier)
> > +  "Find references of IDENTIFIER in TeX buffers and files."
> > +  (require 'semantic/symref/grep)
> > +  (let (bufs texbufs
> > +             (mode major-mode))
> > +    (dolist (buf (buffer-list))
> > +      (if (eq (buffer-local-value 'major-mode buf) mode)
> > +          (push buf bufs)
> > +        (when (string-match-p ".*\\.[tT]e[xX]" (buffer-name buf))
> > +          (push buf texbufs))))
> > +    (unless (seq-set-equal-p tex--buffers-list bufs)
> > +      (let* ((amalist (tex--collect-file-extensions))
> > +          (extlist (alist-get mode semantic-symref-filepattern-alist))
> > +          (extlist-new (seq-uniq
> > +                           (seq-union amalist extlist #'string-match-p))))
>
> After sinking the `defvar` above, you'll need to add a new `defvar` for
> `semantic-symref-filepattern-alist` just after the `require`.
>
> > +                (setq-local syntax-propertize-function
> > +                            (eval
> > +                             `(tex-xref-syntax-function
> > +                               ,identifier ,beg ,end)))
>
> Why do we need to change `syntax-propertize-function` and why do we need
> `eval`?
>
> > +                (setq syntax-propertize--done 0)
>
> This is not sufficient.  You want to `syntax-ppss-flush-cache`.
>
>
>         Stefan
>

[-- Attachment #2: 0001-expl-region.patch --]
[-- Type: text/x-patch, Size: 2728 bytes --]

diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index d990a2dbfa9..b2a6416f379 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -705,17 +705,36 @@ tex-verbatim-environments
               "\\(?:_+\\(?:[^][[:space:][:cntrl:][:digit:]:\\\\{}()/#_=]+\\|"
               "#+[1-9]\\)\\)+\\)\\([:_]?\\)")
       (1 (ignore
-          (let* ((expr (buffer-substring-no-properties (match-beginning 1)
-                                                       (match-end 1)))
-                 (list (seq-positions expr ?_)))
-            (dolist (pos list)
-              (put-text-property (+ pos (match-beginning 1))
-                                 (1+ (+ pos (match-beginning 1)))
-                                 'syntax-table (string-to-syntax "_"))))))
+          (when tex-expl-region-list
+            (let ((match (match-beginning 1)))
+              (catch 'result
+	        (dolist (range tex-expl-region-list)
+	          (and (> match (car range))
+	               (< match (cdr range))
+                       (let* ((expr (buffer-substring-no-properties
+                                     (match-beginning 1)
+                                     (match-end 1)))
+                              (list (seq-positions expr ?_)))
+                         (dolist (pos list)
+                           (put-text-property (+ pos (match-beginning 1))
+                                              (1+ (+ pos (match-beginning 1)))
+                                              'syntax-table
+                                              (string-to-syntax "_"))))
+                       (throw 'result t))))))))
       (2 "_"))
      ("\\\\[[:alpha:]]+\\(:\\)[[:alpha:][:space:]\n]"
       (1 "_")))))
 
+(defvar-local tex-expl-region-list nil)
+
+(defun tex-expl-region-set (_beg _end)
+  (setq tex-expl-region-list nil)
+  (goto-char (point-min))
+  (while (re-search-forward "\\ExplSyntaxOn" nil t)
+    (let ((new-beg (point))
+          (new-end (re-search-forward "\\ExplSyntaxOff" nil t)))
+      (add-to-list 'tex-expl-region-list (cons new-beg new-end) t))))
+
 (defun tex-env-mark (cmd start end)
   (when (= cmd (line-beginning-position))
     (let ((arg (buffer-substring-no-properties (1+ start) (1- end))))
@@ -1308,6 +1327,8 @@ tex-common-initialization
                 #'tex--prettify-symbols-compose-p)
   (setq-local syntax-propertize-function
 	      (syntax-propertize-rules latex-syntax-propertize-rules))
+  (add-hook 'syntax-propertize-extend-region-functions
+                  #'tex-expl-region-set nil t)
   ;; TABs in verbatim environments don't do what you think.
   (setq-local indent-tabs-mode nil)
   ;; Set up xref backend in TeX buffers.

^ permalink raw reply related	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-07  2:27                                           ` Dmitry Gutov
@ 2024-05-09  3:00                                             ` Dmitry Gutov
  2024-05-09  6:38                                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
                                                                 ` (2 more replies)
  0 siblings, 3 replies; 106+ messages in thread
From: Dmitry Gutov @ 2024-05-09  3:00 UTC (permalink / raw)
  To: Stefan Monnier, David Fussner
  Cc: 53749, Ikumi Keita, Arash Esbati, stefankangas, Tassilo Horn,
	Eli Zaretskii

On 07/05/2024 05:27, Dmitry Gutov wrote:
> On 03/05/2024 16:42, Stefan Monnier via Bug reports for GNU Emacs, the 
> Swiss army knife of text editors wrote:
>>> Thanks for looking over the patch. Here's the recipe for the purported
>>> bug in xref.el:
>> The problem stems from xref.el's constant abuse of
>> `inhibit-modification-hooks`.  Binding this var to t should be done only
>> in exceptional circumstances and should ideally be accompanied by a
>> comment explaining why it's necessary.
> 
> Well, the reason is performance: I've tried to wring out the most out of 
> it, given that we have to parse the buffer for syntax in Elisp, and 
> that'll always have a certain overhead.
> 
> The difference between inhibiting and not could be up to 20% of runtime.
> 
> David's fix makes things slower (just due to having us do the necessary 
> work), but still has an edge over having no inhibit-modification-hooks.
> 
> That remaining improvement is around 4-7% in my testing, though, so 
> maybe it's the point where we should prioritize simplicity.

For now, I've pushed a fix in 86187d43e2d which seems to handle David's 
scenario and address your review comment as well.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-09  3:00                                             ` Dmitry Gutov
@ 2024-05-09  6:38                                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-09 10:49                                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-13 20:54                                               ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2 siblings, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-09  6:38 UTC (permalink / raw)
  To: Dmitry Gutov
  Cc: 53749, Ikumi Keita, Arash Esbati, Stefan Kangas, Tassilo Horn,
	Eli Zaretskii, Stefan Monnier

[-- Attachment #1: Type: text/plain, Size: 1359 bytes --]

Thank you, Dmitry! I'll run tests later today and get back to you.

David.

On Thu, 9 May 2024, 04:00 Dmitry Gutov, <dgutov@yandex.ru> wrote:

> On 07/05/2024 05:27, Dmitry Gutov wrote:
> > On 03/05/2024 16:42, Stefan Monnier via Bug reports for GNU Emacs, the
> > Swiss army knife of text editors wrote:
> >>> Thanks for looking over the patch. Here's the recipe for the purported
> >>> bug in xref.el:
> >> The problem stems from xref.el's constant abuse of
> >> `inhibit-modification-hooks`.  Binding this var to t should be done only
> >> in exceptional circumstances and should ideally be accompanied by a
> >> comment explaining why it's necessary.
> >
> > Well, the reason is performance: I've tried to wring out the most out of
> > it, given that we have to parse the buffer for syntax in Elisp, and
> > that'll always have a certain overhead.
> >
> > The difference between inhibiting and not could be up to 20% of runtime.
> >
> > David's fix makes things slower (just due to having us do the necessary
> > work), but still has an edge over having no inhibit-modification-hooks.
> >
> > That remaining improvement is around 4-7% in my testing, though, so
> > maybe it's the point where we should prioritize simplicity.
>
> For now, I've pushed a fix in 86187d43e2d which seems to handle David's
> scenario and address your review comment as well.
>

[-- Attachment #2: Type: text/html, Size: 1871 bytes --]

^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-09  3:00                                             ` Dmitry Gutov
  2024-05-09  6:38                                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-05-09 10:49                                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-13 20:54                                               ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2 siblings, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-09 10:49 UTC (permalink / raw)
  To: Dmitry Gutov
  Cc: 53749, Ikumi Keita, Arash Esbati, stefankangas, Tassilo Horn,
	Eli Zaretskii, Stefan Monnier

Hi Dmitry,

All of my tests work well now, thank you.

Best, David.

On Thu, 9 May 2024 at 04:00, Dmitry Gutov <dgutov@yandex.ru> wrote:
>
> On 07/05/2024 05:27, Dmitry Gutov wrote:
> > On 03/05/2024 16:42, Stefan Monnier via Bug reports for GNU Emacs, the
> > Swiss army knife of text editors wrote:
> >>> Thanks for looking over the patch. Here's the recipe for the purported
> >>> bug in xref.el:
> >> The problem stems from xref.el's constant abuse of
> >> `inhibit-modification-hooks`.  Binding this var to t should be done only
> >> in exceptional circumstances and should ideally be accompanied by a
> >> comment explaining why it's necessary.
> >
> > Well, the reason is performance: I've tried to wring out the most out of
> > it, given that we have to parse the buffer for syntax in Elisp, and
> > that'll always have a certain overhead.
> >
> > The difference between inhibiting and not could be up to 20% of runtime.
> >
> > David's fix makes things slower (just due to having us do the necessary
> > work), but still has an edge over having no inhibit-modification-hooks.
> >
> > That remaining improvement is around 4-7% in my testing, though, so
> > maybe it's the point where we should prioritize simplicity.
>
> For now, I've pushed a fix in 86187d43e2d which seems to handle David's
> scenario and address your review comment as well.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-09  3:00                                             ` Dmitry Gutov
  2024-05-09  6:38                                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-09 10:49                                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-05-13 20:54                                               ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-14 21:24                                                 ` Dmitry Gutov
  2 siblings, 1 reply; 106+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-13 20:54 UTC (permalink / raw)
  To: Dmitry Gutov
  Cc: 53749, Ikumi Keita, David Fussner, Arash Esbati, stefankangas,
	Tassilo Horn, Eli Zaretskii

> For now, I've pushed a fix in 86187d43e2d which seems to handle David's
> scenario and address your review comment as well.

The let-binding is done outside of `with-current-buffer`, so it relies
on the fact (itself problematic) that `inhibit-modification-hooks` is
not buffer-local.

Would it be OK to use a patch like the one below?

IIUC, in the `syntax-needed` case, the let-binding of
`inhibit-modification-hooks` is just not useful very (4-7% is not worth
the trouble), so its purpose is to speed up the other case.
Did I understand it right?

Also, what about the other two bindings of `inhibit-modification-hooks`?


        Stefan


diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index f9faec1b474..214e9cb6c09 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -1282,7 +1282,7 @@ xref--show-common-initialize
     (erase-buffer)
     (setq overlay-arrow-position nil)
     (xref--insert-xrefs xref-alist)
-    (add-hook 'post-command-hook 'xref--apply-truncation nil t)
+    (add-hook 'post-command-hook #'xref--apply-truncation nil t)
     (goto-char (point-min))
     (setq xref--original-window (assoc-default 'window alist)
           xref--original-window-intent (assoc-default 'display-action alist))
@@ -2112,10 +2112,7 @@ xref--convert-hits
 (defun xref--collect-matches (hit regexp tmp-buffer syntax-needed)
   (pcase-let* ((`(,line ,file ,text) hit)
                (file (and file (concat xref--hits-remote-id file)))
-               (buf (xref--find-file-buffer file))
-               ;; This is fairly dangerouns, but improves performance
-               ;; for large lists, see https://debbugs.gnu.org/53749#227
-               (inhibit-modification-hooks t))
+               (buf (xref--find-file-buffer file)))
     (if buf
         (with-current-buffer buf
           (save-excursion
@@ -2130,6 +2130,9 @@
       ;; Using the temporary buffer is both a performance and a buffer
       ;; management optimization.
       (with-current-buffer tmp-buffer
+        ;; This let is fairly dangerouns, but improves performance
+        ;; for large lists, see https://debbugs.gnu.org/53749#227
+        (let ((inhibit-modification-hooks t))
         (erase-buffer)
         (when (and syntax-needed
                    (not (equal file xref--temp-buffer-file-name)))
@@ -2144,7 +2147,7 @@
           (setq-local xref--temp-buffer-file-name file)
           (setq-local inhibit-read-only t)
           (erase-buffer))
-        (insert text)
+          (insert text))
         (goto-char (point-min))
         (when syntax-needed
           (syntax-ppss-flush-cache (point)))






^ permalink raw reply related	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-13 20:54                                               ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-05-14 21:24                                                 ` Dmitry Gutov
  2024-05-16 18:18                                                   ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Dmitry Gutov @ 2024-05-14 21:24 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: 53749, Ikumi Keita, David Fussner, Arash Esbati, stefankangas,
	Tassilo Horn, Eli Zaretskii

On 13/05/2024 23:54, Stefan Monnier via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:
>> For now, I've pushed a fix in 86187d43e2d which seems to handle David's
>> scenario and address your review comment as well.
> 
> The let-binding is done outside of `with-current-buffer`, so it relies
> on the fact (itself problematic) that `inhibit-modification-hooks` is
> not buffer-local.

Good point.

> Would it be OK to use a patch like the one below?

Sure, thank you. Pushed.

> IIUC, in the `syntax-needed` case, the let-binding of
> `inhibit-modification-hooks` is just not useful very (4-7% is not worth
> the trouble), so its purpose is to speed up the other case.

4-10% is the improvement for both cases (the "syntax needed" and not).

I could be on the fence whether it's "not useful" - on the one hand 4% 
might not sound like much - on the other we already have this bit of 
improvement which has no known bugs. And when you combine a few of such 
performance hacks, the difference gets more noticeable.

Also, I'm eyeing another performance improvement (simplifying file type 
detection) - the call to set-auto-mode is not fast. Simply commenting 
this call out improves the performance by 4x or so - but we'll need a 
simpler version of it instead, of course.

And with the above change (commenting out the set-auto-mode call), the 
difference that the inhibit-modification-hooks hack makes is amplified: 
it can get up to 20%. Ultimately it'll be somewhere in between, but this 
sounds better, right?

> Also, what about the other two bindings of `inhibit-modification-hooks`?

The other two are used while the contents of the Xref buffer are printed 
(or re-printed), so there's none of the syntax-ppss complications there. 
The performance difference is 8.5% in my last measurement.

> 
>          Stefan
> 
> 
> diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
> index f9faec1b474..214e9cb6c09 100644
> --- a/lisp/progmodes/xref.el
> +++ b/lisp/progmodes/xref.el
> @@ -1282,7 +1282,7 @@ xref--show-common-initialize
>       (erase-buffer)
>       (setq overlay-arrow-position nil)
>       (xref--insert-xrefs xref-alist)
> -    (add-hook 'post-command-hook 'xref--apply-truncation nil t)
> +    (add-hook 'post-command-hook #'xref--apply-truncation nil t)
>       (goto-char (point-min))
>       (setq xref--original-window (assoc-default 'window alist)
>             xref--original-window-intent (assoc-default 'display-action alist))
> @@ -2112,10 +2112,7 @@ xref--convert-hits
>   (defun xref--collect-matches (hit regexp tmp-buffer syntax-needed)
>     (pcase-let* ((`(,line ,file ,text) hit)
>                  (file (and file (concat xref--hits-remote-id file)))
> -               (buf (xref--find-file-buffer file))
> -               ;; This is fairly dangerouns, but improves performance
> -               ;; for large lists, see https://debbugs.gnu.org/53749#227
> -               (inhibit-modification-hooks t))
> +               (buf (xref--find-file-buffer file)))
>       (if buf
>           (with-current-buffer buf
>             (save-excursion
> @@ -2130,6 +2130,9 @@
>         ;; Using the temporary buffer is both a performance and a buffer
>         ;; management optimization.
>         (with-current-buffer tmp-buffer
> +        ;; This let is fairly dangerouns, but improves performance
> +        ;; for large lists, see https://debbugs.gnu.org/53749#227
> +        (let ((inhibit-modification-hooks t))
>           (erase-buffer)
>           (when (and syntax-needed
>                      (not (equal file xref--temp-buffer-file-name)))
> @@ -2144,7 +2147,7 @@
>             (setq-local xref--temp-buffer-file-name file)
>             (setq-local inhibit-read-only t)
>             (erase-buffer))
> -        (insert text)
> +          (insert text))
>           (goto-char (point-min))
>           (when syntax-needed
>             (syntax-ppss-flush-cache (point)))
> 
> 
> 
> 






^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-03 14:10                                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
                                                         ` (2 preceding siblings ...)
  2024-05-07 13:15                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-05-15 15:47                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-16  7:53                                         ` Arash Esbati
  3 siblings, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-15 15:47 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: 53749, Ikumi Keita, Tassilo Horn, Arash Esbati, stefankangas,
	Dmitry Gutov, Eli Zaretskii

[-- Attachment #1: Type: text/plain, Size: 7879 bytes --]

Hi Stefan,

I attach an updated patch for tex-mode and etags, in which I've
attempted to include all of your recommendations.  A few notes:

1. I changed the name as well as the doc string of the variable
holding the TeX escape and grouping chars (now
`tex-thingatpt-exclude-chars`).  I hope this makes it clearer.

2. I removed the regexp for detecting expl3 constructs, and now rely
on the mechanism I outlined in my previous work-in-progress patch:

(a) Test for expl3 class or package, set `tex-expl-file-p` to t.

(b) If not (a), add `tex-expl-region-set` to the
    `syntax-propertize-extend-region-functions` hook to list all
    regions between \ExplSyntaxOn and \ExplSyntaxOff
    (`tex-expl-region-list`).

(c) Add test in `tex-font-lock-suscript` for (a) then (b), don't
    subscript after the underscore when either is t.

3. I tried benchmarking `syntax-ppss-flush-cache` and
   `font-lock-flush` before and after the changes.  The former had a
   maximum slowdown of 0.5% (usually less) and the latter a maximum of
   0.2%, but if you want to see my methodology or suggest something to
   try please let me know.

4. I left the bespoke `syntax-propertize-function` in the
   `xref-backend-references` method uncompiled, as simple benchmarking
   suggested no perceptible gain from byte compiling it.  Using
   `syntax-ppss-flush-cache` to restore the status quo ante in each
   file-visiting buffer streamlined the code and made it do what it
   was supposed to do.

Thanks again for your advice, and please let me know what still needs
work.

Best, David.

On Fri, 3 May 2024 at 15:11, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>
> Hi,
>
> Apparently I'm the `tex-mode.el` guy, so I tried to take a look.
>
> > diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
> > index 97c950267c6..d990a2dbfa9 100644
> > --- a/lisp/textmodes/tex-mode.el
> > +++ b/lisp/textmodes/tex-mode.el
> > @@ -695,7 +696,25 @@ tex-verbatim-environments
> >       ("\\\\\\(?:end\\|begin\\) *\\({[^\n{}]*}\\)"
> >        (1 (ignore
> >            (tex-env-mark (match-beginning 0)
> > -                        (match-beginning 1) (match-end 1))))))))
> > +                        (match-beginning 1) (match-end 1)))))
> > +     ;; The next two rules change the syntax of `:' and `_' in expl3
> > +     ;; constructs, so that `tex-font-lock-suscript' can fontify them
> > +     ;; more accurately.
> > +     ((concat "\\(\\(?:[\\\\[:space:]{]_\\|"
> > +              "[\\\\{[:space:]][^][_[:space:][:cntrl:][:digit:]\\\\{}()/=]+\\)"
> > +              "\\(?:_+\\(?:[^][[:space:][:cntrl:][:digit:]:\\\\{}()/#_=]+\\|"
> > +              "#+[1-9]\\)\\)+\\)\\([:_]?\\)")
>
> Can you add in the comment some URL pointing to some relevant expl3
> documentation which "explains" why the above regexp makes sense?
> Also I don't clearly see how the above regexp distinguishes expl3 code
> from "normal" LaTeX code, so the comment should say something about it.
>
> Side note: I'd avoid [:space:] whose exact meaning is rarely quite what
> we need.
> Side note: backslash doesn't need to be backslashed in [...].
>
> > +      (1 (ignore
> > +          (let* ((expr (buffer-substring-no-properties (match-beginning 1)
> > +                                                       (match-end 1)))
> > +                 (list (seq-positions expr ?_)))
> > +            (dolist (pos list)
> > +              (put-text-property (+ pos (match-beginning 1))
> > +                                 (1+ (+ pos (match-beginning 1)))
> > +                                 'syntax-table (string-to-syntax "_"))))))
> > +      (2 "_"))
> > +     ("\\\\[[:alpha:]]+\\(:\\)[[:alpha:][:space:]\n]"
> > +      (1 "_")))))
>
> Currently we "skip" inappropriate underscores via
> `tex-font-lock-match-suscript` and/or by adding a particular `face` text
> property rather than via `syntax-table/propertize`.
>
> For algorithmic reasons, it's better to minimize the work done in
> `syntax-propertize-function` as much as possible (font-lock is more lazy
> than `syntax-propertize`), so I recommend you try and moving the above
> to font-lock rules.
>
> > +(defvar tex-esc-and-group-chars '(?\\ ?{ ?})
> > +  "The current TeX escape and grouping characters.
>
> I recommend you backslash escape the { and } above (although it's not
> indispensable, `emacs-lisp-mode` will parse the code better).
> More importantly, the docstring doesn't explain what this list
> means/does.  E.g. does the order matter?  Can it be longer than 3 elements?
>
> From the current docstring I can't guess what would be the consequence
> of adding/removing elements to/from this list.
>
> > +;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
> > +;; AUCTeX is doing the same for its modes.
> > +(defvar semantic-symref-filepattern-alist)
> > +(with-eval-after-load 'semantic/symref/grep
> > +  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
> > +                     "*.bbl" "*.drv" "*.hva")
> > +        semantic-symref-filepattern-alist)
> > +  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
> > +        semantic-symref-filepattern-alist)
> > +  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))
>
> We know `semantic-symref-filepattern-alist` will exist when
> `semantic/symref/grep` is loaded, but not before, so I'd put the
> `defvar` inside the `with-eval-after-load`.
>
> > +;; Setup AUCTeX modes (for testing purposes only).
> > +
> > +(add-hook 'TeX-mode-hook #'tex-set-auctex-xref-backend)
> > +
> > +(defun tex-set-auctex-xref-backend ()
> > +  (add-hook 'xref-backend-functions #'tex--xref-backend nil t))
>
> I assume this will be sent to AUCTeX and is not meant to be in
> `tex-mode.el`, right?
>
> > +;; `xref-find-references' currently may need this when called from a
> > +;; latex-mode buffer in order to search files or buffers with a .tex
> > +;; suffix (including the buffer from which it has been called).  We
> > +;; append it to `auto-mode-alist' so as not to interfere with the usual
> > +;; mode-setting apparatus.  Changes here and in AUCTeX should soon
> > +;; render it unnecessary.
> > +(add-to-list 'auto-mode-alist '("\\.[tT]e[xX]\\'" . latex-mode) t)
>
> Maybe I have not followed the whole discussion closely enough, but at
> least to me the above "soon" is very unclear.
> I'll assume that this code will be removed before we install the patch.
> If not, please explain in the comment why this specific hack is needed
> and how it works.
>
> > +(cl-defmethod xref-backend-references ((_backend (eql 'tex-etags)) identifier)
> > +  "Find references of IDENTIFIER in TeX buffers and files."
> > +  (require 'semantic/symref/grep)
> > +  (let (bufs texbufs
> > +             (mode major-mode))
> > +    (dolist (buf (buffer-list))
> > +      (if (eq (buffer-local-value 'major-mode buf) mode)
> > +          (push buf bufs)
> > +        (when (string-match-p ".*\\.[tT]e[xX]" (buffer-name buf))
> > +          (push buf texbufs))))
> > +    (unless (seq-set-equal-p tex--buffers-list bufs)
> > +      (let* ((amalist (tex--collect-file-extensions))
> > +          (extlist (alist-get mode semantic-symref-filepattern-alist))
> > +          (extlist-new (seq-uniq
> > +                           (seq-union amalist extlist #'string-match-p))))
>
> After sinking the `defvar` above, you'll need to add a new `defvar` for
> `semantic-symref-filepattern-alist` just after the `require`.
>
> > +                (setq-local syntax-propertize-function
> > +                            (eval
> > +                             `(tex-xref-syntax-function
> > +                               ,identifier ,beg ,end)))
>
> Why do we need to change `syntax-propertize-function` and why do we need
> `eval`?
>
> > +                (setq syntax-propertize--done 0)
>
> This is not sufficient.  You want to `syntax-ppss-flush-cache`.
>
>
>         Stefan
>

[-- Attachment #2: 0002-Provide-a-modified-xref-backend-for-TeX-buffers.patch --]
[-- Type: text/x-patch, Size: 33084 bytes --]

From 87d83778ce8c35365937322183d101be234ac882 Mon Sep 17 00:00:00 2001
From: David Fussner <dfussner@googlemail.com>
Date: Wed, 15 May 2024 16:36:15 +0100
Subject: [PATCH] Provide a modified xref backend for TeX buffers

* lib-src/etags.c (TeX_commands): Improve parsing of commands in TeX
buffers.
(TEX_defenv): Expand list of commands to tag by default in TeX
buffers.
(TeX_help):
* doc/emacs/maintaining.texi (Tag Syntax): Document new tagged
commands.
(Identifier Search): Add note about semantic-symref-filepattern-alist,
auto-mode-alist, and xref-find-references.

* lisp/textmodes/tex-mode.el (tex-font-lock-suscript): Test for
underscore in expl3 files and regions, disable subscript face there.
(tex-common-initialization): Set up xref backend for in-tree TeX
modes. Detect expl3 files, and in others set up a list of expl3
regions.
(tex-expl-buffer-parse): New function called in previous.
(tex-expl-buffer-p): New var to hold the result of previous.
(tex-expl-region-set): New function added to
'syntax-propertize-extend-region-functions' hook.
(tex-expl-region-list): New var to hold the result of previous.
(tex--thing-at-point, tex-thingatpt--beginning-of-symbol)
(tex-thingatpt--end-of-symbol, tex--bounds-of-symbol-at-point):
New functions to return 'thing-at-point' for xref backend.
(tex-thingatpt-exclude-chars): New var to do the same.
(xref-backend-identifier-at-point): New TeX backend method to provide
symbols for processing by xref.
(xref-backend-identifier-completion-table)
(xref-backend-identifier-completion-ignore-case)
(xref-backend-definitions, xref-backend-apropos): Placeholders to
call the standard 'etags' xref backend methods.
(xref-backend-references): Wrapper to call the default xref backend
method, finding as many relevant files as possible and using a bespoke
syntax-propertize-function when required.
(tex--collect-file-extensions, tex-xref-syntax-function): Helper
functions for previous.
(tex-find-references-syntax-table, tex--buffers-list)
(tex--xref-syntax-fun, tex--old-syntax-function): New vars for same.
---
 doc/emacs/maintaining.texi |  39 +++-
 lib-src/etags.c            | 189 +++++++++++++++++--
 lisp/textmodes/tex-mode.el | 372 ++++++++++++++++++++++++++++++++++++-
 3 files changed, 579 insertions(+), 21 deletions(-)

diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 579098c81b1..a064103aa25 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -2529,6 +2529,15 @@ Identifier Search
 referenced.  The XREF mode commands are available in this buffer, see
 @ref{Xref Commands}.
 
+When invoked in a buffer whose major mode uses the @code{etags} backend,
+@kbd{M-?} searches files and buffers whose major mode matches that of
+the original buffer.  It guesses that mode from file extensions, so if
+@kbd{M-?} seems to be skipping relevant buffers or files, try
+customizing either the variable @code{semantic-symref-filepattern-alist}
+(if your buffer's major mode already has an entry in it), or
+@code{auto-mode-alist} (if not), thereby informing @code{xref} of the
+missing extensions (@pxref{Choosing Modes}).
+
 @vindex xref-auto-jump-to-first-xref
   If the value of the variable @code{xref-auto-jump-to-first-xref} is
 @code{t}, @code{xref-find-references} automatically jumps to the first
@@ -2747,10 +2756,32 @@ Tag Syntax
 @item
 In @LaTeX{} documents, the arguments for @code{\chapter},
 @code{\section}, @code{\subsection}, @code{\subsubsection},
-@code{\eqno}, @code{\label}, @code{\ref}, @code{\cite},
-@code{\bibitem}, @code{\part}, @code{\appendix}, @code{\entry},
-@code{\index}, @code{\def}, @code{\newcommand}, @code{\renewcommand},
-@code{\newenvironment} and @code{\renewenvironment} are tags.
+@code{\eqno}, @code{\label}, @code{\ref}, @code{\Ref}, @code{\footref},
+@code{\cite}, @code{\bibitem}, @code{\part}, @code{\appendix},
+@code{\entry}, @code{\index}, @code{\def}, @code{\edef}, @code{\gdef},
+@code{\xdef}, @code{\newcommand}, @code{\renewcommand},
+@code{\newenvironment}, @code{\renewenvironment},
+@code{\DeclareRobustCommand}, @code{\newrobustcmd},
+@code{\renewrobustcmd}, @code{\providecommand},
+@code{\providerobustcmd}, @code{\NewDocumentCommand},
+@code{\RenewDocumentCommand}, @code{\ProvideDocumentCommand},
+@code{\DeclareDocumentCommand}, @code{\NewExpandableDocumentCommand},
+@code{\RenewExpandableDocumentCommand},
+@code{\ProvideExpandableDocumentCommand},
+@code{\DeclareExpandableDocumentCommand},
+@code{\NewDocumentEnvironment}, @code{\RenewDocumentEnvironment},
+@code{\ProvideDocumentEnvironment}, @code{\DeclareDocumentEnvironment},
+@code{\csdef}, @code{\csedef}, @code{\csgdef}, @code{\csxdef},
+@code{\csletcs}, @code{\cslet}, @code{\letcs}, @code{\let},
+@code{\cs_new_protected_nopar}, @code{\cs_new_protected},
+@code{\cs_new_nopar}, @code{\cs_new_eq}, @code{\cs_new},
+@code{\cs_set_protected_nopar}, @code{\cs_set_protected},
+@code{\cs_set_nopar}, @code{\cs_set_eq}, @code{\cs_set},
+@code{\cs_gset_protected_nopar}, @code{\cs_gset_protected},
+@code{\cs_gset_nopar}, @code{\cs_gset_eq}, @code{\cs_gset},
+@code{\cs_generate_from_arg_count}, and @code{\cs_generate_variant} are
+tags.  So too are the arguments of any starred variants of these
+commands.
 
 Other commands can make tags as well, if you specify them in the
 environment variable @env{TEXTAGS} before invoking @command{etags}.  The
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 03bc55de03d..11fddc187c2 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -793,11 +793,27 @@ #define STDIN 0x1001		/* returned by getopt_long on --parse-stdin */
 static const char *TeX_suffixes [] =
   { "bib", "clo", "cls", "ltx", "sty", "TeX", "tex", NULL };
 static const char TeX_help [] =
-"In LaTeX text, the argument of any of the commands '\\chapter',\n\
-'\\section', '\\subsection', '\\subsubsection', '\\eqno', '\\label',\n\
-'\\ref', '\\cite', '\\bibitem', '\\part', '\\appendix', '\\entry',\n\
-'\\index', '\\def', '\\newcommand', '\\renewcommand',\n\
-'\\newenvironment' or '\\renewenvironment' is a tag.\n\
+"In LaTeX text, the argument of the commands '\\chapter', '\\section',\n\
+'\\subsection', '\\subsubsection', '\\eqno', '\\label', '\\ref',\n\
+'\\Ref', '\\footref', '\\cite', '\\bibitem', '\\part', '\\appendix',\n\
+'\\entry', '\\index', '\\def', '\\edef', '\\gdef', '\\xdef',\n\
+'\\newcommand', '\\renewcommand', '\\newrobustcmd', '\\renewrobustcmd',\n\
+'\\newenvironment', '\\renewenvironment', '\\DeclareRobustCommand',\n\
+'\\providecommand', '\\providerobustcmd', '\\NewDocumentCommand',\n\
+'\\RenewDocumentCommand', '\\ProvideDocumentCommand',\n\
+'\\DeclareDocumentCommand', '\\NewExpandableDocumentCommand',\n\
+'\\RenewExpandableDocumentCommand', '\\ProvideExpandableDocumentCommand',\n\
+'\\DeclareExpandableDocumentCommand', '\\NewDocumentEnvironment',\n\
+'\\RenewDocumentEnvironment', '\\ProvideDocumentEnvironment',\n\
+'\\DeclareDocumentEnvironment','\\csdef', '\\csedef', '\\csgdef',\n\
+'\\csxdef', '\\csletcs', '\\cslet', '\\letcs', '\\let',\n\
+'\\cs_new_protected_nopar', '\\cs_new_protected', '\\cs_new_nopar',\n\
+'\\cs_new_eq', '\\cs_new', '\\cs_set_protected_nopar',\n\
+'\\cs_set_protected', '\\cs_set_nopar', '\\cs_set_eq', '\\cs_set',\n\
+'\\cs_gset_protected_nopar', '\\cs_gset_protected', '\\cs_gset_nopar',\n\
+'\\cs_gset_eq', '\\cs_gset', '\\cs_generate_from_arg_count', or\n\
+'\\cs_generate_variant' is a tag.  So is the argument of any starred\n\
+variant of these commands.\n\
 \n\
 Other commands can be specified by setting the environment variable\n\
 'TEXTAGS' to a colon-separated list like, for example,\n\
@@ -5740,11 +5756,25 @@ Scheme_functions (FILE *inf)
 static linebuffer *TEX_toktab = NULL; /* Table with tag tokens */
 
 /* Default set of control sequences to put into TEX_toktab.
-   The value of environment var TEXTAGS is prepended to this.  */
+   The value of environment var TEXTAGS is prepended to this.
+   (2024) Add variants of '\def', some additional LaTeX (and
+   former xparse) commands, common variants from the
+   'etoolbox' package, and the main expl3 commands. */
 static const char *TEX_defenv = "\
-:chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\
-:part:appendix:entry:index:def\
-:newcommand:renewcommand:newenvironment:renewenvironment";
+:label:ref:Ref:footref:chapter:section:subsection:subsubsection:eqno:cite\
+:bibitem:part:appendix:entry:index:def:edef:gdef:xdef:newcommand:renewcommand\
+:newenvironment:renewenvironment:DeclareRobustCommand:renewrobustcmd\
+:newrobustcmd:providecommand:providerobustcmd:NewDocumentCommand\
+:RenewDocumentCommand:ProvideDocumentCommand:DeclareDocumentCommand\
+:NewExpandableDocumentCommand:RenewExpandableDocumentCommand\
+:ProvideExpandableDocumentCommand:DeclareExpandableDocumentCommand\
+:NewDocumentEnvironment:RenewDocumentEnvironment\
+:ProvideDocumentEnvironment:DeclareDocumentEnvironment:csdef\
+:csedef:csgdef:csxdef:csletcs:cslet:letcs:let:cs_new_protected_nopar\
+:cs_new_protected:cs_new_nopar:cs_new_eq:cs_new:cs_set_protected_nopar\
+:cs_set_protected:cs_set_nopar:cs_set_eq:cs_set:cs_gset_protected_nopar\
+:cs_gset_protected:cs_gset_nopar:cs_gset_eq:cs_gset\
+:cs_generate_from_arg_count:cs_generate_variant";
 
 static void TEX_decode_env (const char *, const char *);
 
@@ -5803,19 +5833,137 @@ TeX_commands (FILE *inf)
 	      {
 		char *p;
 		ptrdiff_t namelen, linelen;
-		bool opgrp = false;
+		bool opgrp = false, one_esc = false, is_explthree = false;
 
 		cp = skip_spaces (cp + key->len);
+
+		/* 1. The canonical expl3 syntax looks something like this:
+		   \cs_new:Npn \__hook_tl_gput:Nn { \ERROR }.  First, if we
+		   want to tag any such commands, we include only the part
+		   before the colon (cs_new) in TEX_defenv or TEXTAGS.  Second,
+		   etags skips the argument specifier (including the colon)
+		   after the tag token, so that it doesn't become the tag name.
+		   Third, we set the boolean 'is_explthree' to true so that we
+		   can remove the argument specifier from the actual tag name
+		   (__hook_tl_gput).  This all allows us to include expl3
+		   constructs in TEX_defenv or in the environment variable
+		   TEXTAGS without requiring a change of separator, and it also
+		   allows us to find the definition of variant commands (with
+		   different argument specifiers) defined using, for example,
+		   \cs_generate_variant:Nn.  Please note that the expl3 spec
+		   requires etags to pay more attention to whitespace in the
+		   code.
+
+		   2. We also automatically remove the asterisk from starred
+		   variants of all commands, without the need to include the
+		   starred commands explicitly in TEX_defenv or TEXTAGS. */
+		if (*cp == ':')
+		  {
+		    while (!c_isspace (*cp) && *cp != TEX_opgrp)
+		      cp++;
+		    cp = skip_spaces (cp);
+		    is_explthree = true;
+		  }
+		else if (*cp == '*')
+		  cp++;
+
+		/* Skip the optional arguments to commands in the tags list so
+		   that these arguments don't end up as the name of the tag.
+		   The name will instead come from the argument in curly braces
+		   that follows the optional ones. */
+		while (*cp != '\0' && *cp != '%')
+		  {
+		    if (*cp == '[')
+		      {
+			while (*cp != ']' && *cp != '\0' && *cp != '%')
+			  cp++;
+		      }
+		    else if (*cp == '(')
+		      {
+			while (*cp != ')' && *cp != '\0' && *cp != '%')
+			  cp++;
+		      }
+		    else if (*cp == ']' || *cp == ')')
+		      cp++;
+		    else
+		      break;
+		  }
 		if (*cp == TEX_opgrp)
 		  {
 		    opgrp = true;
 		    cp++;
+		    cp = skip_spaces (cp); /* For expl3 code. */
 		  }
+
+		/* Removing the TeX escape character from tag names simplifies
+		   things for editors finding tagged commands in TeX buffers.
+		   This applies to Emacs but also to the tag-finding behavior
+		   of at least some of the editors that use ctags, though in
+		   the latter case this will remain suboptimal.  The
+		   undocumented ctags option '--no-duplicates' may help. */
+		if (*cp == TEX_esc)
+		  {
+		    cp++;
+		    one_esc = true;
+		  }
+
+		/* Testing !c_isspace && !c_ispunct is simpler, but halts
+		   processing at too many places.  The list as it stands tries
+		   both to ensure that tag names will derive from macro names
+		   rather than from optional parameters to those macros, and
+		   also to return findable names while still allowing for
+		   unorthodox constructs. */
 		for (p = cp;
-		     (!c_isspace (*p) && *p != '#' &&
-		      *p != TEX_opgrp && *p != TEX_clgrp);
+		     (!c_isspace (*p) && *p != '#' && *p != '=' &&
+		      *p != '[' && *p != '(' && *p != TEX_opgrp &&
+		      *p != TEX_clgrp && *p != '"' && *p != '\'' &&
+		      *p != '%' && *p != ',' && *p != '|' && *p != '$');
 		     p++)
-		  continue;
+		  /* In expl3 code we remove the argument specification from
+		     the tag name.  More generally we allow only one (deleted)
+		     escape char in a tag name, which (primarily) enables
+		     tagging a TeX command's different, possibly temporary,
+		     '\let' bindings. */
+		  if (is_explthree && *p == ':')
+		    break;
+		  else if (*p == TEX_esc)
+		    { /* Second part of test is for, e.g., \cslet. */
+		      if (!one_esc && !opgrp)
+			{
+			  one_esc = true;
+			  continue;
+			}
+		      else
+			break;
+		    }
+		  else
+		    continue;
+		/* For TeX files, tags without a name are basically cruft, and
+		   in some situations they can produce spurious and confusing
+		   matches.  Try to catch as many cases as possible where a
+		   command name is of the form '\(', but avoid, as far as
+		   possible, the spurious matches. */
+		if (p == cp)
+		  {
+		    switch (*p)
+		      { /* Include =? */
+		      case '(': case '[': case '"': case '\'':
+		      case '\\': case '!': case '=': case ',':
+		      case '|': case '$':
+			p++;
+			break;
+		      case '{': case '}': case '<': case '>':
+			if (!opgrp)
+			  {
+			      p++;
+			      if (*p == '\0' || *p == '%')
+				goto tex_next_line;
+			  }
+			break;
+		      default:
+			break;
+		      }
+		  }
 		namelen = p - cp;
 		linelen = lb.len;
 		if (!opgrp || *p == TEX_clgrp)
@@ -5824,9 +5972,18 @@ TeX_commands (FILE *inf)
 		      p++;
 		    linelen = p - lb.buffer + 1;
 		  }
-		make_tag (cp, namelen, true,
-			  lb.buffer, linelen, lineno, linecharno);
-		goto tex_next_line; /* We only tag a line once */
+		if (namelen)
+		  make_tag (cp, namelen, true,
+			    lb.buffer, linelen, lineno, linecharno);
+		/* Lines with more than one \def or \let are surprisingly
+		   common in TeX files, especially in the system files that
+		   form the basis of the various TeX formats.  This tags them
+		   all. */
+		/* goto tex_next_line; /\* We only tag a line once *\/ */
+		while (*cp != '\0' && *cp != '%' && *cp != TEX_esc)
+		  cp++;
+		if (*cp != TEX_esc)
+		  goto tex_next_line;
 	      }
 	}
     tex_next_line:
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index 97c950267c6..224930d68ae 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -636,6 +636,14 @@ tex-font-lock-keywords-2
 	      3 '(tex-font-lock-append-prop 'bold) 'append)))))
    "Gaudy expressions to highlight in TeX modes.")
 
+(defvar-local tex-expl-region-list nil
+  "List of region boundaries where expl3 syntax is active.
+It will be nil in buffers where expl3 syntax is always active, e.g.,
+expl3 classes or packages.")
+
+(defvar-local tex-expl-buffer-p nil
+  "Non-nil in buffers where expl3 syntax is always active.")
+
 (defun tex-font-lock-suscript (pos)
   (unless (or (memq (get-text-property pos 'face)
 		    '(font-lock-constant-face font-lock-builtin-face
@@ -645,7 +653,17 @@ tex-font-lock-suscript
 		    (pos pos))
 		(while (eq (char-before pos) ?\\)
 		  (setq pos (1- pos) odd (not odd)))
-		odd))
+		odd)
+              ;; Check if POS is in an expl3 syntax region or an expl3 buffer
+              (when (eq (char-after pos) ?_)
+                (or tex-expl-buffer-p
+                    (and
+                     tex-expl-region-list
+                     (catch 'result
+	               (dolist (range tex-expl-region-list)
+	                 (and (> pos (car range))
+	                      (< pos (cdr range))
+                              (throw 'result t))))))))
     (if (eq (char-after pos) ?_)
 	`(face subscript display (raise ,(car tex-font-script-display)))
       `(face superscript display (raise ,(cadr tex-font-script-display))))))
@@ -1289,8 +1307,16 @@ tex-common-initialization
                 #'tex--prettify-symbols-compose-p)
   (setq-local syntax-propertize-function
 	      (syntax-propertize-rules latex-syntax-propertize-rules))
+  ;; Don't add extra processing to `syntax-propertize' in files where
+  ;; expl3 syntax is always active.
+  :after-hook (progn (tex-expl-buffer-parse)
+                     (unless tex-expl-buffer-p
+                       (add-hook 'syntax-propertize-extend-region-functions
+                                 #'tex-expl-region-set nil t)))
   ;; TABs in verbatim environments don't do what you think.
   (setq-local indent-tabs-mode nil)
+  ;; Set up xref backend in TeX buffers.
+  (add-hook 'xref-backend-functions #'tex--xref-backend nil t)
   ;; Other vars that should be buffer-local.
   (make-local-variable 'tex-command)
   (make-local-variable 'tex-start-of-header)
@@ -1936,6 +1962,35 @@ tex-count-words
 		(forward-sexp 1))))))
       (message "%s words" count))))
 
+(defun tex-expl-buffer-parse ()
+  "Identify buffers where expl3 syntax is always active."
+  (save-excursion
+    (goto-char (point-min))
+    (when (tex-search-noncomment
+	   (re-search-forward
+	    "\\(?:\\\\\\(?:ExplFile\\|ProvidesExpl\\|__xparse_file\\)\\)"
+	    nil t))
+      (setq tex-expl-buffer-p t))))
+
+(defun tex-expl-region-set (_beg _end)
+  "Create a list of regions where expl3 syntax is active.
+This function updates the list whenever `syntax-propertize' runs, and
+stores it in the buffer-local variable `tex-expl-region-list'.  The
+list will always be nil when the buffer visits an expl3 file, e.g., an
+expl3 class or package, where expl3 syntax is always active."
+  (unless syntax-ppss--updated-cache;; Stop forward search running twice.
+    (setq tex-expl-region-list nil)
+    ;; Leaving this test here allows users to set `tex-expl-buffer-p'
+    ;; independently of the mode's automatic detection of an expl3 file.
+    (unless tex-expl-buffer-p
+      (goto-char (point-min))
+      (while (tex-search-noncomment
+              (re-search-forward "\\ExplSyntaxOn" nil t))
+        (let ((new-beg (point))
+              (new-end (or (tex-search-noncomment
+                            (re-search-forward "\\ExplSyntaxOff" nil t))
+                           (point-max))))
+          (push (cons new-beg new-end) tex-expl-region-list))))))
 
 \f
 ;;; Invoking TeX in an inferior shell.
@@ -3742,6 +3797,321 @@ tex-chktex
       (process-send-region tex-chktex--process (point-min) (point-max))
       (process-send-eof tex-chktex--process))))
 
+\f
+;;; Xref backend
+
+;; Here we lightly adapt the default etags backend for xref so that
+;; the main xref user commands (including `xref-find-definitions',
+;; `xref-find-apropos', and `xref-find-references' [on M-., C-M-., and
+;; M-?, respectively]) work in TeX buffers.  The only methods we
+;; actually modify are `xref-backend-identifier-at-point' and
+;; `xref-backend-references'.  Many of the complications here, and in
+;; `etags' itself, are due to the necessity of parsing both the old
+;; TeX syntax and the new expl3 syntax, which will continue to appear
+;; together in documents for the foreseeable future.  Synchronizing
+;; Emacs and `etags' this way aims to improve the user experience "out
+;; of the box."
+
+(defvar tex-thingatpt-exclude-chars '(?\\ ?\{ ?\})
+  "Exclude these chars by default from TeX thing-at-point.
+
+The TeX `xref-backend-identifier-at-point' method uses the characters
+listed in this variable to decide on the default search string to
+present to the user who calls an `xref' command.  These characters
+become part of a regexp which always excludes them from that default
+string.  For the `xref' commands to function properly in TeX buffers, at
+least the TeX escape and the two TeX grouping characters should be
+listed here.  Should your TeX documents contain other characters which
+you want to exclude by default, then you can add them to the list,
+though you may wish to consult the functions
+`tex-thingatpt--beginning-of-symbol' and `tex-thingatpt--end-of-symbol'
+to see what the regexp already contains.  If your documents contain
+non-standard escape and grouping characters, then you can replace the
+three listed here with your own, thereby allowing the three standard
+characters to appear by default in search strings.  Please be aware,
+however, that the `etags' program only recognizes `\\' (92) and `!' (33)
+as escape characters in TeX documents, and if it detects the latter it
+also uses `<>' as the TeX grouping construct rather than `{}'.  Setting
+the escape and grouping chars to anything other than `\\=\\{}' or `!<>'
+will not be useful without changes to `etags', at least for commands
+that search tags tables, such as \\[xref-find-definitions] and \
+\\[xref-find-apropos].
+
+Should you wish to change the defaults, please also be aware that,
+without further modifications to tex-mode.el, the usual text-parsing
+routines for `font-lock' and the like won't work correctly, as the
+default escape and grouping characters are currently hard coded in many
+places.")
+
+;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
+;; AUCTeX is doing the same for its modes.
+(with-eval-after-load 'semantic/symref/grep
+  (defvar semantic-symref-filepattern-alist)
+  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
+                     "*.bbl" "*.drv" "*.hva")
+        semantic-symref-filepattern-alist)
+  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
+        semantic-symref-filepattern-alist)
+  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))
+
+(defun tex--xref-backend () 'tex-etags)
+
+;; Setup AUCTeX modes (for testing purposes only).
+
+(add-hook 'TeX-mode-hook #'tex-set-auctex-xref-backend)
+
+(defun tex-set-auctex-xref-backend ()
+  (add-hook 'xref-backend-functions #'tex--xref-backend nil t))
+
+;; `xref-find-references' currently may need this when called from a
+;; latex-mode buffer in order to search files or buffers with a .tex
+;; suffix (including the buffer from which it has been called).  We
+;; append it to `auto-mode-alist' so as not to interfere with the usual
+;; mode-setting apparatus.  Changes here and in AUCTeX should soon
+;; render it unnecessary.
+(add-to-list 'auto-mode-alist '("\\.[tT]e[xX]\\'" . latex-mode) t)
+
+(cl-defmethod xref-backend-identifier-at-point ((_backend (eql 'tex-etags)))
+  (require 'etags)
+  (tex--thing-at-point))
+
+;; The detection of `_' and `:' is a primitive method for determining
+;; whether point is on an expl3 construct.  It may fail in some
+;; instances.
+(defun tex--thing-at-point ()
+  "Demarcate `thing-at-point' for the TeX `xref' backend."
+  (let ((bounds (tex--bounds-of-symbol-at-point)))
+    (when bounds
+      (let ((texsym (buffer-substring-no-properties (car bounds) (cdr bounds))))
+        (if (and (not (string-match-p "reference" (symbol-name this-command)))
+                 (seq-contains-p texsym ?_)
+                 (seq-contains-p texsym ?:))
+            (seq-take texsym (seq-position texsym ?:))
+          texsym)))))
+
+(defun tex-thingatpt--beginning-of-symbol ()
+  (and
+   (re-search-backward (concat "[]["
+                               (mapconcat #'regexp-quote
+                                          (mapcar #'char-to-string
+                                                  tex-thingatpt-exclude-chars))
+                               "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))
+   (forward-char)))
+
+(defun tex-thingatpt--end-of-symbol ()
+  (and
+   (re-search-forward (concat "[]["
+                              (mapconcat #'regexp-quote
+                                          (mapcar #'char-to-string
+                                                  tex-thingatpt-exclude-chars))
+                              "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))
+   (backward-char)))
+
+(defun tex--bounds-of-symbol-at-point ()
+  "Simplify `bounds-of-thing-at-point' for TeX `xref' backend."
+  (let ((orig (point)))
+    (ignore-errors
+      (save-excursion
+	(tex-thingatpt--end-of-symbol)
+	(tex-thingatpt--beginning-of-symbol)
+	(let ((beg (point)))
+	  (if (<= beg orig)
+	      (let ((real-end
+		     (progn
+		       (tex-thingatpt--end-of-symbol)
+		       (point))))
+		(cond ((and (<= orig real-end) (< beg real-end))
+		       (cons beg real-end))
+                      ((and (= orig real-end) (= beg real-end))
+		       (cons beg (1+ beg)))))))))));; For 1-char TeX commands.
+
+(cl-defmethod xref-backend-identifier-completion-table ((_backend
+                                                         (eql 'tex-etags)))
+  (xref-backend-identifier-completion-table 'etags))
+
+(cl-defmethod xref-backend-identifier-completion-ignore-case ((_backend
+                                                               (eql
+                                                                'tex-etags)))
+  (xref-backend-identifier-completion-ignore-case 'etags))
+
+(cl-defmethod xref-backend-definitions ((_backend (eql 'tex-etags)) symbol)
+  (xref-backend-definitions 'etags symbol))
+
+(cl-defmethod xref-backend-apropos ((_backend (eql 'tex-etags)) pattern)
+  (xref-backend-apropos 'etags pattern))
+
+;; The `xref-backend-references' method requires more code than the
+;; others for at least two main reasons: TeX authors have typically been
+;; free in their invention of new file types with new suffixes, and they
+;; have also tended sometimes to include non-symbol characters in
+;; command names.  When combined with the default Semantic Symbol
+;; Reference API, these two characteristics of TeX code mean that a
+;; command like `xref-find-references' would often fail to find any hits
+;; for a symbol at point, including the one under point in the current
+;; buffer, or it would find only some instances and skip others.
+
+(defun tex-find-references-syntax-table ()
+  (let ((st (if (boundp 'TeX-mode-syntax-table)
+                 (make-syntax-table TeX-mode-syntax-table)
+               (make-syntax-table tex-mode-syntax-table))))
+    st))
+
+(defvar tex--xref-syntax-fun nil)
+
+(defun tex-xref-syntax-function (str beg end)
+  "Provide a bespoke `syntax-propertize-function' for \\[xref-find-references]."
+  (let* (grpb tempstr
+              (shrtstr (if end
+                           (progn
+                             (setq tempstr (seq-take str (1- (length str))))
+                             (if beg
+                                 (setq tempstr (seq-drop tempstr 1))
+                               tempstr))
+                         (seq-drop str 1)))
+              (grpa (if (and beg end)
+                        (prog1
+                            (list 1 "_")
+                          (setq grpb (list 2 "_")))
+                      (list 1 "_")))
+              (re (concat beg (regexp-quote shrtstr) end))
+              (temp-rule (if grpb
+                             (list re grpa grpb)
+                           (list re grpa))))
+    ;; Simple benchmarks suggested that the speed-up from compiling this
+    ;; function was nearly nil, so `eval' and its non-byte-compiled
+    ;; function remain.
+    (setq tex--xref-syntax-fun (eval
+                                `(syntax-propertize-rules ,temp-rule)))))
+
+(defun tex--collect-file-extensions ()
+  "Gather TeX file extensions from `auto-mode-alist'."
+  (let* ((mlist (when (rassq major-mode auto-mode-alist)
+		  (seq-filter
+		   (lambda (elt)
+		     (eq (cdr elt) major-mode))
+		   auto-mode-alist)))
+	 (lcsym (intern-soft (downcase (symbol-name major-mode))))
+	 (lclist (and lcsym
+		      (not (eq lcsym major-mode))
+		      (rassq lcsym auto-mode-alist)
+		      (seq-filter
+		       (lambda (elt)
+			 (eq (cdr elt) lcsym))
+		       auto-mode-alist)))
+	 (shortsym (when (stringp mode-name)
+		     (intern-soft (concat (string-trim-right mode-name "/.*")
+					  "-mode"))))
+	 (lcshortsym (when (stringp mode-name)
+		       (intern-soft (downcase
+				     (concat
+				      (string-trim-right mode-name "/.*")
+				      "-mode")))))
+	 (shlist (and shortsym
+		      (not (eq shortsym major-mode))
+		      (not (eq shortsym lcsym))
+		      (rassq shortsym auto-mode-alist)
+		      (seq-filter
+		       (lambda (elt)
+			 (eq (cdr elt) shortsym))
+		       auto-mode-alist)))
+	 (lcshlist (and lcshortsym
+			(not (eq lcshortsym major-mode))
+			(not (eq lcshortsym lcsym))
+			(rassq lcshortsym auto-mode-alist)
+			(seq-filter
+			 (lambda (elt)
+			   (eq (cdr elt) lcshortsym))
+			 auto-mode-alist)))
+	 (exts (when (or mlist lclist shlist lcshlist)
+		 (seq-union (seq-map #'car lclist)
+			    (seq-union (seq-map #'car mlist)
+				       (seq-union (seq-map #'car lcshlist)
+						  (seq-map #'car shlist))))))
+	 (ed-exts (when exts
+		    (seq-map
+		     (lambda (elt)
+		       (concat "*" (string-trim  elt "\\\\" "\\\\'")))
+		     exts))))
+    ed-exts))
+
+(defvar tex--buffers-list nil)
+(defvar-local tex--old-syntax-function nil)
+
+(cl-defmethod xref-backend-references ((_backend (eql 'tex-etags)) identifier)
+  "Find references of IDENTIFIER in TeX buffers and files."
+  (require 'semantic/symref/grep)
+  (defvar semantic-symref-filepattern-alist)
+  (let (bufs texbufs
+             (mode major-mode))
+    (dolist (buf (buffer-list))
+      (if (eq (buffer-local-value 'major-mode buf) mode)
+          (push buf bufs)
+        (when (string-match-p ".*\\.[tT]e[xX]" (buffer-name buf))
+          (push buf texbufs))))
+    (unless (seq-set-equal-p tex--buffers-list bufs)
+      (let* ((amalist (tex--collect-file-extensions))
+	     (extlist (alist-get mode semantic-symref-filepattern-alist))
+	     (extlist-new (seq-uniq
+                           (seq-union amalist extlist #'string-match-p))))
+	(setq tex--buffers-list bufs)
+	(dolist (buf bufs)
+	  (when-let ((fbuf (buffer-file-name buf))
+		     (ext (file-name-extension fbuf))
+		     (finext (concat "*." ext))
+		     ((not (seq-find (lambda (elt) (string-match-p elt finext))
+				     extlist-new)))
+		     ((push finext extlist-new)))))
+	(unless (seq-set-equal-p extlist-new extlist)
+	  (setf (alist-get mode semantic-symref-filepattern-alist)
+                extlist-new))))
+    (let* (setsyntax
+           (punct (with-syntax-table (tex-find-references-syntax-table)
+                    (seq-positions identifier (list ?w ?_)
+			           (lambda (elt sycode)
+			             (not (memq (char-syntax elt) sycode))))))
+           (end (and punct
+                     (memq (1- (length identifier)) punct)
+                     (> (length identifier) 1)
+                     (concat "\\("
+                             (regexp-quote
+                              (string (elt identifier
+                                           (1- (length identifier)))))
+                             "\\)")))
+           (beg (and punct
+                     (memq 0 punct)
+                     (concat "\\("
+                             (regexp-quote (string (elt identifier 0)))
+                             "\\)")))
+           (text-mode-hook
+            (if (or end beg)
+                (progn
+                  (tex-xref-syntax-function identifier beg end)
+                  (setq setsyntax (lambda ()
+		                    (setq-local syntax-propertize-function
+                                                tex--xref-syntax-fun)
+                                    (setq-local TeX-style-hook-applied-p t)))
+                  (cons setsyntax text-mode-hook))
+              text-mode-hook)))
+      (unless (memq 'doctex-mode (derived-mode-all-parents mode))
+        (setq bufs (append texbufs bufs)))
+      (when (or end beg)
+        (dolist (buf bufs)
+          (with-current-buffer buf
+            (unless (local-variable-p 'tex--old-syntax-function)
+              (setq tex--old-syntax-function syntax-propertize-function))
+            (setq-local syntax-propertize-function
+                        tex--xref-syntax-fun)
+            (syntax-ppss-flush-cache (point-min)))))
+      (unwind-protect
+          (xref-backend-references nil identifier)
+        (when (or end beg)
+          (dolist (buf bufs)
+            (with-current-buffer buf
+              (when buffer-file-truename
+                (setq-local syntax-propertize-function
+                            tex--old-syntax-function)
+                (syntax-ppss-flush-cache (point-min))))))))))
+
 (make-obsolete-variable 'tex-mode-load-hook
                         "use `with-eval-after-load' instead." "28.1")
 (run-hooks 'tex-mode-load-hook)
-- 
2.35.8


^ permalink raw reply related	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-15 15:47                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-05-16  7:53                                         ` Arash Esbati
  2024-05-16 12:56                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Arash Esbati @ 2024-05-16  7:53 UTC (permalink / raw)
  To: David Fussner
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Stefan Monnier, Tassilo Horn,
	Eli Zaretskii, stefankangas

David Fussner <dfussner@googlemail.com> writes:
  
> +(defun tex-expl-buffer-parse ()
> +  "Identify buffers where expl3 syntax is always active."
> +  (save-excursion
> +    (goto-char (point-min))
> +    (when (tex-search-noncomment
> +	   (re-search-forward
> +	    "\\(?:\\\\\\(?:ExplFile\\|ProvidesExpl\\|__xparse_file\\)\\)"

Is the outer grouping necessary?  Why not just:

"\\\\\\(?:ExplFile\\|ProvidesExpl\\|__xparse_file\\)"

> +	    nil t))
> +      (setq tex-expl-buffer-p t))))
> +
> +(defun tex-expl-region-set (_beg _end)
> +  "Create a list of regions where expl3 syntax is active.
> +This function updates the list whenever `syntax-propertize' runs, and
> +stores it in the buffer-local variable `tex-expl-region-list'.  The
> +list will always be nil when the buffer visits an expl3 file, e.g., an
> +expl3 class or package, where expl3 syntax is always active."
> +  (unless syntax-ppss--updated-cache;; Stop forward search running twice.
> +    (setq tex-expl-region-list nil)
> +    ;; Leaving this test here allows users to set `tex-expl-buffer-p'
> +    ;; independently of the mode's automatic detection of an expl3 file.
> +    (unless tex-expl-buffer-p
> +      (goto-char (point-min))
> +      (while (tex-search-noncomment
> +              (re-search-forward "\\ExplSyntaxOn" nil t))

This looks wrong, I think you want `search-forward'.

> +        (let ((new-beg (point))
> +              (new-end (or (tex-search-noncomment
> +                            (re-search-forward "\\ExplSyntaxOff" nil t))

Same here.

> +                           (point-max))))
> +          (push (cons new-beg new-end) tex-expl-region-list))))))

Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-16  7:53                                         ` Arash Esbati
@ 2024-05-16 12:56                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-16 12:56 UTC (permalink / raw)
  To: Arash Esbati
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Stefan Monnier, Tassilo Horn,
	Eli Zaretskii, stefankangas

[-- Attachment #1: Type: text/plain, Size: 1905 bytes --]

Thanks, Arash. Agreed, on all counts. Revised patch attached.

Best, David.

On Thu, 16 May 2024 at 08:54, Arash Esbati <arash@gnu.org> wrote:
>
> David Fussner <dfussner@googlemail.com> writes:
>
> > +(defun tex-expl-buffer-parse ()
> > +  "Identify buffers where expl3 syntax is always active."
> > +  (save-excursion
> > +    (goto-char (point-min))
> > +    (when (tex-search-noncomment
> > +        (re-search-forward
> > +         "\\(?:\\\\\\(?:ExplFile\\|ProvidesExpl\\|__xparse_file\\)\\)"
>
> Is the outer grouping necessary?  Why not just:
>
> "\\\\\\(?:ExplFile\\|ProvidesExpl\\|__xparse_file\\)"
>
> > +         nil t))
> > +      (setq tex-expl-buffer-p t))))
> > +
> > +(defun tex-expl-region-set (_beg _end)
> > +  "Create a list of regions where expl3 syntax is active.
> > +This function updates the list whenever `syntax-propertize' runs, and
> > +stores it in the buffer-local variable `tex-expl-region-list'.  The
> > +list will always be nil when the buffer visits an expl3 file, e.g., an
> > +expl3 class or package, where expl3 syntax is always active."
> > +  (unless syntax-ppss--updated-cache;; Stop forward search running twice.
> > +    (setq tex-expl-region-list nil)
> > +    ;; Leaving this test here allows users to set `tex-expl-buffer-p'
> > +    ;; independently of the mode's automatic detection of an expl3 file.
> > +    (unless tex-expl-buffer-p
> > +      (goto-char (point-min))
> > +      (while (tex-search-noncomment
> > +              (re-search-forward "\\ExplSyntaxOn" nil t))
>
> This looks wrong, I think you want `search-forward'.
>
> > +        (let ((new-beg (point))
> > +              (new-end (or (tex-search-noncomment
> > +                            (re-search-forward "\\ExplSyntaxOff" nil t))
>
> Same here.
>
> > +                           (point-max))))
> > +          (push (cons new-beg new-end) tex-expl-region-list))))))
>
> Best, Arash

[-- Attachment #2: 0003-Provide-a-modified-xref-backend-for-TeX-buffers.patch --]
[-- Type: text/x-patch, Size: 33122 bytes --]

From 2839cbe15f91a1292d26e9208d21ce47270fd72e Mon Sep 17 00:00:00 2001
From: David Fussner <dfussner@googlemail.com>
Date: Thu, 16 May 2024 13:51:12 +0100
Subject: [PATCH] Provide a modified xref backend for TeX buffers

* lib-src/etags.c (TeX_commands): Improve parsing of commands in TeX
buffers.
(TEX_defenv): Expand list of commands to tag by default in TeX
buffers.
(TeX_help):
* doc/emacs/maintaining.texi (Tag Syntax): Document new tagged
commands.
(Identifier Search): Add note about semantic-symref-filepattern-alist,
auto-mode-alist, and xref-find-references.

* lisp/textmodes/tex-mode.el (tex-font-lock-suscript): Test for
underscore in expl3 files and regions, disable subscript face there.
(tex-common-initialization): Set up xref backend for in-tree TeX
modes. Detect expl3 files, and in others set up a list of expl3
regions.
(tex-expl-buffer-parse): New function called in previous.
(tex-expl-buffer-p): New var to hold the result of previous.
(tex-expl-region-set): New function added to
'syntax-propertize-extend-region-functions' hook.
(tex-expl-region-list): New var to hold the result of previous.
(tex--thing-at-point, tex-thingatpt--beginning-of-symbol)
(tex-thingatpt--end-of-symbol, tex--bounds-of-symbol-at-point):
New functions to return 'thing-at-point' for xref backend.
(tex-thingatpt-exclude-chars): New var to do the same.
(xref-backend-identifier-at-point): New TeX backend method to provide
symbols for processing by xref.
(xref-backend-identifier-completion-table)
(xref-backend-identifier-completion-ignore-case)
(xref-backend-definitions, xref-backend-apropos): Placeholders to
call the standard 'etags' xref backend methods.
(xref-backend-references): Wrapper to call the default xref backend
method, finding as many relevant files as possible and using a bespoke
syntax-propertize-function when required.
(tex--collect-file-extensions, tex-xref-syntax-function): Helper
functions for previous.
(tex-find-references-syntax-table, tex--buffers-list)
(tex--xref-syntax-fun, tex--old-syntax-function): New vars for same.
---
 doc/emacs/maintaining.texi |  39 +++-
 lib-src/etags.c            | 189 +++++++++++++++++--
 lisp/textmodes/tex-mode.el | 373 ++++++++++++++++++++++++++++++++++++-
 3 files changed, 580 insertions(+), 21 deletions(-)

diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 579098c81b1..a064103aa25 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -2529,6 +2529,15 @@ Identifier Search
 referenced.  The XREF mode commands are available in this buffer, see
 @ref{Xref Commands}.
 
+When invoked in a buffer whose major mode uses the @code{etags} backend,
+@kbd{M-?} searches files and buffers whose major mode matches that of
+the original buffer.  It guesses that mode from file extensions, so if
+@kbd{M-?} seems to be skipping relevant buffers or files, try
+customizing either the variable @code{semantic-symref-filepattern-alist}
+(if your buffer's major mode already has an entry in it), or
+@code{auto-mode-alist} (if not), thereby informing @code{xref} of the
+missing extensions (@pxref{Choosing Modes}).
+
 @vindex xref-auto-jump-to-first-xref
   If the value of the variable @code{xref-auto-jump-to-first-xref} is
 @code{t}, @code{xref-find-references} automatically jumps to the first
@@ -2747,10 +2756,32 @@ Tag Syntax
 @item
 In @LaTeX{} documents, the arguments for @code{\chapter},
 @code{\section}, @code{\subsection}, @code{\subsubsection},
-@code{\eqno}, @code{\label}, @code{\ref}, @code{\cite},
-@code{\bibitem}, @code{\part}, @code{\appendix}, @code{\entry},
-@code{\index}, @code{\def}, @code{\newcommand}, @code{\renewcommand},
-@code{\newenvironment} and @code{\renewenvironment} are tags.
+@code{\eqno}, @code{\label}, @code{\ref}, @code{\Ref}, @code{\footref},
+@code{\cite}, @code{\bibitem}, @code{\part}, @code{\appendix},
+@code{\entry}, @code{\index}, @code{\def}, @code{\edef}, @code{\gdef},
+@code{\xdef}, @code{\newcommand}, @code{\renewcommand},
+@code{\newenvironment}, @code{\renewenvironment},
+@code{\DeclareRobustCommand}, @code{\newrobustcmd},
+@code{\renewrobustcmd}, @code{\providecommand},
+@code{\providerobustcmd}, @code{\NewDocumentCommand},
+@code{\RenewDocumentCommand}, @code{\ProvideDocumentCommand},
+@code{\DeclareDocumentCommand}, @code{\NewExpandableDocumentCommand},
+@code{\RenewExpandableDocumentCommand},
+@code{\ProvideExpandableDocumentCommand},
+@code{\DeclareExpandableDocumentCommand},
+@code{\NewDocumentEnvironment}, @code{\RenewDocumentEnvironment},
+@code{\ProvideDocumentEnvironment}, @code{\DeclareDocumentEnvironment},
+@code{\csdef}, @code{\csedef}, @code{\csgdef}, @code{\csxdef},
+@code{\csletcs}, @code{\cslet}, @code{\letcs}, @code{\let},
+@code{\cs_new_protected_nopar}, @code{\cs_new_protected},
+@code{\cs_new_nopar}, @code{\cs_new_eq}, @code{\cs_new},
+@code{\cs_set_protected_nopar}, @code{\cs_set_protected},
+@code{\cs_set_nopar}, @code{\cs_set_eq}, @code{\cs_set},
+@code{\cs_gset_protected_nopar}, @code{\cs_gset_protected},
+@code{\cs_gset_nopar}, @code{\cs_gset_eq}, @code{\cs_gset},
+@code{\cs_generate_from_arg_count}, and @code{\cs_generate_variant} are
+tags.  So too are the arguments of any starred variants of these
+commands.
 
 Other commands can make tags as well, if you specify them in the
 environment variable @env{TEXTAGS} before invoking @command{etags}.  The
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 03bc55de03d..11fddc187c2 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -793,11 +793,27 @@ #define STDIN 0x1001		/* returned by getopt_long on --parse-stdin */
 static const char *TeX_suffixes [] =
   { "bib", "clo", "cls", "ltx", "sty", "TeX", "tex", NULL };
 static const char TeX_help [] =
-"In LaTeX text, the argument of any of the commands '\\chapter',\n\
-'\\section', '\\subsection', '\\subsubsection', '\\eqno', '\\label',\n\
-'\\ref', '\\cite', '\\bibitem', '\\part', '\\appendix', '\\entry',\n\
-'\\index', '\\def', '\\newcommand', '\\renewcommand',\n\
-'\\newenvironment' or '\\renewenvironment' is a tag.\n\
+"In LaTeX text, the argument of the commands '\\chapter', '\\section',\n\
+'\\subsection', '\\subsubsection', '\\eqno', '\\label', '\\ref',\n\
+'\\Ref', '\\footref', '\\cite', '\\bibitem', '\\part', '\\appendix',\n\
+'\\entry', '\\index', '\\def', '\\edef', '\\gdef', '\\xdef',\n\
+'\\newcommand', '\\renewcommand', '\\newrobustcmd', '\\renewrobustcmd',\n\
+'\\newenvironment', '\\renewenvironment', '\\DeclareRobustCommand',\n\
+'\\providecommand', '\\providerobustcmd', '\\NewDocumentCommand',\n\
+'\\RenewDocumentCommand', '\\ProvideDocumentCommand',\n\
+'\\DeclareDocumentCommand', '\\NewExpandableDocumentCommand',\n\
+'\\RenewExpandableDocumentCommand', '\\ProvideExpandableDocumentCommand',\n\
+'\\DeclareExpandableDocumentCommand', '\\NewDocumentEnvironment',\n\
+'\\RenewDocumentEnvironment', '\\ProvideDocumentEnvironment',\n\
+'\\DeclareDocumentEnvironment','\\csdef', '\\csedef', '\\csgdef',\n\
+'\\csxdef', '\\csletcs', '\\cslet', '\\letcs', '\\let',\n\
+'\\cs_new_protected_nopar', '\\cs_new_protected', '\\cs_new_nopar',\n\
+'\\cs_new_eq', '\\cs_new', '\\cs_set_protected_nopar',\n\
+'\\cs_set_protected', '\\cs_set_nopar', '\\cs_set_eq', '\\cs_set',\n\
+'\\cs_gset_protected_nopar', '\\cs_gset_protected', '\\cs_gset_nopar',\n\
+'\\cs_gset_eq', '\\cs_gset', '\\cs_generate_from_arg_count', or\n\
+'\\cs_generate_variant' is a tag.  So is the argument of any starred\n\
+variant of these commands.\n\
 \n\
 Other commands can be specified by setting the environment variable\n\
 'TEXTAGS' to a colon-separated list like, for example,\n\
@@ -5740,11 +5756,25 @@ Scheme_functions (FILE *inf)
 static linebuffer *TEX_toktab = NULL; /* Table with tag tokens */
 
 /* Default set of control sequences to put into TEX_toktab.
-   The value of environment var TEXTAGS is prepended to this.  */
+   The value of environment var TEXTAGS is prepended to this.
+   (2024) Add variants of '\def', some additional LaTeX (and
+   former xparse) commands, common variants from the
+   'etoolbox' package, and the main expl3 commands. */
 static const char *TEX_defenv = "\
-:chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\
-:part:appendix:entry:index:def\
-:newcommand:renewcommand:newenvironment:renewenvironment";
+:label:ref:Ref:footref:chapter:section:subsection:subsubsection:eqno:cite\
+:bibitem:part:appendix:entry:index:def:edef:gdef:xdef:newcommand:renewcommand\
+:newenvironment:renewenvironment:DeclareRobustCommand:renewrobustcmd\
+:newrobustcmd:providecommand:providerobustcmd:NewDocumentCommand\
+:RenewDocumentCommand:ProvideDocumentCommand:DeclareDocumentCommand\
+:NewExpandableDocumentCommand:RenewExpandableDocumentCommand\
+:ProvideExpandableDocumentCommand:DeclareExpandableDocumentCommand\
+:NewDocumentEnvironment:RenewDocumentEnvironment\
+:ProvideDocumentEnvironment:DeclareDocumentEnvironment:csdef\
+:csedef:csgdef:csxdef:csletcs:cslet:letcs:let:cs_new_protected_nopar\
+:cs_new_protected:cs_new_nopar:cs_new_eq:cs_new:cs_set_protected_nopar\
+:cs_set_protected:cs_set_nopar:cs_set_eq:cs_set:cs_gset_protected_nopar\
+:cs_gset_protected:cs_gset_nopar:cs_gset_eq:cs_gset\
+:cs_generate_from_arg_count:cs_generate_variant";
 
 static void TEX_decode_env (const char *, const char *);
 
@@ -5803,19 +5833,137 @@ TeX_commands (FILE *inf)
 	      {
 		char *p;
 		ptrdiff_t namelen, linelen;
-		bool opgrp = false;
+		bool opgrp = false, one_esc = false, is_explthree = false;
 
 		cp = skip_spaces (cp + key->len);
+
+		/* 1. The canonical expl3 syntax looks something like this:
+		   \cs_new:Npn \__hook_tl_gput:Nn { \ERROR }.  First, if we
+		   want to tag any such commands, we include only the part
+		   before the colon (cs_new) in TEX_defenv or TEXTAGS.  Second,
+		   etags skips the argument specifier (including the colon)
+		   after the tag token, so that it doesn't become the tag name.
+		   Third, we set the boolean 'is_explthree' to true so that we
+		   can remove the argument specifier from the actual tag name
+		   (__hook_tl_gput).  This all allows us to include expl3
+		   constructs in TEX_defenv or in the environment variable
+		   TEXTAGS without requiring a change of separator, and it also
+		   allows us to find the definition of variant commands (with
+		   different argument specifiers) defined using, for example,
+		   \cs_generate_variant:Nn.  Please note that the expl3 spec
+		   requires etags to pay more attention to whitespace in the
+		   code.
+
+		   2. We also automatically remove the asterisk from starred
+		   variants of all commands, without the need to include the
+		   starred commands explicitly in TEX_defenv or TEXTAGS. */
+		if (*cp == ':')
+		  {
+		    while (!c_isspace (*cp) && *cp != TEX_opgrp)
+		      cp++;
+		    cp = skip_spaces (cp);
+		    is_explthree = true;
+		  }
+		else if (*cp == '*')
+		  cp++;
+
+		/* Skip the optional arguments to commands in the tags list so
+		   that these arguments don't end up as the name of the tag.
+		   The name will instead come from the argument in curly braces
+		   that follows the optional ones. */
+		while (*cp != '\0' && *cp != '%')
+		  {
+		    if (*cp == '[')
+		      {
+			while (*cp != ']' && *cp != '\0' && *cp != '%')
+			  cp++;
+		      }
+		    else if (*cp == '(')
+		      {
+			while (*cp != ')' && *cp != '\0' && *cp != '%')
+			  cp++;
+		      }
+		    else if (*cp == ']' || *cp == ')')
+		      cp++;
+		    else
+		      break;
+		  }
 		if (*cp == TEX_opgrp)
 		  {
 		    opgrp = true;
 		    cp++;
+		    cp = skip_spaces (cp); /* For expl3 code. */
 		  }
+
+		/* Removing the TeX escape character from tag names simplifies
+		   things for editors finding tagged commands in TeX buffers.
+		   This applies to Emacs but also to the tag-finding behavior
+		   of at least some of the editors that use ctags, though in
+		   the latter case this will remain suboptimal.  The
+		   undocumented ctags option '--no-duplicates' may help. */
+		if (*cp == TEX_esc)
+		  {
+		    cp++;
+		    one_esc = true;
+		  }
+
+		/* Testing !c_isspace && !c_ispunct is simpler, but halts
+		   processing at too many places.  The list as it stands tries
+		   both to ensure that tag names will derive from macro names
+		   rather than from optional parameters to those macros, and
+		   also to return findable names while still allowing for
+		   unorthodox constructs. */
 		for (p = cp;
-		     (!c_isspace (*p) && *p != '#' &&
-		      *p != TEX_opgrp && *p != TEX_clgrp);
+		     (!c_isspace (*p) && *p != '#' && *p != '=' &&
+		      *p != '[' && *p != '(' && *p != TEX_opgrp &&
+		      *p != TEX_clgrp && *p != '"' && *p != '\'' &&
+		      *p != '%' && *p != ',' && *p != '|' && *p != '$');
 		     p++)
-		  continue;
+		  /* In expl3 code we remove the argument specification from
+		     the tag name.  More generally we allow only one (deleted)
+		     escape char in a tag name, which (primarily) enables
+		     tagging a TeX command's different, possibly temporary,
+		     '\let' bindings. */
+		  if (is_explthree && *p == ':')
+		    break;
+		  else if (*p == TEX_esc)
+		    { /* Second part of test is for, e.g., \cslet. */
+		      if (!one_esc && !opgrp)
+			{
+			  one_esc = true;
+			  continue;
+			}
+		      else
+			break;
+		    }
+		  else
+		    continue;
+		/* For TeX files, tags without a name are basically cruft, and
+		   in some situations they can produce spurious and confusing
+		   matches.  Try to catch as many cases as possible where a
+		   command name is of the form '\(', but avoid, as far as
+		   possible, the spurious matches. */
+		if (p == cp)
+		  {
+		    switch (*p)
+		      { /* Include =? */
+		      case '(': case '[': case '"': case '\'':
+		      case '\\': case '!': case '=': case ',':
+		      case '|': case '$':
+			p++;
+			break;
+		      case '{': case '}': case '<': case '>':
+			if (!opgrp)
+			  {
+			      p++;
+			      if (*p == '\0' || *p == '%')
+				goto tex_next_line;
+			  }
+			break;
+		      default:
+			break;
+		      }
+		  }
 		namelen = p - cp;
 		linelen = lb.len;
 		if (!opgrp || *p == TEX_clgrp)
@@ -5824,9 +5972,18 @@ TeX_commands (FILE *inf)
 		      p++;
 		    linelen = p - lb.buffer + 1;
 		  }
-		make_tag (cp, namelen, true,
-			  lb.buffer, linelen, lineno, linecharno);
-		goto tex_next_line; /* We only tag a line once */
+		if (namelen)
+		  make_tag (cp, namelen, true,
+			    lb.buffer, linelen, lineno, linecharno);
+		/* Lines with more than one \def or \let are surprisingly
+		   common in TeX files, especially in the system files that
+		   form the basis of the various TeX formats.  This tags them
+		   all. */
+		/* goto tex_next_line; /\* We only tag a line once *\/ */
+		while (*cp != '\0' && *cp != '%' && *cp != TEX_esc)
+		  cp++;
+		if (*cp != TEX_esc)
+		  goto tex_next_line;
 	      }
 	}
     tex_next_line:
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index 97c950267c6..4a595aa1ea5 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -636,6 +636,14 @@ tex-font-lock-keywords-2
 	      3 '(tex-font-lock-append-prop 'bold) 'append)))))
    "Gaudy expressions to highlight in TeX modes.")
 
+(defvar-local tex-expl-region-list nil
+  "List of region boundaries where expl3 syntax is active.
+It will be nil in buffers where expl3 syntax is always active, e.g.,
+expl3 classes or packages.")
+
+(defvar-local tex-expl-buffer-p nil
+  "Non-nil in buffers where expl3 syntax is always active.")
+
 (defun tex-font-lock-suscript (pos)
   (unless (or (memq (get-text-property pos 'face)
 		    '(font-lock-constant-face font-lock-builtin-face
@@ -645,7 +653,17 @@ tex-font-lock-suscript
 		    (pos pos))
 		(while (eq (char-before pos) ?\\)
 		  (setq pos (1- pos) odd (not odd)))
-		odd))
+		odd)
+              ;; Check if POS is in an expl3 syntax region or an expl3 buffer
+              (when (eq (char-after pos) ?_)
+                (or tex-expl-buffer-p
+                    (and
+                     tex-expl-region-list
+                     (catch 'result
+	               (dolist (range tex-expl-region-list)
+	                 (and (> pos (car range))
+	                      (< pos (cdr range))
+                              (throw 'result t))))))))
     (if (eq (char-after pos) ?_)
 	`(face subscript display (raise ,(car tex-font-script-display)))
       `(face superscript display (raise ,(cadr tex-font-script-display))))))
@@ -1289,8 +1307,16 @@ tex-common-initialization
                 #'tex--prettify-symbols-compose-p)
   (setq-local syntax-propertize-function
 	      (syntax-propertize-rules latex-syntax-propertize-rules))
+  ;; Don't add extra processing to `syntax-propertize' in files where
+  ;; expl3 syntax is always active.
+  :after-hook (progn (tex-expl-buffer-parse)
+                     (unless tex-expl-buffer-p
+                       (add-hook 'syntax-propertize-extend-region-functions
+                                 #'tex-expl-region-set nil t)))
   ;; TABs in verbatim environments don't do what you think.
   (setq-local indent-tabs-mode nil)
+  ;; Set up xref backend in TeX buffers.
+  (add-hook 'xref-backend-functions #'tex--xref-backend nil t)
   ;; Other vars that should be buffer-local.
   (make-local-variable 'tex-command)
   (make-local-variable 'tex-start-of-header)
@@ -1936,6 +1962,36 @@ tex-count-words
 		(forward-sexp 1))))))
       (message "%s words" count))))
 
+(defun tex-expl-buffer-parse ()
+  "Identify buffers where expl3 syntax is always active."
+  (save-excursion
+    (goto-char (point-min))
+    (when (tex-search-noncomment
+	   (re-search-forward
+	    "\\\\\\(?:ExplFile\\|ProvidesExpl\\|__xparse_file\\)"
+	    nil t))
+      (setq tex-expl-buffer-p t))))
+
+(defun tex-expl-region-set (_beg _end)
+  "Create a list of regions where expl3 syntax is active.
+This function updates the list whenever `syntax-propertize' runs, and
+stores it in the buffer-local variable `tex-expl-region-list'.  The
+list will always be nil when the buffer visits an expl3 file, e.g., an
+expl3 class or package, where expl3 syntax is always active."
+  (unless syntax-ppss--updated-cache;; Stop forward search running twice.
+    (setq tex-expl-region-list nil)
+    ;; Leaving this test here allows users to set `tex-expl-buffer-p'
+    ;; independently of the mode's automatic detection of an expl3 file.
+    (unless tex-expl-buffer-p
+      (goto-char (point-min))
+      (let ((case-fold-search nil))
+        (while (tex-search-noncomment
+                (search-forward "\\ExplSyntaxOn" nil t))
+          (let ((new-beg (point))
+                (new-end (or (tex-search-noncomment
+                              (search-forward "\\ExplSyntaxOff" nil t))
+                             (point-max))))
+            (push (cons new-beg new-end) tex-expl-region-list)))))))
 
 \f
 ;;; Invoking TeX in an inferior shell.
@@ -3742,6 +3798,321 @@ tex-chktex
       (process-send-region tex-chktex--process (point-min) (point-max))
       (process-send-eof tex-chktex--process))))
 
+\f
+;;; Xref backend
+
+;; Here we lightly adapt the default etags backend for xref so that
+;; the main xref user commands (including `xref-find-definitions',
+;; `xref-find-apropos', and `xref-find-references' [on M-., C-M-., and
+;; M-?, respectively]) work in TeX buffers.  The only methods we
+;; actually modify are `xref-backend-identifier-at-point' and
+;; `xref-backend-references'.  Many of the complications here, and in
+;; `etags' itself, are due to the necessity of parsing both the old
+;; TeX syntax and the new expl3 syntax, which will continue to appear
+;; together in documents for the foreseeable future.  Synchronizing
+;; Emacs and `etags' this way aims to improve the user experience "out
+;; of the box."
+
+(defvar tex-thingatpt-exclude-chars '(?\\ ?\{ ?\})
+  "Exclude these chars by default from TeX thing-at-point.
+
+The TeX `xref-backend-identifier-at-point' method uses the characters
+listed in this variable to decide on the default search string to
+present to the user who calls an `xref' command.  These characters
+become part of a regexp which always excludes them from that default
+string.  For the `xref' commands to function properly in TeX buffers, at
+least the TeX escape and the two TeX grouping characters should be
+listed here.  Should your TeX documents contain other characters which
+you want to exclude by default, then you can add them to the list,
+though you may wish to consult the functions
+`tex-thingatpt--beginning-of-symbol' and `tex-thingatpt--end-of-symbol'
+to see what the regexp already contains.  If your documents contain
+non-standard escape and grouping characters, then you can replace the
+three listed here with your own, thereby allowing the three standard
+characters to appear by default in search strings.  Please be aware,
+however, that the `etags' program only recognizes `\\' (92) and `!' (33)
+as escape characters in TeX documents, and if it detects the latter it
+also uses `<>' as the TeX grouping construct rather than `{}'.  Setting
+the escape and grouping chars to anything other than `\\=\\{}' or `!<>'
+will not be useful without changes to `etags', at least for commands
+that search tags tables, such as \\[xref-find-definitions] and \
+\\[xref-find-apropos].
+
+Should you wish to change the defaults, please also be aware that,
+without further modifications to tex-mode.el, the usual text-parsing
+routines for `font-lock' and the like won't work correctly, as the
+default escape and grouping characters are currently hard coded in many
+places.")
+
+;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
+;; AUCTeX is doing the same for its modes.
+(with-eval-after-load 'semantic/symref/grep
+  (defvar semantic-symref-filepattern-alist)
+  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
+                     "*.bbl" "*.drv" "*.hva")
+        semantic-symref-filepattern-alist)
+  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
+        semantic-symref-filepattern-alist)
+  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))
+
+(defun tex--xref-backend () 'tex-etags)
+
+;; Setup AUCTeX modes (for testing purposes only).
+
+(add-hook 'TeX-mode-hook #'tex-set-auctex-xref-backend)
+
+(defun tex-set-auctex-xref-backend ()
+  (add-hook 'xref-backend-functions #'tex--xref-backend nil t))
+
+;; `xref-find-references' currently may need this when called from a
+;; latex-mode buffer in order to search files or buffers with a .tex
+;; suffix (including the buffer from which it has been called).  We
+;; append it to `auto-mode-alist' so as not to interfere with the usual
+;; mode-setting apparatus.  Changes here and in AUCTeX should soon
+;; render it unnecessary.
+(add-to-list 'auto-mode-alist '("\\.[tT]e[xX]\\'" . latex-mode) t)
+
+(cl-defmethod xref-backend-identifier-at-point ((_backend (eql 'tex-etags)))
+  (require 'etags)
+  (tex--thing-at-point))
+
+;; The detection of `_' and `:' is a primitive method for determining
+;; whether point is on an expl3 construct.  It may fail in some
+;; instances.
+(defun tex--thing-at-point ()
+  "Demarcate `thing-at-point' for the TeX `xref' backend."
+  (let ((bounds (tex--bounds-of-symbol-at-point)))
+    (when bounds
+      (let ((texsym (buffer-substring-no-properties (car bounds) (cdr bounds))))
+        (if (and (not (string-match-p "reference" (symbol-name this-command)))
+                 (seq-contains-p texsym ?_)
+                 (seq-contains-p texsym ?:))
+            (seq-take texsym (seq-position texsym ?:))
+          texsym)))))
+
+(defun tex-thingatpt--beginning-of-symbol ()
+  (and
+   (re-search-backward (concat "[]["
+                               (mapconcat #'regexp-quote
+                                          (mapcar #'char-to-string
+                                                  tex-thingatpt-exclude-chars))
+                               "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))
+   (forward-char)))
+
+(defun tex-thingatpt--end-of-symbol ()
+  (and
+   (re-search-forward (concat "[]["
+                              (mapconcat #'regexp-quote
+                                          (mapcar #'char-to-string
+                                                  tex-thingatpt-exclude-chars))
+                              "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))
+   (backward-char)))
+
+(defun tex--bounds-of-symbol-at-point ()
+  "Simplify `bounds-of-thing-at-point' for TeX `xref' backend."
+  (let ((orig (point)))
+    (ignore-errors
+      (save-excursion
+	(tex-thingatpt--end-of-symbol)
+	(tex-thingatpt--beginning-of-symbol)
+	(let ((beg (point)))
+	  (if (<= beg orig)
+	      (let ((real-end
+		     (progn
+		       (tex-thingatpt--end-of-symbol)
+		       (point))))
+		(cond ((and (<= orig real-end) (< beg real-end))
+		       (cons beg real-end))
+                      ((and (= orig real-end) (= beg real-end))
+		       (cons beg (1+ beg)))))))))));; For 1-char TeX commands.
+
+(cl-defmethod xref-backend-identifier-completion-table ((_backend
+                                                         (eql 'tex-etags)))
+  (xref-backend-identifier-completion-table 'etags))
+
+(cl-defmethod xref-backend-identifier-completion-ignore-case ((_backend
+                                                               (eql
+                                                                'tex-etags)))
+  (xref-backend-identifier-completion-ignore-case 'etags))
+
+(cl-defmethod xref-backend-definitions ((_backend (eql 'tex-etags)) symbol)
+  (xref-backend-definitions 'etags symbol))
+
+(cl-defmethod xref-backend-apropos ((_backend (eql 'tex-etags)) pattern)
+  (xref-backend-apropos 'etags pattern))
+
+;; The `xref-backend-references' method requires more code than the
+;; others for at least two main reasons: TeX authors have typically been
+;; free in their invention of new file types with new suffixes, and they
+;; have also tended sometimes to include non-symbol characters in
+;; command names.  When combined with the default Semantic Symbol
+;; Reference API, these two characteristics of TeX code mean that a
+;; command like `xref-find-references' would often fail to find any hits
+;; for a symbol at point, including the one under point in the current
+;; buffer, or it would find only some instances and skip others.
+
+(defun tex-find-references-syntax-table ()
+  (let ((st (if (boundp 'TeX-mode-syntax-table)
+                 (make-syntax-table TeX-mode-syntax-table)
+               (make-syntax-table tex-mode-syntax-table))))
+    st))
+
+(defvar tex--xref-syntax-fun nil)
+
+(defun tex-xref-syntax-function (str beg end)
+  "Provide a bespoke `syntax-propertize-function' for \\[xref-find-references]."
+  (let* (grpb tempstr
+              (shrtstr (if end
+                           (progn
+                             (setq tempstr (seq-take str (1- (length str))))
+                             (if beg
+                                 (setq tempstr (seq-drop tempstr 1))
+                               tempstr))
+                         (seq-drop str 1)))
+              (grpa (if (and beg end)
+                        (prog1
+                            (list 1 "_")
+                          (setq grpb (list 2 "_")))
+                      (list 1 "_")))
+              (re (concat beg (regexp-quote shrtstr) end))
+              (temp-rule (if grpb
+                             (list re grpa grpb)
+                           (list re grpa))))
+    ;; Simple benchmarks suggested that the speed-up from compiling this
+    ;; function was nearly nil, so `eval' and its non-byte-compiled
+    ;; function remain.
+    (setq tex--xref-syntax-fun (eval
+                                `(syntax-propertize-rules ,temp-rule)))))
+
+(defun tex--collect-file-extensions ()
+  "Gather TeX file extensions from `auto-mode-alist'."
+  (let* ((mlist (when (rassq major-mode auto-mode-alist)
+		  (seq-filter
+		   (lambda (elt)
+		     (eq (cdr elt) major-mode))
+		   auto-mode-alist)))
+	 (lcsym (intern-soft (downcase (symbol-name major-mode))))
+	 (lclist (and lcsym
+		      (not (eq lcsym major-mode))
+		      (rassq lcsym auto-mode-alist)
+		      (seq-filter
+		       (lambda (elt)
+			 (eq (cdr elt) lcsym))
+		       auto-mode-alist)))
+	 (shortsym (when (stringp mode-name)
+		     (intern-soft (concat (string-trim-right mode-name "/.*")
+					  "-mode"))))
+	 (lcshortsym (when (stringp mode-name)
+		       (intern-soft (downcase
+				     (concat
+				      (string-trim-right mode-name "/.*")
+				      "-mode")))))
+	 (shlist (and shortsym
+		      (not (eq shortsym major-mode))
+		      (not (eq shortsym lcsym))
+		      (rassq shortsym auto-mode-alist)
+		      (seq-filter
+		       (lambda (elt)
+			 (eq (cdr elt) shortsym))
+		       auto-mode-alist)))
+	 (lcshlist (and lcshortsym
+			(not (eq lcshortsym major-mode))
+			(not (eq lcshortsym lcsym))
+			(rassq lcshortsym auto-mode-alist)
+			(seq-filter
+			 (lambda (elt)
+			   (eq (cdr elt) lcshortsym))
+			 auto-mode-alist)))
+	 (exts (when (or mlist lclist shlist lcshlist)
+		 (seq-union (seq-map #'car lclist)
+			    (seq-union (seq-map #'car mlist)
+				       (seq-union (seq-map #'car lcshlist)
+						  (seq-map #'car shlist))))))
+	 (ed-exts (when exts
+		    (seq-map
+		     (lambda (elt)
+		       (concat "*" (string-trim  elt "\\\\" "\\\\'")))
+		     exts))))
+    ed-exts))
+
+(defvar tex--buffers-list nil)
+(defvar-local tex--old-syntax-function nil)
+
+(cl-defmethod xref-backend-references ((_backend (eql 'tex-etags)) identifier)
+  "Find references of IDENTIFIER in TeX buffers and files."
+  (require 'semantic/symref/grep)
+  (defvar semantic-symref-filepattern-alist)
+  (let (bufs texbufs
+             (mode major-mode))
+    (dolist (buf (buffer-list))
+      (if (eq (buffer-local-value 'major-mode buf) mode)
+          (push buf bufs)
+        (when (string-match-p ".*\\.[tT]e[xX]" (buffer-name buf))
+          (push buf texbufs))))
+    (unless (seq-set-equal-p tex--buffers-list bufs)
+      (let* ((amalist (tex--collect-file-extensions))
+	     (extlist (alist-get mode semantic-symref-filepattern-alist))
+	     (extlist-new (seq-uniq
+                           (seq-union amalist extlist #'string-match-p))))
+	(setq tex--buffers-list bufs)
+	(dolist (buf bufs)
+	  (when-let ((fbuf (buffer-file-name buf))
+		     (ext (file-name-extension fbuf))
+		     (finext (concat "*." ext))
+		     ((not (seq-find (lambda (elt) (string-match-p elt finext))
+				     extlist-new)))
+		     ((push finext extlist-new)))))
+	(unless (seq-set-equal-p extlist-new extlist)
+	  (setf (alist-get mode semantic-symref-filepattern-alist)
+                extlist-new))))
+    (let* (setsyntax
+           (punct (with-syntax-table (tex-find-references-syntax-table)
+                    (seq-positions identifier (list ?w ?_)
+			           (lambda (elt sycode)
+			             (not (memq (char-syntax elt) sycode))))))
+           (end (and punct
+                     (memq (1- (length identifier)) punct)
+                     (> (length identifier) 1)
+                     (concat "\\("
+                             (regexp-quote
+                              (string (elt identifier
+                                           (1- (length identifier)))))
+                             "\\)")))
+           (beg (and punct
+                     (memq 0 punct)
+                     (concat "\\("
+                             (regexp-quote (string (elt identifier 0)))
+                             "\\)")))
+           (text-mode-hook
+            (if (or end beg)
+                (progn
+                  (tex-xref-syntax-function identifier beg end)
+                  (setq setsyntax (lambda ()
+		                    (setq-local syntax-propertize-function
+                                                tex--xref-syntax-fun)
+                                    (setq-local TeX-style-hook-applied-p t)))
+                  (cons setsyntax text-mode-hook))
+              text-mode-hook)))
+      (unless (memq 'doctex-mode (derived-mode-all-parents mode))
+        (setq bufs (append texbufs bufs)))
+      (when (or end beg)
+        (dolist (buf bufs)
+          (with-current-buffer buf
+            (unless (local-variable-p 'tex--old-syntax-function)
+              (setq tex--old-syntax-function syntax-propertize-function))
+            (setq-local syntax-propertize-function
+                        tex--xref-syntax-fun)
+            (syntax-ppss-flush-cache (point-min)))))
+      (unwind-protect
+          (xref-backend-references nil identifier)
+        (when (or end beg)
+          (dolist (buf bufs)
+            (with-current-buffer buf
+              (when buffer-file-truename
+                (setq-local syntax-propertize-function
+                            tex--old-syntax-function)
+                (syntax-ppss-flush-cache (point-min))))))))))
+
 (make-obsolete-variable 'tex-mode-load-hook
                         "use `with-eval-after-load' instead." "28.1")
 (run-hooks 'tex-mode-load-hook)
-- 
2.39.4


^ permalink raw reply related	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-14 21:24                                                 ` Dmitry Gutov
@ 2024-05-16 18:18                                                   ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-20  0:21                                                     ` Dmitry Gutov
  0 siblings, 1 reply; 106+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-16 18:18 UTC (permalink / raw)
  To: Dmitry Gutov
  Cc: 53749, Ikumi Keita, David Fussner, Arash Esbati, stefankangas,
	Tassilo Horn, Eli Zaretskii

>> IIUC, in the `syntax-needed` case, the let-binding of
>> `inhibit-modification-hooks` is just not useful very (4-7% is not worth
>> the trouble), so its purpose is to speed up the other case.
> 4-10% is the improvement for both cases (the "syntax needed" and not).

Hmm... not sure it's worth the trouble, then.
Also, it might be worth trying to see where those 4-10% are spent: this
is done in a temp buffer where there should presumably be very little
need for before/after-change-functions, so maybe we can get rid of the
specific offenders rather than inhibit all modification hooks.

> Also, I'm eyeing another performance improvement (simplifying file type
> detection) - the call to set-auto-mode is not fast. Simply commenting this
> call out improves the performance by 4x or so - but we'll need a simpler
> version of it instead, of course.
>
> And with the above change (commenting out the set-auto-mode call), the
> difference that the inhibit-modification-hooks hack makes is amplified: it
> can get up to 20%.

I wonder what we do during those 20% of the time if the buffer is left
in fundamental-mode.

>> Also, what about the other two bindings of `inhibit-modification-hooks`?
> The other two are used while the contents of the Xref buffer are printed (or
> re-printed), so there's none of the syntax-ppss complications there. The
> performance difference is 8.5% in my last measurement.

Is this 8.5% of a function that's fast anyway of 8.5% of a function
which takes a fair bit of time?  Again, I'm not sure it's worth
the trouble.  But as a start, every such binding should have a comment
mentioning that it's there only to gain a few percents of performance.


        Stefan






^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-16 18:18                                                   ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-05-20  0:21                                                     ` Dmitry Gutov
  2024-05-20  2:38                                                       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Dmitry Gutov @ 2024-05-20  0:21 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: 53749, Ikumi Keita, David Fussner, Arash Esbati, stefankangas,
	Tassilo Horn, Eli Zaretskii

On 16/05/2024 21:18, Stefan Monnier via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:
>>> IIUC, in the `syntax-needed` case, the let-binding of
>>> `inhibit-modification-hooks` is just not useful very (4-7% is not worth
>>> the trouble), so its purpose is to speed up the other case.
>> 4-10% is the improvement for both cases (the "syntax needed" and not).
> 
> Hmm... not sure it's worth the trouble, then.
> Also, it might be worth trying to see where those 4-10% are spent: this
> is done in a temp buffer where there should presumably be very little
> need for before/after-change-functions, so maybe we can get rid of the
> specific offenders rather than inhibit all modification hooks.

Given the relatively low percentages, it might be difficult to glance 
from a profiler report. I was assuming the time was mostly spent in 
syntax-ppss-flush-cache, but the function is pretty simple.

>> Also, I'm eyeing another performance improvement (simplifying file type
>> detection) - the call to set-auto-mode is not fast. Simply commenting this
>> call out improves the performance by 4x or so - but we'll need a simpler
>> version of it instead, of course.
>>
>> And with the above change (commenting out the set-auto-mode call), the
>> difference that the inhibit-modification-hooks hack makes is amplified: it
>> can get up to 20%.
> 
> I wonder what we do during those 20% of the time if the buffer is left
> in fundamental-mode.

Good question.

>>> Also, what about the other two bindings of `inhibit-modification-hooks`?
>> The other two are used while the contents of the Xref buffer are printed (or
>> re-printed), so there's none of the syntax-ppss complications there. The
>> performance difference is 8.5% in my last measurement.
> 
> Is this 8.5% of a function that's fast anyway of 8.5% of a function
> which takes a fair bit of time?

When there are a lot of matches, it can take some time. Note that 100% 
in this case is the whole list-files-do-search-print-results pipeline, 
not just the printing phase. So printing is sped up by more than 8% (my 
last test says it's by 27%).

> But as a start, every such binding should have a comment
> mentioning that it's there only to gain a few percents of performance.

Sure.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-20  0:21                                                     ` Dmitry Gutov
@ 2024-05-20  2:38                                                       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-25  7:57                                                         ` Eli Zaretskii
  2024-05-25 23:01                                                         ` Dmitry Gutov
  0 siblings, 2 replies; 106+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-05-20  2:38 UTC (permalink / raw)
  To: Dmitry Gutov
  Cc: 53749, Ikumi Keita, David Fussner, Arash Esbati, stefankangas,
	Tassilo Horn, Eli Zaretskii

>> Hmm... not sure it's worth the trouble, then.
>> Also, it might be worth trying to see where those 4-10% are spent: this
>> is done in a temp buffer where there should presumably be very little
>> need for before/after-change-functions, so maybe we can get rid of the
>> specific offenders rather than inhibit all modification hooks.
> Given the relatively low percentages, it might be difficult to glance from
> a profiler report. I was assuming the time was mostly spent in
> syntax-ppss-flush-cache, but the function is pretty simple.

Rather than a profiler report, maybe a better approach would be to
remove things from the non-inhibited-modification-hooks paths and see
how/if they change the performance.
E.g. replace the `inhibit-modification-hooks` binding by one that binds
`before/after-change-functions` to nil.

>> I wonder what we do during those 20% of the time if the buffer is left
>> in fundamental-mode.
> Good question.

It's probably the better case to investigate since it might be easier to
see the effects.

>>>> Also, what about the other two bindings of `inhibit-modification-hooks`?
>>> The other two are used while the contents of the Xref buffer are printed (or
>>> re-printed), so there's none of the syntax-ppss complications there. The
>>> performance difference is 8.5% in my last measurement.
>> Is this 8.5% of a function that's fast anyway of 8.5% of a function
>> which takes a fair bit of time?
> When there are a lot of matches, it can take some time. Note that 100% in
> this case is the whole list-files-do-search-print-results pipeline, not just
> the printing phase. So printing is sped up by more than 8% (my last test
> says it's by 27%).

I guess during printing if it's done in many small steps we may indeed
run modification hooks many times, so that could explain the
higher percentage.

It still seems hard to justify 27% since those modification hooks should
usually do nothing, AFAICT.  Maybe there's something silly going on.


        Stefan






^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-20  2:38                                                       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-05-25  7:57                                                         ` Eli Zaretskii
  2024-06-05  9:46                                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-25 23:01                                                         ` Dmitry Gutov
  1 sibling, 1 reply; 106+ messages in thread
From: Eli Zaretskii @ 2024-05-25  7:57 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 53749, ikumi, tsdh, dfussner, arash, stefankangas, dgutov

How should we proceed about this bug report?  Is David's last
changeset acceptable or isn't it?

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: 53749@debbugs.gnu.org,  Ikumi Keita <ikumi@ikumi.que.jp>,  David Fussner
>  <dfussner@googlemail.com>,  Arash Esbati <arash@gnu.org>,
>   stefankangas@gmail.com,  Tassilo Horn <tsdh@gnu.org>,  Eli Zaretskii
>  <eliz@gnu.org>
> Date: Sun, 19 May 2024 22:38:45 -0400
> 
> >> Hmm... not sure it's worth the trouble, then.
> >> Also, it might be worth trying to see where those 4-10% are spent: this
> >> is done in a temp buffer where there should presumably be very little
> >> need for before/after-change-functions, so maybe we can get rid of the
> >> specific offenders rather than inhibit all modification hooks.
> > Given the relatively low percentages, it might be difficult to glance from
> > a profiler report. I was assuming the time was mostly spent in
> > syntax-ppss-flush-cache, but the function is pretty simple.
> 
> Rather than a profiler report, maybe a better approach would be to
> remove things from the non-inhibited-modification-hooks paths and see
> how/if they change the performance.
> E.g. replace the `inhibit-modification-hooks` binding by one that binds
> `before/after-change-functions` to nil.
> 
> >> I wonder what we do during those 20% of the time if the buffer is left
> >> in fundamental-mode.
> > Good question.
> 
> It's probably the better case to investigate since it might be easier to
> see the effects.
> 
> >>>> Also, what about the other two bindings of `inhibit-modification-hooks`?
> >>> The other two are used while the contents of the Xref buffer are printed (or
> >>> re-printed), so there's none of the syntax-ppss complications there. The
> >>> performance difference is 8.5% in my last measurement.
> >> Is this 8.5% of a function that's fast anyway of 8.5% of a function
> >> which takes a fair bit of time?
> > When there are a lot of matches, it can take some time. Note that 100% in
> > this case is the whole list-files-do-search-print-results pipeline, not just
> > the printing phase. So printing is sped up by more than 8% (my last test
> > says it's by 27%).
> 
> I guess during printing if it's done in many small steps we may indeed
> run modification hooks many times, so that could explain the
> higher percentage.
> 
> It still seems hard to justify 27% since those modification hooks should
> usually do nothing, AFAICT.  Maybe there's something silly going on.
> 
> 
>         Stefan
> 
> 





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-20  2:38                                                       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-05-25  7:57                                                         ` Eli Zaretskii
@ 2024-05-25 23:01                                                         ` Dmitry Gutov
  1 sibling, 0 replies; 106+ messages in thread
From: Dmitry Gutov @ 2024-05-25 23:01 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: 53749, Ikumi Keita, David Fussner, Arash Esbati, stefankangas,
	Tassilo Horn, Eli Zaretskii

On 20/05/2024 05:38, Stefan Monnier via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:
>>> Hmm... not sure it's worth the trouble, then.
>>> Also, it might be worth trying to see where those 4-10% are spent: this
>>> is done in a temp buffer where there should presumably be very little
>>> need for before/after-change-functions, so maybe we can get rid of the
>>> specific offenders rather than inhibit all modification hooks.
>> Given the relatively low percentages, it might be difficult to glance from
>> a profiler report. I was assuming the time was mostly spent in
>> syntax-ppss-flush-cache, but the function is pretty simple.
> 
> Rather than a profiler report, maybe a better approach would be to
> remove things from the non-inhibited-modification-hooks paths and see
> how/if they change the performance.
> E.g. replace the `inhibit-modification-hooks` binding by one that binds
> `before/after-change-functions` to nil.
> 
>>> I wonder what we do during those 20% of the time if the buffer is left
>>> in fundamental-mode.
>> Good question.
> 
> It's probably the better case to investigate since it might be easier to
> see the effects.

Revisiting this, I haven't been able to reproduce the 20% number. :-(

The effect of that specific inhibit-modification-hooks binding seems to 
stay around 4-8%, and it's actually on the higher end when the 
set-auto-mode call it present (probably due to text manipulation inside it).

Binding before/after-change-functions, both of the hooks have their 
impact - one more than the other, but like 60/40. Maybe just funcall 
overhead.

>>>>> Also, what about the other two bindings of `inhibit-modification-hooks`?
>>>> The other two are used while the contents of the Xref buffer are printed (or
>>>> re-printed), so there's none of the syntax-ppss complications there. The
>>>> performance difference is 8.5% in my last measurement.
>>> Is this 8.5% of a function that's fast anyway of 8.5% of a function
>>> which takes a fair bit of time?
>> When there are a lot of matches, it can take some time. Note that 100% in
>> this case is the whole list-files-do-search-print-results pipeline, not just
>> the printing phase. So printing is sped up by more than 8% (my last test
>> says it's by 27%).
> 
> I guess during printing if it's done in many small steps we may indeed
> run modification hooks many times, so that could explain the
> higher percentage.
> 
> It still seems hard to justify 27% since those modification hooks should
> usually do nothing, AFAICT.  Maybe there's something silly going on.

On this step (xref--show-common-initialize) the numbers still hold, 
however. What's different, is that replacing the 
inhibit-modification-hooks with two (before-change-functions and 
after-change-functions both to nil) doesn't have a similar effect. Which 
makes sense, since the buffer is almost in fundamental-mode, both hooks 
are nil there.

Binding create-lockfiles or select-active-regions to nil doesn't have 
any impact. And replacing the use of all of the above with 
combine-change-calls makes performance worse.

If we're going to continue this subthread, it's probably better to move 
it somewhere else (separate bug, or emacs-devel).





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-05-25  7:57                                                         ` Eli Zaretskii
@ 2024-06-05  9:46                                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-06-08 12:38                                                             ` Eli Zaretskii
                                                                               ` (2 more replies)
  0 siblings, 3 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-06-05  9:46 UTC (permalink / raw)
  To: Eli Zaretskii
  Cc: 53749, ikumi, tsdh, arash, stefankangas, dgutov, Stefan Monnier

[-- Attachment #1: Type: text/plain, Size: 2999 bytes --]

Hi Eli, Stefan, and Dmitry,

In case the changeset might prove acceptable for version 30, I attach
the latest patch, which clears out the code I was using to simplify
testing of the AUCTeX modes. I can if requested send a patch for the
manual etags tests, also, in case that might prove helpful down the
line.

Best, David.

On Sat, 25 May 2024 at 12:01, Eli Zaretskii <eliz@gnu.org> wrote:
>
> How should we proceed about this bug report?  Is David's last
> changeset acceptable or isn't it?
>
> > From: Stefan Monnier <monnier@iro.umontreal.ca>
> > Cc: 53749@debbugs.gnu.org,  Ikumi Keita <ikumi@ikumi.que.jp>,  David Fussner
> >  <dfussner@googlemail.com>,  Arash Esbati <arash@gnu.org>,
> >   stefankangas@gmail.com,  Tassilo Horn <tsdh@gnu.org>,  Eli Zaretskii
> >  <eliz@gnu.org>
> > Date: Sun, 19 May 2024 22:38:45 -0400
> >
> > >> Hmm... not sure it's worth the trouble, then.
> > >> Also, it might be worth trying to see where those 4-10% are spent: this
> > >> is done in a temp buffer where there should presumably be very little
> > >> need for before/after-change-functions, so maybe we can get rid of the
> > >> specific offenders rather than inhibit all modification hooks.
> > > Given the relatively low percentages, it might be difficult to glance from
> > > a profiler report. I was assuming the time was mostly spent in
> > > syntax-ppss-flush-cache, but the function is pretty simple.
> >
> > Rather than a profiler report, maybe a better approach would be to
> > remove things from the non-inhibited-modification-hooks paths and see
> > how/if they change the performance.
> > E.g. replace the `inhibit-modification-hooks` binding by one that binds
> > `before/after-change-functions` to nil.
> >
> > >> I wonder what we do during those 20% of the time if the buffer is left
> > >> in fundamental-mode.
> > > Good question.
> >
> > It's probably the better case to investigate since it might be easier to
> > see the effects.
> >
> > >>>> Also, what about the other two bindings of `inhibit-modification-hooks`?
> > >>> The other two are used while the contents of the Xref buffer are printed (or
> > >>> re-printed), so there's none of the syntax-ppss complications there. The
> > >>> performance difference is 8.5% in my last measurement.
> > >> Is this 8.5% of a function that's fast anyway of 8.5% of a function
> > >> which takes a fair bit of time?
> > > When there are a lot of matches, it can take some time. Note that 100% in
> > > this case is the whole list-files-do-search-print-results pipeline, not just
> > > the printing phase. So printing is sped up by more than 8% (my last test
> > > says it's by 27%).
> >
> > I guess during printing if it's done in many small steps we may indeed
> > run modification hooks many times, so that could explain the
> > higher percentage.
> >
> > It still seems hard to justify 27% since those modification hooks should
> > usually do nothing, AFAICT.  Maybe there's something silly going on.
> >
> >
> >         Stefan
> >
> >

[-- Attachment #2: 0004-Provide-a-modified-xref-backend-for-TeX-buffers.patch --]
[-- Type: text/x-patch, Size: 32611 bytes --]

From d296126f36aabcaa30e43140d1c9b7c0e2912353 Mon Sep 17 00:00:00 2001
From: David Fussner <dfussner@googlemail.com>
Date: Wed, 5 Jun 2024 10:26:18 +0100
Subject: [PATCH] Provide a modified xref backend for TeX buffers

* lib-src/etags.c (TeX_commands): Improve parsing of commands in TeX
buffers.
(TEX_defenv): Expand list of commands to tag by default in TeX
buffers.
(TeX_help):
* doc/emacs/maintaining.texi (Tag Syntax): Document new tagged
commands.
(Identifier Search): Add note about semantic-symref-filepattern-alist,
auto-mode-alist, and xref-find-references.

* lisp/textmodes/tex-mode.el (tex-font-lock-suscript): Test for
underscore in expl3 files and regions, disable subscript face there.
(tex-common-initialization): Set up xref backend for in-tree TeX
modes. Detect expl3 files, and in others set up a list of expl3
regions.
(tex-expl-buffer-parse): New function called in previous.
(tex-expl-buffer-p): New var to hold the result of previous.
(tex-expl-region-set): New function added to
'syntax-propertize-extend-region-functions' hook.
(tex-expl-region-list): New var to hold the result of previous.
(tex--xref-backend): New function to identify the xref backend.
(tex--thing-at-point, tex-thingatpt--beginning-of-symbol)
(tex-thingatpt--end-of-symbol, tex--bounds-of-symbol-at-point):
New functions to return 'thing-at-point' for xref backend.
(tex-thingatpt-exclude-chars): New var to do the same.
(xref-backend-identifier-at-point): New TeX backend method to provide
symbols for processing by xref.
(xref-backend-identifier-completion-table)
(xref-backend-identifier-completion-ignore-case)
(xref-backend-definitions, xref-backend-apropos): Placeholders to
call the standard 'etags' xref backend methods.
(xref-backend-references): Wrapper to call the default xref backend
method, finding as many relevant files as possible and using a bespoke
syntax-propertize-function when required.
(tex--collect-file-extensions, tex-xref-syntax-function): Helper
functions for previous.
(tex-find-references-syntax-table, tex--buffers-list)
(tex--xref-syntax-fun, tex--old-syntax-function): New vars for same.
---
 doc/emacs/maintaining.texi |  39 +++-
 lib-src/etags.c            | 191 ++++++++++++++++++--
 lisp/textmodes/tex-mode.el | 358 ++++++++++++++++++++++++++++++++++++-
 3 files changed, 567 insertions(+), 21 deletions(-)

diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 579098c81b1..a064103aa25 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -2529,6 +2529,15 @@ Identifier Search
 referenced.  The XREF mode commands are available in this buffer, see
 @ref{Xref Commands}.
 
+When invoked in a buffer whose major mode uses the @code{etags} backend,
+@kbd{M-?} searches files and buffers whose major mode matches that of
+the original buffer.  It guesses that mode from file extensions, so if
+@kbd{M-?} seems to be skipping relevant buffers or files, try
+customizing either the variable @code{semantic-symref-filepattern-alist}
+(if your buffer's major mode already has an entry in it), or
+@code{auto-mode-alist} (if not), thereby informing @code{xref} of the
+missing extensions (@pxref{Choosing Modes}).
+
 @vindex xref-auto-jump-to-first-xref
   If the value of the variable @code{xref-auto-jump-to-first-xref} is
 @code{t}, @code{xref-find-references} automatically jumps to the first
@@ -2747,10 +2756,32 @@ Tag Syntax
 @item
 In @LaTeX{} documents, the arguments for @code{\chapter},
 @code{\section}, @code{\subsection}, @code{\subsubsection},
-@code{\eqno}, @code{\label}, @code{\ref}, @code{\cite},
-@code{\bibitem}, @code{\part}, @code{\appendix}, @code{\entry},
-@code{\index}, @code{\def}, @code{\newcommand}, @code{\renewcommand},
-@code{\newenvironment} and @code{\renewenvironment} are tags.
+@code{\eqno}, @code{\label}, @code{\ref}, @code{\Ref}, @code{\footref},
+@code{\cite}, @code{\bibitem}, @code{\part}, @code{\appendix},
+@code{\entry}, @code{\index}, @code{\def}, @code{\edef}, @code{\gdef},
+@code{\xdef}, @code{\newcommand}, @code{\renewcommand},
+@code{\newenvironment}, @code{\renewenvironment},
+@code{\DeclareRobustCommand}, @code{\newrobustcmd},
+@code{\renewrobustcmd}, @code{\providecommand},
+@code{\providerobustcmd}, @code{\NewDocumentCommand},
+@code{\RenewDocumentCommand}, @code{\ProvideDocumentCommand},
+@code{\DeclareDocumentCommand}, @code{\NewExpandableDocumentCommand},
+@code{\RenewExpandableDocumentCommand},
+@code{\ProvideExpandableDocumentCommand},
+@code{\DeclareExpandableDocumentCommand},
+@code{\NewDocumentEnvironment}, @code{\RenewDocumentEnvironment},
+@code{\ProvideDocumentEnvironment}, @code{\DeclareDocumentEnvironment},
+@code{\csdef}, @code{\csedef}, @code{\csgdef}, @code{\csxdef},
+@code{\csletcs}, @code{\cslet}, @code{\letcs}, @code{\let},
+@code{\cs_new_protected_nopar}, @code{\cs_new_protected},
+@code{\cs_new_nopar}, @code{\cs_new_eq}, @code{\cs_new},
+@code{\cs_set_protected_nopar}, @code{\cs_set_protected},
+@code{\cs_set_nopar}, @code{\cs_set_eq}, @code{\cs_set},
+@code{\cs_gset_protected_nopar}, @code{\cs_gset_protected},
+@code{\cs_gset_nopar}, @code{\cs_gset_eq}, @code{\cs_gset},
+@code{\cs_generate_from_arg_count}, and @code{\cs_generate_variant} are
+tags.  So too are the arguments of any starred variants of these
+commands.
 
 Other commands can make tags as well, if you specify them in the
 environment variable @env{TEXTAGS} before invoking @command{etags}.  The
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 03bc55de03d..6bc734e7df0 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -793,11 +793,27 @@ #define STDIN 0x1001		/* returned by getopt_long on --parse-stdin */
 static const char *TeX_suffixes [] =
   { "bib", "clo", "cls", "ltx", "sty", "TeX", "tex", NULL };
 static const char TeX_help [] =
-"In LaTeX text, the argument of any of the commands '\\chapter',\n\
-'\\section', '\\subsection', '\\subsubsection', '\\eqno', '\\label',\n\
-'\\ref', '\\cite', '\\bibitem', '\\part', '\\appendix', '\\entry',\n\
-'\\index', '\\def', '\\newcommand', '\\renewcommand',\n\
-'\\newenvironment' or '\\renewenvironment' is a tag.\n\
+"In LaTeX text, the argument of the commands '\\chapter', '\\section',\n\
+'\\subsection', '\\subsubsection', '\\eqno', '\\label', '\\ref',\n\
+'\\Ref', '\\footref', '\\cite', '\\bibitem', '\\part', '\\appendix',\n\
+'\\entry', '\\index', '\\def', '\\edef', '\\gdef', '\\xdef',\n\
+'\\newcommand', '\\renewcommand', '\\newrobustcmd', '\\renewrobustcmd',\n\
+'\\newenvironment', '\\renewenvironment', '\\DeclareRobustCommand',\n\
+'\\providecommand', '\\providerobustcmd', '\\NewDocumentCommand',\n\
+'\\RenewDocumentCommand', '\\ProvideDocumentCommand',\n\
+'\\DeclareDocumentCommand', '\\NewExpandableDocumentCommand',\n\
+'\\RenewExpandableDocumentCommand', '\\ProvideExpandableDocumentCommand',\n\
+'\\DeclareExpandableDocumentCommand', '\\NewDocumentEnvironment',\n\
+'\\RenewDocumentEnvironment', '\\ProvideDocumentEnvironment',\n\
+'\\DeclareDocumentEnvironment','\\csdef', '\\csedef', '\\csgdef',\n\
+'\\csxdef', '\\csletcs', '\\cslet', '\\letcs', '\\let',\n\
+'\\cs_new_protected_nopar', '\\cs_new_protected', '\\cs_new_nopar',\n\
+'\\cs_new_eq', '\\cs_new', '\\cs_set_protected_nopar',\n\
+'\\cs_set_protected', '\\cs_set_nopar', '\\cs_set_eq', '\\cs_set',\n\
+'\\cs_gset_protected_nopar', '\\cs_gset_protected', '\\cs_gset_nopar',\n\
+'\\cs_gset_eq', '\\cs_gset', '\\cs_generate_from_arg_count', or\n\
+'\\cs_generate_variant' is a tag.  So is the argument of any starred\n\
+variant of these commands.\n\
 \n\
 Other commands can be specified by setting the environment variable\n\
 'TEXTAGS' to a colon-separated list like, for example,\n\
@@ -5740,11 +5756,25 @@ Scheme_functions (FILE *inf)
 static linebuffer *TEX_toktab = NULL; /* Table with tag tokens */
 
 /* Default set of control sequences to put into TEX_toktab.
-   The value of environment var TEXTAGS is prepended to this.  */
+   The value of environment var TEXTAGS is prepended to this.
+   (2024) Add variants of '\def', some additional LaTeX (and
+   former xparse) commands, common variants from the
+   'etoolbox' package, and the main expl3 commands. */
 static const char *TEX_defenv = "\
-:chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\
-:part:appendix:entry:index:def\
-:newcommand:renewcommand:newenvironment:renewenvironment";
+:label:ref:Ref:footref:chapter:section:subsection:subsubsection:eqno:cite\
+:bibitem:part:appendix:entry:index:def:edef:gdef:xdef:newcommand:renewcommand\
+:newenvironment:renewenvironment:DeclareRobustCommand:renewrobustcmd\
+:newrobustcmd:providecommand:providerobustcmd:NewDocumentCommand\
+:RenewDocumentCommand:ProvideDocumentCommand:DeclareDocumentCommand\
+:NewExpandableDocumentCommand:RenewExpandableDocumentCommand\
+:ProvideExpandableDocumentCommand:DeclareExpandableDocumentCommand\
+:NewDocumentEnvironment:RenewDocumentEnvironment\
+:ProvideDocumentEnvironment:DeclareDocumentEnvironment:csdef\
+:csedef:csgdef:csxdef:csletcs:cslet:letcs:let:cs_new_protected_nopar\
+:cs_new_protected:cs_new_nopar:cs_new_eq:cs_new:cs_set_protected_nopar\
+:cs_set_protected:cs_set_nopar:cs_set_eq:cs_set:cs_gset_protected_nopar\
+:cs_gset_protected:cs_gset_nopar:cs_gset_eq:cs_gset\
+:cs_generate_from_arg_count:cs_generate_variant";
 
 static void TEX_decode_env (const char *, const char *);
 
@@ -5803,19 +5833,139 @@ TeX_commands (FILE *inf)
 	      {
 		char *p;
 		ptrdiff_t namelen, linelen;
-		bool opgrp = false;
+		bool opgrp = false, one_esc = false, is_explthree = false;
 
 		cp = skip_spaces (cp + key->len);
+
+		/* 1. The canonical expl3 syntax looks something like this:
+		   \cs_new:Npn \__hook_tl_gput:Nn { \ERROR }.  First, if we
+		   want to tag any such commands, we include only the part
+		   before the colon (cs_new) in TEX_defenv or TEXTAGS.  Second,
+		   etags skips the argument specifier (including the colon)
+		   after the tag token, so that it doesn't become the tag name.
+		   Third, we set the boolean 'is_explthree' to true so that we
+		   can remove the argument specifier from the actual tag name
+		   (__hook_tl_gput).  This all allows us to include expl3
+		   constructs in TEX_defenv or in the environment variable
+		   TEXTAGS without requiring a change of separator, and it also
+		   allows us to find the definition of variant commands (with
+		   different argument specifiers) defined using, for example,
+		   \cs_generate_variant:Nn.  Please note that the expl3 spec
+		   requires etags to pay more attention to whitespace in the
+		   code.
+
+		   2. We also automatically remove the asterisk from starred
+		   variants of all commands, without the need to include the
+		   starred commands explicitly in TEX_defenv or TEXTAGS. */
+		if (*cp == ':')
+		  {
+		    while (!c_isspace (*cp) && *cp != TEX_opgrp)
+		      cp++;
+		    cp = skip_spaces (cp);
+		    is_explthree = true;
+		  }
+		else if (*cp == '*')
+		  cp++;
+
+		/* Skip the optional arguments to commands in the tags list so
+		   that these arguments don't end up as the name of the tag.
+		   The name will instead come from the argument in curly braces
+		   that follows the optional ones.  The '\let' command gets
+		   special treatment. */
+		while (*cp != '\0' && *cp != '%'
+		       && !streq (key->buffer, "let"))
+		  {
+		    if (*cp == '[')
+		      {
+			while (*cp != ']' && *cp != '\0' && *cp != '%')
+			  cp++;
+		      }
+		    else if (*cp == '(')
+		      {
+			while (*cp != ')' && *cp != '\0' && *cp != '%')
+			  cp++;
+		      }
+		    else if (*cp == ']' || *cp == ')')
+		      cp++;
+		    else
+		      break;
+		  }
 		if (*cp == TEX_opgrp)
 		  {
 		    opgrp = true;
 		    cp++;
+		    cp = skip_spaces (cp); /* For expl3 code. */
 		  }
+
+		/* Removing the TeX escape character from tag names simplifies
+		   things for editors finding tagged commands in TeX buffers.
+		   This applies to Emacs but also to the tag-finding behavior
+		   of at least some of the editors that use ctags, though in
+		   the latter case this will remain suboptimal.  The
+		   undocumented ctags option '--no-duplicates' may help. */
+		if (*cp == TEX_esc)
+		  {
+		    cp++;
+		    one_esc = true;
+		  }
+
+		/* Testing !c_isspace && !c_ispunct is simpler, but halts
+		   processing at too many places.  The list as it stands tries
+		   both to ensure that tag names will derive from macro names
+		   rather than from optional parameters to those macros, and
+		   also to return findable names while still allowing for
+		   unorthodox constructs. */
 		for (p = cp;
-		     (!c_isspace (*p) && *p != '#' &&
-		      *p != TEX_opgrp && *p != TEX_clgrp);
+		     (!c_isspace (*p) && *p != '#' && *p != '=' &&
+		      *p != '[' && *p != '(' && *p != TEX_opgrp &&
+		      *p != TEX_clgrp && *p != '"' && *p != '\'' &&
+		      *p != '%' && *p != ',' && *p != '|' && *p != '$');
 		     p++)
-		  continue;
+		  /* In expl3 code we remove the argument specification from
+		     the tag name.  More generally we allow only one (deleted)
+		     escape char in a tag name, which (primarily) enables
+		     tagging a TeX command's different, possibly temporary,
+		     '\let' bindings. */
+		  if (is_explthree && *p == ':')
+		    break;
+		  else if (*p == TEX_esc)
+		    { /* Second part of test is for, e.g., \cslet. */
+		      if (!one_esc && !opgrp)
+			{
+			  one_esc = true;
+			  continue;
+			}
+		      else
+			break;
+		    }
+		  else
+		    continue;
+		/* For TeX files, tags without a name are basically cruft, and
+		   in some situations they can produce spurious and confusing
+		   matches.  Try to catch as many cases as possible where a
+		   command name is of the form '\(', but avoid, as far as
+		   possible, the spurious matches. */
+		if (p == cp)
+		  {
+		    switch (*p)
+		      { /* Include =? */
+		      case '(': case '[': case '"': case '\'':
+		      case '\\': case '!': case '=': case ',':
+		      case '|': case '$':
+			p++;
+			break;
+		      case '{': case '}': case '<': case '>':
+			if (!opgrp)
+			  {
+			      p++;
+			      if (*p == '\0' || *p == '%')
+				goto tex_next_line;
+			  }
+			break;
+		      default:
+			break;
+		      }
+		  }
 		namelen = p - cp;
 		linelen = lb.len;
 		if (!opgrp || *p == TEX_clgrp)
@@ -5824,9 +5974,18 @@ TeX_commands (FILE *inf)
 		      p++;
 		    linelen = p - lb.buffer + 1;
 		  }
-		make_tag (cp, namelen, true,
-			  lb.buffer, linelen, lineno, linecharno);
-		goto tex_next_line; /* We only tag a line once */
+		if (namelen)
+		  make_tag (cp, namelen, true,
+			    lb.buffer, linelen, lineno, linecharno);
+		/* Lines with more than one \def or \let are surprisingly
+		   common in TeX files, especially in the system files that
+		   form the basis of the various TeX formats.  This tags them
+		   all. */
+		/* goto tex_next_line; /\* We only tag a line once *\/ */
+		while (*cp != '\0' && *cp != '%' && *cp != TEX_esc)
+		  cp++;
+		if (*cp != TEX_esc)
+		  goto tex_next_line;
 	      }
 	}
     tex_next_line:
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index 97c950267c6..fbf08840699 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -636,6 +636,14 @@ tex-font-lock-keywords-2
 	      3 '(tex-font-lock-append-prop 'bold) 'append)))))
    "Gaudy expressions to highlight in TeX modes.")
 
+(defvar-local tex-expl-region-list nil
+  "List of region boundaries where expl3 syntax is active.
+It will be nil in buffers where expl3 syntax is always active, e.g.,
+expl3 classes or packages.")
+
+(defvar-local tex-expl-buffer-p nil
+  "Non-nil in buffers where expl3 syntax is always active.")
+
 (defun tex-font-lock-suscript (pos)
   (unless (or (memq (get-text-property pos 'face)
 		    '(font-lock-constant-face font-lock-builtin-face
@@ -645,7 +653,17 @@ tex-font-lock-suscript
 		    (pos pos))
 		(while (eq (char-before pos) ?\\)
 		  (setq pos (1- pos) odd (not odd)))
-		odd))
+		odd)
+              ;; Check if POS is in an expl3 syntax region or an expl3 buffer
+              (when (eq (char-after pos) ?_)
+                (or tex-expl-buffer-p
+                    (and
+                     tex-expl-region-list
+                     (catch 'result
+	               (dolist (range tex-expl-region-list)
+	                 (and (> pos (car range))
+	                      (< pos (cdr range))
+                              (throw 'result t))))))))
     (if (eq (char-after pos) ?_)
 	`(face subscript display (raise ,(car tex-font-script-display)))
       `(face superscript display (raise ,(cadr tex-font-script-display))))))
@@ -1289,8 +1307,16 @@ tex-common-initialization
                 #'tex--prettify-symbols-compose-p)
   (setq-local syntax-propertize-function
 	      (syntax-propertize-rules latex-syntax-propertize-rules))
+  ;; Don't add extra processing to `syntax-propertize' in files where
+  ;; expl3 syntax is always active.
+  :after-hook (progn (tex-expl-buffer-parse)
+                     (unless tex-expl-buffer-p
+                       (add-hook 'syntax-propertize-extend-region-functions
+                                 #'tex-expl-region-set nil t)))
   ;; TABs in verbatim environments don't do what you think.
   (setq-local indent-tabs-mode nil)
+  ;; Set up xref backend in TeX buffers.
+  (add-hook 'xref-backend-functions #'tex--xref-backend nil t)
   ;; Other vars that should be buffer-local.
   (make-local-variable 'tex-command)
   (make-local-variable 'tex-start-of-header)
@@ -1936,6 +1962,36 @@ tex-count-words
 		(forward-sexp 1))))))
       (message "%s words" count))))
 
+(defun tex-expl-buffer-parse ()
+  "Identify buffers where expl3 syntax is always active."
+  (save-excursion
+    (goto-char (point-min))
+    (when (tex-search-noncomment
+	   (re-search-forward
+	    "\\\\\\(?:ExplFile\\|ProvidesExpl\\|__xparse_file\\)"
+	    nil t))
+      (setq tex-expl-buffer-p t))))
+
+(defun tex-expl-region-set (_beg _end)
+  "Create a list of regions where expl3 syntax is active.
+This function updates the list whenever `syntax-propertize' runs, and
+stores it in the buffer-local variable `tex-expl-region-list'.  The
+list will always be nil when the buffer visits an expl3 file, e.g., an
+expl3 class or package, where expl3 syntax is always active."
+  (unless syntax-ppss--updated-cache;; Stop forward search running twice.
+    (setq tex-expl-region-list nil)
+    ;; Leaving this test here allows users to set `tex-expl-buffer-p'
+    ;; independently of the mode's automatic detection of an expl3 file.
+    (unless tex-expl-buffer-p
+      (goto-char (point-min))
+      (let ((case-fold-search nil))
+        (while (tex-search-noncomment
+                (search-forward "\\ExplSyntaxOn" nil t))
+          (let ((new-beg (point))
+                (new-end (or (tex-search-noncomment
+                              (search-forward "\\ExplSyntaxOff" nil t))
+                             (point-max))))
+            (push (cons new-beg new-end) tex-expl-region-list)))))))
 
 \f
 ;;; Invoking TeX in an inferior shell.
@@ -3742,6 +3798,306 @@ tex-chktex
       (process-send-region tex-chktex--process (point-min) (point-max))
       (process-send-eof tex-chktex--process))))
 
+\f
+;;; Xref backend
+
+;; Here we lightly adapt the default etags backend for xref so that
+;; the main xref user commands (including `xref-find-definitions',
+;; `xref-find-apropos', and `xref-find-references' [on M-., C-M-., and
+;; M-?, respectively]) work in TeX buffers.  The only methods we
+;; actually modify are `xref-backend-identifier-at-point' and
+;; `xref-backend-references'.  Many of the complications here, and in
+;; `etags' itself, are due to the necessity of parsing both the old
+;; TeX syntax and the new expl3 syntax, which will continue to appear
+;; together in documents for the foreseeable future.  Synchronizing
+;; Emacs and `etags' this way aims to improve the user experience "out
+;; of the box."
+
+(defvar tex-thingatpt-exclude-chars '(?\\ ?\{ ?\})
+  "Exclude these chars by default from TeX thing-at-point.
+
+The TeX `xref-backend-identifier-at-point' method uses the characters
+listed in this variable to decide on the default search string to
+present to the user who calls an `xref' command.  These characters
+become part of a regexp which always excludes them from that default
+string.  For the `xref' commands to function properly in TeX buffers, at
+least the TeX escape and the two TeX grouping characters should be
+listed here.  Should your TeX documents contain other characters which
+you want to exclude by default, then you can add them to the list,
+though you may wish to consult the functions
+`tex-thingatpt--beginning-of-symbol' and `tex-thingatpt--end-of-symbol'
+to see what the regexp already contains.  If your documents contain
+non-standard escape and grouping characters, then you can replace the
+three listed here with your own, thereby allowing the three standard
+characters to appear by default in search strings.  Please be aware,
+however, that the `etags' program only recognizes `\\' (92) and `!' (33)
+as escape characters in TeX documents, and if it detects the latter it
+also uses `<>' as the TeX grouping construct rather than `{}'.  Setting
+the escape and grouping chars to anything other than `\\=\\{}' or `!<>'
+will not be useful without changes to `etags', at least for commands
+that search tags tables, such as \\[xref-find-definitions] and \
+\\[xref-find-apropos].
+
+Should you wish to change the defaults, please also be aware that,
+without further modifications to tex-mode.el, the usual text-parsing
+routines for `font-lock' and the like won't work correctly, as the
+default escape and grouping characters are currently hard coded in many
+places.")
+
+;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
+;; AUCTeX is doing the same for its modes.
+(with-eval-after-load 'semantic/symref/grep
+  (defvar semantic-symref-filepattern-alist)
+  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
+                     "*.bbl" "*.drv" "*.hva")
+        semantic-symref-filepattern-alist)
+  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
+        semantic-symref-filepattern-alist)
+  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))
+
+(defun tex--xref-backend () 'tex-etags)
+
+(cl-defmethod xref-backend-identifier-at-point ((_backend (eql 'tex-etags)))
+  (require 'etags)
+  (tex--thing-at-point))
+
+;; The detection of `_' and `:' is a primitive method for determining
+;; whether point is on an expl3 construct.  It may fail in some
+;; instances.
+(defun tex--thing-at-point ()
+  "Demarcate `thing-at-point' for the TeX `xref' backend."
+  (let ((bounds (tex--bounds-of-symbol-at-point)))
+    (when bounds
+      (let ((texsym (buffer-substring-no-properties (car bounds) (cdr bounds))))
+        (if (and (not (string-match-p "reference" (symbol-name this-command)))
+                 (seq-contains-p texsym ?_)
+                 (seq-contains-p texsym ?:))
+            (seq-take texsym (seq-position texsym ?:))
+          texsym)))))
+
+(defun tex-thingatpt--beginning-of-symbol ()
+  (and
+   (re-search-backward (concat "[]["
+                               (mapconcat #'regexp-quote
+                                          (mapcar #'char-to-string
+                                                  tex-thingatpt-exclude-chars))
+                               "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))
+   (forward-char)))
+
+(defun tex-thingatpt--end-of-symbol ()
+  (and
+   (re-search-forward (concat "[]["
+                              (mapconcat #'regexp-quote
+                                          (mapcar #'char-to-string
+                                                  tex-thingatpt-exclude-chars))
+                              "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))
+   (backward-char)))
+
+(defun tex--bounds-of-symbol-at-point ()
+  "Simplify `bounds-of-thing-at-point' for TeX `xref' backend."
+  (let ((orig (point)))
+    (ignore-errors
+      (save-excursion
+	(tex-thingatpt--end-of-symbol)
+	(tex-thingatpt--beginning-of-symbol)
+	(let ((beg (point)))
+	  (if (<= beg orig)
+	      (let ((real-end
+		     (progn
+		       (tex-thingatpt--end-of-symbol)
+		       (point))))
+		(cond ((and (<= orig real-end) (< beg real-end))
+		       (cons beg real-end))
+                      ((and (= orig real-end) (= beg real-end))
+		       (cons beg (1+ beg)))))))))));; For 1-char TeX commands.
+
+(cl-defmethod xref-backend-identifier-completion-table ((_backend
+                                                         (eql 'tex-etags)))
+  (xref-backend-identifier-completion-table 'etags))
+
+(cl-defmethod xref-backend-identifier-completion-ignore-case ((_backend
+                                                               (eql
+                                                                'tex-etags)))
+  (xref-backend-identifier-completion-ignore-case 'etags))
+
+(cl-defmethod xref-backend-definitions ((_backend (eql 'tex-etags)) symbol)
+  (xref-backend-definitions 'etags symbol))
+
+(cl-defmethod xref-backend-apropos ((_backend (eql 'tex-etags)) pattern)
+  (xref-backend-apropos 'etags pattern))
+
+;; The `xref-backend-references' method requires more code than the
+;; others for at least two main reasons: TeX authors have typically been
+;; free in their invention of new file types with new suffixes, and they
+;; have also tended sometimes to include non-symbol characters in
+;; command names.  When combined with the default Semantic Symbol
+;; Reference API, these two characteristics of TeX code mean that a
+;; command like `xref-find-references' would often fail to find any hits
+;; for a symbol at point, including the one under point in the current
+;; buffer, or it would find only some instances and skip others.
+
+(defun tex-find-references-syntax-table ()
+  (let ((st (if (boundp 'TeX-mode-syntax-table)
+                 (make-syntax-table TeX-mode-syntax-table)
+               (make-syntax-table tex-mode-syntax-table))))
+    st))
+
+(defvar tex--xref-syntax-fun nil)
+
+(defun tex-xref-syntax-function (str beg end)
+  "Provide a bespoke `syntax-propertize-function' for \\[xref-find-references]."
+  (let* (grpb tempstr
+              (shrtstr (if end
+                           (progn
+                             (setq tempstr (seq-take str (1- (length str))))
+                             (if beg
+                                 (setq tempstr (seq-drop tempstr 1))
+                               tempstr))
+                         (seq-drop str 1)))
+              (grpa (if (and beg end)
+                        (prog1
+                            (list 1 "_")
+                          (setq grpb (list 2 "_")))
+                      (list 1 "_")))
+              (re (concat beg (regexp-quote shrtstr) end))
+              (temp-rule (if grpb
+                             (list re grpa grpb)
+                           (list re grpa))))
+    ;; Simple benchmarks suggested that the speed-up from compiling this
+    ;; function was nearly nil, so `eval' and its non-byte-compiled
+    ;; function remain.
+    (setq tex--xref-syntax-fun (eval
+                                `(syntax-propertize-rules ,temp-rule)))))
+
+(defun tex--collect-file-extensions ()
+  "Gather TeX file extensions from `auto-mode-alist'."
+  (let* ((mlist (when (rassq major-mode auto-mode-alist)
+		  (seq-filter
+		   (lambda (elt)
+		     (eq (cdr elt) major-mode))
+		   auto-mode-alist)))
+	 (lcsym (intern-soft (downcase (symbol-name major-mode))))
+	 (lclist (and lcsym
+		      (not (eq lcsym major-mode))
+		      (rassq lcsym auto-mode-alist)
+		      (seq-filter
+		       (lambda (elt)
+			 (eq (cdr elt) lcsym))
+		       auto-mode-alist)))
+	 (shortsym (when (stringp mode-name)
+		     (intern-soft (concat (string-trim-right mode-name "/.*")
+					  "-mode"))))
+	 (lcshortsym (when (stringp mode-name)
+		       (intern-soft (downcase
+				     (concat
+				      (string-trim-right mode-name "/.*")
+				      "-mode")))))
+	 (shlist (and shortsym
+		      (not (eq shortsym major-mode))
+		      (not (eq shortsym lcsym))
+		      (rassq shortsym auto-mode-alist)
+		      (seq-filter
+		       (lambda (elt)
+			 (eq (cdr elt) shortsym))
+		       auto-mode-alist)))
+	 (lcshlist (and lcshortsym
+			(not (eq lcshortsym major-mode))
+			(not (eq lcshortsym lcsym))
+			(rassq lcshortsym auto-mode-alist)
+			(seq-filter
+			 (lambda (elt)
+			   (eq (cdr elt) lcshortsym))
+			 auto-mode-alist)))
+	 (exts (when (or mlist lclist shlist lcshlist)
+		 (seq-union (seq-map #'car lclist)
+			    (seq-union (seq-map #'car mlist)
+				       (seq-union (seq-map #'car lcshlist)
+						  (seq-map #'car shlist))))))
+	 (ed-exts (when exts
+		    (seq-map
+		     (lambda (elt)
+		       (concat "*" (string-trim  elt "\\\\" "\\\\'")))
+		     exts))))
+    ed-exts))
+
+(defvar tex--buffers-list nil)
+(defvar-local tex--old-syntax-function nil)
+
+(cl-defmethod xref-backend-references ((_backend (eql 'tex-etags)) identifier)
+  "Find references of IDENTIFIER in TeX buffers and files."
+  (require 'semantic/symref/grep)
+  (defvar semantic-symref-filepattern-alist)
+  (let (bufs texbufs
+             (mode major-mode))
+    (dolist (buf (buffer-list))
+      (if (eq (buffer-local-value 'major-mode buf) mode)
+          (push buf bufs)
+        (when (string-match-p ".*\\.[tT]e[xX]" (buffer-name buf))
+          (push buf texbufs))))
+    (unless (seq-set-equal-p tex--buffers-list bufs)
+      (let* ((amalist (tex--collect-file-extensions))
+	     (extlist (alist-get mode semantic-symref-filepattern-alist))
+	     (extlist-new (seq-uniq
+                           (seq-union amalist extlist #'string-match-p))))
+	(setq tex--buffers-list bufs)
+	(dolist (buf bufs)
+	  (when-let ((fbuf (buffer-file-name buf))
+		     (ext (file-name-extension fbuf))
+		     (finext (concat "*." ext))
+		     ((not (seq-find (lambda (elt) (string-match-p elt finext))
+				     extlist-new)))
+		     ((push finext extlist-new)))))
+	(unless (seq-set-equal-p extlist-new extlist)
+	  (setf (alist-get mode semantic-symref-filepattern-alist)
+                extlist-new))))
+    (let* (setsyntax
+           (punct (with-syntax-table (tex-find-references-syntax-table)
+                    (seq-positions identifier (list ?w ?_)
+			           (lambda (elt sycode)
+			             (not (memq (char-syntax elt) sycode))))))
+           (end (and punct
+                     (memq (1- (length identifier)) punct)
+                     (> (length identifier) 1)
+                     (concat "\\("
+                             (regexp-quote
+                              (string (elt identifier
+                                           (1- (length identifier)))))
+                             "\\)")))
+           (beg (and punct
+                     (memq 0 punct)
+                     (concat "\\("
+                             (regexp-quote (string (elt identifier 0)))
+                             "\\)")))
+           (text-mode-hook
+            (if (or end beg)
+                (progn
+                  (tex-xref-syntax-function identifier beg end)
+                  (setq setsyntax (lambda ()
+		                    (setq-local syntax-propertize-function
+                                                tex--xref-syntax-fun)
+                                    (setq-local TeX-style-hook-applied-p t)))
+                  (cons setsyntax text-mode-hook))
+              text-mode-hook)))
+      (unless (memq 'doctex-mode (derived-mode-all-parents mode))
+        (setq bufs (append texbufs bufs)))
+      (when (or end beg)
+        (dolist (buf bufs)
+          (with-current-buffer buf
+            (unless (local-variable-p 'tex--old-syntax-function)
+              (setq tex--old-syntax-function syntax-propertize-function))
+            (setq-local syntax-propertize-function
+                        tex--xref-syntax-fun)
+            (syntax-ppss-flush-cache (point-min)))))
+      (unwind-protect
+          (xref-backend-references nil identifier)
+        (when (or end beg)
+          (dolist (buf bufs)
+            (with-current-buffer buf
+              (when buffer-file-truename
+                (setq-local syntax-propertize-function
+                            tex--old-syntax-function)
+                (syntax-ppss-flush-cache (point-min))))))))))
+
 (make-obsolete-variable 'tex-mode-load-hook
                         "use `with-eval-after-load' instead." "28.1")
 (run-hooks 'tex-mode-load-hook)
-- 
2.39.4


^ permalink raw reply related	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-06-05  9:46                                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-06-08 12:38                                                             ` Eli Zaretskii
  2024-06-08 20:54                                                               ` Dmitry Gutov
  2024-06-09 11:10                                                             ` Stefan Kangas
  2024-06-09 11:36                                                             ` Stefan Kangas
  2 siblings, 1 reply; 106+ messages in thread
From: Eli Zaretskii @ 2024-06-08 12:38 UTC (permalink / raw)
  To: David Fussner; +Cc: 53749, ikumi, tsdh, arash, stefankangas, dgutov, monnier

> From: David Fussner <dfussner@googlemail.com>
> Date: Wed, 5 Jun 2024 10:46:10 +0100
> Cc: Stefan Monnier <monnier@iro.umontreal.ca>, dgutov@yandex.ru, 53749@debbugs.gnu.org, 
> 	ikumi@ikumi.que.jp, arash@gnu.org, stefankangas@gmail.com, tsdh@gnu.org
> 
> Hi Eli, Stefan, and Dmitry,
> 
> In case the changeset might prove acceptable for version 30, I attach
> the latest patch, which clears out the code I was using to simplify
> testing of the AUCTeX modes. I can if requested send a patch for the
> manual etags tests, also, in case that might prove helpful down the
> line.

Thanks, I'm still waiting for answers to my question:

> On Sat, 25 May 2024 at 12:01, Eli Zaretskii <eliz@gnu.org> wrote:
> >
> > How should we proceed about this bug report?  Is David's last
> > changeset acceptable or isn't it?





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-06-08 12:38                                                             ` Eli Zaretskii
@ 2024-06-08 20:54                                                               ` Dmitry Gutov
  0 siblings, 0 replies; 106+ messages in thread
From: Dmitry Gutov @ 2024-06-08 20:54 UTC (permalink / raw)
  To: Eli Zaretskii, David Fussner
  Cc: 53749, ikumi, arash, stefankangas, tsdh, monnier

On 08/06/2024 15:38, Eli Zaretskii wrote:
>> From: David Fussner<dfussner@googlemail.com>
>> Date: Wed, 5 Jun 2024 10:46:10 +0100
>> Cc: Stefan Monnier<monnier@iro.umontreal.ca>,dgutov@yandex.ru,53749@debbugs.gnu.org,
>> 	ikumi@ikumi.que.jp,arash@gnu.org,stefankangas@gmail.com,tsdh@gnu.org
>>
>> Hi Eli, Stefan, and Dmitry,
>>
>> In case the changeset might prove acceptable for version 30, I attach
>> the latest patch, which clears out the code I was using to simplify
>> testing of the AUCTeX modes. I can if requested send a patch for the
>> manual etags tests, also, in case that might prove helpful down the
>> line.
> Thanks, I'm still waiting for answers to my question:
> 
>> On Sat, 25 May 2024 at 12:01, Eli Zaretskii<eliz@gnu.org>  wrote:
>>> How should we proceed about this bug report?  Is David's last
>>> changeset acceptable or isn't it?

To the extent that I can evaluate the code, it look pretty good.

And it's an additive change, so I don't see blockers to installing it.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-06-05  9:46                                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-06-08 12:38                                                             ` Eli Zaretskii
@ 2024-06-09 11:10                                                             ` Stefan Kangas
  2024-06-09 11:36                                                             ` Stefan Kangas
  2 siblings, 0 replies; 106+ messages in thread
From: Stefan Kangas @ 2024-06-09 11:10 UTC (permalink / raw)
  To: David Fussner, Eli Zaretskii
  Cc: 53749, ikumi, dgutov, arash, Stefan Monnier, tsdh

David Fussner <dfussner@googlemail.com> writes:

> I can if requested send a patch for the manual etags tests, also, in
> case that might prove helpful down the line.

I believe that such tests would help, yes.  Thanks in advance.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-06-05  9:46                                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-06-08 12:38                                                             ` Eli Zaretskii
  2024-06-09 11:10                                                             ` Stefan Kangas
@ 2024-06-09 11:36                                                             ` Stefan Kangas
  2024-06-09 18:42                                                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-06-09 18:45                                                               ` Dmitry Gutov
  2 siblings, 2 replies; 106+ messages in thread
From: Stefan Kangas @ 2024-06-09 11:36 UTC (permalink / raw)
  To: David Fussner, Eli Zaretskii
  Cc: 53749, ikumi, dgutov, arash, Stefan Monnier, tsdh

David Fussner <dfussner@googlemail.com> writes:

> In case the changeset might prove acceptable for version 30, I attach
> the latest patch, which clears out the code I was using to simplify
> testing of the AUCTeX modes.

I have some comments and questions:

- Does this need a NEWS entry?

- I see the brief text you added to tex-mode.el explaining more about
  expl3, but perhaps there should be a clear explanation in the commit
  message too.

- [Optional: In most places you use spaces for indentation, but here and
  there, there is a single tab followed by one or more spaces.  Consider
  using only spaces.]

> From: David Fussner <dfussner@googlemail.com>
> Date: Wed, 5 Jun 2024 10:26:18 +0100
> Subject: [PATCH] Provide a modified xref backend for TeX buffers

[Don't forget to add the bug number to the ChangeLog.]

> diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
> index 579098c81b1..a064103aa25 100644
> --- a/doc/emacs/maintaining.texi
> +++ b/doc/emacs/maintaining.texi
> @@ -2529,6 +2529,15 @@ Identifier Search
>  referenced.  The XREF mode commands are available in this buffer, see
>  @ref{Xref Commands}.
>
> +When invoked in a buffer whose major mode uses the @code{etags} backend,
> +@kbd{M-?} searches files and buffers whose major mode matches that of
> +the original buffer.  It guesses that mode from file extensions, so if
> +@kbd{M-?} seems to be skipping relevant buffers or files, try
> +customizing either the variable @code{semantic-symref-filepattern-alist}

Why does this speak of Semantic?  Does `xref-find-references` depend on
it somehow?

> diff --git a/lib-src/etags.c b/lib-src/etags.c
> index 03bc55de03d..6bc734e7df0 100644
> --- a/lib-src/etags.c
> +++ b/lib-src/etags.c
> @@ -5740,11 +5756,25 @@ Scheme_functions (FILE *inf)
>  static linebuffer *TEX_toktab = NULL; /* Table with tag tokens */
>
>  /* Default set of control sequences to put into TEX_toktab.
> -   The value of environment var TEXTAGS is prepended to this.  */
> +   The value of environment var TEXTAGS is prepended to this.
> +   (2024) Add variants of '\def', some additional LaTeX (and
> +   former xparse) commands, common variants from the
> +   'etoolbox' package, and the main expl3 commands. */

Do we really need this comment?  Isn't the git log enough?

> diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
> index 97c950267c6..fbf08840699 100644
> --- a/lisp/textmodes/tex-mode.el
> +++ b/lisp/textmodes/tex-mode.el
> @@ -636,6 +636,14 @@ tex-font-lock-keywords-2
>  	      3 '(tex-font-lock-append-prop 'bold) 'append)))))
>     "Gaudy expressions to highlight in TeX modes.")
>
> +(defvar-local tex-expl-region-list nil
> +  "List of region boundaries where expl3 syntax is active.
> +It will be nil in buffers where expl3 syntax is always active, e.g.,

Please prefer "for example" to "e.g.".

> +(defvar-local tex-expl-buffer-p nil
> +  "Non-nil in buffers where expl3 syntax is always active.")

What does "always active" mean as compared to just "active"?
Does this need to be elaborated?

> +;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
> +;; AUCTeX is doing the same for its modes.
> +(with-eval-after-load 'semantic/symref/grep
> +  (defvar semantic-symref-filepattern-alist)
> +  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
> +                     "*.bbl" "*.drv" "*.hva")
> +        semantic-symref-filepattern-alist)
> +  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
> +        semantic-symref-filepattern-alist)
> +  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))

Doesn't this stuff rather belong in semantic itself?

> +(cl-defmethod xref-backend-references ((_backend (eql 'tex-etags)) identifier)
> +  "Find references of IDENTIFIER in TeX buffers and files."
> +  (require 'semantic/symref/grep)

Are we sure that we want to make this depend on semantic?

Is there any way around that?





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-06-09 11:36                                                             ` Stefan Kangas
@ 2024-06-09 18:42                                                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-06-09 18:45                                                               ` Dmitry Gutov
  1 sibling, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-06-09 18:42 UTC (permalink / raw)
  To: Stefan Kangas
  Cc: 53749, Ikumi Keita, Tassilo Horn, Arash Esbati, Stefan Monnier,
	Dmitry Gutov, Eli Zaretskii

[-- Attachment #1: Type: text/plain, Size: 4741 bytes --]

Hi Stefan,

Thanks very much for the review. I'll try to address most of it in a
revised patch tomorrow, but I did want to explain now that the default
implementation of xref-find-references in xref.el uses semantic symref
functionality to search files. The TeX backend puts a wrapper around it,
but doesn't, following Dmitry's advice, try to reinvent that wheel. As for
where we set the filepattern variable, I don't mind, but AUCTeX is setting
it internally for their modes, so it seemed OK in tex-mode, too.

More tomorrow, and thanks again.

David.

On Sun, 9 Jun 2024, 12:36 Stefan Kangas, <stefankangas@gmail.com> wrote:

> David Fussner <dfussner@googlemail.com> writes:
>
> > In case the changeset might prove acceptable for version 30, I attach
> > the latest patch, which clears out the code I was using to simplify
> > testing of the AUCTeX modes.
>
> I have some comments and questions:
>
> - Does this need a NEWS entry?
>
> - I see the brief text you added to tex-mode.el explaining more about
>   expl3, but perhaps there should be a clear explanation in the commit
>   message too.
>
> - [Optional: In most places you use spaces for indentation, but here and
>   there, there is a single tab followed by one or more spaces.  Consider
>   using only spaces.]
>
> > From: David Fussner <dfussner@googlemail.com>
> > Date: Wed, 5 Jun 2024 10:26:18 +0100
> > Subject: [PATCH] Provide a modified xref backend for TeX buffers
>
> [Don't forget to add the bug number to the ChangeLog.]
>
> > diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
> > index 579098c81b1..a064103aa25 100644
> > --- a/doc/emacs/maintaining.texi
> > +++ b/doc/emacs/maintaining.texi
> > @@ -2529,6 +2529,15 @@ Identifier Search
> >  referenced.  The XREF mode commands are available in this buffer, see
> >  @ref{Xref Commands}.
> >
> > +When invoked in a buffer whose major mode uses the @code{etags} backend,
> > +@kbd{M-?} searches files and buffers whose major mode matches that of
> > +the original buffer.  It guesses that mode from file extensions, so if
> > +@kbd{M-?} seems to be skipping relevant buffers or files, try
> > +customizing either the variable @code{semantic-symref-filepattern-alist}
>
> Why does this speak of Semantic?  Does `xref-find-references` depend on
> it somehow?
>
> > diff --git a/lib-src/etags.c b/lib-src/etags.c
> > index 03bc55de03d..6bc734e7df0 100644
> > --- a/lib-src/etags.c
> > +++ b/lib-src/etags.c
> > @@ -5740,11 +5756,25 @@ Scheme_functions (FILE *inf)
> >  static linebuffer *TEX_toktab = NULL; /* Table with tag tokens */
> >
> >  /* Default set of control sequences to put into TEX_toktab.
> > -   The value of environment var TEXTAGS is prepended to this.  */
> > +   The value of environment var TEXTAGS is prepended to this.
> > +   (2024) Add variants of '\def', some additional LaTeX (and
> > +   former xparse) commands, common variants from the
> > +   'etoolbox' package, and the main expl3 commands. */
>
> Do we really need this comment?  Isn't the git log enough?
>
> > diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
> > index 97c950267c6..fbf08840699 100644
> > --- a/lisp/textmodes/tex-mode.el
> > +++ b/lisp/textmodes/tex-mode.el
> > @@ -636,6 +636,14 @@ tex-font-lock-keywords-2
> >             3 '(tex-font-lock-append-prop 'bold) 'append)))))
> >     "Gaudy expressions to highlight in TeX modes.")
> >
> > +(defvar-local tex-expl-region-list nil
> > +  "List of region boundaries where expl3 syntax is active.
> > +It will be nil in buffers where expl3 syntax is always active, e.g.,
>
> Please prefer "for example" to "e.g.".
>
> > +(defvar-local tex-expl-buffer-p nil
> > +  "Non-nil in buffers where expl3 syntax is always active.")
>
> What does "always active" mean as compared to just "active"?
> Does this need to be elaborated?
>
> > +;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
> > +;; AUCTeX is doing the same for its modes.
> > +(with-eval-after-load 'semantic/symref/grep
> > +  (defvar semantic-symref-filepattern-alist)
> > +  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
> > +                     "*.bbl" "*.drv" "*.hva")
> > +        semantic-symref-filepattern-alist)
> > +  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
> > +        semantic-symref-filepattern-alist)
> > +  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))
>
> Doesn't this stuff rather belong in semantic itself?
>
> > +(cl-defmethod xref-backend-references ((_backend (eql 'tex-etags))
> identifier)
> > +  "Find references of IDENTIFIER in TeX buffers and files."
> > +  (require 'semantic/symref/grep)
>
> Are we sure that we want to make this depend on semantic?
>
> Is there any way around that?
>

[-- Attachment #2: Type: text/html, Size: 6118 bytes --]

^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-06-09 11:36                                                             ` Stefan Kangas
  2024-06-09 18:42                                                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-06-09 18:45                                                               ` Dmitry Gutov
  2024-06-09 21:03                                                                 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 106+ messages in thread
From: Dmitry Gutov @ 2024-06-09 18:45 UTC (permalink / raw)
  To: Stefan Kangas, David Fussner, Eli Zaretskii
  Cc: 53749, arash, tsdh, Stefan Monnier, ikumi

On 09/06/2024 14:36, Stefan Kangas wrote:
>> diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
>> index 579098c81b1..a064103aa25 100644
>> --- a/doc/emacs/maintaining.texi
>> +++ b/doc/emacs/maintaining.texi
>> @@ -2529,6 +2529,15 @@ Identifier Search
>>   referenced.  The XREF mode commands are available in this buffer, see
>>   @ref{Xref Commands}.
>>
>> +When invoked in a buffer whose major mode uses the @code{etags} backend,
>> +@kbd{M-?} searches files and buffers whose major mode matches that of
>> +the original buffer.  It guesses that mode from file extensions, so if
>> +@kbd{M-?} seems to be skipping relevant buffers or files, try
>> +customizing either the variable @code{semantic-symref-filepattern-alist}
> Why does this speak of Semantic?  Does `xref-find-references` depend on
> it somehow?

xref-backend-references's default implementation calls 
semantic-symref-perform-search under the cover. It's just the "symref" 
package, not the parser or the rest.

David's addition also uses it, and that's fine.

>> +;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
>> +;; AUCTeX is doing the same for its modes.
>> +(with-eval-after-load 'semantic/symref/grep
>> +  (defvar semantic-symref-filepattern-alist)
>> +  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
>> +                     "*.bbl" "*.drv" "*.hva")
>> +        semantic-symref-filepattern-alist)
>> +  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
>> +        semantic-symref-filepattern-alist)
>> +  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))
> Doesn't this stuff rather belong in semantic itself?

Good point.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-06-09 18:45                                                               ` Dmitry Gutov
@ 2024-06-09 21:03                                                                 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-06-09 22:13                                                                   ` Dmitry Gutov
  0 siblings, 1 reply; 106+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-06-09 21:03 UTC (permalink / raw)
  To: Dmitry Gutov
  Cc: 53749, ikumi, David Fussner, arash, Stefan Kangas, tsdh,
	Eli Zaretskii

>>> +;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
>>> +;; AUCTeX is doing the same for its modes.
>>> +(with-eval-after-load 'semantic/symref/grep
>>> +  (defvar semantic-symref-filepattern-alist)
>>> +  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
>>> +                     "*.bbl" "*.drv" "*.hva")
>>> +        semantic-symref-filepattern-alist)
>>> +  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
>>> +        semantic-symref-filepattern-alist)
>>> +  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))
>> Doesn't this stuff rather belong in semantic itself?
> Good point.

FWIW, I think the responsability of `symref.el` is to provide hooks like
the `semantic-symref-filepattern-alist` var along with the code that
uses them, but the mode-specific settings, such as knowledge about which
glob patterns should be used for `latex-mode` belong to the
corresponding mode.


        Stefan






^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-06-09 21:03                                                                 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-06-09 22:13                                                                   ` Dmitry Gutov
  2024-06-10 13:29                                                                     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Dmitry Gutov @ 2024-06-09 22:13 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: 53749, ikumi, David Fussner, arash, Stefan Kangas, tsdh,
	Eli Zaretskii

On 10/06/2024 00:03, Stefan Monnier via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:
>>>> +;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
>>>> +;; AUCTeX is doing the same for its modes.
>>>> +(with-eval-after-load 'semantic/symref/grep
>>>> +  (defvar semantic-symref-filepattern-alist)
>>>> +  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
>>>> +                     "*.bbl" "*.drv" "*.hva")
>>>> +        semantic-symref-filepattern-alist)
>>>> +  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
>>>> +        semantic-symref-filepattern-alist)
>>>> +  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))
>>> Doesn't this stuff rather belong in semantic itself?
>> Good point.
> FWIW, I think the responsability of `symref.el` is to provide hooks like
> the `semantic-symref-filepattern-alist` var along with the code that
> uses them, but the mode-specific settings, such as knowledge about which
> glob patterns should be used for `latex-mode` belong to the
> corresponding mode.

I've been looking at semantic-symref-filepattern-alist like a workaround 
for the fast that the major modes don't provide enough relevant 
information in auto-mode-alist (or, to look at it differently, don't 
provide such info in some other variable which the auto-mode-alist entry 
would be computed from).

 From that perspective, storing the missing association inside the 
semantic-symref package seems suitable. But a more "proper" place for it 
would be better, of course.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-06-09 22:13                                                                   ` Dmitry Gutov
@ 2024-06-10 13:29                                                                     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-07-27 15:39                                                                       ` Arash Esbati
  0 siblings, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-06-10 13:29 UTC (permalink / raw)
  To: Dmitry Gutov
  Cc: 53749, ikumi, arash, Stefan Kangas, tsdh, Eli Zaretskii,
	Stefan Monnier

[-- Attachment #1: Type: text/plain, Size: 2305 bytes --]

Hi Dmitry, Stefan M and Stefan K,

Here's the latest patch, with most of the modifications requested by
Stefan K. The code populating `semantic-symref-filepattern-alist` I've
left in tex-mode.el, because I wasn't sure how to adjudicate the
differing opinions on where it should go. Moving it won't take any
time, should that be the verdict. I've had a stab at a NEWS entry, and
included the patches to the manual etags test files. The diffs for the
test files are large, since we remove the TeX escape char from any tag
names where it occurs, as discussed elsewhere on this thread.

Please let me know if more changes are needed.

Best, David.

On Sun, 9 Jun 2024 at 23:13, Dmitry Gutov <dgutov@yandex.ru> wrote:
>
> On 10/06/2024 00:03, Stefan Monnier via Bug reports for GNU Emacs, the
> Swiss army knife of text editors wrote:
> >>>> +;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
> >>>> +;; AUCTeX is doing the same for its modes.
> >>>> +(with-eval-after-load 'semantic/symref/grep
> >>>> +  (defvar semantic-symref-filepattern-alist)
> >>>> +  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
> >>>> +                     "*.bbl" "*.drv" "*.hva")
> >>>> +        semantic-symref-filepattern-alist)
> >>>> +  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
> >>>> +        semantic-symref-filepattern-alist)
> >>>> +  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))
> >>> Doesn't this stuff rather belong in semantic itself?
> >> Good point.
> > FWIW, I think the responsability of `symref.el` is to provide hooks like
> > the `semantic-symref-filepattern-alist` var along with the code that
> > uses them, but the mode-specific settings, such as knowledge about which
> > glob patterns should be used for `latex-mode` belong to the
> > corresponding mode.
>
> I've been looking at semantic-symref-filepattern-alist like a workaround
> for the fast that the major modes don't provide enough relevant
> information in auto-mode-alist (or, to look at it differently, don't
> provide such info in some other variable which the auto-mode-alist entry
> would be computed from).
>
>  From that perspective, storing the missing association inside the
> semantic-symref package seems suitable. But a more "proper" place for it
> would be better, of course.

[-- Attachment #2: 0005-Provide-a-modified-xref-backend-for-TeX-buffers.patch --]
[-- Type: text/x-patch, Size: 1091090 bytes --]

From bb666475f412e4355603f21b646b17debab77a7a Mon Sep 17 00:00:00 2001
From: David Fussner <dfussner@googlemail.com>
Date: Mon, 10 Jun 2024 14:16:04 +0100
Subject: [PATCH] Provide a modified xref backend for TeX buffers

(bug#53749) In addition to providing a new `xref' backend, the patch
also improves the general handling of expl3 syntax.  Expl3 is the
next-generation LaTeX specification, and has for some time been
available by default in the LaTeX kernel.  The new syntax co-exists in
many files with the standard LaTeX2e syntax, so we try at least
minimally to separate the way modes handle the two specifications,
both to reduce visually-disturbing interference between them and also
to improve the `xref' backend.

* lib-src/etags.c (TeX_commands): Improve parsing of commands in TeX
buffers.
(TEX_defenv): Expand list of commands to tag by default in TeX
buffers.
(TeX_help):
* doc/emacs/maintaining.texi (Tag Syntax): Document new tagged
commands.
(Identifier Search): Add note about semantic-symref-filepattern-alist,
auto-mode-alist, and xref-find-references.

* lisp/textmodes/tex-mode.el (tex-font-lock-suscript): Test for
underscore in expl3 files and regions, disable subscript face there.
(tex-common-initialization): Set up xref backend for in-tree TeX
modes. Detect expl3 files, and in others set up a list of expl3
regions.
(tex-expl-buffer-parse): New function called in previous.
(tex-expl-buffer-p): New var to hold the result of previous.
(tex-expl-region-set): New function added to
'syntax-propertize-extend-region-functions' hook.
(tex-expl-region-list): New var to hold the result of previous.
(tex--xref-backend): New function to identify the xref backend.
(tex--thing-at-point, tex-thingatpt--beginning-of-symbol)
(tex-thingatpt--end-of-symbol, tex--bounds-of-symbol-at-point):
New functions to return 'thing-at-point' for xref backend.
(tex-thingatpt-exclude-chars): New var to do the same.
(xref-backend-identifier-at-point): New TeX backend method to provide
symbols for processing by xref.
(xref-backend-identifier-completion-table)
(xref-backend-identifier-completion-ignore-case)
(xref-backend-definitions, xref-backend-apropos): Placeholders to
call the standard 'etags' xref backend methods.
(xref-backend-references): Wrapper to call the default xref backend
method, finding as many relevant files as possible and using a bespoke
syntax-propertize-function when required.
(tex--collect-file-extensions, tex-xref-syntax-function): Helper
functions for previous.
(tex-find-references-syntax-table, tex--buffers-list)
(tex--xref-syntax-fun, tex--old-syntax-function): New vars for same.

* etc/NEWS (Changes in Specialized Modes): Add news.

* test/manual/etags/ETAGS.good_*:
* test/manual/etags/CTAGS.good*: Update expected results from TeX
  files.
---
 doc/emacs/maintaining.texi          |   39 +-
 etc/NEWS                            |    9 +
 lib-src/etags.c                     |  186 ++-
 lisp/textmodes/tex-mode.el          |  358 +++++-
 test/manual/etags/CTAGS.good        | 1619 ++++++++++++++++----------
 test/manual/etags/CTAGS.good_crlf   | 1537 +++++++++++++++----------
 test/manual/etags/CTAGS.good_update | 1537 +++++++++++++++----------
 test/manual/etags/ETAGS.good_1      | 1636 +++++++++++++++++----------
 test/manual/etags/ETAGS.good_2      | 1636 +++++++++++++++++----------
 test/manual/etags/ETAGS.good_3      | 1636 +++++++++++++++++----------
 test/manual/etags/ETAGS.good_4      | 1636 +++++++++++++++++----------
 test/manual/etags/ETAGS.good_5      | 1636 +++++++++++++++++----------
 test/manual/etags/ETAGS.good_6      | 1636 +++++++++++++++++----------
 13 files changed, 9692 insertions(+), 5409 deletions(-)

diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 579098c81b1..a064103aa25 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -2529,6 +2529,15 @@ Identifier Search
 referenced.  The XREF mode commands are available in this buffer, see
 @ref{Xref Commands}.
 
+When invoked in a buffer whose major mode uses the @code{etags} backend,
+@kbd{M-?} searches files and buffers whose major mode matches that of
+the original buffer.  It guesses that mode from file extensions, so if
+@kbd{M-?} seems to be skipping relevant buffers or files, try
+customizing either the variable @code{semantic-symref-filepattern-alist}
+(if your buffer's major mode already has an entry in it), or
+@code{auto-mode-alist} (if not), thereby informing @code{xref} of the
+missing extensions (@pxref{Choosing Modes}).
+
 @vindex xref-auto-jump-to-first-xref
   If the value of the variable @code{xref-auto-jump-to-first-xref} is
 @code{t}, @code{xref-find-references} automatically jumps to the first
@@ -2747,10 +2756,32 @@ Tag Syntax
 @item
 In @LaTeX{} documents, the arguments for @code{\chapter},
 @code{\section}, @code{\subsection}, @code{\subsubsection},
-@code{\eqno}, @code{\label}, @code{\ref}, @code{\cite},
-@code{\bibitem}, @code{\part}, @code{\appendix}, @code{\entry},
-@code{\index}, @code{\def}, @code{\newcommand}, @code{\renewcommand},
-@code{\newenvironment} and @code{\renewenvironment} are tags.
+@code{\eqno}, @code{\label}, @code{\ref}, @code{\Ref}, @code{\footref},
+@code{\cite}, @code{\bibitem}, @code{\part}, @code{\appendix},
+@code{\entry}, @code{\index}, @code{\def}, @code{\edef}, @code{\gdef},
+@code{\xdef}, @code{\newcommand}, @code{\renewcommand},
+@code{\newenvironment}, @code{\renewenvironment},
+@code{\DeclareRobustCommand}, @code{\newrobustcmd},
+@code{\renewrobustcmd}, @code{\providecommand},
+@code{\providerobustcmd}, @code{\NewDocumentCommand},
+@code{\RenewDocumentCommand}, @code{\ProvideDocumentCommand},
+@code{\DeclareDocumentCommand}, @code{\NewExpandableDocumentCommand},
+@code{\RenewExpandableDocumentCommand},
+@code{\ProvideExpandableDocumentCommand},
+@code{\DeclareExpandableDocumentCommand},
+@code{\NewDocumentEnvironment}, @code{\RenewDocumentEnvironment},
+@code{\ProvideDocumentEnvironment}, @code{\DeclareDocumentEnvironment},
+@code{\csdef}, @code{\csedef}, @code{\csgdef}, @code{\csxdef},
+@code{\csletcs}, @code{\cslet}, @code{\letcs}, @code{\let},
+@code{\cs_new_protected_nopar}, @code{\cs_new_protected},
+@code{\cs_new_nopar}, @code{\cs_new_eq}, @code{\cs_new},
+@code{\cs_set_protected_nopar}, @code{\cs_set_protected},
+@code{\cs_set_nopar}, @code{\cs_set_eq}, @code{\cs_set},
+@code{\cs_gset_protected_nopar}, @code{\cs_gset_protected},
+@code{\cs_gset_nopar}, @code{\cs_gset_eq}, @code{\cs_gset},
+@code{\cs_generate_from_arg_count}, and @code{\cs_generate_variant} are
+tags.  So too are the arguments of any starred variants of these
+commands.
 
 Other commands can make tags as well, if you specify them in the
 environment variable @env{TEXTAGS} before invoking @command{etags}.  The
diff --git a/etc/NEWS b/etc/NEWS
index 94557fdd255..ac5d52053de 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1882,6 +1882,15 @@ By default it retains the previous behavior: read the contents of
 Gemfile and act accordingly.  But you can also set it to t or nil to
 skip the check.
 
+** TeX modes
+
++++
+*** New xref backend for TeX modes.
+The new backend ('tex-etags') is on by default, and improves the
+functionality of the standard 'xref' commands in TeX buffers.  You can
+restore the standard 'etags' backend with the 'M-x xref-etags-mode'
+toggle.
+
 ** Thingatpt
 
 ---
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 03bc55de03d..bdb11c09eb7 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -793,11 +793,27 @@ #define STDIN 0x1001		/* returned by getopt_long on --parse-stdin */
 static const char *TeX_suffixes [] =
   { "bib", "clo", "cls", "ltx", "sty", "TeX", "tex", NULL };
 static const char TeX_help [] =
-"In LaTeX text, the argument of any of the commands '\\chapter',\n\
-'\\section', '\\subsection', '\\subsubsection', '\\eqno', '\\label',\n\
-'\\ref', '\\cite', '\\bibitem', '\\part', '\\appendix', '\\entry',\n\
-'\\index', '\\def', '\\newcommand', '\\renewcommand',\n\
-'\\newenvironment' or '\\renewenvironment' is a tag.\n\
+"In LaTeX text, the argument of the commands '\\chapter', '\\section',\n\
+'\\subsection', '\\subsubsection', '\\eqno', '\\label', '\\ref',\n\
+'\\Ref', '\\footref', '\\cite', '\\bibitem', '\\part', '\\appendix',\n\
+'\\entry', '\\index', '\\def', '\\edef', '\\gdef', '\\xdef',\n\
+'\\newcommand', '\\renewcommand', '\\newrobustcmd', '\\renewrobustcmd',\n\
+'\\newenvironment', '\\renewenvironment', '\\DeclareRobustCommand',\n\
+'\\providecommand', '\\providerobustcmd', '\\NewDocumentCommand',\n\
+'\\RenewDocumentCommand', '\\ProvideDocumentCommand',\n\
+'\\DeclareDocumentCommand', '\\NewExpandableDocumentCommand',\n\
+'\\RenewExpandableDocumentCommand', '\\ProvideExpandableDocumentCommand',\n\
+'\\DeclareExpandableDocumentCommand', '\\NewDocumentEnvironment',\n\
+'\\RenewDocumentEnvironment', '\\ProvideDocumentEnvironment',\n\
+'\\DeclareDocumentEnvironment','\\csdef', '\\csedef', '\\csgdef',\n\
+'\\csxdef', '\\csletcs', '\\cslet', '\\letcs', '\\let',\n\
+'\\cs_new_protected_nopar', '\\cs_new_protected', '\\cs_new_nopar',\n\
+'\\cs_new_eq', '\\cs_new', '\\cs_set_protected_nopar',\n\
+'\\cs_set_protected', '\\cs_set_nopar', '\\cs_set_eq', '\\cs_set',\n\
+'\\cs_gset_protected_nopar', '\\cs_gset_protected', '\\cs_gset_nopar',\n\
+'\\cs_gset_eq', '\\cs_gset', '\\cs_generate_from_arg_count', or\n\
+'\\cs_generate_variant' is a tag.  So is the argument of any starred\n\
+variant of these commands.\n\
 \n\
 Other commands can be specified by setting the environment variable\n\
 'TEXTAGS' to a colon-separated list like, for example,\n\
@@ -5742,9 +5758,20 @@ Scheme_functions (FILE *inf)
 /* Default set of control sequences to put into TEX_toktab.
    The value of environment var TEXTAGS is prepended to this.  */
 static const char *TEX_defenv = "\
-:chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\
-:part:appendix:entry:index:def\
-:newcommand:renewcommand:newenvironment:renewenvironment";
+:label:ref:Ref:footref:chapter:section:subsection:subsubsection:eqno:cite\
+:bibitem:part:appendix:entry:index:def:edef:gdef:xdef:newcommand:renewcommand\
+:newenvironment:renewenvironment:DeclareRobustCommand:renewrobustcmd\
+:newrobustcmd:providecommand:providerobustcmd:NewDocumentCommand\
+:RenewDocumentCommand:ProvideDocumentCommand:DeclareDocumentCommand\
+:NewExpandableDocumentCommand:RenewExpandableDocumentCommand\
+:ProvideExpandableDocumentCommand:DeclareExpandableDocumentCommand\
+:NewDocumentEnvironment:RenewDocumentEnvironment\
+:ProvideDocumentEnvironment:DeclareDocumentEnvironment:csdef\
+:csedef:csgdef:csxdef:csletcs:cslet:letcs:let:cs_new_protected_nopar\
+:cs_new_protected:cs_new_nopar:cs_new_eq:cs_new:cs_set_protected_nopar\
+:cs_set_protected:cs_set_nopar:cs_set_eq:cs_set:cs_gset_protected_nopar\
+:cs_gset_protected:cs_gset_nopar:cs_gset_eq:cs_gset\
+:cs_generate_from_arg_count:cs_generate_variant";
 
 static void TEX_decode_env (const char *, const char *);
 
@@ -5803,19 +5830,139 @@ TeX_commands (FILE *inf)
 	      {
 		char *p;
 		ptrdiff_t namelen, linelen;
-		bool opgrp = false;
+		bool opgrp = false, one_esc = false, is_explthree = false;
 
 		cp = skip_spaces (cp + key->len);
+
+		/* 1. The canonical expl3 syntax looks something like this:
+		   \cs_new:Npn \__hook_tl_gput:Nn { \ERROR }.  First, if we
+		   want to tag any such commands, we include only the part
+		   before the colon (cs_new) in TEX_defenv or TEXTAGS.  Second,
+		   etags skips the argument specifier (including the colon)
+		   after the tag token, so that it doesn't become the tag name.
+		   Third, we set the boolean 'is_explthree' to true so that we
+		   can remove the argument specifier from the actual tag name
+		   (__hook_tl_gput).  This all allows us to include expl3
+		   constructs in TEX_defenv or in the environment variable
+		   TEXTAGS without requiring a change of separator, and it also
+		   allows us to find the definition of variant commands (with
+		   different argument specifiers) defined using, for example,
+		   \cs_generate_variant:Nn.  Please note that the expl3 spec
+		   requires etags to pay more attention to whitespace in the
+		   code.
+
+		   2. We also automatically remove the asterisk from starred
+		   variants of all commands, without the need to include the
+		   starred commands explicitly in TEX_defenv or TEXTAGS. */
+		if (*cp == ':')
+		  {
+		    while (!c_isspace (*cp) && *cp != TEX_opgrp)
+		      cp++;
+		    cp = skip_spaces (cp);
+		    is_explthree = true;
+		  }
+		else if (*cp == '*')
+		  cp++;
+
+		/* Skip the optional arguments to commands in the tags list so
+		   that these arguments don't end up as the name of the tag.
+		   The name will instead come from the argument in curly braces
+		   that follows the optional ones.  The '\let' command gets
+		   special treatment. */
+		while (*cp != '\0' && *cp != '%'
+		       && !streq (key->buffer, "let"))
+		  {
+		    if (*cp == '[')
+		      {
+			while (*cp != ']' && *cp != '\0' && *cp != '%')
+			  cp++;
+		      }
+		    else if (*cp == '(')
+		      {
+			while (*cp != ')' && *cp != '\0' && *cp != '%')
+			  cp++;
+		      }
+		    else if (*cp == ']' || *cp == ')')
+		      cp++;
+		    else
+		      break;
+		  }
 		if (*cp == TEX_opgrp)
 		  {
 		    opgrp = true;
 		    cp++;
+		    cp = skip_spaces (cp); /* For expl3 code. */
 		  }
+
+		/* Removing the TeX escape character from tag names simplifies
+		   things for editors finding tagged commands in TeX buffers.
+		   This applies to Emacs but also to the tag-finding behavior
+		   of at least some of the editors that use ctags, though in
+		   the latter case this will remain suboptimal.  The
+		   undocumented ctags option '--no-duplicates' may help. */
+		if (*cp == TEX_esc)
+		  {
+		    cp++;
+		    one_esc = true;
+		  }
+
+		/* Testing !c_isspace && !c_ispunct is simpler, but halts
+		   processing at too many places.  The list as it stands tries
+		   both to ensure that tag names will derive from macro names
+		   rather than from optional parameters to those macros, and
+		   also to return findable names while still allowing for
+		   unorthodox constructs. */
 		for (p = cp;
-		     (!c_isspace (*p) && *p != '#' &&
-		      *p != TEX_opgrp && *p != TEX_clgrp);
+		     (!c_isspace (*p) && *p != '#' && *p != '=' &&
+		      *p != '[' && *p != '(' && *p != TEX_opgrp &&
+		      *p != TEX_clgrp && *p != '"' && *p != '\'' &&
+		      *p != '%' && *p != ',' && *p != '|' && *p != '$');
 		     p++)
-		  continue;
+		  /* In expl3 code we remove the argument specification from
+		     the tag name.  More generally we allow only one (deleted)
+		     escape char in a tag name, which (primarily) enables
+		     tagging a TeX command's different, possibly temporary,
+		     '\let' bindings. */
+		  if (is_explthree && *p == ':')
+		    break;
+		  else if (*p == TEX_esc)
+		    { /* Second part of test is for, e.g., \cslet. */
+		      if (!one_esc && !opgrp)
+			{
+			  one_esc = true;
+			  continue;
+			}
+		      else
+			break;
+		    }
+		  else
+		    continue;
+		/* For TeX files, tags without a name are basically cruft, and
+		   in some situations they can produce spurious and confusing
+		   matches.  Try to catch as many cases as possible where a
+		   command name is of the form '\(', but avoid, as far as
+		   possible, the spurious matches. */
+		if (p == cp)
+		  {
+		    switch (*p)
+		      { /* Include =? */
+		      case '(': case '[': case '"': case '\'':
+		      case '\\': case '!': case '=': case ',':
+		      case '|': case '$':
+			p++;
+			break;
+		      case '{': case '}': case '<': case '>':
+			if (!opgrp)
+			  {
+			      p++;
+			      if (*p == '\0' || *p == '%')
+				goto tex_next_line;
+			  }
+			break;
+		      default:
+			break;
+		      }
+		  }
 		namelen = p - cp;
 		linelen = lb.len;
 		if (!opgrp || *p == TEX_clgrp)
@@ -5824,9 +5971,18 @@ TeX_commands (FILE *inf)
 		      p++;
 		    linelen = p - lb.buffer + 1;
 		  }
-		make_tag (cp, namelen, true,
-			  lb.buffer, linelen, lineno, linecharno);
-		goto tex_next_line; /* We only tag a line once */
+		if (namelen)
+		  make_tag (cp, namelen, true,
+			    lb.buffer, linelen, lineno, linecharno);
+		/* Lines with more than one \def or \let are surprisingly
+		   common in TeX files, especially in the system files that
+		   form the basis of the various TeX formats.  This tags them
+		   all. */
+		/* goto tex_next_line; /\* We only tag a line once *\/ */
+		while (*cp != '\0' && *cp != '%' && *cp != TEX_esc)
+		  cp++;
+		if (*cp != TEX_esc)
+		  goto tex_next_line;
 	      }
 	}
     tex_next_line:
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index 97c950267c6..2b4ba66e0e3 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -636,6 +636,14 @@ tex-font-lock-keywords-2
 	      3 '(tex-font-lock-append-prop 'bold) 'append)))))
    "Gaudy expressions to highlight in TeX modes.")
 
+(defvar-local tex-expl-region-list nil
+  "List of region boundaries where expl3 syntax is active.
+It will be nil in buffers visiting files which use expl3 syntax
+throughout, for example, expl3 classes or packages.")
+
+(defvar-local tex-expl-buffer-p nil
+  "Non-nil in buffers using expl3 syntax throughout.")
+
 (defun tex-font-lock-suscript (pos)
   (unless (or (memq (get-text-property pos 'face)
 		    '(font-lock-constant-face font-lock-builtin-face
@@ -645,7 +653,17 @@ tex-font-lock-suscript
 		    (pos pos))
 		(while (eq (char-before pos) ?\\)
 		  (setq pos (1- pos) odd (not odd)))
-		odd))
+		odd)
+              ;; Check if POS is in an expl3 syntax region or an expl3 buffer
+              (when (eq (char-after pos) ?_)
+                (or tex-expl-buffer-p
+                    (and
+                     tex-expl-region-list
+                     (catch 'result
+                       (dolist (range tex-expl-region-list)
+                         (and (> pos (car range))
+                              (< pos (cdr range))
+                              (throw 'result t))))))))
     (if (eq (char-after pos) ?_)
 	`(face subscript display (raise ,(car tex-font-script-display)))
       `(face superscript display (raise ,(cadr tex-font-script-display))))))
@@ -1289,8 +1307,16 @@ tex-common-initialization
                 #'tex--prettify-symbols-compose-p)
   (setq-local syntax-propertize-function
 	      (syntax-propertize-rules latex-syntax-propertize-rules))
+  ;; Don't add extra processing to `syntax-propertize' in files where
+  ;; expl3 syntax is always active.
+  :after-hook (progn (tex-expl-buffer-parse)
+                     (unless tex-expl-buffer-p
+                       (add-hook 'syntax-propertize-extend-region-functions
+                                 #'tex-expl-region-set nil t)))
   ;; TABs in verbatim environments don't do what you think.
   (setq-local indent-tabs-mode nil)
+  ;; Set up xref backend in TeX buffers.
+  (add-hook 'xref-backend-functions #'tex--xref-backend nil t)
   ;; Other vars that should be buffer-local.
   (make-local-variable 'tex-command)
   (make-local-variable 'tex-start-of-header)
@@ -1936,6 +1962,36 @@ tex-count-words
 		(forward-sexp 1))))))
       (message "%s words" count))))
 
+(defun tex-expl-buffer-parse ()
+  "Identify buffers using expl3 syntax throughout."
+  (save-excursion
+    (goto-char (point-min))
+    (when (tex-search-noncomment
+           (re-search-forward
+            "\\\\\\(?:ExplFile\\|ProvidesExpl\\|__xparse_file\\)"
+            nil t))
+      (setq tex-expl-buffer-p t))))
+
+(defun tex-expl-region-set (_beg _end)
+  "Create a list of regions where expl3 syntax is active.
+This function updates the list whenever `syntax-propertize' runs, and
+stores it in the buffer-local variable `tex-expl-region-list'.  The list
+will always be nil when the buffer visits an expl3 file, for example, an
+expl3 class or package, where the entire file uses expl3 syntax."
+  (unless syntax-ppss--updated-cache;; Stop forward search running twice.
+    (setq tex-expl-region-list nil)
+    ;; Leaving this test here allows users to set `tex-expl-buffer-p'
+    ;; independently of the mode's automatic detection of an expl3 file.
+    (unless tex-expl-buffer-p
+      (goto-char (point-min))
+      (let ((case-fold-search nil))
+        (while (tex-search-noncomment
+                (search-forward "\\ExplSyntaxOn" nil t))
+          (let ((new-beg (point))
+                (new-end (or (tex-search-noncomment
+                              (search-forward "\\ExplSyntaxOff" nil t))
+                             (point-max))))
+            (push (cons new-beg new-end) tex-expl-region-list)))))))
 
 \f
 ;;; Invoking TeX in an inferior shell.
@@ -3742,6 +3798,306 @@ tex-chktex
       (process-send-region tex-chktex--process (point-min) (point-max))
       (process-send-eof tex-chktex--process))))
 
+\f
+;;; Xref backend
+
+;; Here we lightly adapt the default etags backend for xref so that
+;; the main xref user commands (including `xref-find-definitions',
+;; `xref-find-apropos', and `xref-find-references' [on M-., C-M-., and
+;; M-?, respectively]) work in TeX buffers.  The only methods we
+;; actually modify are `xref-backend-identifier-at-point' and
+;; `xref-backend-references'.  Many of the complications here, and in
+;; `etags' itself, are due to the necessity of parsing both the old
+;; TeX syntax and the new expl3 syntax, which will continue to appear
+;; together in documents for the foreseeable future.  Synchronizing
+;; Emacs and `etags' this way aims to improve the user experience "out
+;; of the box."
+
+(defvar tex-thingatpt-exclude-chars '(?\\ ?\{ ?\})
+  "Exclude these chars by default from TeX thing-at-point.
+
+The TeX `xref-backend-identifier-at-point' method uses the characters
+listed in this variable to decide on the default search string to
+present to the user who calls an `xref' command.  These characters
+become part of a regexp which always excludes them from that default
+string.  For the `xref' commands to function properly in TeX buffers, at
+least the TeX escape and the two TeX grouping characters should be
+listed here.  Should your TeX documents contain other characters which
+you want to exclude by default, then you can add them to the list,
+though you may wish to consult the functions
+`tex-thingatpt--beginning-of-symbol' and `tex-thingatpt--end-of-symbol'
+to see what the regexp already contains.  If your documents contain
+non-standard escape and grouping characters, then you can replace the
+three listed here with your own, thereby allowing the three standard
+characters to appear by default in search strings.  Please be aware,
+however, that the `etags' program only recognizes `\\' (92) and `!' (33)
+as escape characters in TeX documents, and if it detects the latter it
+also uses `<>' as the TeX grouping construct rather than `{}'.  Setting
+the escape and grouping chars to anything other than `\\=\\{}' or `!<>'
+will not be useful without changes to `etags', at least for commands
+that search tags tables, such as \\[xref-find-definitions] and \
+\\[xref-find-apropos].
+
+Should you wish to change the defaults, please also be aware that,
+without further modifications to tex-mode.el, the usual text-parsing
+routines for `font-lock' and the like won't work correctly, as the
+default escape and grouping characters are currently hard coded in many
+places.")
+
+;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
+;; AUCTeX is doing the same for its modes.
+(with-eval-after-load 'semantic/symref/grep
+  (defvar semantic-symref-filepattern-alist)
+  (push '(latex-mode "*.[tT]e[xX]" "*.ltx" "*.sty" "*.cl[so]"
+                     "*.bbl" "*.drv" "*.hva")
+        semantic-symref-filepattern-alist)
+  (push '(plain-tex-mode "*.[tT]e[xX]" "*.ins")
+        semantic-symref-filepattern-alist)
+  (push '(doctex-mode "*.dtx") semantic-symref-filepattern-alist))
+
+(defun tex--xref-backend () 'tex-etags)
+
+(cl-defmethod xref-backend-identifier-at-point ((_backend (eql 'tex-etags)))
+  (require 'etags)
+  (tex--thing-at-point))
+
+;; The detection of `_' and `:' is a primitive method for determining
+;; whether point is on an expl3 construct.  It may fail in some
+;; instances.
+(defun tex--thing-at-point ()
+  "Demarcate `thing-at-point' for the TeX `xref' backend."
+  (let ((bounds (tex--bounds-of-symbol-at-point)))
+    (when bounds
+      (let ((texsym (buffer-substring-no-properties (car bounds) (cdr bounds))))
+        (if (and (not (string-match-p "reference" (symbol-name this-command)))
+                 (seq-contains-p texsym ?_)
+                 (seq-contains-p texsym ?:))
+            (seq-take texsym (seq-position texsym ?:))
+          texsym)))))
+
+(defun tex-thingatpt--beginning-of-symbol ()
+  (and
+   (re-search-backward (concat "[]["
+                               (mapconcat #'regexp-quote
+                                          (mapcar #'char-to-string
+                                                  tex-thingatpt-exclude-chars))
+                               "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))
+   (forward-char)))
+
+(defun tex-thingatpt--end-of-symbol ()
+  (and
+   (re-search-forward (concat "[]["
+                              (mapconcat #'regexp-quote
+                                          (mapcar #'char-to-string
+                                                  tex-thingatpt-exclude-chars))
+                              "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))
+   (backward-char)))
+
+(defun tex--bounds-of-symbol-at-point ()
+  "Simplify `bounds-of-thing-at-point' for TeX `xref' backend."
+  (let ((orig (point)))
+    (ignore-errors
+      (save-excursion
+        (tex-thingatpt--end-of-symbol)
+        (tex-thingatpt--beginning-of-symbol)
+        (let ((beg (point)))
+          (if (<= beg orig)
+              (let ((real-end
+                     (progn
+                       (tex-thingatpt--end-of-symbol)
+                       (point))))
+                (cond ((and (<= orig real-end) (< beg real-end))
+                       (cons beg real-end))
+                      ((and (= orig real-end) (= beg real-end))
+                       (cons beg (1+ beg)))))))))));; For 1-char TeX commands.
+
+(cl-defmethod xref-backend-identifier-completion-table ((_backend
+                                                         (eql 'tex-etags)))
+  (xref-backend-identifier-completion-table 'etags))
+
+(cl-defmethod xref-backend-identifier-completion-ignore-case ((_backend
+                                                               (eql
+                                                                'tex-etags)))
+  (xref-backend-identifier-completion-ignore-case 'etags))
+
+(cl-defmethod xref-backend-definitions ((_backend (eql 'tex-etags)) symbol)
+  (xref-backend-definitions 'etags symbol))
+
+(cl-defmethod xref-backend-apropos ((_backend (eql 'tex-etags)) pattern)
+  (xref-backend-apropos 'etags pattern))
+
+;; The `xref-backend-references' method requires more code than the
+;; others for at least two main reasons: TeX authors have typically been
+;; free in their invention of new file types with new suffixes, and they
+;; have also tended sometimes to include non-symbol characters in
+;; command names.  When combined with the default Semantic Symbol
+;; Reference API, these two characteristics of TeX code mean that a
+;; command like `xref-find-references' would often fail to find any hits
+;; for a symbol at point, including the one under point in the current
+;; buffer, or it would find only some instances and skip others.
+
+(defun tex-find-references-syntax-table ()
+  (let ((st (if (boundp 'TeX-mode-syntax-table)
+                 (make-syntax-table TeX-mode-syntax-table)
+               (make-syntax-table tex-mode-syntax-table))))
+    st))
+
+(defvar tex--xref-syntax-fun nil)
+
+(defun tex-xref-syntax-function (str beg end)
+  "Provide a bespoke `syntax-propertize-function' for \\[xref-find-references]."
+  (let* (grpb tempstr
+              (shrtstr (if end
+                           (progn
+                             (setq tempstr (seq-take str (1- (length str))))
+                             (if beg
+                                 (setq tempstr (seq-drop tempstr 1))
+                               tempstr))
+                         (seq-drop str 1)))
+              (grpa (if (and beg end)
+                        (prog1
+                            (list 1 "_")
+                          (setq grpb (list 2 "_")))
+                      (list 1 "_")))
+              (re (concat beg (regexp-quote shrtstr) end))
+              (temp-rule (if grpb
+                             (list re grpa grpb)
+                           (list re grpa))))
+    ;; Simple benchmarks suggested that the speed-up from compiling this
+    ;; function was nearly nil, so `eval' and its non-byte-compiled
+    ;; function remain.
+    (setq tex--xref-syntax-fun (eval
+                                `(syntax-propertize-rules ,temp-rule)))))
+
+(defun tex--collect-file-extensions ()
+  "Gather TeX file extensions from `auto-mode-alist'."
+  (let* ((mlist (when (rassq major-mode auto-mode-alist)
+                  (seq-filter
+                   (lambda (elt)
+                     (eq (cdr elt) major-mode))
+                   auto-mode-alist)))
+         (lcsym (intern-soft (downcase (symbol-name major-mode))))
+         (lclist (and lcsym
+                      (not (eq lcsym major-mode))
+                      (rassq lcsym auto-mode-alist)
+                      (seq-filter
+                       (lambda (elt)
+                         (eq (cdr elt) lcsym))
+                       auto-mode-alist)))
+         (shortsym (when (stringp mode-name)
+                     (intern-soft (concat (string-trim-right mode-name "/.*")
+                                          "-mode"))))
+         (lcshortsym (when (stringp mode-name)
+                       (intern-soft (downcase
+                                     (concat
+                                      (string-trim-right mode-name "/.*")
+                                      "-mode")))))
+         (shlist (and shortsym
+                      (not (eq shortsym major-mode))
+                      (not (eq shortsym lcsym))
+                      (rassq shortsym auto-mode-alist)
+                      (seq-filter
+                       (lambda (elt)
+                         (eq (cdr elt) shortsym))
+                       auto-mode-alist)))
+         (lcshlist (and lcshortsym
+                        (not (eq lcshortsym major-mode))
+                        (not (eq lcshortsym lcsym))
+                        (rassq lcshortsym auto-mode-alist)
+                        (seq-filter
+                         (lambda (elt)
+                           (eq (cdr elt) lcshortsym))
+                         auto-mode-alist)))
+         (exts (when (or mlist lclist shlist lcshlist)
+                 (seq-union (seq-map #'car lclist)
+                            (seq-union (seq-map #'car mlist)
+                                       (seq-union (seq-map #'car lcshlist)
+                                                  (seq-map #'car shlist))))))
+         (ed-exts (when exts
+                    (seq-map
+                     (lambda (elt)
+                       (concat "*" (string-trim  elt "\\\\" "\\\\'")))
+                     exts))))
+    ed-exts))
+
+(defvar tex--buffers-list nil)
+(defvar-local tex--old-syntax-function nil)
+
+(cl-defmethod xref-backend-references ((_backend (eql 'tex-etags)) identifier)
+  "Find references of IDENTIFIER in TeX buffers and files."
+  (require 'semantic/symref/grep)
+  (defvar semantic-symref-filepattern-alist)
+  (let (bufs texbufs
+             (mode major-mode))
+    (dolist (buf (buffer-list))
+      (if (eq (buffer-local-value 'major-mode buf) mode)
+          (push buf bufs)
+        (when (string-match-p ".*\\.[tT]e[xX]" (buffer-name buf))
+          (push buf texbufs))))
+    (unless (seq-set-equal-p tex--buffers-list bufs)
+      (let* ((amalist (tex--collect-file-extensions))
+             (extlist (alist-get mode semantic-symref-filepattern-alist))
+             (extlist-new (seq-uniq
+                           (seq-union amalist extlist #'string-match-p))))
+        (setq tex--buffers-list bufs)
+        (dolist (buf bufs)
+          (when-let ((fbuf (buffer-file-name buf))
+                     (ext (file-name-extension fbuf))
+                     (finext (concat "*." ext))
+                     ((not (seq-find (lambda (elt) (string-match-p elt finext))
+                                     extlist-new)))
+                     ((push finext extlist-new)))))
+        (unless (seq-set-equal-p extlist-new extlist)
+          (setf (alist-get mode semantic-symref-filepattern-alist)
+                extlist-new))))
+    (let* (setsyntax
+           (punct (with-syntax-table (tex-find-references-syntax-table)
+                    (seq-positions identifier (list ?w ?_)
+                                   (lambda (elt sycode)
+                                     (not (memq (char-syntax elt) sycode))))))
+           (end (and punct
+                     (memq (1- (length identifier)) punct)
+                     (> (length identifier) 1)
+                     (concat "\\("
+                             (regexp-quote
+                              (string (elt identifier
+                                           (1- (length identifier)))))
+                             "\\)")))
+           (beg (and punct
+                     (memq 0 punct)
+                     (concat "\\("
+                             (regexp-quote (string (elt identifier 0)))
+                             "\\)")))
+           (text-mode-hook
+            (if (or end beg)
+                (progn
+                  (tex-xref-syntax-function identifier beg end)
+                  (setq setsyntax (lambda ()
+                                    (setq-local syntax-propertize-function
+                                                tex--xref-syntax-fun)
+                                    (setq-local TeX-style-hook-applied-p t)))
+                  (cons setsyntax text-mode-hook))
+              text-mode-hook)))
+      (unless (memq 'doctex-mode (derived-mode-all-parents mode))
+        (setq bufs (append texbufs bufs)))
+      (when (or end beg)
+        (dolist (buf bufs)
+          (with-current-buffer buf
+            (unless (local-variable-p 'tex--old-syntax-function)
+              (setq tex--old-syntax-function syntax-propertize-function))
+            (setq-local syntax-propertize-function
+                        tex--xref-syntax-fun)
+            (syntax-ppss-flush-cache (point-min)))))
+      (unwind-protect
+          (xref-backend-references nil identifier)
+        (when (or end beg)
+          (dolist (buf bufs)
+            (with-current-buffer buf
+              (when buffer-file-truename
+                (setq-local syntax-propertize-function
+                            tex--old-syntax-function)
+                (syntax-ppss-flush-cache (point-min))))))))))
+
 (make-obsolete-variable 'tex-mode-load-hook
                         "use `with-eval-after-load' instead." "28.1")
 (run-hooks 'tex-mode-load-hook)
diff --git a/test/manual/etags/CTAGS.good b/test/manual/etags/CTAGS.good
index 84a56b23cfa..66c33616f98 100644
--- a/test/manual/etags/CTAGS.good
+++ b/test/manual/etags/CTAGS.good
@@ -1,3 +1,5 @@
+"	tex-src/texinfo.tex	/^\\let"=\\activedoublequote$/
+"	tex-src/texinfo.tex	/^\\def\\turnoffactive{\\let"=\\normaldoublequote$/
 #a-defer-word	forth-src/test-forth.fth	/^defer #a-defer-word$/
 #some-storage	forth-src/test-forth.fth	/^2000 buffer: #some-storage$/
 $0x80	c-src/sysdep.h	32
@@ -32,14 +34,28 @@ $user_comment_lc	php-src/lce_functions.php	115
 ${CHECKOBJS}	make-src/Makefile	/^${CHECKOBJS}: CFLAGS=-g3 -DNULLFREECHECK=0$/
 %cdiff	make-src/Makefile	/^%cdiff: CTAGS% CTAGS ${infiles}$/
 %ediff	make-src/Makefile	/^%ediff: ETAGS% ETAGS ${infiles}$/
+&	tex-src/texinfo.tex	/^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/
+&	tex-src/texinfo.tex	/^\\gdef\\normalparens{\\boldbrax\\let&=\\ampnr}$/
+'	tex-src/texinfo.tex	/^\\def\\'{{'}}$/
+(	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
+(	tex-src/texinfo.tex	/^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested /
+(	tex-src/texinfo.tex	/^\\ifnum \\parencount=1 {\\rm \\char `\\)}\\sl \\let(=\\opr/
+(	tex-src/texinfo.tex	/^\\gdef\\amprm#1 {{\\rm\\&#1}\\let(=\\oprm \\let)=\\clrm\\ }/
 ($_,$flag,$opt,$f,$r,@temp	perl-src/yagrip.pl	8
 ($prog,$_,@list	perl-src/yagrip.pl	39
 ($string,$flag,@string,@temp,@last	perl-src/yagrip.pl	40
 (a-forth-constant	forth-src/test-forth.fth	/^constant (a-forth-constant$/
 (another-forth-word)	forth-src/test-forth.fth	/^: (another-forth-word) ( -- )$/
 (foo)	forth-src/test-forth.fth	/^: (foo) 1 ;$/
+)	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
+)	tex-src/texinfo.tex	/^\\gdef\\amprm#1 {{\\rm\\&#1}\\let(=\\oprm \\let)=\\clrm\\ }/
+*	tex-src/texinfo.tex	/^\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}$/
+*	tex-src/texinfo.tex	/^\\let\\*=\\ptexstar$/
 +	ruby-src/test.rb	/^        def +(y)$/
 +	tex-src/texinfo.tex	/^\\def+{{\\tt \\char 43}}$/
++	tex-src/texinfo.tex	/^\\let+=\\normalplus}$/
+.	tex-src/texinfo.tex	/^\\def\\.{.\\spacefactor=3000 }$/
+.	tex-src/texinfo.tex	/^\\let\\.=\\ptexdot$/
 .PRECIOUS	make-src/Makefile	/^.PRECIOUS: ETAGS CTAGS ETAGS16 CTAGS16 ETAGS17 CTA/
 /.notdef	ps-src/rfc1245.ps	/^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/
 /.notdef	ps-src/rfc1245.ps	/^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/
@@ -174,38 +190,26 @@ ${CHECKOBJS}	make-src/Makefile	/^${CHECKOBJS}: CFLAGS=-g3 -DNULLFREECHECK=0$/
 2const	forth-src/test-forth.fth	/^3 4 2constant 2const$/
 2val	forth-src/test-forth.fth	/^2const 2value 2val$/
 2var	forth-src/test-forth.fth	/^2variable 2var$/
+:	tex-src/texinfo.tex	/^\\def\\:{\\spacefactor=1000 }$/
 :a-forth-dictionary-entry	forth-src/test-forth.fth	/^create :a-forth-dictionary-entry$/
 <	tex-src/texinfo.tex	/^\\def<{{\\tt \\less}}$/
+<	tex-src/texinfo.tex	/^\\let<=\\normalless$/
 <<	ruby-src/test.rb	/^        def <<(y)$/
 <=	ruby-src/test.rb	/^        def <=(y)$/
 <=>	ruby-src/test.rb	/^        def <=>(y)$/
-=	tex-src/texinfo.tex	/^\\global\\let\\section = \\numberedsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\numberedsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\numberedsubsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\section = \\appendixsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\appendixsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\appendixsubsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\section = \\unnumberedsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\unnumberedsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\unnumberedsubsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\section = \\numberedsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\numberedsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\numberedsubsubsec$/
 =	tex-src/texinfo.tex	/^\\global\\def={{\\tt \\char 61}}}$/
 =/f	ada-src/etags-test-for.ada	/^   function "=" (L, R : System.Address) return Boo/
 ==	ruby-src/test.rb	/^        def ==(y)$/
 ===	ruby-src/test.rb	/^        def ===(y)$/
-=\indexdummyfont	tex-src/texinfo.tex	/^\\let\\cite=\\indexdummyfont$/
-=\relax	tex-src/texinfo.tex	/^\\let\\chapter=\\relax$/
-=\relax	tex-src/texinfo.tex	/^\\let\\section=\\relax$/
-=\relax	tex-src/texinfo.tex	/^\\let\\subsection=\\relax$/
-=\relax	tex-src/texinfo.tex	/^\\let\\subsubsection=\\relax$/
-=\relax	tex-src/texinfo.tex	/^\\let\\appendix=\\relax$/
-=\smartitalic	tex-src/texinfo.tex	/^\\let\\cite=\\smartitalic$/
 =starts-with-equals!	scm-src/test.scm	/^(define =starts-with-equals! #t)$/
 >	tex-src/texinfo.tex	/^\\def>{{\\tt \\gtr}}$/
+>	tex-src/texinfo.tex	/^\\let>=\\normalgreater$/
 >field1	forth-src/test-forth.fth	/^   9   field   >field1$/
 >field2	forth-src/test-forth.fth	/^   5   field   >field2$/
+@	tex-src/texinfo.tex	/^\\def\\@{{\\tt \\char '100}}$/
+@	tex-src/texinfo.tex	/^\\def\\@{@}%$/
+@sf	tex-src/texinfo.tex	/^\\let\\@sf\\empty$/
+@sf	tex-src/texinfo.tex	/^\\ifhmode\\edef\\@sf{\\spacefactor\\the\\spacefactor}\\\/\\/
 A	c.c	162
 A	cp-src/c.C	39
 A	cp-src/c.C	56
@@ -331,6 +335,11 @@ CATCHER	c-src/emacs/src/lisp.h	3021
 CDR	c-src/emacs/src/lisp.h	/^CDR (Lisp_Object c)$/
 CDR_SAFE	c-src/emacs/src/lisp.h	/^CDR_SAFE (Lisp_Object c)$/
 CFLAGS	make-src/Makefile	/^CFLAGS=${WARNINGS} -ansi -g3 # -pg -O$/
+CHAPFopen	tex-src/texinfo.tex	/^\\def\\CHAPFopen{$/
+CHAPFplain	tex-src/texinfo.tex	/^\\def\\CHAPFplain{$/
+CHAPPAGodd	tex-src/texinfo.tex	/^\\def\\CHAPPAGodd{$/
+CHAPPAGoff	tex-src/texinfo.tex	/^\\def\\CHAPPAGoff{$/
+CHAPPAGon	tex-src/texinfo.tex	/^\\def\\CHAPPAGon{$/
 CHAR	c-src/etags.c	/^#define CHAR(x)		((unsigned int)(x) & (CHARS - 1))/
 CHAR	y-src/cccp.c	7
 CHARACTERBITS	c-src/emacs/src/lisp.h	2457
@@ -540,6 +549,7 @@ EMACS_UINT	c-src/emacs/src/lisp.h	104
 ENTRY	c-src/sysdep.h	/^#define	ENTRY(name)							      \\$/
 ENUM_BF	c-src/emacs/src/lisp.h	/^#define ENUM_BF(TYPE) unsigned int$/
 ENUM_BF	c-src/emacs/src/lisp.h	/^#define ENUM_BF(TYPE) enum TYPE$/
+ENVcheck	tex-src/texinfo.tex	/^\\def\\ENVcheck{%$/
 EQ	c-src/emacs/src/lisp.h	/^# define EQ(x, y) lisp_h_EQ (x, y)$/
 EQUAL	y-src/cccp.c	12
 ERLSRC	make-src/Makefile	/^ERLSRC=gs_dialog.erl lines.erl lists.erl$/
@@ -553,13 +563,38 @@ EXFUN	c-src/emacs/src/lisp.h	/^#define EXFUN(fnname, maxargs) \\$/
 EXTAGS	make-src/Makefile	/^EXTAGS: extags ${infiles} Makefile$/
 EXTERNALLY_VISIBLE	c-src/emacs/src/keyboard.c	3497
 EXTERNALLY_VISIBLE	c-src/emacs/src/keyboard.c	4372
+Ealphaenumerate	tex-src/texinfo.tex	/^\\def\\Ealphaenumerate{\\Eenumerate}$/
+Ecapsenumerate	tex-src/texinfo.tex	/^\\def\\Ecapsenumerate{\\Eenumerate}$/
+Ecartouche	tex-src/texinfo.tex	/^\\def\\Ecartouche{%$/
+Edescription	tex-src/texinfo.tex	/^\\def\\Edescription{\\Etable}% Necessary kludge.$/
+Edisplay	tex-src/texinfo.tex	/^\\def\\Edisplay{\\endgroup\\afterenvbreak}%$/
+Eexample	tex-src/texinfo.tex	/^\\def\\Eexample{\\Elisp}$/
+Eflushleft	tex-src/texinfo.tex	/^\\def\\Eflushleft{\\endgroup\\afterenvbreak}%$/
+Eflushright	tex-src/texinfo.tex	/^\\def\\Eflushright{\\endgroup\\afterenvbreak}%$/
+Eformat	tex-src/texinfo.tex	/^\\def\\Eformat{\\endgroup\\afterenvbreak}$/
+Eftable	tex-src/texinfo.tex	/^\\def\\Eftable{\\endgraf\\endgroup\\afterenvbreak}%$/
+Egroup	tex-src/texinfo.tex	/^  \\def\\Egroup{\\egroup\\endgroup}%$/
+Eifclear	tex-src/texinfo.tex	/^\\def\\Eifclear{}$/
+Eifset	tex-src/texinfo.tex	/^\\def\\Eifset{}$/
+Eiftex	tex-src/texinfo.tex	/^\\def\\Eiftex{}$/
+Elisp	tex-src/texinfo.tex	/^\\def\\Elisp{\\endgroup\\afterenvbreak}%$/
 EmptyNmStr	pas-src/common.pas	/^function EmptyNmStr(* : NameString*);$/
 Environment	tex-src/gzip.texi	/^@node Environment, Tapes, Advanced usage, Top$/
+Equotation	tex-src/texinfo.tex	/^\\def\\Equotation{\\par\\endgroup\\afterenvbreak}%$/
 Erlang_functions	c-src/etags.c	/^Erlang_functions (FILE *inf)$/
 Erlang_help	c-src/etags.c	567
 Erlang_suffixes	c-src/etags.c	565
 ErrStrToNmStr	pas-src/common.pas	/^function ErrStrToNmStr;(*($/
 Error_Information/t	ada-src/2ataspri.ads	/^   type Error_Information is new Interfaces.C.POSI/
+Esmallexample	tex-src/texinfo.tex	/^\\def\\Esmallexample{\\Elisp}$/
+Esmallexample	tex-src/texinfo.tex	/^\\global\\def\\Esmallexample{\\Esmalllisp}$/
+Esmalllisp	tex-src/texinfo.tex	/^\\def\\Esmalllisp{\\endgroup\\afterenvbreak}%$/
+Etable	tex-src/texinfo.tex	/^\\let\\Etable=\\relax}}$/
+Etable	tex-src/texinfo.tex	/^\\let\\Etable=\\relax}}$/
+Etable	tex-src/texinfo.tex	/^\\def\\Etable{\\endgraf\\endgroup\\afterenvbreak}%$/
+Etex	tex-src/texinfo.tex	/^\\let\\Etex=\\endgroup}$/
+Etitlepage	tex-src/texinfo.tex	/^\\def\\Etitlepage{%$/
+Evtable	tex-src/texinfo.tex	/^\\def\\Evtable{\\endgraf\\endgroup\\afterenvbreak}%$/
 Exit_LL_Task/p	ada-src/2ataspri.adb	/^   procedure Exit_LL_Task is$/
 Exit_LL_Task/p	ada-src/2ataspri.ads	/^   procedure Exit_LL_Task;$/
 ExtractCommentInfo	pas-src/common.pas	/^procedure ExtractCommentInfo; (*($/
@@ -707,6 +742,20 @@ HASH_TABLE_P	c-src/emacs/src/lisp.h	/^HASH_TABLE_P (Lisp_Object a)$/
 HASH_TABLE_SIZE	c-src/emacs/src/lisp.h	/^HASH_TABLE_SIZE (struct Lisp_Hash_Table *h)$/
 HASH_VALUE	c-src/emacs/src/lisp.h	/^HASH_VALUE (struct Lisp_Hash_Table *h, ptrdiff_t i/
 HAVE_NTGUI	c-src/etags.c	116
+HEADINGSafter	tex-src/texinfo.tex	/^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/
+HEADINGSdouble	tex-src/texinfo.tex	/^\\def\\HEADINGSdouble{$/
+HEADINGSdoubleafter	tex-src/texinfo.tex	/^\\let\\HEADINGSdoubleafter=\\HEADINGSafter$/
+HEADINGSdoublex	tex-src/texinfo.tex	/^\\def\\HEADINGSdoublex{%$/
+HEADINGShook	tex-src/texinfo.tex	/^\\let\\HEADINGShook=\\relax$/
+HEADINGShook	tex-src/texinfo.tex	/^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/
+HEADINGShook	tex-src/texinfo.tex	/^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/
+HEADINGSoff	tex-src/texinfo.tex	/^\\def\\HEADINGSoff{$/
+HEADINGSon	tex-src/texinfo.tex	/^\\def\\HEADINGSon{\\HEADINGSdouble}$/
+HEADINGSon	tex-src/texinfo.tex	/^\\global\\def\\HEADINGSon{\\HEADINGSsingle}}$/
+HEADINGSon	tex-src/texinfo.tex	/^\\global\\def\\HEADINGSon{\\HEADINGSdouble}}$/
+HEADINGSsingle	tex-src/texinfo.tex	/^\\def\\HEADINGSsingle{$/
+HEADINGSsingleafter	tex-src/texinfo.tex	/^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/
+HEADINGSsinglex	tex-src/texinfo.tex	/^\\def\\HEADINGSsinglex{%$/
 HEAP	c-src/emacs/src/gmalloc.c	131
 HTMLSRC	make-src/Makefile	/^HTMLSRC=softwarelibero.html index.shtml algrthms.h/
 HTML_help	c-src/etags.c	584
@@ -768,6 +817,7 @@ JAVASRC	make-src/Makefile	/^JAVASRC=AWTEMul.java KeyEve.java SMan.java SysCol./
 KBD_BUFFER_SIZE	c-src/emacs/src/keyboard.c	82
 KBYTES	objc-src/PackInsp.m	58
 KEY_TO_CHAR	c-src/emacs/src/keyboard.c	/^#define KEY_TO_CHAR(k) (XINT (k) & ((1 << CHARACTE/
+L	tex-src/texinfo.tex	/^\\let\\L=\\ptexL$/
 LATEST	make-src/Makefile	/^LATEST=17$/
 LCE_COMMENT	php-src/lce_functions.php	13
 LCE_COMMENT_TOOL	php-src/lce_functions.php	17
@@ -1429,6 +1479,9 @@ Task_Type/b	ada-src/etags-test-for.ada	/^  task body Task_Type is$/
 Task_Type/b	ada-src/waroquiers.ada	/^  task body Task_Type is$/
 Task_Type/k	ada-src/etags-test-for.ada	/^  task type Task_Type is$/
 Task_Type/k	ada-src/waroquiers.ada	/^  task type Task_Type is$/
+TeX	tex-src/texinfo.tex	/^\\def\\TeX{\\realbackslash TeX}%$/
+TeX	tex-src/texinfo.tex	/^\\let\\TeX=\\indexdummytex$/
+TeX	tex-src/texinfo.tex	/^\\def\\TeX{\\realbackslash TeX}$/
 TeX_commands	c-src/etags.c	/^TeX_commands (FILE *inf)$/
 TeX_help	c-src/etags.c	674
 TeX_suffixes	c-src/etags.c	672
@@ -1712,14 +1765,15 @@ YY_DECL_VARIABLES	/usr/share/bison/bison.simple	391
 Yacc_entries	c-src/etags.c	/^Yacc_entries (FILE *inf)$/
 Yacc_help	c-src/etags.c	693
 Yacc_suffixes	c-src/etags.c	691
+Yappendixletterandtype	tex-src/texinfo.tex	/^\\def\\Yappendixletterandtype{%$/
+Ynothing	tex-src/texinfo.tex	/^\\def\\Ynothing{}$/
+Ypagenumber	tex-src/texinfo.tex	/^\\def\\Ypagenumber{\\folio}$/
+Ysectionnumberandtype	tex-src/texinfo.tex	/^\\def\\Ysectionnumberandtype{%$/
+Ytitle	tex-src/texinfo.tex	/^\\def\\Ytitle{\\thischapter}$/
 Z	c-src/h.h	100
+[	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
 []	ruby-src/test.rb	/^        def [](y)$/
 []=	ruby-src/test.rb	/^        def []=(y, val)$/
-\	tex-src/texinfo.tex	/^\\def\\ {{\\fontdimen2\\font=\\tclosesave{} }}%$/
-\	tex-src/texinfo.tex	/^\\gdef\\sepspaces{\\def {\\ }}}$/
-\'	tex-src/texinfo.tex	/^\\def\\'{{'}}$/
-\*	tex-src/texinfo.tex	/^\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}$/
-\.	tex-src/texinfo.tex	/^\\def\\.{.\\spacefactor=3000 }$/
 \1	c-src/abbrev.c	/^  DEFVAR_LISP ("abbrev-table-name-list", &Vabbrev_/
 \1	c-src/abbrev.c	/^  DEFVAR_LISP ("global-abbrev-table", &Vglobal_abb/
 \1	c-src/abbrev.c	/^  DEFVAR_LISP ("fundamental-mode-abbrev-table", &V/
@@ -1822,548 +1876,13 @@ Z	c-src/h.h	100
 \1	c-src/emacs/src/keyboard.c	/^  DEFVAR_LISP ("selection-inhibit-update-commands"/
 \1	c-src/emacs/src/keyboard.c	/^  DEFVAR_LISP ("debug-on-event",
                Vd/
-\:	tex-src/texinfo.tex	/^\\def\\:{\\spacefactor=1000 }$/
-\@	tex-src/texinfo.tex	/^\\def\\@{{\\tt \\char '100}}$/
-\@	tex-src/texinfo.tex	/^\\def\\@{@}%$/
-\CHAPFopen	tex-src/texinfo.tex	/^\\def\\CHAPFopen{$/
-\CHAPFplain	tex-src/texinfo.tex	/^\\def\\CHAPFplain{$/
-\CHAPPAGodd	tex-src/texinfo.tex	/^\\def\\CHAPPAGodd{$/
-\CHAPPAGoff	tex-src/texinfo.tex	/^\\def\\CHAPPAGoff{$/
-\CHAPPAGon	tex-src/texinfo.tex	/^\\def\\CHAPPAGon{$/
-\ENVcheck	tex-src/texinfo.tex	/^\\def\\ENVcheck{%$/
-\Ealphaenumerate	tex-src/texinfo.tex	/^\\def\\Ealphaenumerate{\\Eenumerate}$/
-\Ecapsenumerate	tex-src/texinfo.tex	/^\\def\\Ecapsenumerate{\\Eenumerate}$/
-\Ecartouche	tex-src/texinfo.tex	/^\\def\\Ecartouche{%$/
-\Edescription	tex-src/texinfo.tex	/^\\def\\Edescription{\\Etable}% Necessary kludge.$/
-\Edisplay	tex-src/texinfo.tex	/^\\def\\Edisplay{\\endgroup\\afterenvbreak}%$/
-\Eexample	tex-src/texinfo.tex	/^\\def\\Eexample{\\Elisp}$/
-\Eflushleft	tex-src/texinfo.tex	/^\\def\\Eflushleft{\\endgroup\\afterenvbreak}%$/
-\Eflushright	tex-src/texinfo.tex	/^\\def\\Eflushright{\\endgroup\\afterenvbreak}%$/
-\Eformat	tex-src/texinfo.tex	/^\\def\\Eformat{\\endgroup\\afterenvbreak}$/
-\Eftable	tex-src/texinfo.tex	/^\\def\\Eftable{\\endgraf\\endgroup\\afterenvbreak}%$/
-\Egroup	tex-src/texinfo.tex	/^  \\def\\Egroup{\\egroup\\endgroup}%$/
-\Eifclear	tex-src/texinfo.tex	/^\\def\\Eifclear{}$/
-\Eifset	tex-src/texinfo.tex	/^\\def\\Eifset{}$/
-\Eiftex	tex-src/texinfo.tex	/^\\def\\Eiftex{}$/
-\Elisp	tex-src/texinfo.tex	/^\\def\\Elisp{\\endgroup\\afterenvbreak}%$/
-\Equotation	tex-src/texinfo.tex	/^\\def\\Equotation{\\par\\endgroup\\afterenvbreak}%$/
-\Esmallexample	tex-src/texinfo.tex	/^\\def\\Esmallexample{\\Elisp}$/
-\Esmallexample	tex-src/texinfo.tex	/^\\global\\def\\Esmallexample{\\Esmalllisp}$/
-\Esmalllisp	tex-src/texinfo.tex	/^\\def\\Esmalllisp{\\endgroup\\afterenvbreak}%$/
-\Etable	tex-src/texinfo.tex	/^\\def\\Etable{\\endgraf\\endgroup\\afterenvbreak}%$/
-\Etitlepage	tex-src/texinfo.tex	/^\\def\\Etitlepage{%$/
-\Evtable	tex-src/texinfo.tex	/^\\def\\Evtable{\\endgraf\\endgroup\\afterenvbreak}%$/
-\HEADINGSafter	tex-src/texinfo.tex	/^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/
-\HEADINGSdouble	tex-src/texinfo.tex	/^\\def\\HEADINGSdouble{$/
-\HEADINGSdoublex	tex-src/texinfo.tex	/^\\def\\HEADINGSdoublex{%$/
-\HEADINGSoff	tex-src/texinfo.tex	/^\\def\\HEADINGSoff{$/
-\HEADINGSon	tex-src/texinfo.tex	/^\\def\\HEADINGSon{\\HEADINGSdouble}$/
-\HEADINGSon	tex-src/texinfo.tex	/^\\global\\def\\HEADINGSon{\\HEADINGSsingle}}$/
-\HEADINGSon	tex-src/texinfo.tex	/^\\global\\def\\HEADINGSon{\\HEADINGSdouble}}$/
-\HEADINGSsingle	tex-src/texinfo.tex	/^\\def\\HEADINGSsingle{$/
-\HEADINGSsingleafter	tex-src/texinfo.tex	/^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/
-\HEADINGSsinglex	tex-src/texinfo.tex	/^\\def\\HEADINGSsinglex{%$/
-\TeX	tex-src/texinfo.tex	/^\\def\\TeX{\\realbackslash TeX}%$/
-\TeX	tex-src/texinfo.tex	/^\\def\\TeX{\\realbackslash TeX}$/
-\Yappendixletterandtype	tex-src/texinfo.tex	/^\\def\\Yappendixletterandtype{%$/
-\Ynothing	tex-src/texinfo.tex	/^\\def\\Ynothing{}$/
-\Ypagenumber	tex-src/texinfo.tex	/^\\def\\Ypagenumber{\\folio}$/
-\Ysectionnumberandtype	tex-src/texinfo.tex	/^\\def\\Ysectionnumberandtype{%$/
-\Ytitle	tex-src/texinfo.tex	/^\\def\\Ytitle{\\thischapter}$/
-\_	tex-src/texinfo.tex	/^\\def\\_{{\\realbackslash _}}%$/
-\_	tex-src/texinfo.tex	/^\\def\\_{\\lvvmode \\kern.06em \\vbox{\\hrule width.3em /
-\`	tex-src/texinfo.tex	/^\\def\\`{{`}}$/
-\aboveenvbreak	tex-src/texinfo.tex	/^\\def\\aboveenvbreak{{\\advance\\aboveenvskipamount by/
-\activedoublequote	tex-src/texinfo.tex	/^\\def\\activedoublequote{{\\tt \\char '042}}$/
-\activeparens	tex-src/texinfo.tex	/^\\def\\activeparens{%$/
-\afourpaper	tex-src/texinfo.tex	/^\\def\\afourpaper{$/
-\afterenvbreak	tex-src/texinfo.tex	/^\\def\\afterenvbreak{\\endgraf \\ifdim\\lastskip<\\above/
-\alphaenumerate	tex-src/texinfo.tex	/^\\def\\alphaenumerate{\\enumerate{a}}$/
-\appendix	tex-src/texinfo.tex	/^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/
-\appendixletter	tex-src/texinfo.tex	/^\\def\\appendixletter{\\char\\the\\appendixno}$/
-\appendixnoderef	tex-src/texinfo.tex	/^\\def\\appendixnoderef{\\ifx\\lastnode\\relax\\else$/
-\appendixsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/
-\appendixsection	tex-src/texinfo.tex	/^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/
-\appendixsectionzzz	tex-src/texinfo.tex	/^\\def\\appendixsectionzzz #1{\\seccheck{appendixsecti/
-\appendixsetref	tex-src/texinfo.tex	/^\\def\\appendixsetref#1{%$/
-\appendixsubsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsec{\\parsearg\\appendixsubsec/
-\appendixsubseczzz	tex-src/texinfo.tex	/^\\def\\appendixsubseczzz #1{\\seccheck{appendixsubsec/
-\appendixsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/
-\appendixsubsubseczzz	tex-src/texinfo.tex	/^\\def\\appendixsubsubseczzz #1{\\seccheck{appendixsub/
-\appendixzzz	tex-src/texinfo.tex	/^\\def\\appendixzzz #1{\\seccheck{appendix}%$/
-\asis	tex-src/texinfo.tex	/^\\def\\asis#1{#1}$/
-\author	tex-src/texinfo.tex	/^   \\def\\author{\\parsearg\\authorzzz}%$/
-\authorfont	tex-src/texinfo.tex	/^   \\def\\authorfont{\\authorrm \\normalbaselineskip =/
-\authorzzz	tex-src/texinfo.tex	/^   \\def\\authorzzz##1{\\ifseenauthor\\else\\vskip 0pt /
-\b	tex-src/texinfo.tex	/^\\def\\b#1{{\\bf #1}}$/
-\b	tex-src/texinfo.tex	/^\\def\\b##1{\\realbackslash b {##1}}%$/
-\b	tex-src/texinfo.tex	/^\\def\\b##1{\\realbackslash b {##1}}$/
-\balancecolumns	tex-src/texinfo.tex	/^\\def\\balancecolumns{%$/
-\begin	tex-src/texinfo.tex	/^\\outer\\def\\begin{\\parsearg\\beginxxx}$/
-\begindoublecolumns	tex-src/texinfo.tex	/^\\def\\begindoublecolumns{\\begingroup$/
-\beginxxx	tex-src/texinfo.tex	/^\\def\\beginxxx #1{%$/
-\bf	tex-src/texinfo.tex	/^\\def\\bf{\\realbackslash bf }%$/
-\bf	tex-src/texinfo.tex	/^\\def\\bf{\\realbackslash bf }$/
-\bullet	tex-src/texinfo.tex	/^\\def\\bullet{$\\ptexbullet$}$/
-\bye	tex-src/texinfo.tex	/^\\outer\\def\\bye{\\pagealignmacro\\tracingstats=1\\ptex/
-\capsenumerate	tex-src/texinfo.tex	/^\\def\\capsenumerate{\\enumerate{A}}$/
-\cartbot	tex-src/texinfo.tex	/^\\def\\cartbot{\\hbox to \\cartouter{\\hskip\\lskip$/
-\cartouche	tex-src/texinfo.tex	/^\\long\\def\\cartouche{%$/
-\carttop	tex-src/texinfo.tex	/^\\def\\carttop{\\hbox to \\cartouter{\\hskip\\lskip$/
-\cbl	tex-src/texinfo.tex	/^\\def\\cbl{{\\circle\\char'012\\hskip -6pt}}$/
-\cbr	tex-src/texinfo.tex	/^\\def\\cbr{{\\hskip 6pt\\circle\\char'011}}$/
-\center	tex-src/texinfo.tex	/^\\def\\center{\\parsearg\\centerzzz}$/
-\centerzzz	tex-src/texinfo.tex	/^\\def\\centerzzz #1{{\\advance\\hsize by -\\leftskip$/
-\chapbreak	tex-src/texinfo.tex	/^\\def\\chapbreak{\\dobreak \\chapheadingskip {-4000}}$/
-\chapentry	tex-src/texinfo.tex	/^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/
-\chapentryfonts	tex-src/texinfo.tex	/^\\def\\chapentryfonts{\\secfonts \\rm}$/
-\chapfonts	tex-src/texinfo.tex	/^\\def\\chapfonts{%$/
-\chapheading	tex-src/texinfo.tex	/^\\def\\chapheading{\\parsearg\\chapheadingzzz}$/
-\chapheadingzzz	tex-src/texinfo.tex	/^\\def\\chapheadingzzz #1{\\chapbreak %$/
-\chapoddpage	tex-src/texinfo.tex	/^\\def\\chapoddpage{\\chappager \\ifodd\\pageno \\else \\h/
-\chappager	tex-src/texinfo.tex	/^\\def\\chappager{\\par\\vfill\\supereject}$/
-\chapter	tex-src/texinfo.tex	/^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/
-\chapternofonts	tex-src/texinfo.tex	/^\\def\\chapternofonts{%$/
-\chapterzzz	tex-src/texinfo.tex	/^\\def\\chapterzzz #1{\\seccheck{chapter}%$/
-\char	tex-src/texinfo.tex	/^\\def\\char{\\realbackslash char}%$/
-\char	tex-src/texinfo.tex	/^\\def\\char{\\realbackslash char}$/
-\chfopen	tex-src/texinfo.tex	/^\\def\\chfopen #1#2{\\chapoddpage {\\chapfonts$/
-\chfplain	tex-src/texinfo.tex	/^\\def\\chfplain #1#2{%$/
-\cindex	tex-src/texinfo.tex	/^\\def\\cindex {\\cpindex}$/
-\cindexsub	tex-src/texinfo.tex	/^\\def\\cindexsub {\\begingroup\\obeylines\\cindexsub}$/
-\cite	tex-src/texinfo.tex	/^\\def\\cite##1{\\realbackslash cite {##1}}%$/
-\cite	tex-src/texinfo.tex	/^\\def\\cite##1{\\realbackslash cite {##1}}$/
-\clear	tex-src/texinfo.tex	/^\\def\\clear{\\parsearg\\clearxxx}$/
-\clearxxx	tex-src/texinfo.tex	/^\\def\\clearxxx #1{$/
-\code	tex-src/texinfo.tex	/^\\def\\code##1{\\realbackslash code {##1}}%$/
-\code	tex-src/texinfo.tex	/^\\def\\code##1{\\realbackslash code {##1}}$/
-\comment	tex-src/texinfo.tex	/^\\def\\comment{\\catcode 64=\\other \\catcode 123=\\othe/
-\commentxxx	tex-src/texinfo.tex	/^\\def\\commentxxx #1{\\catcode 64=0 \\catcode 123=1 \\c/
-\contents	tex-src/texinfo.tex	/^\\outer\\def\\contents{%$/
-\copyright	tex-src/texinfo.tex	/^\\def\\copyright{\\realbackslash copyright }%$/
-\copyright	tex-src/texinfo.tex	/^\\def\\copyright{\\realbackslash copyright}$/
-\cropmarks	tex-src/texinfo.tex	/^\\def\\cropmarks{\\let\\onepageout=\\croppageout }$/
-\croppageout	tex-src/texinfo.tex	/^\\def\\croppageout#1{\\hoffset=0pt % make sure this d/
-\ctl	tex-src/texinfo.tex	/^\\def\\ctl{{\\circle\\char'013\\hskip -6pt}}% 6pt from /
-\ctr	tex-src/texinfo.tex	/^\\def\\ctr{{\\hskip 6pt\\circle\\char'010}}$/
-\ctrl	tex-src/texinfo.tex	/^\\def\\ctrl #1{{\\tt \\rawbackslash \\hat}#1}$/
-\defcodeindex	tex-src/texinfo.tex	/^\\def\\defcodeindex{\\parsearg\\newcodeindex}$/
-\defcv	tex-src/texinfo.tex	/^\\def\\defcv #1 {\\def\\defcvtype{#1}%$/
-\defcvarheader	tex-src/texinfo.tex	/^\\def\\defcvarheader #1#2#3{%$/
-\defcvx	tex-src/texinfo.tex	/^\\def\\defcvx #1 {\\errmessage{@defcvx in invalid con/
-\deffn	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
-\deffnheader	tex-src/texinfo.tex	/^\\def\\deffnheader #1#2#3{\\doind {fn}{\\code{#2}}%$/
-\deffnx	tex-src/texinfo.tex	/^\\def\\deffnx #1 {\\errmessage{@deffnx in invalid con/
-\defindex	tex-src/texinfo.tex	/^\\def\\defindex{\\parsearg\\newindex}$/
-\defivar	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
-\defivarheader	tex-src/texinfo.tex	/^\\def\\defivarheader #1#2#3{%$/
-\defivarx	tex-src/texinfo.tex	/^\\def\\defivarx #1 {\\errmessage{@defivarx in invalid/
-\defmac	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
-\defmacheader	tex-src/texinfo.tex	/^\\def\\defmacheader #1#2{\\doind {fn}{\\code{#1}}% Mak/
-\defmacx	tex-src/texinfo.tex	/^\\def\\defmacx #1 {\\errmessage{@defmacx in invalid c/
-\defmethod	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
-\defmethodheader	tex-src/texinfo.tex	/^\\def\\defmethodheader #1#2#3{%$/
-\defmethodx	tex-src/texinfo.tex	/^\\def\\defmethodx #1 {\\errmessage{@defmethodx in inv/
-\defmethparsebody	tex-src/texinfo.tex	/^\\def\\defmethparsebody #1#2#3#4 {\\begingroup\\inENV /
-\defname	tex-src/texinfo.tex	/^\\def\\defname #1#2{%$/
-\defop	tex-src/texinfo.tex	/^\\def\\defop #1 {\\def\\defoptype{#1}%$/
-\defopheader	tex-src/texinfo.tex	/^\\def\\defopheader #1#2#3{%$/
-\defopparsebody	tex-src/texinfo.tex	/^\\def\\defopparsebody #1#2#3#4#5 {\\begingroup\\inENV /
-\defopt	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
-\defoptheader	tex-src/texinfo.tex	/^\\def\\defoptheader #1#2{\\doind {vr}{\\code{#1}}% Mak/
-\defoptx	tex-src/texinfo.tex	/^\\def\\defoptx #1 {\\errmessage{@defoptx in invalid c/
-\defopvarparsebody	tex-src/texinfo.tex	/^\\def\\defopvarparsebody #1#2#3#4#5 {\\begingroup\\inE/
-\defopx	tex-src/texinfo.tex	/^\\def\\defopx #1 {\\errmessage{@defopx in invalid con/
-\defparsebody	tex-src/texinfo.tex	/^\\def\\defparsebody #1#2#3{\\begingroup\\inENV% Enviro/
-\defspec	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
-\defspecheader	tex-src/texinfo.tex	/^\\def\\defspecheader #1#2{\\doind {fn}{\\code{#1}}% Ma/
-\defspecx	tex-src/texinfo.tex	/^\\def\\defspecx #1 {\\errmessage{@defspecx in invalid/
-\deftp	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
-\deftpargs	tex-src/texinfo.tex	/^\\def\\deftpargs #1{\\bf \\defvarargs{#1}}$/
-\deftpheader	tex-src/texinfo.tex	/^\\def\\deftpheader #1#2#3{\\doind {tp}{\\code{#2}}%$/
-\deftpx	tex-src/texinfo.tex	/^\\def\\deftpx #1 {\\errmessage{@deftpx in invalid con/
-\deftypefn	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
-\deftypefnheader	tex-src/texinfo.tex	/^\\def\\deftypefnheader #1#2#3{\\deftypefnheaderx{#1}{/
-\deftypefnheaderx	tex-src/texinfo.tex	/^\\def\\deftypefnheaderx #1#2#3 #4\\relax{%$/
-\deftypefnx	tex-src/texinfo.tex	/^\\def\\deftypefnx #1 {\\errmessage{@deftypefnx in inv/
-\deftypefun	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
-\deftypefunargs	tex-src/texinfo.tex	/^\\def\\deftypefunargs #1{%$/
-\deftypefunheader	tex-src/texinfo.tex	/^\\def\\deftypefunheader #1#2{\\deftypefunheaderx{#1}#/
-\deftypefunheaderx	tex-src/texinfo.tex	/^\\def\\deftypefunheaderx #1#2 #3\\relax{%$/
-\deftypeunx	tex-src/texinfo.tex	/^\\def\\deftypeunx #1 {\\errmessage{@deftypeunx in inv/
-\deftypevar	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
-\deftypevarheader	tex-src/texinfo.tex	/^\\def\\deftypevarheader #1#2{%$/
-\deftypevarx	tex-src/texinfo.tex	/^\\def\\deftypevarx #1 {\\errmessage{@deftypevarx in i/
-\deftypevr	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
-\deftypevrheader	tex-src/texinfo.tex	/^\\def\\deftypevrheader #1#2#3{\\doind {vr}{\\code{#3}}/
-\deftypevrx	tex-src/texinfo.tex	/^\\def\\deftypevrx #1 {\\errmessage{@deftypevrx in inv/
-\defun	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
-\defunargs	tex-src/texinfo.tex	/^\\def\\defunargs #1{\\functionparens \\sl$/
-\defunheader	tex-src/texinfo.tex	/^\\def\\defunheader #1#2{\\doind {fn}{\\code{#1}}% Make/
-\defunx	tex-src/texinfo.tex	/^\\def\\defunx #1 {\\errmessage{@defunx in invalid con/
-\defvar	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
-\defvarargs	tex-src/texinfo.tex	/^\\def\\defvarargs #1{\\normalparens #1%$/
-\defvarheader	tex-src/texinfo.tex	/^\\def\\defvarheader #1#2{\\doind {vr}{\\code{#1}}% Mak/
-\defvarparsebody	tex-src/texinfo.tex	/^\\def\\defvarparsebody #1#2#3{\\begingroup\\inENV% Env/
-\defvarx	tex-src/texinfo.tex	/^\\def\\defvarx #1 {\\errmessage{@defvarx in invalid c/
-\defvr	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
-\defvrheader	tex-src/texinfo.tex	/^\\def\\defvrheader #1#2#3{\\doind {vr}{\\code{#2}}%$/
-\defvrparsebody	tex-src/texinfo.tex	/^\\def\\defvrparsebody #1#2#3#4 {\\begingroup\\inENV %$/
-\defvrx	tex-src/texinfo.tex	/^\\def\\defvrx #1 {\\errmessage{@defvrx in invalid con/
-\description	tex-src/texinfo.tex	/^\\def\\description{\\tablez{\\dontindex}{1}{}{}{}{}}$/
-\df	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
-\dfn	tex-src/texinfo.tex	/^\\def\\dfn##1{\\realbackslash dfn {##1}}$/
-\direntry	tex-src/texinfo.tex	/^\\def\\direntry{\\begingroup\\direntryxxx}$/
-\direntryxxx	tex-src/texinfo.tex	/^\\long\\def\\direntryxxx #1\\end direntry{\\endgroup\\ig/
-\display	tex-src/texinfo.tex	/^\\def\\display{\\begingroup\\inENV %This group ends at/
-\dmn	tex-src/texinfo.tex	/^\\def\\dmn#1{\\thinspace #1}$/
-\dobreak	tex-src/texinfo.tex	/^\\def\\dobreak#1#2{\\par\\ifdim\\lastskip<#1\\removelast/
-\dochapentry	tex-src/texinfo.tex	/^\\def\\dochapentry#1#2{%$/
-\docodeindex	tex-src/texinfo.tex	/^\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\si/
-\doind	tex-src/texinfo.tex	/^\\def\\doind #1#2{%$/
-\doindex	tex-src/texinfo.tex	/^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/
-\donoderef	tex-src/texinfo.tex	/^\\def\\donoderef{\\ifx\\lastnode\\relax\\else$/
-\dontindex	tex-src/texinfo.tex	/^\\def\\dontindex #1{}$/
-\dopageno	tex-src/texinfo.tex	/^\\def\\dopageno#1{{\\rm #1}}$/
-\doprintindex	tex-src/texinfo.tex	/^\\def\\doprintindex#1{%$/
-\dosecentry	tex-src/texinfo.tex	/^\\def\\dosecentry#1#2{%$/
-\dosetq	tex-src/texinfo.tex	/^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/
-\doshortpageno	tex-src/texinfo.tex	/^\\def\\doshortpageno#1{{\\rm #1}}$/
-\dosubind	tex-src/texinfo.tex	/^\\def\\dosubind #1#2#3{%$/
-\dosubsecentry	tex-src/texinfo.tex	/^\\def\\dosubsecentry#1#2{%$/
-\dosubsubsecentry	tex-src/texinfo.tex	/^\\def\\dosubsubsecentry#1#2{%$/
-\dots	tex-src/texinfo.tex	/^\\def\\dots{$\\ldots$}$/
-\dots	tex-src/texinfo.tex	/^\\def\\dots{\\realbackslash dots }%$/
-\dots	tex-src/texinfo.tex	/^\\def\\dots{\\realbackslash dots}$/
-\doublecolumnout	tex-src/texinfo.tex	/^\\def\\doublecolumnout{\\splittopskip=\\topskip \\split/
-\emph	tex-src/texinfo.tex	/^\\def\\emph##1{\\realbackslash emph {##1}}$/
-\end	tex-src/texinfo.tex	/^\\def\\end{\\parsearg\\endxxx}$/
-\enddoublecolumns	tex-src/texinfo.tex	/^\\def\\enddoublecolumns{\\output={\\balancecolumns}\\ej/
-\endxxx	tex-src/texinfo.tex	/^\\def\\endxxx #1{%$/
-\entry	tex-src/texinfo.tex	/^\\def\\entry #1#2{\\begingroup$/
-\enumerate	tex-src/texinfo.tex	/^\\def\\enumerate{\\parsearg\\enumeratezzz}$/
-\enumeratey	tex-src/texinfo.tex	/^\\def\\enumeratey #1 #2\\endenumeratey{%$/
-\enumeratezzz	tex-src/texinfo.tex	/^\\def\\enumeratezzz #1{\\enumeratey #1  \\endenumerate/
-\equiv	tex-src/texinfo.tex	/^\\def\\equiv{\\realbackslash equiv}$/
-\equiv	tex-src/texinfo.tex	/^\\def\\equiv{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/
-\error	tex-src/texinfo.tex	/^\\def\\error{\\leavevmode\\lower.7ex\\copy\\errorbox}$/
-\errorE	tex-src/texinfo.tex	/^\\def\\errorE#1{$/
-\evenfooting	tex-src/texinfo.tex	/^\\def\\evenfooting{\\parsearg\\evenfootingxxx}$/
-\evenheading	tex-src/texinfo.tex	/^\\def\\evenheading{\\parsearg\\evenheadingxxx}$/
-\everyfooting	tex-src/texinfo.tex	/^\\def\\everyfooting{\\parsearg\\everyfootingxxx}$/
-\everyheading	tex-src/texinfo.tex	/^\\def\\everyheading{\\parsearg\\everyheadingxxx}$/
-\ewbot	tex-src/texinfo.tex	/^\\def\\ewbot{\\vrule height0pt depth\\cornerthick widt/
-\ewtop	tex-src/texinfo.tex	/^\\def\\ewtop{\\vrule height\\cornerthick depth0pt widt/
-\exdent	tex-src/texinfo.tex	/^\\def\\exdent{\\parsearg\\exdentyyy}$/
-\exdentyyy	tex-src/texinfo.tex	/^\\def\\exdentyyy #1{{\\hfil\\break\\hbox{\\kern -\\exdent/
-\expansion	tex-src/texinfo.tex	/^\\def\\expansion{\\realbackslash expansion}$/
-\expansion	tex-src/texinfo.tex	/^\\def\\expansion{\\leavevmode\\raise.1ex\\hbox to 1em{\\/
-\file	tex-src/texinfo.tex	/^\\def\\file##1{\\realbackslash file {##1}}%$/
-\file	tex-src/texinfo.tex	/^\\def\\file##1{\\realbackslash file {##1}}$/
-\finalout	tex-src/texinfo.tex	/^\\def\\finalout{\\overfullrule=0pt}$/
-\findex	tex-src/texinfo.tex	/^\\def\\findex {\\fnindex}$/
-\finishtitlepage	tex-src/texinfo.tex	/^\\def\\finishtitlepage{%$/
-\flushcr	tex-src/texinfo.tex	/^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else /
-\flushleft	tex-src/texinfo.tex	/^\\def\\flushleft{%$/
-\flushright	tex-src/texinfo.tex	/^\\def\\flushright{%$/
-\fnitemindex	tex-src/texinfo.tex	/^\\def\\fnitemindex #1{\\doind {fn}{\\code{#1}}}%$/
-\format	tex-src/texinfo.tex	/^\\def\\format{\\begingroup\\inENV %This group ends at /
-\frenchspacing	tex-src/texinfo.tex	/^\\def\\frenchspacing{\\sfcode46=1000 \\sfcode63=1000 \\/
-\ftable	tex-src/texinfo.tex	/^\\def\\ftable{\\begingroup\\inENV\\obeylines\\obeyspaces/
-\gloggingall	tex-src/texinfo.tex	/^\\def\\gloggingall{\\begingroup \\globaldefs = 1 \\logg/
-\group	tex-src/texinfo.tex	/^\\def\\group{\\begingroup$/
-\gtr	tex-src/texinfo.tex	/^\\def\\gtr{\\realbackslash gtr}%$/
-\gtr	tex-src/texinfo.tex	/^\\def\\gtr{\\realbackslash gtr}$/
-\hat	tex-src/texinfo.tex	/^\\def\\hat{\\realbackslash hat}%$/
-\hat	tex-src/texinfo.tex	/^\\def\\hat{\\realbackslash hat}$/
-\heading	tex-src/texinfo.tex	/^\\def\\heading{\\parsearg\\secheadingi}$/
-\headings	tex-src/texinfo.tex	/^\\def\\headings #1 {\\csname HEADINGS#1\\endcsname}$/
-\i	tex-src/texinfo.tex	/^\\def\\i##1{\\realbackslash i {##1}}%$/
-\i	tex-src/texinfo.tex	/^\\def\\i##1{\\realbackslash i {##1}}$/
-\ifclear	tex-src/texinfo.tex	/^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/
-\ifclearfail	tex-src/texinfo.tex	/^\\def\\ifclearfail{\\begingroup\\ignoresections\\ifclea/
-\ifclearfailxxx	tex-src/texinfo.tex	/^\\long\\def\\ifclearfailxxx #1\\end ifclear{\\endgroup\\/
-\ifclearxxx	tex-src/texinfo.tex	/^\\def\\ifclearxxx #1{\\endgroup$/
-\ifinfo	tex-src/texinfo.tex	/^\\def\\ifinfo{\\begingroup\\ignoresections\\ifinfoxxx}$/
-\ifinfoxxx	tex-src/texinfo.tex	/^\\long\\def\\ifinfoxxx #1\\end ifinfo{\\endgroup\\ignore/
-\ifset	tex-src/texinfo.tex	/^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/
-\ifsetfail	tex-src/texinfo.tex	/^\\def\\ifsetfail{\\begingroup\\ignoresections\\ifsetfai/
-\ifsetfailxxx	tex-src/texinfo.tex	/^\\long\\def\\ifsetfailxxx #1\\end ifset{\\endgroup\\igno/
-\ifsetxxx	tex-src/texinfo.tex	/^\\def\\ifsetxxx #1{\\endgroup$/
-\iftex	tex-src/texinfo.tex	/^\\def\\iftex{}$/
-\ifusingtt	tex-src/texinfo.tex	/^\\def\\ifusingtt#1#2{\\ifdim \\fontdimen3\\the\\font=0pt/
-\ignore	tex-src/texinfo.tex	/^\\def\\ignore{\\begingroup\\ignoresections$/
-\ignoresections	tex-src/texinfo.tex	/^\\def\\ignoresections{%$/
-\ignorexxx	tex-src/texinfo.tex	/^\\long\\def\\ignorexxx #1\\end ignore{\\endgroup\\ignore/
-\ii	tex-src/texinfo.tex	/^\\def\\ii#1{{\\it #1}}		% italic font$/
-\inENV	tex-src/texinfo.tex	/^\\newif\\ifENV \\ENVfalse \\def\\inENV{\\ifENV\\relax\\els/
-\include	tex-src/texinfo.tex	/^\\def\\include{\\parsearg\\includezzz}$/
-\includezzz	tex-src/texinfo.tex	/^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/
-\indexbackslash	tex-src/texinfo.tex	/^  \\def\\indexbackslash{\\rawbackslashxx}$/
-\indexdotfill	tex-src/texinfo.tex	/^\\def\\indexdotfill{\\cleaders$/
-\indexdummies	tex-src/texinfo.tex	/^\\def\\indexdummies{%$/
-\indexdummydots	tex-src/texinfo.tex	/^\\def\\indexdummydots{...}$/
-\indexdummyfont	tex-src/texinfo.tex	/^\\def\\indexdummyfont#1{#1}$/
-\indexdummytex	tex-src/texinfo.tex	/^\\def\\indexdummytex{TeX}$/
-\indexfonts	tex-src/texinfo.tex	/^\\def\\indexfonts{%$/
-\indexnofonts	tex-src/texinfo.tex	/^\\def\\indexnofonts{%$/
-\infoappendix	tex-src/texinfo.tex	/^\\def\\infoappendix{\\parsearg\\appendixzzz}$/
-\infoappendixsec	tex-src/texinfo.tex	/^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/
-\infoappendixsubsec	tex-src/texinfo.tex	/^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/
-\infoappendixsubsubsec	tex-src/texinfo.tex	/^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/
-\infochapter	tex-src/texinfo.tex	/^\\def\\infochapter{\\parsearg\\chapterzzz}$/
-\inforef	tex-src/texinfo.tex	/^\\def\\inforef #1{\\inforefzzz #1,,,,**}$/
-\inforefzzz	tex-src/texinfo.tex	/^\\def\\inforefzzz #1,#2,#3,#4**{See Info file \\file{/
-\infosection	tex-src/texinfo.tex	/^\\def\\infosection{\\parsearg\\sectionzzz}$/
-\infosubsection	tex-src/texinfo.tex	/^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/
-\infosubsubsection	tex-src/texinfo.tex	/^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/
-\infotop	tex-src/texinfo.tex	/^\\def\\infotop{\\parsearg\\unnumberedzzz}$/
-\infounnumbered	tex-src/texinfo.tex	/^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/
-\infounnumberedsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsec{\\parsearg\\unnumberedseczzz}/
-\infounnumberedsubsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsubsec{\\parsearg\\unnumberedsubs/
-\infounnumberedsubsubsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsubsubsec{\\parsearg\\unnumbereds/
-\initial	tex-src/texinfo.tex	/^\\def\\initial #1{%$/
-\internalBitem	tex-src/texinfo.tex	/^\\def\\internalBitem{\\smallbreak \\parsearg\\itemzzz}$/
-\internalBitemx	tex-src/texinfo.tex	/^\\def\\internalBitemx{\\par \\parsearg\\itemzzz}$/
-\internalBkitem	tex-src/texinfo.tex	/^\\def\\internalBkitem{\\smallbreak \\parsearg\\kitemzzz/
-\internalBkitemx	tex-src/texinfo.tex	/^\\def\\internalBkitemx{\\par \\parsearg\\kitemzzz}$/
-\internalBxitem	tex-src/texinfo.tex	/^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/
-\internalBxitemx	tex-src/texinfo.tex	/^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/
-\internalsetq	tex-src/texinfo.tex	/^\\def\\internalsetq #1#2{'xrdef {#1}{\\csname #2\\endc/
-\item	tex-src/texinfo.tex	/^\\def\\item{\\errmessage{@item while not in a table}}/
-\itemcontents	tex-src/texinfo.tex	/^\\def\\itemcontents{#1}%$/
-\itemfont	tex-src/texinfo.tex	/^\\def\\itemfont{#2}%$/
-\itemize	tex-src/texinfo.tex	/^\\def\\itemize{\\parsearg\\itemizezzz}$/
-\itemizeitem	tex-src/texinfo.tex	/^\\def\\itemizeitem{%$/
-\itemizey	tex-src/texinfo.tex	/^\\def\\itemizey #1#2{%$/
-\itemizezzz	tex-src/texinfo.tex	/^\\def\\itemizezzz #1{%$/
-\itemx	tex-src/texinfo.tex	/^\\def\\itemx{\\errmessage{@itemx while not in a table/
-\itemzzz	tex-src/texinfo.tex	/^\\def\\itemzzz #1{\\begingroup %$/
-\kbd	tex-src/texinfo.tex	/^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/
-\kbd	tex-src/texinfo.tex	/^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/
-\kbd	tex-src/texinfo.tex	/^\\def\\kbd##1{\\realbackslash kbd {##1}}$/
-\kbdfoo	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
-\key	tex-src/texinfo.tex	/^\\def\\key #1{{\\tt \\exhyphenpenalty=10000\\uppercase{/
-\key	tex-src/texinfo.tex	/^\\def\\key##1{\\realbackslash key {##1}}%$/
-\key	tex-src/texinfo.tex	/^\\def\\key##1{\\realbackslash key {##1}}$/
-\kindex	tex-src/texinfo.tex	/^\\def\\kindex {\\kyindex}$/
-\kitem	tex-src/texinfo.tex	/^\\def\\kitem{\\errmessage{@kitem while not in a table/
-\kitemx	tex-src/texinfo.tex	/^\\def\\kitemx{\\errmessage{@kitemx while not in a tab/
-\kitemzzz	tex-src/texinfo.tex	/^\\def\\kitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/
-\l	tex-src/texinfo.tex	/^\\def\\l#1{{\\li #1}\\null}		% $/
-\labelspace	tex-src/texinfo.tex	/^\\def\\labelspace{\\hskip1em \\relax}$/
-\lbrb	tex-src/texinfo.tex	/^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/
-\less	tex-src/texinfo.tex	/^\\def\\less{\\realbackslash less}%$/
-\less	tex-src/texinfo.tex	/^\\def\\less{\\realbackslash less}$/
-\linenumber	tex-src/texinfo.tex	/^  \\def\\linenumber{\\the\\inputlineno:\\space}$/
-\lisp	tex-src/texinfo.tex	/^\\def\\lisp{\\aboveenvbreak$/
-\loggingall	tex-src/texinfo.tex	/^\\def\\loggingall{\\tracingcommands2 \\tracingstats2 $/
-\losespace	tex-src/texinfo.tex	/^\\def\\losespace #1{#1}$/
-\lowercaseenumerate	tex-src/texinfo.tex	/^\\def\\lowercaseenumerate{%$/
-\lvvmode	tex-src/texinfo.tex	/^\\def\\lvvmode{\\vbox to 0pt{}}$/
-\majorheading	tex-src/texinfo.tex	/^\\def\\majorheading{\\parsearg\\majorheadingzzz}$/
-\majorheadingzzz	tex-src/texinfo.tex	/^\\def\\majorheadingzzz #1{%$/
-\math	tex-src/texinfo.tex	/^\\def\\math#1{\\implicitmath #1\\implicitmath}$/
-\menu	tex-src/texinfo.tex	/^\\long\\def\\menu #1\\end menu{}$/
-\minus	tex-src/texinfo.tex	/^\\def\\minus{$-$}$/
-\mylbrace	tex-src/texinfo.tex	/^\\def\\mylbrace {{\\tt \\char '173}}$/
-\myrbrace	tex-src/texinfo.tex	/^\\def\\myrbrace {{\\tt \\char '175}}$/
-\need	tex-src/texinfo.tex	/^\\def\\need{\\parsearg\\needx}$/
-\needx	tex-src/texinfo.tex	/^\\def\\needx#1{%$/
-\newcodeindex	tex-src/texinfo.tex	/^\\def\\newcodeindex #1{$/
-\newindex	tex-src/texinfo.tex	/^\\def\\newindex #1{$/
-\next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
-\next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
-\next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
-\next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
-\next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
-\next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
-\nm	tex-src/testenv.tex	/^\\newcommand{\\nm}[2]{\\nomenclature{#1}{#2}}$/
-\node	tex-src/texinfo.tex	/^\\def\\node{\\ENVcheck\\parsearg\\nodezzz}$/
-\nodexxx[	tex-src/texinfo.tex	/^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/
-\nodezzz	tex-src/texinfo.tex	/^\\def\\nodezzz#1{\\nodexxx [#1,]}$/
-\nofillexdent	tex-src/texinfo.tex	/^\\def\\nofillexdent{\\parsearg\\nofillexdentyyy}$/
-\nofillexdentyyy	tex-src/texinfo.tex	/^\\def\\nofillexdentyyy #1{{\\advance \\leftskip by -\\e/
-\normalbackslash	tex-src/texinfo.tex	/^\\def\\normalbackslash{{\\tt\\rawbackslashxx}}$/
-\normalcaret	tex-src/texinfo.tex	/^\\def\\normalcaret{^}$/
-\normaldoublequote	tex-src/texinfo.tex	/^\\def\\normaldoublequote{"}$/
-\normalgreater	tex-src/texinfo.tex	/^\\def\\normalgreater{>}$/
-\normalless	tex-src/texinfo.tex	/^\\def\\normalless{<}$/
-\normalplus	tex-src/texinfo.tex	/^\\def\\normalplus{+}$/
-\normaltilde	tex-src/texinfo.tex	/^\\def\\normaltilde{~}$/
-\normalunderscore	tex-src/texinfo.tex	/^\\def\\normalunderscore{_}$/
-\normalverticalbar	tex-src/texinfo.tex	/^\\def\\normalverticalbar{|}$/
-\nsbot	tex-src/texinfo.tex	/^\\def\\nsbot{\\vbox$/
-\nstop	tex-src/texinfo.tex	/^\\def\\nstop{\\vbox$/
-\numberedsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsec{\\parsearg\\seczzz}$/
-\numberedsubsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsubsec{\\parsearg\\numberedsubsec/
-\numberedsubseczzz	tex-src/texinfo.tex	/^\\def\\numberedsubseczzz #1{\\seccheck{subsection}%$/
-\numberedsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsubsubsec{\\parsearg\\numberedsub/
-\numberedsubsubseczzz	tex-src/texinfo.tex	/^\\def\\numberedsubsubseczzz #1{\\seccheck{subsubsecti/
-\numericenumerate	tex-src/texinfo.tex	/^\\def\\numericenumerate{%$/
-\oddfooting	tex-src/texinfo.tex	/^\\def\\oddfooting{\\parsearg\\oddfootingxxx}$/
-\oddheading	tex-src/texinfo.tex	/^\\def\\oddheading{\\parsearg\\oddheadingxxx}$/
-\onepageout	tex-src/texinfo.tex	/^\\def\\onepageout#1{\\hoffset=\\normaloffset$/
-\opencontents	tex-src/texinfo.tex	/^\\def\\opencontents{\\openout \\contentsfile = \\jobnam/
-\openindices	tex-src/texinfo.tex	/^\\def\\openindices{%$/
-\opnr	tex-src/texinfo.tex	/^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} /
-\page	tex-src/texinfo.tex	/^\\def\\page{\\par\\vfill\\supereject}$/
-\page	tex-src/texinfo.tex	/^   \\def\\page{%$/
-\pagebody	tex-src/texinfo.tex	/^\\def\\pagebody#1{\\vbox to\\pageheight{\\boxmaxdepth=\\/
-\pagesofar	tex-src/texinfo.tex	/^\\def\\pagesofar{\\unvbox\\partialpage %$/
-\parsearg	tex-src/texinfo.tex	/^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/
-\parseargline	tex-src/texinfo.tex	/^\\def\\parseargline{\\begingroup \\obeylines \\parsearg/
-\parseargx	tex-src/texinfo.tex	/^\\def\\parseargx{%$/
-\pindex	tex-src/texinfo.tex	/^\\def\\pindex {\\pgindex}$/
-\plainsecheading	tex-src/texinfo.tex	/^\\def\\plainsecheading #1{\\secheadingi {#1}}$/
-\point	tex-src/texinfo.tex	/^\\def\\point{$\\star$}$/
-\primary	tex-src/texinfo.tex	/^\\def\\primary #1{\\line{#1\\hfil}}$/
-\print	tex-src/texinfo.tex	/^\\def\\print{\\realbackslash print}$/
-\print	tex-src/texinfo.tex	/^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/
-\printedmanual	tex-src/texinfo.tex	/^\\def\\printedmanual{\\ignorespaces #5}%$/
-\printedmanual	tex-src/texinfo.tex	/^section ``\\printednodename'' in \\cite{\\printedmanu/
-\printednodename	tex-src/texinfo.tex	/^\\def\\printednodename{\\ignorespaces #3}%$/
-\printednodename	tex-src/texinfo.tex	/^\\def\\printednodename{\\ignorespaces #1}%$/
-\printindex	tex-src/texinfo.tex	/^\\def\\printindex{\\parsearg\\doprintindex}$/
-\pxref	tex-src/texinfo.tex	/^\\def\\pxref#1{see \\xrefX[#1,,,,,,,]}$/
-\quotation	tex-src/texinfo.tex	/^\\def\\quotation{%$/
-\r	tex-src/texinfo.tex	/^\\def\\r#1{{\\rm #1}}		% roman font$/
-\r	tex-src/texinfo.tex	/^\\def\\r##1{\\realbackslash r {##1}}%$/
-\r	tex-src/texinfo.tex	/^\\def\\r##1{\\realbackslash r {##1}}$/
-\rawbackslashxx	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/
-\rawbackslashxx	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}%$/
-\readauxfile	tex-src/texinfo.tex	/^\\def\\readauxfile{%$/
-\ref	tex-src/texinfo.tex	/^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/
-\refx	tex-src/texinfo.tex	/^\\def\\refx#1#2{%$/
-\resetmathfonts	tex-src/texinfo.tex	/^\\def\\resetmathfonts{%$/
-\result	tex-src/texinfo.tex	/^\\def\\result{\\realbackslash result}$/
-\result	tex-src/texinfo.tex	/^\\def\\result{\\leavevmode\\raise.15ex\\hbox to 1em{\\hf/
-\rm	tex-src/texinfo.tex	/^\\def\\rm{\\realbackslash rm }%$/
-\samp	tex-src/texinfo.tex	/^\\def\\samp #1{`\\tclose{#1}'\\null}$/
-\samp	tex-src/texinfo.tex	/^\\def\\samp##1{\\realbackslash samp {##1}}%$/
-\samp	tex-src/texinfo.tex	/^\\def\\samp##1{\\realbackslash samp {##1}}$/
-\sc	tex-src/texinfo.tex	/^\\def\\sc#1{{\\smallcaps#1}}	% smallcaps font$/
-\seccheck	tex-src/texinfo.tex	/^\\def\\seccheck#1{\\if \\pageno<0 %$/
-\secentry	tex-src/texinfo.tex	/^      \\def\\secentry ##1##2##3##4{}$/
-\secentry	tex-src/texinfo.tex	/^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/
-\secentryfonts	tex-src/texinfo.tex	/^\\def\\secentryfonts{\\textfonts}$/
-\secfonts	tex-src/texinfo.tex	/^\\def\\secfonts{%$/
-\secheading	tex-src/texinfo.tex	/^\\def\\secheading #1#2#3{\\secheadingi {#2.#3\\enspace/
-\secheadingbreak	tex-src/texinfo.tex	/^\\def\\secheadingbreak{\\dobreak \\secheadingskip {-10/
-\secheadingi	tex-src/texinfo.tex	/^\\def\\secheadingi #1{{\\advance \\secheadingskip by \\/
-\secondary	tex-src/texinfo.tex	/^\\def\\secondary #1#2{$/
-\seczzz	tex-src/texinfo.tex	/^\\def\\seczzz #1{\\seccheck{section}%$/
-\set	tex-src/texinfo.tex	/^\\def\\set{\\parsearg\\setxxx}$/
-\setchapternewpage	tex-src/texinfo.tex	/^\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcs/
-\setchapterstyle	tex-src/texinfo.tex	/^\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname/
-\setdeffont	tex-src/texinfo.tex	/^\\def\\setdeffont #1 {\\csname DEF#1\\endcsname}$/
-\setfilename	tex-src/texinfo.tex	/^\\def\\setfilename{%$/
-\setref	tex-src/texinfo.tex	/^\\def\\setref#1{%$/
-\settitle	tex-src/texinfo.tex	/^\\def\\settitle{\\parsearg\\settitlezzz}$/
-\settitlezzz	tex-src/texinfo.tex	/^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/
-\setxxx	tex-src/texinfo.tex	/^\\def\\setxxx #1{$/
-\sf	tex-src/texinfo.tex	/^\\def\\sf{\\fam=\\sffam \\tensf}$/
-\sf	tex-src/texinfo.tex	/^\\def\\sf{\\realbackslash sf}%$/
-\shortchapentry	tex-src/texinfo.tex	/^\\def\\shortchapentry#1#2#3{%$/
-\shortunnumberedentry	tex-src/texinfo.tex	/^\\def\\shortunnumberedentry#1#2{%$/
-\singlecodeindexer	tex-src/texinfo.tex	/^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/
-\singleindexer	tex-src/texinfo.tex	/^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/
-\singlespace	tex-src/texinfo.tex	/^\\def\\singlespace{%$/
-\sl	tex-src/texinfo.tex	/^\\def\\sl{\\realbackslash sl }%$/
-\smallbook	tex-src/texinfo.tex	/^\\def\\smallbook{$/
-\smalllispx	tex-src/texinfo.tex	/^\\def\\smalllispx{\\aboveenvbreak\\begingroup\\inENV$/
-\smartitalic	tex-src/texinfo.tex	/^\\def\\smartitalic#1{{\\sl #1}\\futurelet\\next\\smartit/
-\smartitalicx	tex-src/texinfo.tex	/^\\def\\smartitalicx{\\ifx\\next,\\else\\ifx\\next-\\else\\i/
-\sp	tex-src/texinfo.tex	/^\\def\\sp{\\parsearg\\spxxx}$/
-\splitoff	tex-src/texinfo.tex	/^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/
-\spxxx	tex-src/texinfo.tex	/^\\def\\spxxx #1{\\par \\vskip #1\\baselineskip}$/
-\startcontents	tex-src/texinfo.tex	/^\\def\\startcontents#1{%$/
-\startenumeration	tex-src/texinfo.tex	/^\\def\\startenumeration#1{%$/
-\subheading	tex-src/texinfo.tex	/^\\def\\subheading{\\parsearg\\subsecheadingi}$/
-\subsecentry	tex-src/texinfo.tex	/^      \\def\\subsecentry ##1##2##3##4##5{}$/
-\subsecentry	tex-src/texinfo.tex	/^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/
-\subsecfonts	tex-src/texinfo.tex	/^\\def\\subsecfonts{%$/
-\subsecheading	tex-src/texinfo.tex	/^\\def\\subsecheading #1#2#3#4{\\subsecheadingi {#2.#3/
-\subsecheadingbreak	tex-src/texinfo.tex	/^\\def\\subsecheadingbreak{\\dobreak \\subsecheadingski/
-\subsecheadingi	tex-src/texinfo.tex	/^\\def\\subsecheadingi #1{{\\advance \\subsecheadingski/
-\subsubheading	tex-src/texinfo.tex	/^\\def\\subsubheading{\\parsearg\\subsubsecheadingi}$/
-\subsubsecentry	tex-src/texinfo.tex	/^      \\def\\subsubsecentry ##1##2##3##4##5##6{}$/
-\subsubsecentry	tex-src/texinfo.tex	/^\\def\\subsubsecentry#1#2#3#4#5#6{%$/
-\subsubsecfonts	tex-src/texinfo.tex	/^\\def\\subsubsecfonts{\\subsecfonts} % Maybe this sho/
-\subsubsecheading	tex-src/texinfo.tex	/^\\def\\subsubsecheading #1#2#3#4#5{\\subsubsecheading/
-\subsubsecheadingi	tex-src/texinfo.tex	/^\\def\\subsubsecheadingi #1{{\\advance \\subsecheading/
-\subtitle	tex-src/texinfo.tex	/^   \\def\\subtitle{\\parsearg\\subtitlezzz}%$/
-\subtitlefont	tex-src/texinfo.tex	/^   \\def\\subtitlefont{\\subtitlerm \\normalbaselinesk/
-\subtitlezzz	tex-src/texinfo.tex	/^   \\def\\subtitlezzz##1{{\\subtitlefont \\rightline{#/
-\summarycontents	tex-src/texinfo.tex	/^\\outer\\def\\summarycontents{%$/
-\supereject	tex-src/texinfo.tex	/^\\def\\supereject{\\par\\penalty -20000\\footnoteno =0 /
-\syncodeindex	tex-src/texinfo.tex	/^\\def\\syncodeindex #1 #2 {%$/
-\synindex	tex-src/texinfo.tex	/^\\def\\synindex #1 #2 {%$/
-\t	tex-src/texinfo.tex	/^\\def\\t#1{{\\tt \\exhyphenpenalty=10000\\rawbackslash /
-\t	tex-src/texinfo.tex	/^\\def\\t##1{\\realbackslash r {##1}}%$/
-\table	tex-src/texinfo.tex	/^\\def\\table{\\begingroup\\inENV\\obeylines\\obeyspaces\\/
-\tablez	tex-src/texinfo.tex	/^\\def\\tablez #1#2#3#4#5#6{%$/
-\tclose	tex-src/texinfo.tex	/^\\def\\tclose#1{{\\rm \\tcloserm=\\fontdimen2\\font \\tt /
-\tclose	tex-src/texinfo.tex	/^\\def\\tclose##1{\\realbackslash tclose {##1}}%$/
-\tclose	tex-src/texinfo.tex	/^\\def\\tclose##1{\\realbackslash tclose {##1}}$/
-\tex	tex-src/texinfo.tex	/^\\def\\tex{\\begingroup$/
-\texinfoversion	tex-src/texinfo.tex	/^\\def\\texinfoversion{2.73}$/
-\textfonts	tex-src/texinfo.tex	/^\\def\\textfonts{%$/
-\thearg	tex-src/texinfo.tex	/^  \\def\\thearg{#1}%$/
-\thearg	tex-src/texinfo.tex	/^  \\ifx\\thearg\\empty \\def\\thearg{1}\\fi$/
-\thischapter	tex-src/texinfo.tex	/^\\def\\thischapter{} \\def\\thissection{}$/
-\thischapter	tex-src/texinfo.tex	/^   \\unnumbchapmacro{#1}\\def\\thischapter{}%$/
-\thischaptername	tex-src/texinfo.tex	/^\\def\\thischaptername{No Chapter Title}$/
-\thisfile	tex-src/texinfo.tex	/^\\def\\thisfile{}$/
-\thistitle	tex-src/texinfo.tex	/^\\def\\thistitle{No Title}$/
-\tie	tex-src/texinfo.tex	/^\\def\\tie{\\penalty 10000\\ }     % Save plain tex de/
-\tindex	tex-src/texinfo.tex	/^\\def\\tindex {\\tpindex}$/
-\title	tex-src/texinfo.tex	/^   \\def\\title{\\parsearg\\titlezzz}%$/
-\titlefont	tex-src/texinfo.tex	/^\\def\\titlefont#1{{\\titlerm #1}}$/
-\titlepage	tex-src/texinfo.tex	/^\\def\\titlepage{\\begingroup \\parindent=0pt \\textfon/
-\titlezzz	tex-src/texinfo.tex	/^   \\def\\titlezzz##1{\\leftline{\\titlefont{##1}}$/
-\today	tex-src/texinfo.tex	/^\\def\\today{\\number\\day\\space$/
-\top	tex-src/texinfo.tex	/^\\outer\\def\\top{\\parsearg\\unnumberedzzz}$/
-\tt	tex-src/texinfo.tex	/^\\def\\tt{\\realbackslash tt}%$/
-\tt	tex-src/texinfo.tex	/^\\def\\tt{\\realbackslash tt}$/
-\turnoffactive	tex-src/texinfo.tex	/^\\def\\turnoffactive{\\let"=\\normaldoublequote$/
-\unnchfopen	tex-src/texinfo.tex	/^\\def\\unnchfopen #1{%$/
-\unnchfplain	tex-src/texinfo.tex	/^\\def\\unnchfplain #1{%$/
-\unnumbchapentry	tex-src/texinfo.tex	/^\\def\\unnumbchapentry#1#2{\\dochapentry{#1}{#2}}$/
-\unnumbered	tex-src/texinfo.tex	/^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/
-\unnumberedsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsec{\\parsearg\\unnumberedseczz/
-\unnumberedseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedseczzz #1{\\seccheck{unnumberedsec}%/
-\unnumberedsubsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsubsec{\\parsearg\\unnumberedsu/
-\unnumberedsubseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedsubseczzz #1{\\seccheck{unnumberedsu/
-\unnumberedsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsubsubsec{\\parsearg\\unnumbere/
-\unnumberedsubsubseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedsubsubseczzz #1{\\seccheck{unnumbere/
-\unnumberedzzz	tex-src/texinfo.tex	/^\\def\\unnumberedzzz #1{\\seccheck{unnumbered}%$/
-\unnumbnoderef	tex-src/texinfo.tex	/^\\def\\unnumbnoderef{\\ifx\\lastnode\\relax\\else$/
-\unnumbsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsecentry ##1##2{}$/
-\unnumbsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsecentry#1#2{\\dosecentry{#1}{#2}}$/
-\unnumbsetref	tex-src/texinfo.tex	/^\\def\\unnumbsetref#1{%$/
-\unnumbsubsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsubsecentry ##1##2{}$/
-\unnumbsubsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsubsecentry#1#2{\\dosubsecentry{#1}{#2}}/
-\unnumbsubsubsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsubsubsecentry ##1##2{}$/
-\unnumbsubsubsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsubsubsecentry#1#2{\\dosubsubsecentry{#1/
-\uppercaseenumerate	tex-src/texinfo.tex	/^\\def\\uppercaseenumerate{%$/
-\var	tex-src/texinfo.tex	/^\\def\\var##1{\\realbackslash var {##1}}%$/
-\var	tex-src/texinfo.tex	/^\\def\\var##1{\\realbackslash var {##1}}$/
-\vindex	tex-src/texinfo.tex	/^\\def\\vindex {\\vrindex}$/
-\vritemindex	tex-src/texinfo.tex	/^\\def\\vritemindex #1{\\doind {vr}{\\code{#1}}}%$/
-\vtable	tex-src/texinfo.tex	/^\\def\\vtable{\\begingroup\\inENV\\obeylines\\obeyspaces/
-\w	tex-src/texinfo.tex	/^\\def\\w#1{\\leavevmode\\hbox{#1}}$/
-\w	tex-src/texinfo.tex	/^\\def\\w{\\realbackslash w }%$/
-\w	tex-src/texinfo.tex	/^\\def\\w{\\realbackslash w}$/
-\xitem	tex-src/texinfo.tex	/^\\def\\xitem{\\errmessage{@xitem while not in a table/
-\xitemx	tex-src/texinfo.tex	/^\\def\\xitemx{\\errmessage{@xitemx while not in a tab/
-\xitemzzz	tex-src/texinfo.tex	/^\\def\\xitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/
-\xkey	tex-src/texinfo.tex	/^\\def\\xkey{\\key}$/
-\xrdef	tex-src/texinfo.tex	/^\\def\\xrdef #1#2{$/
-\xref	tex-src/texinfo.tex	/^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/
-\xrefX[	tex-src/texinfo.tex	/^\\def\\xrefX[#1,#2,#3,#4,#5,#6]{\\begingroup%$/
+]	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
 ^	tex-src/texinfo.tex	/^\\def^{{\\tt \\hat}}$/
+^	tex-src/texinfo.tex	/^\\let^=\\normalcaret$/
+_	tex-src/texinfo.tex	/^\\def\\_{{\\realbackslash _}}%$/
 _	tex-src/texinfo.tex	/^\\def_{\\ifusingtt\\normalunderscore\\_}$/
+_	tex-src/texinfo.tex	/^\\def\\_{\\lvvmode \\kern.06em \\vbox{\\hrule width.3em /
+_	tex-src/texinfo.tex	/^\\let_=\\normalunderscore$/
 _GETOPT_H	c-src/getopt.h	19
 _GNU_SOURCE	c-src/etags.c	94
 _REGEX_H	c-src/emacs/src/regex.h	21
@@ -2422,6 +1941,7 @@ _realloc	c-src/emacs/src/gmalloc.c	/^_realloc (void *ptr, size_t size)$/
 _realloc_internal	c-src/emacs/src/gmalloc.c	/^_realloc_internal (void *ptr, size_t size)$/
 _realloc_internal_nolock	c-src/emacs/src/gmalloc.c	/^_realloc_internal_nolock (void *ptr, size_t size)$/
 `	ruby-src/test.rb	/^        def `(command)$/
+`	tex-src/texinfo.tex	/^\\def\\`{{`}}$/
 a	c.c	152
 a	c.c	180
 a	c.c	/^a()$/
@@ -2457,6 +1977,7 @@ abbrevs_changed	c-src/abbrev.c	56
 abc	c-src/h.h	33
 abc	c-src/h.h	37
 abort-recursive-edit	c-src/emacs/src/keyboard.c	/^DEFUN ("abort-recursive-edit", Fabort_recursive_ed/
+aboveenvbreak	tex-src/texinfo.tex	/^\\def\\aboveenvbreak{{\\advance\\aboveenvskipamount by/
 abs/f	ada-src/etags-test-for.ada	/^   function "abs"   (Right : Complex) return Real'/
 absolute_dirname	c-src/etags.c	/^absolute_dirname (char *file, char *dir)$/
 absolute_filename	c-src/etags.c	/^absolute_filename (char *file, char *dir)$/
@@ -2505,6 +2026,8 @@ accu_warning	merc-src/accumulator.m	/^:- type accu_warning$/
 act	prol-src/natded.prolog	/^act(OutForm,OutSyn,Ws):-$/
 action	prol-src/natded.prolog	/^action(KeyVals):-$/
 active_maps	c-src/emacs/src/keyboard.c	/^active_maps (Lisp_Object first_event)$/
+activedoublequote	tex-src/texinfo.tex	/^\\def\\activedoublequote{{\\tt \\char '042}}$/
+activeparens	tex-src/texinfo.tex	/^\\def\\activeparens{%$/
 actout	prol-src/natded.prolog	/^actout('Text',Trees):-$/
 addArchs	objc-src/PackInsp.m	/^-(void)addArchs:(const char *)string$/
 addPOReader	php-src/lce_functions.php	/^      function addPOReader($d_name, &$por)$/
@@ -2517,6 +2040,8 @@ add_user_signal	c-src/emacs/src/keyboard.c	/^add_user_signal (int sig, const cha
 addnoise	html-src/algrthms.html	/^Adding Noise to the$/
 address	y-src/cccp.y	113
 adjust_point_for_property	c-src/emacs/src/keyboard.c	/^adjust_point_for_property (ptrdiff_t last_pt, bool/
+afourpaper	tex-src/texinfo.tex	/^\\def\\afourpaper{$/
+afterenvbreak	tex-src/texinfo.tex	/^\\def\\afterenvbreak{\\endgraf \\ifdim\\lastskip<\\above/
 agent	cp-src/clheir.hpp	75
 algorithms	html-src/algrthms.html	/^Description$/
 alias	c-src/emacs/src/lisp.h	688
@@ -2531,6 +2056,9 @@ alive	cp-src/conway.hpp	7
 all_kboards	c-src/emacs/src/keyboard.c	86
 allocate_kboard	c-src/emacs/src/keyboard.c	/^allocate_kboard (Lisp_Object type)$/
 allocated	c-src/emacs/src/regex.h	344
+alphaenumerate	tex-src/texinfo.tex	/^\\def\\alphaenumerate{\\enumerate{a}}$/
+ampnr	tex-src/texinfo.tex	/^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} /
+amprm	tex-src/texinfo.tex	/^\\gdef\\amprm#1 {{\\rm\\&#1}\\let(=\\oprm \\let)=\\clrm\\ }/
 an_extern_linkage	c-src/h.h	44
 an_extern_linkage	c-src/h.h	56
 an_extern_linkage_ptr	c-src/h.h	43
@@ -2547,8 +2075,27 @@ append_list	prol-src/natded.prolog	/^append_list([],[]).$/
 append_string	pas-src/common.pas	/^procedure append_string;(*($/
 append_tool_bar_item	c-src/emacs/src/keyboard.c	/^append_tool_bar_item (void)$/
 appendix	perl-src/htlmify-cystic	24
+appendix	tex-src/texinfo.tex	/^\\let\\appendix=\\relax$/
+appendix	tex-src/texinfo.tex	/^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/
 appendix_name	perl-src/htlmify-cystic	13
 appendix_toc	perl-src/htlmify-cystic	16
+appendixletter	tex-src/texinfo.tex	/^\\def\\appendixletter{\\char\\the\\appendixno}$/
+appendixnoderef	tex-src/texinfo.tex	/^\\def\\appendixnoderef{\\ifx\\lastnode\\relax\\else$/
+appendixsec	tex-src/texinfo.tex	/^\\let\\appendixsec=\\relax$/
+appendixsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/
+appendixsection	tex-src/texinfo.tex	/^\\let\\appendixsection=\\relax$/
+appendixsection	tex-src/texinfo.tex	/^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/
+appendixsectionzzz	tex-src/texinfo.tex	/^\\def\\appendixsectionzzz #1{\\seccheck{appendixsecti/
+appendixsetref	tex-src/texinfo.tex	/^\\def\\appendixsetref#1{%$/
+appendixsubsec	tex-src/texinfo.tex	/^\\let\\appendixsubsec=\\relax$/
+appendixsubsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsec{\\parsearg\\appendixsubsec/
+appendixsubsection	tex-src/texinfo.tex	/^\\let\\appendixsubsection=\\relax$/
+appendixsubseczzz	tex-src/texinfo.tex	/^\\def\\appendixsubseczzz #1{\\seccheck{appendixsubsec/
+appendixsubsubsec	tex-src/texinfo.tex	/^\\let\\appendixsubsubsec=\\relax$/
+appendixsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/
+appendixsubsubsection	tex-src/texinfo.tex	/^\\let\\appendixsubsubsection=\\relax$/
+appendixsubsubseczzz	tex-src/texinfo.tex	/^\\def\\appendixsubsubseczzz #1{\\seccheck{appendixsub/
+appendixzzz	tex-src/texinfo.tex	/^\\def\\appendixzzz #1{\\seccheck{appendix}%$/
 apply_modifiers	c-src/emacs/src/keyboard.c	/^apply_modifiers (int modifiers, Lisp_Object base)$/
 apply_modifiers_uncached	c-src/emacs/src/keyboard.c	/^apply_modifiers_uncached (int modifiers, char *bas/
 aref_addr	c-src/emacs/src/lisp.h	/^aref_addr (Lisp_Object array, ptrdiff_t idx)$/
@@ -2562,12 +2109,14 @@ argno	y-src/cccp.y	45
 args	c-src/emacs/src/lisp.h	2986
 args	c-src/h.h	30
 argsindent	tex-src/texinfo.tex	/^\\newskip\\defargsindent \\defargsindent=50pt$/
+argsindent	tex-src/texinfo.tex	/^\\newskip\\defargsindent \\defargsindent=50pt$/
 argsindent	tex-src/texinfo.tex	/^\\dimen1=\\hsize \\advance \\dimen1 by -\\defargsindent/
 argsindent	tex-src/texinfo.tex	/^\\parshape 2 0in \\dimen0 \\defargsindent \\dimen1    /
 argument	c-src/etags.c	253
 argvals	prol-src/natded.prolog	/^argvals([]) --> [].$/
 array	c.c	190
 ascii	c-src/emacs/src/lisp.h	1598
+asis	tex-src/texinfo.tex	/^\\def\\asis#1{#1}$/
 asort	cp-src/functions.cpp	/^void asort(int *a, int num){$/
 assemby-code-word	forth-src/test-forth.fth	/^code assemby-code-word ( dunno what it does )$/
 assert	c-src/etags.c	135
@@ -2584,8 +2133,13 @@ at_stdin	c-src/etags.c	248
 atom	prol-src/natded.prolog	/^atom(X) --> [X], {atomic(X)}.$/
 atomval	prol-src/natded.prolog	/^atomval(X) --> atom(X).$/
 aultparindent	tex-src/texinfo.tex	/^\\newdimen\\defaultparindent \\defaultparindent = 15p/
+aultparindent	tex-src/texinfo.tex	/^\\newdimen\\defaultparindent \\defaultparindent = 15p/
 aultparindent	tex-src/texinfo.tex	/^\\parindent = \\defaultparindent$/
-aultparindent\hang\textindent	tex-src/texinfo.tex	/^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/
+aultparindent\hang	tex-src/texinfo.tex	/^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/
+author	tex-src/texinfo.tex	/^   \\def\\author{\\parsearg\\authorzzz}%$/
+authorfont	tex-src/texinfo.tex	/^   \\def\\authorfont{\\authorrm \\normalbaselineskip =/
+authorrm	tex-src/texinfo.tex	/^\\let\\authorrm = \\secrm$/
+authorzzz	tex-src/texinfo.tex	/^   \\def\\authorzzz##1{\\ifseenauthor\\else\\vskip 0pt /
 auto_help	c-src/etags.c	699
 b	c.c	180
 b	c.c	259
@@ -2597,7 +2151,14 @@ b	c-src/h.h	103
 b	c-src/h.h	104
 b	cp-src/c.C	132
 b	ruby-src/test1.ru	/^ def b()$/
-backslash=0	tex-src/texinfo.tex	/^\\let\\indexbackslash=0  %overridden during \\printin/
+b	tex-src/texinfo.tex	/^\\def\\b#1{{\\bf #1}}$/
+b	tex-src/texinfo.tex	/^\\def\\b##1{\\realbackslash b {##1}}%$/
+b	tex-src/texinfo.tex	/^\\let\\b=\\indexdummyfont$/
+b	tex-src/texinfo.tex	/^\\def\\b##1{\\realbackslash b {##1}}$/
+b	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
+backslash	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/
+backslash	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}%$/
+balancecolumns	tex-src/texinfo.tex	/^\\def\\balancecolumns{%$/
 bar	c-src/c.c	/^void bar() {while(0) {}}$/
 bar	c.c	143
 bar	c-src/h.h	19
@@ -2617,9 +2178,16 @@ bbbbbb	c-src/h.h	113
 been_warned	c-src/etags.c	222
 before_command_echo_length	c-src/emacs/src/keyboard.c	130
 before_command_key_count	c-src/emacs/src/keyboard.c	129
+begin	tex-src/texinfo.tex	/^\\outer\\def\\begin{\\parsearg\\beginxxx}$/
+begindoublecolumns	tex-src/texinfo.tex	/^\\def\\begindoublecolumns{\\begingroup$/
+beginxxx	tex-src/texinfo.tex	/^\\def\\beginxxx #1{%$/
 begtoken	c-src/etags.c	/^#define	begtoken(c)	(_btk[CHAR (c)]) \/* c can star/
 behaviour_info	erl-src/gs_dialog.erl	/^behaviour_info(callbacks) ->$/
-bf=cmbx10	tex-src/texinfo.tex	/^\\font\\defbf=cmbx10 scaled \\magstep1 %was 1314$/
+bf	tex-src/texinfo.tex	/^\\font\\defbf=cmbx10 scaled \\magstep1 %was 1314$/
+bf	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
+bf	tex-src/texinfo.tex	/^\\def\\bf{\\realbackslash bf }%$/
+bf	tex-src/texinfo.tex	/^\\def\\bf{\\realbackslash bf }$/
+bf	tex-src/texinfo.tex	/^      \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/
 bind	pyt-src/server.py	/^    def bind(self, key, action):$/
 bind_polling_period	c-src/emacs/src/keyboard.c	/^bind_polling_period (int n)$/
 bits_word	c-src/emacs/src/lisp.h	123
@@ -2630,22 +2198,30 @@ bletch	el-src/TAGTEST.EL	/^(foo::defmumble bletch beuarghh)$/
 blv	c-src/emacs/src/lisp.h	689
 blv_found	c-src/emacs/src/lisp.h	/^blv_found (struct Lisp_Buffer_Local_Value *blv)$/
 bodyindent	tex-src/texinfo.tex	/^\\newskip\\defbodyindent \\defbodyindent=.4in$/
+bodyindent	tex-src/texinfo.tex	/^\\newskip\\defbodyindent \\defbodyindent=.4in$/
 bodyindent	tex-src/texinfo.tex	/^\\advance\\dimen2 by -\\defbodyindent$/
 bodyindent	tex-src/texinfo.tex	/^\\advance\\dimen3 by -\\defbodyindent$/
 bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by -\\defbodyindent$/
 bodyindent	tex-src/texinfo.tex	/^\\exdentamount=\\defbodyindent$/
 bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by \\defbodyindent \\advance \\righ/
+bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by \\defbodyindent \\advance \\righ/
 bodyindent	tex-src/texinfo.tex	/^\\exdentamount=\\defbodyindent$/
 bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by \\defbodyindent \\advance \\righ/
+bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by \\defbodyindent \\advance \\righ/
 bodyindent	tex-src/texinfo.tex	/^\\exdentamount=\\defbodyindent$/
 bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by \\defbodyindent \\advance \\righ/
+bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by \\defbodyindent \\advance \\righ/
 bodyindent	tex-src/texinfo.tex	/^\\exdentamount=\\defbodyindent$/
 bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by \\defbodyindent \\advance \\righ/
+bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by \\defbodyindent \\advance \\righ/
 bodyindent	tex-src/texinfo.tex	/^\\exdentamount=\\defbodyindent$/
 bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by \\defbodyindent \\advance \\righ/
+bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by \\defbodyindent \\advance \\righ/
 bodyindent	tex-src/texinfo.tex	/^\\exdentamount=\\defbodyindent$/
 bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by \\defbodyindent \\advance \\righ/
+bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by \\defbodyindent \\advance \\righ/
 bodyindent	tex-src/texinfo.tex	/^\\exdentamount=\\defbodyindent$/
+boldbrax	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
 bool	c.c	222
 bool	merc-src/accumulator.m	/^:- import_module bool.$/
 bool_header_size	c-src/emacs/src/lisp.h	1472
@@ -2658,6 +2234,7 @@ bool_vector_size	c-src/emacs/src/lisp.h	/^bool_vector_size (Lisp_Object a)$/
 bool_vector_uchar_data	c-src/emacs/src/lisp.h	/^bool_vector_uchar_data (Lisp_Object a)$/
 bool_vector_words	c-src/emacs/src/lisp.h	/^bool_vector_words (EMACS_INT size)$/
 boolvar	c-src/emacs/src/lisp.h	2287
+br	tex-src/texinfo.tex	/^\\let\\br = \\par$/
 bracelev	c-src/etags.c	2520
 bsp_DevId	c-src/h.h	25
 bt	c-src/emacs/src/lisp.h	2988
@@ -2671,10 +2248,13 @@ build_pure_c_string	c-src/emacs/src/lisp.h	/^build_pure_c_string (const char *st
 build_string	c-src/emacs/src/lisp.h	/^build_string (const char *str)$/
 buildact	prol-src/natded.prolog	/^buildact([SynIn],Right,RightPlus1):-$/
 builtin_lisp_symbol	c-src/emacs/src/lisp.h	/^builtin_lisp_symbol (int index)$/
+bullet	tex-src/texinfo.tex	/^\\def\\bullet{$\\ptexbullet$}$/
+bullet	tex-src/texinfo.tex	/^\\let\\bullet=\\ptexbullet$/
 burst	c-src/h.h	28
 busy	c-src/emacs/src/gmalloc.c	158
 button_down_location	c-src/emacs/src/keyboard.c	5210
 button_down_time	c-src/emacs/src/keyboard.c	5218
+bye	tex-src/texinfo.tex	/^\\outer\\def\\bye{\\pagealignmacro\\tracingstats=1\\ptex/
 byte_stack	c-src/emacs/src/lisp.h	3049
 bytecode_dest	c-src/emacs/src/lisp.h	3037
 bytecode_top	c-src/emacs/src/lisp.h	3036
@@ -2685,6 +2265,8 @@ bytes_used	c-src/emacs/src/gmalloc.c	312
 c	c.c	180
 c	c-src/h.h	/^#define c() d$/
 c	c-src/h.h	106
+c	tex-src/texinfo.tex	/^\\let\\c=\\comment$/
+c	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
 c_ext	c-src/etags.c	2271
 caccacacca	c.c	/^caccacacca (a,b,c,d,e,f,g)$/
 cacheLRUEntry_s	c.c	172
@@ -2697,21 +2279,47 @@ calloc	c-src/emacs/src/gmalloc.c	1717
 can_be_null	c-src/emacs/src/regex.h	370
 cancel_echoing	c-src/emacs/src/keyboard.c	/^cancel_echoing (void)$/
 canonicalize_filename	c-src/etags.c	/^canonicalize_filename (register char *fn)$/
+capsenumerate	tex-src/texinfo.tex	/^\\def\\capsenumerate{\\enumerate{A}}$/
+cartbot	tex-src/texinfo.tex	/^\\def\\cartbot{\\hbox to \\cartouter{\\hskip\\lskip$/
+cartouche	tex-src/texinfo.tex	/^\\long\\def\\cartouche{%$/
+carttop	tex-src/texinfo.tex	/^\\def\\carttop{\\hbox to \\cartouter{\\hskip\\lskip$/
 case_Lisp_Int	c-src/emacs/src/lisp.h	438
 cat	c-src/h.h	81
 cat	cp-src/c.C	126
 cat	cp-src/c.C	130
 cat	prol-src/natded.prolog	/^cat(A, Alpha@Beta, Ass3, Qs3, tree(fe,A:Alpha@Beta/
 cat_atoms	prol-src/natded.prolog	/^cat_atoms(A1,A2,A3):-$/
+cbl	tex-src/texinfo.tex	/^\\def\\cbl{{\\circle\\char'012\\hskip -6pt}}$/
+cbr	tex-src/texinfo.tex	/^\\def\\cbr{{\\hskip 6pt\\circle\\char'011}}$/
 cccccccccc	c-src/h.h	115
 cdr	c-src/emacs/src/lisp.h	1159
 cell	y-src/parse.y	279
+center	tex-src/texinfo.tex	/^\\def\\center{\\parsearg\\centerzzz}$/
+centerzzz	tex-src/texinfo.tex	/^\\def\\centerzzz #1{{\\advance\\hsize by -\\leftskip$/
 cgrep	html-src/software.html	/^cgrep$/
 chain	c-src/emacs/src/lisp.h	1162
 chain	c-src/emacs/src/lisp.h	2206
 chain	c-src/emacs/src/lisp.h	2396
 chain_subst	merc-src/accumulator.m	/^:- func chain_subst(accu_subst, accu_subst) = accu/
 chain_subst_2	merc-src/accumulator.m	/^:- pred chain_subst_2(list(A)::in, map(A, B)::in, /
+chapbf	tex-src/texinfo.tex	/^\\let\\chapbf=\\chaprm$/
+chapbreak	tex-src/texinfo.tex	/^\\def\\chapbreak{\\dobreak \\chapheadingskip {-4000}}$/
+chapentry	tex-src/texinfo.tex	/^      \\let\\chapentry = \\shortchapentry$/
+chapentry	tex-src/texinfo.tex	/^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/
+chapentryfonts	tex-src/texinfo.tex	/^\\def\\chapentryfonts{\\secfonts \\rm}$/
+chapfonts	tex-src/texinfo.tex	/^\\def\\chapfonts{%$/
+chapheading	tex-src/texinfo.tex	/^\\def\\chapheading{\\parsearg\\chapheadingzzz}$/
+chapheadingzzz	tex-src/texinfo.tex	/^\\def\\chapheadingzzz #1{\\chapbreak %$/
+chapmacro	tex-src/texinfo.tex	/^\\global\\let\\chapmacro=\\chfplain$/
+chapmacro	tex-src/texinfo.tex	/^\\global\\let\\chapmacro=\\chfopen$/
+chapoddpage	tex-src/texinfo.tex	/^\\def\\chapoddpage{\\chappager \\ifodd\\pageno \\else \\h/
+chappager	tex-src/texinfo.tex	/^\\def\\chappager{\\par\\vfill\\supereject}$/
+chapter	tex-src/texinfo.tex	/^\\let\\chapter=\\relax$/
+chapter	tex-src/texinfo.tex	/^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/
+chapternofonts	tex-src/texinfo.tex	/^\\def\\chapternofonts{%$/
+chapterzzz	tex-src/texinfo.tex	/^\\def\\chapterzzz #1{\\seccheck{chapter}%$/
+char	tex-src/texinfo.tex	/^\\def\\char{\\realbackslash char}%$/
+char	tex-src/texinfo.tex	/^\\def\\char{\\realbackslash char}$/
 char_bits	c-src/emacs/src/lisp.h	2443
 char_table_specials	c-src/emacs/src/lisp.h	1692
 charpos	c-src/emacs/src/lisp.h	2011
@@ -2722,14 +2330,24 @@ check_cons_list	c-src/emacs/src/lisp.h	/^#  define check_cons_list() lisp_h_chec
 checker	make-src/Makefile	/^checker:$/
 checkhdr	c-src/emacs/src/gmalloc.c	/^checkhdr (const struct hdr *hdr)$/
 checkiso	html-src/software.html	/^checkiso$/
+chfopen	tex-src/texinfo.tex	/^\\def\\chfopen #1#2{\\chapoddpage {\\chapfonts$/
+chfplain	tex-src/texinfo.tex	/^\\def\\chfplain #1#2{%$/
 childDidExit	objc-src/Subprocess.m	/^- childDidExit$/
 chunks_free	c-src/emacs/src/gmalloc.c	313
 chunks_used	c-src/emacs/src/gmalloc.c	311
+cindex	tex-src/texinfo.tex	/^\\def\\cindex {\\cpindex}$/
+cindexsub	tex-src/texinfo.tex	/^\\def\\cindexsub {\\begingroup\\obeylines\\cindexsub}$/
+cindexsub	tex-src/texinfo.tex	/^\\gdef\\cindexsub "#1" #2^^M{\\endgroup %$/
+cite	tex-src/texinfo.tex	/^\\let\\cite=\\smartitalic$/
+cite	tex-src/texinfo.tex	/^\\def\\cite##1{\\realbackslash cite {##1}}%$/
+cite	tex-src/texinfo.tex	/^\\let\\cite=\\indexdummyfont$/
+cite	tex-src/texinfo.tex	/^\\def\\cite##1{\\realbackslash cite {##1}}$/
 cjava	c-src/etags.c	2936
 class_method	ruby-src/test.rb	/^        def ClassExample.class_method$/
 classifyLine	php-src/lce_functions.php	/^      function classifyLine($line)$/
 clean	make-src/Makefile	/^clean:$/
 clear	cp-src/conway.hpp	/^    void clear(void) { alive = 0; }$/
+clear	tex-src/texinfo.tex	/^\\def\\clear{\\parsearg\\clearxxx}$/
 clear-abbrev-table	c-src/abbrev.c	/^DEFUN ("clear-abbrev-table", Fclear_abbrev_table, /
 clear-this-command-keys	c-src/emacs/src/keyboard.c	/^DEFUN ("clear-this-command-keys", Fclear_this_comm/
 clearAllKey	objcpp-src/SimpleCalc.M	/^- clearAllKey:sender$/
@@ -2739,12 +2357,19 @@ clear_input_pending	c-src/emacs/src/keyboard.c	/^clear_input_pending (void)$/
 clear_neighbors	cp-src/clheir.cpp	/^void discrete_location::clear_neighbors(void)$/
 clear_screen	cp-src/screen.cpp	/^void clear_screen(void)$/
 clear_waiting_for_input	c-src/emacs/src/keyboard.c	/^clear_waiting_for_input (void)$/
+clearxxx	tex-src/texinfo.tex	/^\\def\\clearxxx #1{$/
+clnr	tex-src/texinfo.tex	/^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} /
+clrm	tex-src/texinfo.tex	/^\\gdef\\clrm{% Print a paren in roman if it is takin/
 cmd_error	c-src/emacs/src/keyboard.c	/^cmd_error (Lisp_Object data)$/
 cmd_error_internal	c-src/emacs/src/keyboard.c	/^cmd_error_internal (Lisp_Object data, const char */
 cmpfn	c-src/emacs/src/lisp.h	/^  bool (*cmpfn) (struct hash_table_test *t, Lisp_O/
 cmt	prol-src/natded.prolog	/^cmt:-$/
 cname	c-src/etags.c	2519
 cno	c-src/etags.c	224
+code	tex-src/texinfo.tex	/^\\let\\code=\\tclose$/
+code	tex-src/texinfo.tex	/^\\def\\code##1{\\realbackslash code {##1}}%$/
+code	tex-src/texinfo.tex	/^\\let\\code=\\indexdummyfont$/
+code	tex-src/texinfo.tex	/^\\def\\code##1{\\realbackslash code {##1}}$/
 colori	cp-src/c.C	40
 commaargvals	prol-src/natded.prolog	/^commaargvals(Args) -->$/
 command	c-src/etags.c	187
@@ -2754,6 +2379,8 @@ command_loop_1	c-src/emacs/src/keyboard.c	/^command_loop_1 (void)$/
 command_loop_2	c-src/emacs/src/keyboard.c	/^command_loop_2 (Lisp_Object ignore)$/
 command_loop_level	c-src/emacs/src/keyboard.c	195
 comment	php-src/lce_functions.php	/^      function comment($line, $class)$/
+comment	tex-src/texinfo.tex	/^\\def\\comment{\\catcode 64=\\other \\catcode 123=\\othe/
+commentxxx	tex-src/texinfo.tex	/^\\def\\commentxxx #1{\\catcode 64=0 \\catcode 123=1 \\c/
 commutativity_assertion	merc-src/accumulator.m	/^:- pred commutativity_assertion(module_info::in,li/
 compile_empty	prol-src/natded.prolog	/^compile_empty:-$/
 compile_lex	prol-src/natded.prolog	/^compile_lex(File):-$/
@@ -2776,6 +2403,10 @@ consult_lex	prol-src/natded.prolog	/^consult_lex:-$/
 contents	c-src/emacs/src/lisp.h	1372
 contents	c-src/emacs/src/lisp.h	1600
 contents	c-src/emacs/src/lisp.h	1624
+contents	tex-src/texinfo.tex	/^\\let\\contents=\\relax$/
+contents	tex-src/texinfo.tex	/^\\outer\\def\\contents{%$/
+copyright	tex-src/texinfo.tex	/^\\def\\copyright{\\realbackslash copyright }%$/
+copyright	tex-src/texinfo.tex	/^\\def\\copyright{\\realbackslash copyright}$/
 count	c-src/emacs/src/lisp.h	1863
 count_layers	lua-src/allegro.lua	/^local function count_layers (layer)$/
 count_words	c-src/tab.c	/^static int		count_words(char *str, char delim)$/
@@ -2795,10 +2426,24 @@ create_new_orig_recursive_goals	merc-src/accumulator.m	/^:- func create_new_orig
 create_new_recursive_goals	merc-src/accumulator.m	/^:- func create_new_recursive_goals(set(accu_goal_i/
 create_new_var	merc-src/accumulator.m	/^:- pred create_new_var(prog_var::in, string::in, p/
 create_orig_goal	merc-src/accumulator.m	/^:- pred create_orig_goal(hlds_goal::in, accu_subst/
+cropmarks	tex-src/texinfo.tex	/^\\def\\cropmarks{\\let\\onepageout=\\croppageout }$/
+croppageout	tex-src/texinfo.tex	/^\\def\\croppageout#1{\\hoffset=0pt % make sure this d/
 cscInitTime	cp-src/c.C	7
 cscSegmentationTime	cp-src/c.C	8
+csname	tex-src/texinfo.tex	/^\\expandafter\\let\\csname IF#1\\endcsname=\\set}$/
+csname	tex-src/texinfo.tex	/^\\expandafter\\let\\csname IF#1\\endcsname=\\relax}$/
+csname	tex-src/texinfo.tex	/^\\expandafter\\xdef\\csname#1index\\endcsname{%	% Defi/
+csname	tex-src/texinfo.tex	/^\\expandafter\\xdef\\csname#1index\\endcsname{%	% Defi/
+csname	tex-src/texinfo.tex	/^\\expandafter\\let\\csname#1indfile\\endcsname=\\synind/
+csname	tex-src/texinfo.tex	/^\\expandafter\\xdef\\csname#1index\\endcsname{%	% Defi/
+csname	tex-src/texinfo.tex	/^\\expandafter\\let\\csname#1indfile\\endcsname=\\synind/
+csname	tex-src/texinfo.tex	/^\\expandafter\\xdef\\csname#1index\\endcsname{%	% Defi/
+csname	tex-src/texinfo.tex	/^{\\catcode`\\'=\\other\\expandafter \\gdef \\csname X#1\\/
 cstack	c-src/etags.c	2523
 ctags	make-src/Makefile	/^ctags: etags.c ${OBJS}$/
+ctl	tex-src/texinfo.tex	/^\\def\\ctl{{\\circle\\char'013\\hskip -6pt}}% 6pt from /
+ctr	tex-src/texinfo.tex	/^\\def\\ctr{{\\hskip 6pt\\circle\\char'010}}$/
+ctrl	tex-src/texinfo.tex	/^\\def\\ctrl #1{{\\tt \\rawbackslash \\hat}#1}$/
 curlb	c-src/etags.c	2929
 curlinepos	c-src/etags.c	2931
 current-idle-time	c-src/emacs/src/keyboard.c	/^DEFUN ("current-idle-time", Fcurrent_idle_time, Sc/
@@ -2809,6 +2454,10 @@ curry-test	scm-src/test.scm	/^(define (((((curry-test a) b) c) d) e)$/
 cursor_position	cp-src/screen.cpp	/^void cursor_position(void)$/
 cursor_x	cp-src/screen.cpp	15
 cursor_y	cp-src/screen.cpp	15
+cvarheader\defcvtype	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
+cvtype	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
+cvtype	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{\\defcvtype{} of #1}%$/
+cvx\defcvarheader	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
 d	c.c	180
 d	c-src/emacs/src/lisp.h	4673
 d	c-src/emacs/src/lisp.h	4679
@@ -2830,6 +2479,15 @@ default_C_help	c-src/etags.c	515
 default_C_help	c-src/etags.c	523
 default_C_suffixes	c-src/etags.c	512
 defcell	c-src/emacs/src/lisp.h	2351
+defcodeindex	tex-src/texinfo.tex	/^\\def\\defcodeindex{\\parsearg\\newcodeindex}$/
+defcv	tex-src/texinfo.tex	/^\\def\\defcv #1 {\\def\\defcvtype{#1}%$/
+defcvarheader	tex-src/texinfo.tex	/^\\def\\defcvarheader #1#2#3{%$/
+defcvtype	tex-src/texinfo.tex	/^\\def\\defcv #1 {\\def\\defcvtype{#1}%$/
+defcvx	tex-src/texinfo.tex	/^\\def\\defcvx #1 {\\errmessage{@defcvx in invalid con/
+deffn	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
+deffnheader	tex-src/texinfo.tex	/^\\def\\deffnheader #1#2#3{\\doind {fn}{\\code{#2}}%$/
+deffnx	tex-src/texinfo.tex	/^\\def\\deffnx #1 {\\errmessage{@deffnx in invalid con/
+defindex	tex-src/texinfo.tex	/^\\def\\defindex{\\parsearg\\newindex}$/
 define-abbrev	c-src/abbrev.c	/^DEFUN ("define-abbrev", Fdefine_abbrev, Sdefine_ab/
 define-abbrev-table	c-src/abbrev.c	/^DEFUN ("define-abbrev-table", Fdefine_abbrev_table/
 define-global-abbrev	c-src/abbrev.c	/^DEFUN ("define-global-abbrev", Fdefine_global_abbr/
@@ -2837,7 +2495,63 @@ define-mode-abbrev	c-src/abbrev.c	/^DEFUN ("define-mode-abbrev", Fdefine_mode_ab
 defined_GC_CHECK_STRING_BYTES	c-src/emacs/src/lisp.h	4663
 defined_GC_CHECK_STRING_BYTES	c-src/emacs/src/lisp.h	4665
 definedef	c-src/etags.c	2464
+defivar	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
+defivarheader	tex-src/texinfo.tex	/^\\def\\defivarheader #1#2#3{%$/
+defivarx	tex-src/texinfo.tex	/^\\def\\defivarx #1 {\\errmessage{@defivarx in invalid/
+defmac	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
+defmacheader	tex-src/texinfo.tex	/^\\def\\defmacheader #1#2{\\doind {fn}{\\code{#1}}% Mak/
+defmacx	tex-src/texinfo.tex	/^\\def\\defmacx #1 {\\errmessage{@defmacx in invalid c/
+defmethod	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
+defmethodheader	tex-src/texinfo.tex	/^\\def\\defmethodheader #1#2#3{%$/
+defmethodx	tex-src/texinfo.tex	/^\\def\\defmethodx #1 {\\errmessage{@defmethodx in inv/
+defmethparsebody	tex-src/texinfo.tex	/^\\def\\defmethparsebody #1#2#3#4 {\\begingroup\\inENV /
+defname	tex-src/texinfo.tex	/^\\def\\defname #1#2{%$/
+defop	tex-src/texinfo.tex	/^\\def\\defop #1 {\\def\\defoptype{#1}%$/
+defopheader	tex-src/texinfo.tex	/^\\def\\defopheader #1#2#3{%$/
+defopparsebody	tex-src/texinfo.tex	/^\\def\\defopparsebody #1#2#3#4#5 {\\begingroup\\inENV /
+defopt	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
+defoptheader	tex-src/texinfo.tex	/^\\def\\defoptheader #1#2{\\doind {vr}{\\code{#1}}% Mak/
+defoptx	tex-src/texinfo.tex	/^\\def\\defoptx #1 {\\errmessage{@defoptx in invalid c/
+defoptype	tex-src/texinfo.tex	/^\\def\\defop #1 {\\def\\defoptype{#1}%$/
+defopvarparsebody	tex-src/texinfo.tex	/^\\def\\defopvarparsebody #1#2#3#4#5 {\\begingroup\\inE/
+defopx	tex-src/texinfo.tex	/^\\def\\defopx #1 {\\errmessage{@defopx in invalid con/
+defparsebody	tex-src/texinfo.tex	/^\\def\\defparsebody #1#2#3{\\begingroup\\inENV% Enviro/
+defspec	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
+defspecheader	tex-src/texinfo.tex	/^\\def\\defspecheader #1#2{\\doind {fn}{\\code{#1}}% Ma/
+defspecx	tex-src/texinfo.tex	/^\\def\\defspecx #1 {\\errmessage{@defspecx in invalid/
+deftp	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
+deftpargs	tex-src/texinfo.tex	/^\\def\\deftpargs #1{\\bf \\defvarargs{#1}}$/
+deftpheader	tex-src/texinfo.tex	/^\\def\\deftpheader #1#2#3{\\doind {tp}{\\code{#2}}%$/
+deftpx	tex-src/texinfo.tex	/^\\def\\deftpx #1 {\\errmessage{@deftpx in invalid con/
+deftypefn	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
+deftypefnheader	tex-src/texinfo.tex	/^\\def\\deftypefnheader #1#2#3{\\deftypefnheaderx{#1}{/
+deftypefnheaderx	tex-src/texinfo.tex	/^\\def\\deftypefnheaderx #1#2#3 #4\\relax{%$/
+deftypefnx	tex-src/texinfo.tex	/^\\def\\deftypefnx #1 {\\errmessage{@deftypefnx in inv/
+deftypefun	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
+deftypefunargs	tex-src/texinfo.tex	/^\\def\\deftypefunargs #1{%$/
+deftypefunheader	tex-src/texinfo.tex	/^\\def\\deftypefunheader #1#2{\\deftypefunheaderx{#1}#/
+deftypefunheaderx	tex-src/texinfo.tex	/^\\def\\deftypefunheaderx #1#2 #3\\relax{%$/
+deftypeunx	tex-src/texinfo.tex	/^\\def\\deftypeunx #1 {\\errmessage{@deftypeunx in inv/
+deftypevar	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
+deftypevarheader	tex-src/texinfo.tex	/^\\def\\deftypevarheader #1#2{%$/
+deftypevarx	tex-src/texinfo.tex	/^\\def\\deftypevarx #1 {\\errmessage{@deftypevarx in i/
+deftypevr	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
+deftypevrheader	tex-src/texinfo.tex	/^\\def\\deftypevrheader #1#2#3{\\doind {vr}{\\code{#3}}/
+deftypevrx	tex-src/texinfo.tex	/^\\def\\deftypevrx #1 {\\errmessage{@deftypevrx in inv/
+defun	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
 defun_func1	c.c	/^defun_func1()$/
+defunargs	tex-src/texinfo.tex	/^\\def\\defunargs #1{\\functionparens \\sl$/
+defunheader	tex-src/texinfo.tex	/^\\def\\defunheader #1#2{\\doind {fn}{\\code{#1}}% Make/
+defunx	tex-src/texinfo.tex	/^\\def\\defunx #1 {\\errmessage{@defunx in invalid con/
+defvar	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
+defvarargs	tex-src/texinfo.tex	/^\\def\\defvarargs #1{\\normalparens #1%$/
+defvarheader	tex-src/texinfo.tex	/^\\def\\defvarheader #1#2{\\doind {vr}{\\code{#1}}% Mak/
+defvarparsebody	tex-src/texinfo.tex	/^\\def\\defvarparsebody #1#2#3{\\begingroup\\inENV% Env/
+defvarx	tex-src/texinfo.tex	/^\\def\\defvarx #1 {\\errmessage{@defvarx in invalid c/
+defvr	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
+defvrheader	tex-src/texinfo.tex	/^\\def\\defvrheader #1#2#3{\\doind {vr}{\\code{#2}}%$/
+defvrparsebody	tex-src/texinfo.tex	/^\\def\\defvrparsebody #1#2#3#4 {\\begingroup\\inENV %$/
+defvrx	tex-src/texinfo.tex	/^\\def\\defvrx #1 {\\errmessage{@defvrx in invalid con/
 delegate	objc-src/Subprocess.m	/^- delegate$/
 deleteItem	pyt-src/server.py	/^    def deleteItem(self):$/
 delete_kboard	c-src/emacs/src/keyboard.c	/^delete_kboard (KBOARD *kb)$/
@@ -2847,25 +2561,54 @@ deliver_user_signal	c-src/emacs/src/keyboard.c	/^deliver_user_signal (int sig)$/
 depth	c-src/emacs/src/lisp.h	1618
 derived_analyses	prol-src/natded.prolog	/^derived_analyses([],[]).$/
 describe_abbrev	c-src/abbrev.c	/^describe_abbrev (sym, stream)$/
+description	tex-src/texinfo.tex	/^\\def\\description{\\tablez{\\dontindex}{1}{}{}{}{}}$/
 detect_input_pending	c-src/emacs/src/keyboard.c	/^detect_input_pending (void)$/
 detect_input_pending_ignore_squeezables	c-src/emacs/src/keyboard.c	/^detect_input_pending_ignore_squeezables (void)$/
 detect_input_pending_run_timers	c-src/emacs/src/keyboard.c	/^detect_input_pending_run_timers (bool do_display)$/
+df	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
+dfn	tex-src/texinfo.tex	/^\\let\\dfn=\\smartitalic$/
+dfn	tex-src/texinfo.tex	/^\\def\\dfn##1{\\realbackslash dfn {##1}}$/
 dialog_loop	erl-src/gs_dialog.erl	/^dialog_loop(Module, Window, Frame, Extra, Args) ->/
 dignorerest	c-src/etags.c	2463
+direntry	tex-src/texinfo.tex	/^\\def\\direntry{\\begingroup\\direntryxxx}$/
+direntryxxx	tex-src/texinfo.tex	/^\\long\\def\\direntryxxx #1\\end direntry{\\endgroup\\ig/
 discard-input	c-src/emacs/src/keyboard.c	/^DEFUN ("discard-input", Fdiscard_input, Sdiscard_i/
 discard_mouse_events	c-src/emacs/src/keyboard.c	/^discard_mouse_events (void)$/
 discrete_location	cp-src/clheir.hpp	56
 discrete_location	cp-src/clheir.hpp	/^    discrete_location(int xi, int yi, int zi):$/
 display	cp-src/conway.cpp	/^void display(void)$/
+display	tex-src/texinfo.tex	/^\\def\\display{\\begingroup\\inENV %This group ends at/
 disposetextstring	pas-src/common.pas	/^procedure disposetextstring;(*($/
+dmn	tex-src/texinfo.tex	/^\\def\\dmn#1{\\thinspace #1}$/
 dnone	c-src/etags.c	2460
+dobreak	tex-src/texinfo.tex	/^\\def\\dobreak#1#2{\\par\\ifdim\\lastskip<#1\\removelast/
 doc	c-src/emacs/src/lisp.h	1689
+dochapentry	tex-src/texinfo.tex	/^\\def\\dochapentry#1#2{%$/
+docodeindex	tex-src/texinfo.tex	/^\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\si/
 dog	c-src/h.h	81
 dog	cp-src/c.C	126
 dog	cp-src/c.C	130
+doind	tex-src/texinfo.tex	/^\\def\\doind #1#2{%$/
+doindex	tex-src/texinfo.tex	/^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/
+donoderef	tex-src/texinfo.tex	/^\\def\\donoderef{\\ifx\\lastnode\\relax\\else$/
+dontindex	tex-src/texinfo.tex	/^\\def\\dontindex #1{}$/
+dopageno	tex-src/texinfo.tex	/^\\def\\dopageno#1{{\\rm #1}}$/
+doprintindex	tex-src/texinfo.tex	/^\\def\\doprintindex#1{%$/
+dosecentry	tex-src/texinfo.tex	/^\\def\\dosecentry#1#2{%$/
+dosetq	tex-src/texinfo.tex	/^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/
+doshortpageno	tex-src/texinfo.tex	/^\\def\\doshortpageno#1{{\\rm #1}}$/
+dosubind	tex-src/texinfo.tex	/^\\def\\dosubind #1#2#3{%$/
+dosubsecentry	tex-src/texinfo.tex	/^\\def\\dosubsecentry#1#2{%$/
+dosubsubsecentry	tex-src/texinfo.tex	/^\\def\\dosubsubsecentry#1#2{%$/
 dotfill	tex-src/texinfo.tex	/^  \\null\\nobreak\\indexdotfill % Have leaders before/
 dotfill	tex-src/texinfo.tex	/^\\noindent\\hskip\\secondaryindent\\hbox{#1}\\indexdotf/
+dots	tex-src/texinfo.tex	/^\\def\\dots{$\\ldots$}$/
+dots	tex-src/texinfo.tex	/^\\def\\dots{\\realbackslash dots }%$/
+dots	tex-src/texinfo.tex	/^\\let\\dots=\\indexdummydots$/
+dots	tex-src/texinfo.tex	/^\\def\\dots{\\realbackslash dots}$/
+dots	tex-src/texinfo.tex	/^\\let\\dots=\\ptexdots$/
 double_click_count	c-src/emacs/src/keyboard.c	5222
+doublecolumnout	tex-src/texinfo.tex	/^\\def\\doublecolumnout{\\splittopskip=\\topskip \\split/
 drag_n_drop_syms	c-src/emacs/src/keyboard.c	4629
 dribble	c-src/emacs/src/keyboard.c	236
 dsharpseen	c-src/etags.c	2461
@@ -2882,6 +2625,7 @@ dummyfont	tex-src/texinfo.tex	/^\\let\\i=\\indexdummyfont$/
 dummyfont	tex-src/texinfo.tex	/^\\let\\b=\\indexdummyfont$/
 dummyfont	tex-src/texinfo.tex	/^\\let\\emph=\\indexdummyfont$/
 dummyfont	tex-src/texinfo.tex	/^\\let\\strong=\\indexdummyfont$/
+dummyfont	tex-src/texinfo.tex	/^\\let\\cite=\\indexdummyfont$/
 dummyfont	tex-src/texinfo.tex	/^\\let\\sc=\\indexdummyfont$/
 dummyfont	tex-src/texinfo.tex	/^\\let\\tclose=\\indexdummyfont$/
 dummyfont	tex-src/texinfo.tex	/^\\let\\code=\\indexdummyfont$/
@@ -2915,10 +2659,16 @@ editsite	pyt-src/server.py	/^    def editsite(self, site):$/
 edituser	pyt-src/server.py	/^    def edituser(self, user):$/
 egetenv	c-src/emacs/src/lisp.h	/^egetenv (const char *var)$/
 emacs_abort	c-src/emacs/src/lisp.h	/^extern _Noreturn void emacs_abort (void) NO_INLINE/
+emph	tex-src/texinfo.tex	/^\\let\\emph=\\smartitalic$/
+emph	tex-src/texinfo.tex	/^\\let\\emph=\\indexdummyfont$/
+emph	tex-src/texinfo.tex	/^\\def\\emph##1{\\realbackslash emph {##1}}$/
 end	c-src/emacs/src/regex.h	432
 end	c-src/emacs/src/keyboard.c	8753
 end	c-src/emacs/src/lisp.h	2039
+end	tex-src/texinfo.tex	/^\\def\\end{\\parsearg\\endxxx}$/
+enddoublecolumns	tex-src/texinfo.tex	/^\\def\\enddoublecolumns{\\output={\\balancecolumns}\\ej/
 endtoken	c-src/etags.c	/^#define	endtoken(c)	(_etk[CHAR (c)]) \/* c ends tok/
+endxxx	tex-src/texinfo.tex	/^\\def\\endxxx #1{%$/
 enter_critical_section	c-src/h.h	116
 entry	perl-src/htlmify-cystic	218
 entry	perl-src/htlmify-cystic	234
@@ -2928,14 +2678,22 @@ entry	perl-src/htlmify-cystic	268
 entry	perl-src/htlmify-cystic	276
 entry	perl-src/htlmify-cystic	281
 entry	perl-src/htlmify-cystic	296
+entry	tex-src/texinfo.tex	/^\\def\\entry #1#2{\\begingroup$/
+enumerate	tex-src/texinfo.tex	/^\\def\\enumerate{\\parsearg\\enumeratezzz}$/
+enumeratey	tex-src/texinfo.tex	/^\\def\\enumeratey #1 #2\\endenumeratey{%$/
+enumeratezzz	tex-src/texinfo.tex	/^\\def\\enumeratezzz #1{\\enumeratey #1  \\endenumerate/
 equalsKey	objcpp-src/SimpleCalc.M	/^- equalsKey:sender$/
+equiv	tex-src/texinfo.tex	/^\\def\\equiv{\\realbackslash equiv}$/
+equiv	tex-src/texinfo.tex	/^\\def\\equiv{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/
 erlang_atom	c-src/etags.c	/^erlang_atom (char *s)$/
 erlang_attribute	c-src/etags.c	/^erlang_attribute (char *s)$/
 erlang_func	c-src/etags.c	/^erlang_func (char *s, char *last)$/
 error	c-src/etags.c	/^static void error (const char *, ...) ATTRIBUTE_FO/
 error	c-src/etags.c	/^error (const char *format, ...)$/
 error	c-src/emacs/src/lisp.h	/^extern _Noreturn void error (const char *, ...) AT/
+error	tex-src/texinfo.tex	/^\\def\\error{\\leavevmode\\lower.7ex\\copy\\errorbox}$/
 error	y-src/cccp.y	/^error (msg)$/
+errorE	tex-src/texinfo.tex	/^\\def\\errorE#1{$/
 error_signaled	c-src/etags.c	264
 etags	el-src/emacs/lisp/progmodes/etags.el	/^(defgroup etags nil "Tags tables."$/
 etags	html-src/software.html	/^Etags$/
@@ -2958,11 +2716,31 @@ etags-xref-find-definitions-tag-order	el-src/emacs/lisp/progmodes/etags.el	/^(de
 etags.1.man	make-src/Makefile	/^etags.1.man: etags.1$/
 etags_getcwd	c-src/etags.c	/^etags_getcwd (void)$/
 eval_dyn	c-src/emacs/src/keyboard.c	/^eval_dyn (Lisp_Object form)$/
+evenfooting	tex-src/texinfo.tex	/^\\def\\evenfooting{\\parsearg\\evenfootingxxx}$/
+evenfootingxxx	tex-src/texinfo.tex	/^\\gdef\\evenfootingxxx #1{\\evenfootingyyy #1@|@|@|@|/
+evenfootingyyy	tex-src/texinfo.tex	/^\\gdef\\evenfootingyyy #1@|#2@|#3@|#4\\finish{%$/
+evenheading	tex-src/texinfo.tex	/^\\def\\evenheading{\\parsearg\\evenheadingxxx}$/
+evenheadingxxx	tex-src/texinfo.tex	/^\\gdef\\evenheadingxxx #1{\\evenheadingyyy #1@|@|@|@|/
+evenheadingyyy	tex-src/texinfo.tex	/^\\gdef\\evenheadingyyy #1@|#2@|#3@|#4\\finish{%$/
 event-convert-list	c-src/emacs/src/keyboard.c	/^DEFUN ("event-convert-list", Fevent_convert_list, /
 event-symbol-parse-modifiers	c-src/emacs/src/keyboard.c	/^DEFUN ("internal-event-symbol-parse-modifiers", Fe/
 event_head	c-src/emacs/src/keyboard.c	11021
 event_to_kboard	c-src/emacs/src/keyboard.c	/^event_to_kboard (struct input_event *event)$/
+everyfooting	tex-src/texinfo.tex	/^\\def\\everyfooting{\\parsearg\\everyfootingxxx}$/
+everyfootingxxx	tex-src/texinfo.tex	/^\\gdef\\everyfootingxxx #1{\\everyfootingyyy #1@|@|@|/
+everyfootingyyy	tex-src/texinfo.tex	/^\\gdef\\everyfootingyyy #1@|#2@|#3@|#4\\finish{%$/
+everyheading	tex-src/texinfo.tex	/^\\def\\everyheading{\\parsearg\\everyheadingxxx}$/
+everyheadingxxx	tex-src/texinfo.tex	/^\\gdef\\everyheadingxxx #1{\\everyheadingyyy #1@|@|@|/
+everyheadingyyy	tex-src/texinfo.tex	/^\\gdef\\everyheadingyyy #1@|#2@|#3@|#4\\finish{%$/
+ewbot	tex-src/texinfo.tex	/^\\def\\ewbot{\\vrule height0pt depth\\cornerthick widt/
+ewtop	tex-src/texinfo.tex	/^\\def\\ewtop{\\vrule height\\cornerthick depth0pt widt/
 exact	c-src/emacs/src/gmalloc.c	200
+example	tex-src/texinfo.tex	/^\\let\\example=\\lisp$/
+exdent	tex-src/texinfo.tex	/^\\def\\exdent{\\parsearg\\exdentyyy}$/
+exdent	tex-src/texinfo.tex	/^\\let\\exdent=\\nofillexdent$/
+exdent	tex-src/texinfo.tex	/^\\let\\exdent=\\nofillexdent$/
+exdent	tex-src/texinfo.tex	/^\\let\\exdent=\\nofillexdent$/
+exdentyyy	tex-src/texinfo.tex	/^\\def\\exdentyyy #1{{\\hfil\\break\\hbox{\\kern -\\exdent/
 execute	cp-src/c.C	/^        void execute(CPluginCSCState& p, int w, in/
 exit	c-src/exit.c	/^DEFUN(exit, (status), int status)$/
 exit	c-src/exit.strange_suffix	/^DEFUN(exit, (status), int status)$/
@@ -2975,10 +2753,14 @@ exp	y-src/cccp.y	185
 exp1	y-src/cccp.y	148
 exp_list	y-src/parse.y	263
 expand-abbrev	c-src/abbrev.c	/^DEFUN ("expand-abbrev", Fexpand_abbrev, Sexpand_ab/
+expandafter	tex-src/texinfo.tex	/^\\expandafter\\let\\expandafter\\synindexfoo\\expandaft/
+expandafter	tex-src/texinfo.tex	/^\\expandafter\\let\\expandafter\\synindexfoo\\expandaft/
 expandmng	prol-src/natded.prolog	/^expandmng(var(V),var(V)).$/
 expandmng_tree	prol-src/natded.prolog	/^expandmng_tree(tree(Rule,Syn:Sem,Trees),$/
 expandmng_trees	prol-src/natded.prolog	/^expandmng_trees([],[]).$/
 expandsyn	prol-src/natded.prolog	/^expandsyn(Syn,Syn):-$/
+expansion	tex-src/texinfo.tex	/^\\def\\expansion{\\realbackslash expansion}$/
+expansion	tex-src/texinfo.tex	/^\\def\\expansion{\\leavevmode\\raise.1ex\\hbox to 1em{\\/
 explicitly-quoted-pending-delete-mode	el-src/TAGTEST.EL	/^(defalias (quote explicitly-quoted-pending-delete-/
 expression_value	y-src/cccp.y	68
 extras	c-src/emacs/src/lisp.h	1603
@@ -3026,6 +2808,10 @@ fdp	c-src/etags.c	217
 ff	cp-src/c.C	/^  int ff(){return 1;};$/
 field_of_play	cp-src/conway.cpp	18
 fignore	c-src/etags.c	2416
+file	tex-src/texinfo.tex	/^\\let\\file=\\samp$/
+file	tex-src/texinfo.tex	/^\\def\\file##1{\\realbackslash file {##1}}%$/
+file	tex-src/texinfo.tex	/^\\let\\file=\\indexdummyfont$/
+file	tex-src/texinfo.tex	/^\\def\\file##1{\\realbackslash file {##1}}$/
 file-of-tag	el-src/emacs/lisp/progmodes/etags.el	/^(defun file-of-tag (&optional relative)$/
 file-of-tag-function	el-src/emacs/lisp/progmodes/etags.el	/^(defvar file-of-tag-function nil$/
 fileJoin	php-src/lce_functions.php	/^  function fileJoin()$/
@@ -3034,6 +2820,7 @@ file_index	perl-src/htlmify-cystic	33
 file_tocs	perl-src/htlmify-cystic	30
 filename_is_absolute	c-src/etags.c	/^filename_is_absolute (char *fn)$/
 filenames	c-src/etags.c	196
+finalout	tex-src/texinfo.tex	/^\\def\\finalout{\\overfullrule=0pt}$/
 find-tag	el-src/emacs/lisp/progmodes/etags.el	/^(defun find-tag (tagname &optional next-p regexp-p/
 find-tag-default-function	el-src/emacs/lisp/progmodes/etags.el	/^(defcustom find-tag-default-function nil$/
 find-tag-history	el-src/emacs/lisp/progmodes/etags.el	/^(defvar find-tag-history nil) ; Doc string?$/
@@ -3056,21 +2843,33 @@ find-tag-tag-order	el-src/emacs/lisp/progmodes/etags.el	/^(defvar find-tag-tag-o
 find_entries	c-src/etags.c	/^find_entries (FILE *inf)$/
 find_user_signal_name	c-src/emacs/src/keyboard.c	/^find_user_signal_name (int sig)$/
 findcats	prol-src/natded.prolog	/^findcats([],Left,Left).$/
+findex	tex-src/texinfo.tex	/^\\def\\findex {\\fnindex}$/
 finish_appendices	perl-src/htlmify-cystic	/^sub finish_appendices ()$/
 finish_sections	perl-src/htlmify-cystic	/^sub finish_sections ()$/
 finish_subsections	perl-src/htlmify-cystic	/^sub finish_subsections ()$/
 finish_subsubsections	perl-src/htlmify-cystic	/^sub finish_subsubsections ()$/
+finishtitlepage	tex-src/texinfo.tex	/^\\def\\finishtitlepage{%$/
 finlist	c-src/etags.c	2414
 first	c-src/emacs/src/gmalloc.c	151
+first	tex-src/texinfo.tex	/^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/
 fitchtreelist	prol-src/natded.prolog	/^fitchtreelist([]).$/
 fixup_locale	c-src/emacs/src/lisp.h	/^INLINE void fixup_locale (void) {}$/
 flag	c-src/getopt.h	83
 flag2str	pyt-src/server.py	/^def flag2str(value, string):$/
 flistseen	c-src/etags.c	2415
+flushcr	tex-src/texinfo.tex	/^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else /
+flushleft	tex-src/texinfo.tex	/^\\def\\flushleft{%$/
+flushright	tex-src/texinfo.tex	/^\\def\\flushright{%$/
 fn	c-src/exit.c	/^    void EXFUN((*fn[1]), (NOARGS));$/
 fn	c-src/exit.strange_suffix	/^    void EXFUN((*fn[1]), (NOARGS));$/
+fnheader	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
 fnin	y-src/parse.y	68
+fnitemindex	tex-src/texinfo.tex	/^\\def\\fnitemindex #1{\\doind {fn}{\\code{#1}}}%$/
+fnx\deffnheader	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
 focus_set	pyt-src/server.py	/^    def focus_set(self):$/
+folio	tex-src/texinfo.tex	/^{\\let\\folio=0% Expand all macros now EXCEPT \\folio/
+folio	tex-src/texinfo.tex	/^{\\let\\folio=0%$/
+folio	tex-src/texinfo.tex	/^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/
 follow_key	c-src/emacs/src/keyboard.c	/^follow_key (Lisp_Object keymap, Lisp_Object key)$/
 fonts	tex-src/texinfo.tex	/^\\obeyspaces \\obeylines \\ninett \\indexfonts \\rawbac/
 fonts\rm	tex-src/texinfo.tex	/^  \\indexfonts\\rm \\tolerance=9500 \\advance\\baseline/
@@ -3098,11 +2897,15 @@ foobar	c-src/c.c	/^int foobar() {;}$/
 foobar	c.c	/^extern void foobar (void) __attribute__ ((section /
 foobar2	c-src/h.h	20
 foobar2_	c-src/h.h	16
+footnote	tex-src/texinfo.tex	/^\\long\\gdef\\footnote #1{\\global\\advance \\footnoteno/
+footnotestyle	tex-src/texinfo.tex	/^\\let\\footnotestyle=\\comment$/
+footnotezzz	tex-src/texinfo.tex	/^\\long\\gdef\\footnotezzz #1{\\insert\\footins{$/
 foperator	c-src/etags.c	2411
 force_auto_save_soon	c-src/emacs/src/keyboard.c	/^force_auto_save_soon (void)$/
 force_explicit_name	c-src/etags.c	265
 force_quit_count	c-src/emacs/src/keyboard.c	10387
 foreign_export	merc-src/accumulator.m	/^:- pragma foreign_export("C", unravel_univ(in, out/
+format	tex-src/texinfo.tex	/^\\def\\format{\\begingroup\\inENV %This group ends at /
 formatSize	objc-src/PackInsp.m	/^-(const char *)formatSize:(const char *)size inBuf/
 found	c-src/emacs/src/lisp.h	2344
 fracas	html-src/software.html	/^Fracas$/
@@ -3119,8 +2922,12 @@ free_regexps	c-src/etags.c	/^free_regexps (void)$/
 free_tree	c-src/etags.c	/^free_tree (register node *np)$/
 free_var	prol-src/natded.prolog	/^free_var(var(V),var(V)).$/
 freehook	c-src/emacs/src/gmalloc.c	/^freehook (void *ptr)$/
+frenchspacing	tex-src/texinfo.tex	/^\\def\\frenchspacing{\\sfcode46=1000 \\sfcode63=1000 \\/
+frenchspacing	tex-src/texinfo.tex	/^\\let\\frenchspacing=\\relax%$/
 fresh_vars	prol-src/natded.prolog	/^fresh_vars(var(V),var(V)).$/
 fstartlist	c-src/etags.c	2413
+ftable	tex-src/texinfo.tex	/^\\def\\ftable{\\begingroup\\inENV\\obeylines\\obeyspaces/
+ftablex	tex-src/texinfo.tex	/^\\gdef\\ftablex #1^^M{%$/
 func	c-src/emacs/src/lisp.h	/^      void (*func) (Lisp_Object);$/
 func	c-src/emacs/src/lisp.h	/^      void (*func) (void *);$/
 func	c-src/emacs/src/lisp.h	/^      void (*func) (int);$/
@@ -3137,6 +2944,7 @@ function	c-src/emacs/src/lisp.h	1685
 function	c-src/emacs/src/lisp.h	2197
 function	c-src/emacs/src/lisp.h	2985
 functionp	c-src/emacs/src/lisp.h	/^functionp (Lisp_Object object)$/
+functionparens	tex-src/texinfo.tex	/^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/
 fval	forth-src/test-forth.fth	/^fconst fvalue fval$/
 fvar	forth-src/test-forth.fth	/^fvariable fvar$/
 fvdef	c-src/etags.c	2418
@@ -3193,10 +3001,14 @@ ghi1	c-src/h.h	36
 ghi2	c-src/h.h	39
 giallo	cp-src/c.C	40
 glider	cp-src/conway.cpp	/^void glider(int x, int y)$/
+gloggingall	tex-src/texinfo.tex	/^\\def\\gloggingall{\\begingroup \\globaldefs = 1 \\logg/
 gnu	html-src/software.html	/^Free software that I wrote for the GNU project or /
 gobble_input	c-src/emacs/src/keyboard.c	/^gobble_input (void)$/
 goto-tag-location-function	el-src/emacs/lisp/progmodes/etags.el	/^(defvar goto-tag-location-function nil$/
 goto_xy	cp-src/screen.cpp	/^void goto_xy(unsigned char x, unsigned char y)$/
+group	tex-src/texinfo.tex	/^\\def\\group{\\begingroup$/
+gtr	tex-src/texinfo.tex	/^\\def\\gtr{\\realbackslash gtr}%$/
+gtr	tex-src/texinfo.tex	/^\\def\\gtr{\\realbackslash gtr}$/
 handleList	pyt-src/server.py	/^    def handleList(self, event):$/
 handleNew	pyt-src/server.py	/^    def handleNew(self, event):$/
 handle_async_input	c-src/emacs/src/keyboard.c	/^handle_async_input (void)$/
@@ -3211,6 +3023,8 @@ hash	c-src/etags.c	/^hash (const char *str, int len)$/
 hash	c-src/emacs/src/lisp.h	1843
 hash_table_test	c-src/emacs/src/lisp.h	1805
 hashfn	c-src/emacs/src/lisp.h	/^  EMACS_UINT (*hashfn) (struct hash_table_test *t,/
+hat	tex-src/texinfo.tex	/^\\def\\hat{\\realbackslash hat}%$/
+hat	tex-src/texinfo.tex	/^\\def\\hat{\\realbackslash hat}$/
 hdr	c-src/emacs/src/gmalloc.c	1860
 head_table	c-src/emacs/src/keyboard.c	11027
 header	c-src/emacs/src/lisp.h	1371
@@ -3220,6 +3034,8 @@ header	c-src/emacs/src/lisp.h	1610
 header	c-src/emacs/src/lisp.h	1672
 header	c-src/emacs/src/lisp.h	1826
 header_size	c-src/emacs/src/lisp.h	1471
+heading	tex-src/texinfo.tex	/^\\def\\heading{\\parsearg\\secheadingi}$/
+headings	tex-src/texinfo.tex	/^\\def\\headings #1 {\\csname HEADINGS#1\\endcsname}$/
 heapsize	c-src/emacs/src/gmalloc.c	361
 hello	scm-src/test.scm	/^(define hello "Hello, Emacs!")$/
 hello	scm-src/test.scm	/^(set! hello "Hello, world!")$/
@@ -3231,6 +3047,10 @@ help_form_saved_window_configs	c-src/emacs/src/keyboard.c	2156
 helpwin	pyt-src/server.py	/^def helpwin(helpdict):$/
 hide_cursor	cp-src/screen.cpp	/^void hide_cursor(void)$/
 hlds	merc-src/accumulator.m	/^:- import_module hlds.$/
+hsize	tex-src/texinfo.tex	/^\\shipout\\vbox{{\\let\\hsize=\\pagewidth \\makeheadline/
+hsize	tex-src/texinfo.tex	/^{\\let\\hsize=\\pagewidth \\makefootline}}}%$/
+hsize	tex-src/texinfo.tex	/^			{\\let\\hsize=\\pagewidth \\makeheadline}$/
+hsize	tex-src/texinfo.tex	/^			{\\let\\hsize=\\pagewidth \\makefootline}}$/
 htmltreelist	prol-src/natded.prolog	/^htmltreelist([]).$/
 hybrid_aligned_alloc	c-src/emacs/src/gmalloc.c	/^hybrid_aligned_alloc (size_t alignment, size_t siz/
 hybrid_calloc	c-src/emacs/src/gmalloc.c	/^hybrid_calloc (size_t nmemb, size_t size)$/
@@ -3245,31 +3065,87 @@ i	c-src/emacs/src/lisp.h	567
 i	c-src/emacs/src/lisp.h	4673
 i	c-src/emacs/src/lisp.h	4679
 i	cp-src/c.C	132
+i	tex-src/texinfo.tex	/^\\let\\i=\\smartitalic$/
+i	tex-src/texinfo.tex	/^\\def\\i##1{\\realbackslash i {##1}}%$/
+i	tex-src/texinfo.tex	/^\\let\\i=\\indexdummyfont$/
+i	tex-src/texinfo.tex	/^\\def\\i##1{\\realbackslash i {##1}}$/
+i	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
 ialpage	tex-src/texinfo.tex	/^\\newbox\\partialpage$/
+ialpage	tex-src/texinfo.tex	/^  \\output={\\global\\setbox\\partialpage=$/
 ialpage	tex-src/texinfo.tex	/^  \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\parti/
+ialpage	tex-src/texinfo.tex	/^\\def\\pagesofar{\\unvbox\\partialpage %$/
 ialpage	tex-src/texinfo.tex	/^  \\availdimen@=\\pageheight \\advance\\availdimen@ by/
 ialpage	tex-src/texinfo.tex	/^     \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\pa/
-ialpage=	tex-src/texinfo.tex	/^  \\output={\\global\\setbox\\partialpage=$/
 identify_goal_type	merc-src/accumulator.m	/^:- pred identify_goal_type(pred_id::in, proc_id::i/
 identify_out_and_out_prime	merc-src/accumulator.m	/^:- pred identify_out_and_out_prime(module_info::in/
 identify_recursive_calls	merc-src/accumulator.m	/^:- pred identify_recursive_calls(pred_id::in, proc/
 idx	c-src/emacs/src/lisp.h	3150
+ifclear	tex-src/texinfo.tex	/^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/
+ifclearfail	tex-src/texinfo.tex	/^\\def\\ifclearfail{\\begingroup\\ignoresections\\ifclea/
+ifclearfailxxx	tex-src/texinfo.tex	/^\\long\\def\\ifclearfailxxx #1\\end ifclear{\\endgroup\\/
+ifclearxxx	tex-src/texinfo.tex	/^\\def\\ifclearxxx #1{\\endgroup$/
+ifinfo	tex-src/texinfo.tex	/^\\def\\ifinfo{\\begingroup\\ignoresections\\ifinfoxxx}$/
+ifinfoxxx	tex-src/texinfo.tex	/^\\long\\def\\ifinfoxxx #1\\end ifinfo{\\endgroup\\ignore/
+ifset	tex-src/texinfo.tex	/^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/
+ifsetfail	tex-src/texinfo.tex	/^\\def\\ifsetfail{\\begingroup\\ignoresections\\ifsetfai/
+ifsetfailxxx	tex-src/texinfo.tex	/^\\long\\def\\ifsetfailxxx #1\\end ifset{\\endgroup\\igno/
+ifsetxxx	tex-src/texinfo.tex	/^\\def\\ifsetxxx #1{\\endgroup$/
+iftex	tex-src/texinfo.tex	/^\\def\\iftex{}$/
+ifusingtt	tex-src/texinfo.tex	/^\\def\\ifusingtt#1#2{\\ifdim \\fontdimen3\\the\\font=0pt/
+ignore	tex-src/texinfo.tex	/^\\def\\ignore{\\begingroup\\ignoresections$/
 ignore_case	c-src/etags.c	266
 ignore_mouse_drag_p	c-src/emacs/src/keyboard.c	1256
-ill=\relax	tex-src/texinfo.tex	/^\\let\\refill=\\relax$/
+ignoresections	tex-src/texinfo.tex	/^\\def\\ignoresections{%$/
+ignorexxx	tex-src/texinfo.tex	/^\\long\\def\\ignorexxx #1\\end ignore{\\endgroup\\ignore/
+ii	tex-src/texinfo.tex	/^\\def\\ii#1{{\\it #1}}		% italic font$/
 immediate_quit	c-src/emacs/src/keyboard.c	174
 impatto	html-src/softwarelibero.html	/^Impatto pratico del software libero$/
 implementation	merc-src/accumulator.m	/^:- implementation.$/
+implicitmath	tex-src/texinfo.tex	/^\\let\\implicitmath = $$/
+inENV	tex-src/texinfo.tex	/^\\newif\\ifENV \\ENVfalse \\def\\inENV{\\ifENV\\relax\\els/
 in_word_set	c-src/etags.c	/^in_word_set (register const char *str, register un/
 inattribute	c-src/etags.c	2400
 inc	cp-src/Range.h	/^  double inc (void) const { return rng_inc;   }$/
+include	tex-src/texinfo.tex	/^\\def\\include{\\parsearg\\includezzz}$/
+includezzz	tex-src/texinfo.tex	/^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/
+indbf	tex-src/texinfo.tex	/^\\let\\indbf=\\indrm$/
 index	c-src/emacs/src/lisp.h	1856
+indexbackslash	tex-src/texinfo.tex	/^\\let\\indexbackslash=0  %overridden during \\printin/
+indexbackslash	tex-src/texinfo.tex	/^  \\def\\indexbackslash{\\rawbackslashxx}$/
+indexdotfill	tex-src/texinfo.tex	/^\\def\\indexdotfill{\\cleaders$/
+indexdummies	tex-src/texinfo.tex	/^\\def\\indexdummies{%$/
+indexdummydots	tex-src/texinfo.tex	/^\\def\\indexdummydots{...}$/
+indexdummyfont	tex-src/texinfo.tex	/^\\def\\indexdummyfont#1{#1}$/
+indexdummytex	tex-src/texinfo.tex	/^\\def\\indexdummytex{TeX}$/
+indexfonts	tex-src/texinfo.tex	/^\\def\\indexfonts{%$/
+indexname	tex-src/texinfo.tex	/^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/
+indexname	tex-src/texinfo.tex	/^\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\si/
+indexnofonts	tex-src/texinfo.tex	/^\\def\\indexnofonts{%$/
+indsc	tex-src/texinfo.tex	/^\\let\\indsc=\\indrm$/
+indsf	tex-src/texinfo.tex	/^\\let\\indsf=\\indrm$/
+indsl	tex-src/texinfo.tex	/^\\let\\indsl=\\indit$/
+indtt	tex-src/texinfo.tex	/^\\let\\indtt=\\ninett$/
 infabsdir	c-src/etags.c	206
 infabsname	c-src/etags.c	205
 infiles	make-src/Makefile	/^infiles = $(filter-out ${NONSRCS},${SRCS}) srclist/
 infname	c-src/etags.c	204
 info	c-src/emacs/src/gmalloc.c	157
 infoPanel	objcpp-src/SimpleCalc.M	/^- infoPanel:sender$/
+infoappendix	tex-src/texinfo.tex	/^\\def\\infoappendix{\\parsearg\\appendixzzz}$/
+infoappendixsec	tex-src/texinfo.tex	/^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/
+infoappendixsubsec	tex-src/texinfo.tex	/^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/
+infoappendixsubsubsec	tex-src/texinfo.tex	/^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/
+infochapter	tex-src/texinfo.tex	/^\\def\\infochapter{\\parsearg\\chapterzzz}$/
+inforef	tex-src/texinfo.tex	/^\\def\\inforef #1{\\inforefzzz #1,,,,**}$/
+inforefzzz	tex-src/texinfo.tex	/^\\def\\inforefzzz #1,#2,#3,#4**{See Info file \\file{/
+infosection	tex-src/texinfo.tex	/^\\def\\infosection{\\parsearg\\sectionzzz}$/
+infosubsection	tex-src/texinfo.tex	/^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/
+infosubsubsection	tex-src/texinfo.tex	/^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/
+infotop	tex-src/texinfo.tex	/^\\def\\infotop{\\parsearg\\unnumberedzzz}$/
+infounnumbered	tex-src/texinfo.tex	/^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/
+infounnumberedsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsec{\\parsearg\\unnumberedseczzz}/
+infounnumberedsubsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsubsec{\\parsearg\\unnumberedsubs/
+infounnumberedsubsubsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsubsubsec{\\parsearg\\unnumbereds/
 init	c-src/etags.c	/^init (void)$/
 init	objc-src/Subprocess.m	/^- init:(const char *)subprocessString$/
 init	objc-src/Subprocess.m	/^    andStdErr:(BOOL)wantsStdErr$/
@@ -3281,6 +3157,7 @@ init_registry	cp-src/clheir.cpp	/^void init_registry(void)$/
 init_tool_bar_items	c-src/emacs/src/keyboard.c	/^init_tool_bar_items (Lisp_Object reuse)$/
 inita	c.c	/^static void inita () {}$/
 initb	c.c	/^static void initb () {}$/
+initial	tex-src/texinfo.tex	/^\\def\\initial #1{%$/
 initial_kboard	c-src/emacs/src/keyboard.c	84
 initialize-new-tags-table	el-src/emacs/lisp/progmodes/etags.el	/^(defun initialize-new-tags-table ()$/
 initialize_goal_store	merc-src/accumulator.m	/^:- func initialize_goal_store(list(hlds_goal), ins/
@@ -3312,7 +3189,14 @@ interface	merc-src/accumulator.m	/^:- interface.$/
 interface_locate	c-src/c.c	/^interface_locate(void)$/
 intern	c-src/emacs/src/lisp.h	/^intern (const char *str)$/
 intern_c_string	c-src/emacs/src/lisp.h	/^intern_c_string (const char *str)$/
+internalBitem	tex-src/texinfo.tex	/^\\def\\internalBitem{\\smallbreak \\parsearg\\itemzzz}$/
+internalBitemx	tex-src/texinfo.tex	/^\\def\\internalBitemx{\\par \\parsearg\\itemzzz}$/
+internalBkitem	tex-src/texinfo.tex	/^\\def\\internalBkitem{\\smallbreak \\parsearg\\kitemzzz/
+internalBkitemx	tex-src/texinfo.tex	/^\\def\\internalBkitemx{\\par \\parsearg\\kitemzzz}$/
+internalBxitem	tex-src/texinfo.tex	/^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/
+internalBxitemx	tex-src/texinfo.tex	/^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/
 internal_last_event_frame	c-src/emacs/src/keyboard.c	228
+internalsetq	tex-src/texinfo.tex	/^\\def\\internalsetq #1#2{'xrdef {#1}{\\csname #2\\endc/
 interned	c-src/emacs/src/lisp.h	672
 interpreters	c-src/etags.c	197
 interrupt_input	c-src/emacs/src/keyboard.c	328
@@ -3347,9 +3231,28 @@ iso_lispy_function_keys	c-src/emacs/src/keyboard.c	5151
 isoperator	prol-src/natded.prolog	/^isoperator(Char):-$/
 isoptab	prol-src/natded.prolog	/^isoptab('%').$/
 iswhite	c-src/etags.c	/^#define	iswhite(c)	(_wht[CHAR (c)]) \/* c is white /
+item	tex-src/texinfo.tex	/^\\def\\item{\\errmessage{@item while not in a table}}/
+item	tex-src/texinfo.tex	/^\\let\\item = \\internalBitem %$/
+item	tex-src/texinfo.tex	/^\\let\\item=\\itemizeitem}$/
 item_properties	c-src/emacs/src/keyboard.c	7568
+itemcontents	tex-src/texinfo.tex	/^\\def\\itemcontents{#1}%$/
+itemfont	tex-src/texinfo.tex	/^\\def\\itemfont{#2}%$/
+itemindex	tex-src/texinfo.tex	/^\\let\\itemindex=#1%$/
+itemize	tex-src/texinfo.tex	/^\\def\\itemize{\\parsearg\\itemizezzz}$/
+itemizeitem	tex-src/texinfo.tex	/^\\def\\itemizeitem{%$/
+itemizey	tex-src/texinfo.tex	/^\\def\\itemizey #1#2{%$/
+itemizezzz	tex-src/texinfo.tex	/^\\def\\itemizezzz #1{%$/
+itemx	tex-src/texinfo.tex	/^\\def\\itemx{\\errmessage{@itemx while not in a table/
+itemx	tex-src/texinfo.tex	/^\\let\\itemx = \\internalBitemx %$/
+itemzzz	tex-src/texinfo.tex	/^\\def\\itemzzz #1{\\begingroup %$/
+ivarheader	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
+ivarx\defivarheader	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
 jmp	c-src/emacs/src/lisp.h	3044
 just_read_file	c-src/etags.c	/^just_read_file (FILE *inf)$/
+kbd	tex-src/texinfo.tex	/^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/
+kbd	tex-src/texinfo.tex	/^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/
+kbd	tex-src/texinfo.tex	/^\\let\\kbd=\\indexdummyfont$/
+kbd	tex-src/texinfo.tex	/^\\def\\kbd##1{\\realbackslash kbd {##1}}$/
 kbd_buffer	c-src/emacs/src/keyboard.c	291
 kbd_buffer_events_waiting	c-src/emacs/src/keyboard.c	/^kbd_buffer_events_waiting (void)$/
 kbd_buffer_get_event	c-src/emacs/src/keyboard.c	/^kbd_buffer_get_event (KBOARD **kbp,$/
@@ -3360,9 +3263,14 @@ kbd_buffer_store_help_event	c-src/emacs/src/keyboard.c	/^kbd_buffer_store_help_e
 kbd_buffer_unget_event	c-src/emacs/src/keyboard.c	/^kbd_buffer_unget_event (register struct input_even/
 kbd_fetch_ptr	c-src/emacs/src/keyboard.c	297
 kbd_store_ptr	c-src/emacs/src/keyboard.c	302
+kbdfoo	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
 kboard	c-src/emacs/src/keyboard.c	860
 kboard_stack	c-src/emacs/src/keyboard.c	858
 kboard_stack	c-src/emacs/src/keyboard.c	864
+key	tex-src/texinfo.tex	/^\\def\\key #1{{\\tt \\exhyphenpenalty=10000\\uppercase{/
+key	tex-src/texinfo.tex	/^\\def\\key##1{\\realbackslash key {##1}}%$/
+key	tex-src/texinfo.tex	/^\\let\\key=\\indexdummyfont$/
+key	tex-src/texinfo.tex	/^\\def\\key##1{\\realbackslash key {##1}}$/
 key_and_value	c-src/emacs/src/lisp.h	1868
 keyremap	c-src/emacs/src/keyboard.c	8742
 keyremap	c-src/emacs/src/keyboard.c	8754
@@ -3377,6 +3285,12 @@ keywords	y-src/cccp.y	114
 keywords	y-src/cccp.y	306
 kind	c-src/emacs/src/keyboard.c	11024
 kind	c-src/h.h	46
+kindex	tex-src/texinfo.tex	/^\\def\\kindex {\\kyindex}$/
+kitem	tex-src/texinfo.tex	/^\\def\\kitem{\\errmessage{@kitem while not in a table/
+kitem	tex-src/texinfo.tex	/^\\let\\kitem = \\internalBkitem %$/
+kitemx	tex-src/texinfo.tex	/^\\def\\kitemx{\\errmessage{@kitemx while not in a tab/
+kitemx	tex-src/texinfo.tex	/^\\let\\kitemx = \\internalBkitemx %$/
+kitemzzz	tex-src/texinfo.tex	/^\\def\\kitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/
 kset_echo_string	c-src/emacs/src/keyboard.c	/^kset_echo_string (struct kboard *kb, Lisp_Object v/
 kset_kbd_queue	c-src/emacs/src/keyboard.c	/^kset_kbd_queue (struct kboard *kb, Lisp_Object val/
 kset_keyboard_translate_table	c-src/emacs/src/keyboard.c	/^kset_keyboard_translate_table (struct kboard *kb, /
@@ -3386,6 +3300,9 @@ kset_local_function_key_map	c-src/emacs/src/keyboard.c	/^kset_local_function_key
 kset_overriding_terminal_local_map	c-src/emacs/src/keyboard.c	/^kset_overriding_terminal_local_map (struct kboard /
 kset_real_last_command	c-src/emacs/src/keyboard.c	/^kset_real_last_command (struct kboard *kb, Lisp_Ob/
 kset_system_key_syms	c-src/emacs/src/keyboard.c	/^kset_system_key_syms (struct kboard *kb, Lisp_Obje/
+l	tex-src/texinfo.tex	/^\\def\\l#1{{\\li #1}\\null}		% $/
+l	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
+labelspace	tex-src/texinfo.tex	/^\\def\\labelspace{\\hskip1em \\relax}$/
 lang	c-src/etags.c	208
 lang	c-src/etags.c	251
 lang	c-src/etags.c	259
@@ -3404,9 +3321,16 @@ last_state_size	c-src/emacs/src/gmalloc.c	401
 last_undo_boundary	c-src/emacs/src/keyboard.c	1287
 lasta	c.c	272
 lastargmargin	tex-src/texinfo.tex	/^\\newskip\\deflastargmargin \\deflastargmargin=18pt$/
+lastargmargin	tex-src/texinfo.tex	/^\\newskip\\deflastargmargin \\deflastargmargin=18pt$/
 lastargmargin	tex-src/texinfo.tex	/^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/
 lastb	c.c	278
+lastnode	tex-src/texinfo.tex	/^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/
+lastnode	tex-src/texinfo.tex	/^\\let\\lastnode=\\relax$/
+lastnode	tex-src/texinfo.tex	/^\\let\\lastnode=\\relax}$/
+lastnode	tex-src/texinfo.tex	/^\\let\\lastnode=\\relax}$/
+lastnode	tex-src/texinfo.tex	/^\\let\\lastnode=\\relax}$/
 lb	c-src/etags.c	2923
+lbrb	tex-src/texinfo.tex	/^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/
 lbs	c-src/etags.c	2924
 lce	php-src/lce_functions.php	/^      function lce()$/
 lce	php-src/lce_functions.php	/^      function lce()$/
@@ -3426,7 +3350,10 @@ len	c-src/etags.c	237
 length	c-src/etags.c	2495
 length	y-src/cccp.y	44
 length	y-src/cccp.y	113
+less	tex-src/texinfo.tex	/^\\def\\less{\\realbackslash less}%$/
+less	tex-src/texinfo.tex	/^\\def\\less{\\realbackslash less}$/
 let	c-src/emacs/src/lisp.h	2981
+letter	tex-src/texinfo.tex	/^\\global\\advance \\appendixno by 1 \\message{Appendix/
 letter	tex-src/texinfo.tex	/^\\chapmacro {#1}{Appendix \\appendixletter}%$/
 letter	tex-src/texinfo.tex	/^  {#1}{Appendix \\appendixletter}{\\noexpand\\folio}}/
 letter	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\secheading {#1}{\\appendixlet/
@@ -3439,6 +3366,7 @@ letter:	tex-src/texinfo.tex	/^\\xdef\\thischapter{Appendix \\appendixletter: \\n
 level	c-src/emacs/src/lisp.h	3153
 lex	prol-src/natded.prolog	/^lex(W,SynOut,Sem):-$/
 lexptr	y-src/cccp.y	332
+li	tex-src/texinfo.tex	/^\\let\\li = \\sf % Sometimes we call it \\li, not \\sf./
 libs	merc-src/accumulator.m	/^:- import_module libs.$/
 licenze	html-src/softwarelibero.html	/^Licenze d'uso di un programma$/
 limit	cp-src/Range.h	/^  double limit (void) const { return rng_limit; }$/
@@ -3451,9 +3379,12 @@ linebuffer_init	c-src/etags.c	/^linebuffer_init (linebuffer *lbp)$/
 linebuffer_setlen	c-src/etags.c	/^linebuffer_setlen (linebuffer *lbp, int toksize)$/
 lineno	c-src/etags.c	2506
 lineno	c-src/emacs/src/lisp.h	3147
+linenumber	tex-src/texinfo.tex	/^  \\let\\linenumber = \\empty % Non-3.0.$/
+linenumber	tex-src/texinfo.tex	/^  \\def\\linenumber{\\the\\inputlineno:\\space}$/
 linepos	c-src/etags.c	2507
 linepos	c-src/etags.c	2922
 links	html-src/software.html	/^Links to interesting software$/
+lisp	tex-src/texinfo.tex	/^\\def\\lisp{\\aboveenvbreak$/
 lisp_eval_depth	c-src/emacs/src/lisp.h	3045
 lisp_h_CHECK_LIST_CONS	c-src/emacs/src/lisp.h	/^#define lisp_h_CHECK_LIST_CONS(x, y) CHECK_TYPE (C/
 lisp_h_CHECK_NUMBER	c-src/emacs/src/lisp.h	/^#define lisp_h_CHECK_NUMBER(x) CHECK_TYPE (INTEGER/
@@ -3487,6 +3418,7 @@ lisp_h_XTYPE	c-src/emacs/src/lisp.h	/^# define lisp_h_XTYPE(a) ((enum Lisp_Type)
 lisp_h_XUNTAG	c-src/emacs/src/lisp.h	/^# define lisp_h_XUNTAG(a, type) ((void *) (intptr_/
 lisp_h_check_cons_list	c-src/emacs/src/lisp.h	/^# define lisp_h_check_cons_list() ((void) 0)$/
 lisp_h_make_number	c-src/emacs/src/lisp.h	/^# define lisp_h_make_number(n) \\$/
+lisppar	tex-src/texinfo.tex	/^\\gdef\\lisppar{\\null\\endgraf}}$/
 lispy_accent_codes	c-src/emacs/src/keyboard.c	4634
 lispy_accent_keys	c-src/emacs/src/keyboard.c	4741
 lispy_drag_n_drop_names	c-src/emacs/src/keyboard.c	5181
@@ -3513,18 +3445,29 @@ loadPORManager	php-src/lce_functions.php	/^  function &loadPORManager()$/
 local_if_set	c-src/emacs/src/lisp.h	2338
 location	cp-src/clheir.hpp	33
 location	cp-src/clheir.hpp	/^    location() { }$/
+loggingall	tex-src/texinfo.tex	/^\\def\\loggingall{\\tracingcommands2 \\tracingstats2 $/
+look	tex-src/texinfo.tex	/^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/
 lookup	y-src/cccp.y	/^lookup (name, len, hash)$/
 lookup_call	merc-src/accumulator.m	/^:- pred lookup_call(accu_goal_store::in, accu_goal/
+losespace	tex-src/texinfo.tex	/^\\def\\losespace #1{#1}$/
 lowcase	c-src/etags.c	/^#define lowcase(c)	tolower (CHAR (c))$/
+lowercaseenumerate	tex-src/texinfo.tex	/^\\def\\lowercaseenumerate{%$/
 lucid_event_type_list_p	c-src/emacs/src/keyboard.c	/^lucid_event_type_list_p (Lisp_Object object)$/
+lvvmode	tex-src/texinfo.tex	/^\\def\\lvvmode{\\vbox to 0pt{}}$/
 mabort	c-src/emacs/src/gmalloc.c	/^mabort (enum mcheck_status status)$/
 mach_host_self	c-src/machsyscalls.h	/^SYSCALL (mach_host_self, -29,$/
 mach_msg_trap	c-src/machsyscalls.h	/^SYSCALL (mach_msg_trap, -25,$/
 mach_reply_port	c-src/machsyscalls.h	/^SYSCALL (mach_reply_port, -26,$/
 mach_task_self	c-src/machsyscalls.h	/^SYSCALL (mach_task_self, -28,$/
 mach_thread_self	c-src/machsyscalls.h	/^SYSCALL (mach_thread_self, -27,$/
+macheader	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
+macx\defmacheader	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
 magic	c-src/emacs/src/gmalloc.c	1863
+mainmagstep	tex-src/texinfo.tex	/^\\let\\mainmagstep=\\magstephalf$/
+mainmagstep	tex-src/texinfo.tex	/^\\let\\mainmagstep=\\magstep1$/
 maintaining.info	make-src/Makefile	/^maintaining.info: maintaining.texi$/
+majorheading	tex-src/texinfo.tex	/^\\def\\majorheading{\\parsearg\\majorheadingzzz}$/
+majorheadingzzz	tex-src/texinfo.tex	/^\\def\\majorheadingzzz #1{%$/
 make-abbrev-table	c-src/abbrev.c	/^DEFUN ("make-abbrev-table", Fmake_abbrev_table, Sm/
 make_C_tag	c-src/etags.c	/^make_C_tag (bool isfun)$/
 make_coor	prol-src/natded.prolog	/^make_coor(s(_),Alpha,Sem1,Sem2,Alpha@Sem1@Sem2).$/
@@ -3565,6 +3508,7 @@ map_word	prol-src/natded.prolog	/^map_word([[_]|Ws],Exp):-$/
 mapping	html-src/algrthms.html	/^Mapping the Channel Symbols$/
 mapsyn	prol-src/natded.prolog	/^mapsyn(A\/B,AM\/BM):-$/
 mark_kboards	c-src/emacs/src/keyboard.c	/^mark_kboards (void)$/
+math	tex-src/texinfo.tex	/^\\def\\math#1{\\implicitmath #1\\implicitmath}$/
 max	c.c	/^max (int a, int b)$/
 max	c.c	/^__attribute__ ((always_inline)) max (int a, int b)/
 max	c-src/emacs/src/lisp.h	58
@@ -3587,6 +3531,7 @@ memalign	c-src/emacs/src/gmalloc.c	/^memalign (size_t alignment, size_t size)$/
 member	prol-src/natded.prolog	/^member(X,[X|_]).$/
 member_lessthan_goalid	merc-src/accumulator.m	/^:- pred member_lessthan_goalid(accu_goal_store::in/
 memclear	c-src/emacs/src/lisp.h	/^memclear (void *p, ptrdiff_t nbytes)$/
+menu	tex-src/texinfo.tex	/^\\long\\def\\menu #1\\end menu{}$/
 menu_bar_item	c-src/emacs/src/keyboard.c	/^menu_bar_item (Lisp_Object key, Lisp_Object item, /
 menu_bar_items	c-src/emacs/src/keyboard.c	/^menu_bar_items (Lisp_Object old)$/
 menu_bar_items_index	c-src/emacs/src/keyboard.c	7369
@@ -3596,6 +3541,11 @@ menu_item_eval_property	c-src/emacs/src/keyboard.c	/^menu_item_eval_property (Li
 menu_item_eval_property_1	c-src/emacs/src/keyboard.c	/^menu_item_eval_property_1 (Lisp_Object arg)$/
 menu_separator_name_p	c-src/emacs/src/keyboard.c	/^menu_separator_name_p (const char *label)$/
 metasource	c-src/etags.c	198
+methodheader	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
+methodx\defmethodheader	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
+methparsebody\Edeffn	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
+methparsebody\Edefmethod	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
+methparsebody\Edeftypefn	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
 min	c-src/emacs/src/gmalloc.c	/^#define min(a, b) ((a) < (b) ? (a) : (b))$/
 min	c-src/emacs/src/lisp.h	57
 min	c-src/emacs/src/lisp.h	/^#define min(a, b) ((a) < (b) ? (a) : (b))$/
@@ -3603,6 +3553,7 @@ min	cp-src/conway.cpp	/^#define min(x,y)  ((x > y) ? y : x)$/
 min_args	c-src/emacs/src/lisp.h	1686
 min_char	c-src/emacs/src/lisp.h	1621
 minus	cp-src/functions.cpp	/^void Date::minus ( int days , int month , int year/
+minus	tex-src/texinfo.tex	/^\\def\\minus{$-$}$/
 miti	html-src/softwarelibero.html	/^Sfatiamo alcuni miti$/
 modifier_names	c-src/emacs/src/keyboard.c	6319
 modifier_symbols	c-src/emacs/src/keyboard.c	6327
@@ -3628,7 +3579,9 @@ my_struct	c.c	226
 my_struct	c-src/h.h	91
 my_typedef	c.c	228
 my_typedef	c-src/h.h	93
+mylbrace	tex-src/texinfo.tex	/^\\def\\mylbrace {{\\tt \\char '173}}$/
 mypi	forth-src/test-forth.fth	/^synonym mypi fconst$/
+myrbrace	tex-src/texinfo.tex	/^\\def\\myrbrace {{\\tt \\char '175}}$/
 n	c-src/exit.c	28
 n	c-src/exit.strange_suffix	28
 name	c-src/getopt.h	76
@@ -3642,6 +3595,8 @@ name	c-src/emacs/src/lisp.h	682
 name	c-src/emacs/src/lisp.h	1808
 name	c-src/emacs/src/lisp.h	3144
 name	perl-src/htlmify-cystic	357
+name	tex-src/texinfo.tex	/^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/
+name	tex-src/texinfo.tex	/^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/
 name	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{#1}\\defunargs{#3}\\endgrou/
 name	tex-src/texinfo.tex	/^\\begingroup\\defname {#1}{Function}%$/
 name	tex-src/texinfo.tex	/^\\begingroup\\defname {\\code{#1} #2}{Function}%$/
@@ -3664,16 +3619,21 @@ name	y-src/cccp.y	113
 named	c-src/etags.c	2505
 namestringequal	pas-src/common.pas	/^function namestringequal;(*(var Name1,Name2 : Name/
 nargs	c-src/emacs/src/lisp.h	2987
+need	tex-src/texinfo.tex	/^\\def\\need{\\parsearg\\needx}$/
 need_adjustment	c-src/emacs/src/lisp.h	1986
+needx	tex-src/texinfo.tex	/^\\def\\needx#1{%$/
 neighbors	cp-src/clheir.hpp	59
 nelem	cp-src/Range.h	/^  int nelem (void) const { return rng_nelem; }$/
 nestlev	c-src/etags.c	2525
 new	objc-src/PackInsp.m	/^+new$/
 new	perl-src/htlmify-cystic	163
 new_tag	perl-src/htlmify-cystic	18
+newcodeindex	tex-src/texinfo.tex	/^\\def\\newcodeindex #1{$/
+newindex	tex-src/texinfo.tex	/^\\def\\newindex #1{$/
 newlb	c-src/etags.c	2930
 newlinepos	c-src/etags.c	2932
 newtextstring	pas-src/common.pas	/^function newtextstring; (*: TextString;*)$/
+newwrite	tex-src/texinfo.tex	/^\\gdef\\newwrite{\\alloc@7\\write\\chardef\\sixt@@n}}$/
 next	c.c	174
 next	c-src/etags.c	203
 next	c-src/emacs/src/gmalloc.c	164
@@ -3688,6 +3648,16 @@ next	c-src/emacs/src/lisp.h	2037
 next	c-src/emacs/src/lisp.h	2192
 next	c-src/emacs/src/lisp.h	3028
 next	c-src/emacs/src/lisp.h	3134
+next	tex-src/texinfo.tex	/^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/
+next	tex-src/texinfo.tex	/^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else /
+next	tex-src/texinfo.tex	/^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else /
+next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
+next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
+next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
+next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
+next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
+next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
+next	tex-src/texinfo.tex	/^\\edef\\next{\\write\\auxfile{\\internalsetq {#1}{#2}}}/
 next	y-src/cccp.y	42
 next-file	el-src/emacs/lisp/progmodes/etags.el	/^(defun next-file (&optional initialize novisit)$/
 next-file-list	el-src/emacs/lisp/progmodes/etags.el	/^(defvar next-file-list nil$/
@@ -3698,41 +3668,65 @@ next_weak	c-src/emacs/src/lisp.h	1875
 nextfree	c-src/emacs/src/lisp.h	3029
 nfree	c-src/emacs/src/gmalloc.c	150
 nl	c-src/etags.c	2521
+nm	tex-src/testenv.tex	/^\\newcommand{\\nm}[2]{\\nomenclature{#1}{#2}}$/
 no	tex-src/texinfo.tex	/^\\newcount \\appendixno  \\appendixno = `\\@$/
+no	tex-src/texinfo.tex	/^\\newcount \\appendixno  \\appendixno = `\\@$/
+no	tex-src/texinfo.tex	/^\\def\\appendixletter{\\char\\the\\appendixno}$/
 no	tex-src/texinfo.tex	/^\\global\\advance \\appendixno by 1 \\message{Appendix/
 no	tex-src/texinfo.tex	/^\\ifnum\\secno=0 Appendix\\xreftie'char\\the\\appendixn/
-no.\the\secno	tex-src/texinfo.tex	/^\\else \\ifnum \\subsecno=0 Section\\xreftie'char\\the\\/
-no.\the\secno.\the\subsecno	tex-src/texinfo.tex	/^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/
-no.\the\secno.\the\subsecno.\the\subsubsecno	tex-src/texinfo.tex	/^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/
+no.\the	tex-src/texinfo.tex	/^\\else \\ifnum \\subsecno=0 Section\\xreftie'char\\the\\/
+no.\the	tex-src/texinfo.tex	/^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/
+no.\the	tex-src/texinfo.tex	/^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/
 no_argument	c-src/getopt.h	89
 no_lang_help	c-src/etags.c	707
 no_sub	c-src/emacs/src/regex.h	387
 nocase_tail	c-src/etags.c	/^nocase_tail (const char *cp)$/
 node	c-src/etags.c	225
+node	tex-src/texinfo.tex	/^\\def\\node{\\ENVcheck\\parsearg\\nodezzz}$/
 node_st	c-src/etags.c	214
 noderef	tex-src/texinfo.tex	/^\\appendixnoderef %$/
 noderef	tex-src/texinfo.tex	/^\\appendixnoderef %$/
 noderef	tex-src/texinfo.tex	/^\\appendixnoderef %$/
 noderef	tex-src/texinfo.tex	/^\\appendixnoderef %$/
+nodexxx	tex-src/texinfo.tex	/^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/
+nodezzz	tex-src/texinfo.tex	/^\\def\\nodezzz#1{\\nodexxx [#1,]}$/
+nofillexdent	tex-src/texinfo.tex	/^\\def\\nofillexdent{\\parsearg\\nofillexdentyyy}$/
+nofillexdentyyy	tex-src/texinfo.tex	/^\\def\\nofillexdentyyy #1{{\\advance \\leftskip by -\\e/
 nofonts	tex-src/texinfo.tex	/^{\\indexnofonts$/
 nofonts	tex-src/texinfo.tex	/^{\\indexnofonts$/
-nofonts%	tex-src/texinfo.tex	/^{\\chapternofonts%$/
-nofonts%	tex-src/texinfo.tex	/^{\\chapternofonts%$/
-nofonts%	tex-src/texinfo.tex	/^{\\chapternofonts%$/
-nofonts%	tex-src/texinfo.tex	/^{\\chapternofonts%$/
-nofonts%	tex-src/texinfo.tex	/^{\\chapternofonts%$/
-nofonts%	tex-src/texinfo.tex	/^{\\chapternofonts%$/
-nofonts%	tex-src/texinfo.tex	/^{\\chapternofonts%$/
-nofonts%	tex-src/texinfo.tex	/^{\\chapternofonts%$/
-nofonts%	tex-src/texinfo.tex	/^{\\chapternofonts%$/
-nofonts%	tex-src/texinfo.tex	/^{\\chapternofonts%$/
-nofonts%	tex-src/texinfo.tex	/^{\\chapternofonts%$/
-nofonts%	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nofonts	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nofonts	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nofonts	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nofonts	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nofonts	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nofonts	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nofonts	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nofonts	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nofonts	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nofonts	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nofonts	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nofonts	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nonarrowing	tex-src/texinfo.tex	/^\\let\\nonarrowing=\\relax$/
+nonarrowing	tex-src/texinfo.tex	/^	\\let\\nonarrowing=\\comment$/
+nonarrowing	tex-src/texinfo.tex	/^\\let\\nonarrowing=\\relax$/
+nonarrowing	tex-src/texinfo.tex	/^\\let\\nonarrowing=\\relax$/
+nonarrowing	tex-src/texinfo.tex	/^\\let\\nonarrowing=\\relax$/
+nonarrowing	tex-src/texinfo.tex	/^\\let\\nonarrowing=\\relax$/
 none_help	c-src/etags.c	703
+normalbackslash	tex-src/texinfo.tex	/^\\def\\normalbackslash{{\\tt\\rawbackslashxx}}$/
+normalcaret	tex-src/texinfo.tex	/^\\def\\normalcaret{^}$/
+normaldoublequote	tex-src/texinfo.tex	/^\\def\\normaldoublequote{"}$/
+normalgreater	tex-src/texinfo.tex	/^\\def\\normalgreater{>}$/
 normalize	prol-src/natded.prolog	/^normalize(M,MNorm):-$/
 normalize_fresh	prol-src/natded.prolog	/^normalize_fresh(M,N):-$/
 normalize_tree	prol-src/natded.prolog	/^normalize_tree(tree(Rule,Syn:Sem,Trees),$/
 normalize_trees	prol-src/natded.prolog	/^normalize_trees([],[]).$/
+normalless	tex-src/texinfo.tex	/^\\def\\normalless{<}$/
+normalparens	tex-src/texinfo.tex	/^\\gdef\\normalparens{\\boldbrax\\let&=\\ampnr}$/
+normalplus	tex-src/texinfo.tex	/^\\def\\normalplus{+}$/
+normaltilde	tex-src/texinfo.tex	/^\\def\\normaltilde{~}$/
+normalunderscore	tex-src/texinfo.tex	/^\\def\\normalunderscore{_}$/
+normalverticalbar	tex-src/texinfo.tex	/^\\def\\normalverticalbar{|}$/
 nosave	pyt-src/server.py	/^    def nosave(self):$/
 nosave	pyt-src/server.py	/^    def nosave(self):$/
 nosave	pyt-src/server.py	/^    def nosave(self):$/
@@ -3745,6 +3739,8 @@ notag4	c-src/torture.c	45
 notag4	c-src/dostorture.c	45
 notinname	c-src/etags.c	/^#define notinname(c)	(_nin[CHAR (c)]) \/* c is not /
 npending	c-src/emacs/src/keyboard.c	7244
+nsbot	tex-src/texinfo.tex	/^\\def\\nsbot{\\vbox$/
+nstop	tex-src/texinfo.tex	/^\\def\\nstop{\\vbox$/
 ntool_bar_items	c-src/emacs/src/keyboard.c	7974
 numOfChannels	cp-src/c.C	1
 num_columns	cp-src/conway.cpp	16
@@ -3753,8 +3749,15 @@ num_regs	c-src/emacs/src/regex.h	430
 num_rows	cp-src/conway.cpp	15
 numberKeys	objcpp-src/SimpleCalc.M	/^- numberKeys:sender$/
 number_len	c-src/etags.c	/^static int number_len (long) ATTRIBUTE_CONST;$/
+numberedsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsec{\\parsearg\\seczzz}$/
+numberedsubsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsubsec{\\parsearg\\numberedsubsec/
+numberedsubseczzz	tex-src/texinfo.tex	/^\\def\\numberedsubseczzz #1{\\seccheck{subsection}%$/
+numberedsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsubsubsec{\\parsearg\\numberedsub/
+numberedsubsubseczzz	tex-src/texinfo.tex	/^\\def\\numberedsubsubseczzz #1{\\seccheck{subsubsecti/
 numbervars	prol-src/natded.prolog	/^numbervars(X):-$/
+numericenumerate	tex-src/texinfo.tex	/^\\def\\numericenumerate{%$/
 nvars	c-src/emacs/src/lisp.h	3140
+obeyedspace	tex-src/texinfo.tex	/^\\gdef\\obeyedspace{\\ }$/
 objdef	c-src/etags.c	2484
 object	c-src/emacs/src/lisp.h	2128
 object_registry	cp-src/clheir.cpp	10
@@ -3765,6 +3768,12 @@ obstack_chunk_free	y-src/parse.y	48
 ocatseen	c-src/etags.c	2477
 octave_MDiagArray2_h	cp-src/MDiagArray2.h	29
 octave_Range_h	cp-src/Range.h	24
+oddfooting	tex-src/texinfo.tex	/^\\def\\oddfooting{\\parsearg\\oddfootingxxx}$/
+oddfootingxxx	tex-src/texinfo.tex	/^\\gdef\\oddfootingxxx #1{\\oddfootingyyy #1@|@|@|@|\\f/
+oddfootingyyy	tex-src/texinfo.tex	/^\\gdef\\oddfootingyyy #1@|#2@|#3@|#4\\finish{%$/
+oddheading	tex-src/texinfo.tex	/^\\def\\oddheading{\\parsearg\\oddheadingxxx}$/
+oddheadingxxx	tex-src/texinfo.tex	/^\\gdef\\oddheadingxxx #1{\\oddheadingyyy #1@|@|@|@|\\f/
+oddheadingyyy	tex-src/texinfo.tex	/^\\gdef\\oddheadingyyy #1@|#2@|#3@|#4\\finish{%$/
 oediff	make-src/Makefile	/^oediff: OTAGS ETAGS ${infiles}$/
 offset	c-src/etags.c	2494
 offset	c-src/emacs/src/lisp.h	2305
@@ -3775,15 +3784,21 @@ oinbody	c-src/etags.c	2478
 ok	objc-src/PackInsp.m	/^-ok:sender$/
 ok_to_echo_at_next_pause	c-src/emacs/src/keyboard.c	159
 old_value	c-src/emacs/src/lisp.h	2980
+oldpage	tex-src/texinfo.tex	/^   \\let\\oldpage = \\page$/
 omethodcolon	c-src/etags.c	2481
 omethodparm	c-src/etags.c	2482
 omethodsign	c-src/etags.c	2479
 omethodtag	c-src/etags.c	2480
+one	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
+onepageout	tex-src/texinfo.tex	/^\\def\\onepageout#1{\\hoffset=\\normaloffset$/
+onepageout	tex-src/texinfo.tex	/^\\def\\cropmarks{\\let\\onepageout=\\croppageout }$/
 onone	c-src/etags.c	2472
 oparenseen	c-src/etags.c	2476
 open	objc-src/PackInsp.m	/^-open:sender$/
 open-dribble-file	c-src/emacs/src/keyboard.c	/^DEFUN ("open-dribble-file", Fopen_dribble_file, So/
 openInWorkspace	objc-src/PackInsp.m	/^static void openInWorkspace(const char *filename)$/
+opencontents	tex-src/texinfo.tex	/^\\def\\opencontents{\\openout \\contentsfile = \\jobnam/
+openindices	tex-src/texinfo.tex	/^\\def\\openindices{%$/
 operationKeys	objcpp-src/SimpleCalc.M	/^- operationKeys:sender$/
 operator	y-src/cccp.y	438
 operator ++	cp-src/functions.cpp	/^Date & Date::operator ++ ( void ){$/
@@ -3805,11 +3820,20 @@ operator int	cp-src/fail.C	/^			   operator int() const {return x;}$/
 operator+	cp-src/c.C	/^const A& A::operator+(const A&) { }$/
 operator+	cp-src/c.C	/^void operator+(int, int) {}$/
 operator+	cp-src/c.C	/^  A operator+(A& a) {};$/
-opparsebody\Edefop\defopx\defopheader\defoptype	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
+opheader\defoptype	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
+opnested	tex-src/texinfo.tex	/^\\gdef\\opnested{\\char`\\(\\global\\advance\\parencount /
+opnr	tex-src/texinfo.tex	/^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} /
+opparsebody\Edefop	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
+oprm	tex-src/texinfo.tex	/^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested /
 oprotocol	c-src/etags.c	2473
+optheader	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
 option	c-src/getopt.h	73
 optional_argument	c-src/getopt.h	91
-opvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
+optx\defoptheader	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
+optype	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
+optype	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{\\defoptype{} on #1}%$/
+opvarparsebody\Edefcv	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
+opx\defopheader	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
 ord_add_element	prol-src/ordsets.prolog	/^ord_add_element([], Element, [Element]).$/
 ord_del_element	prol-src/ordsets.prolog	/^ord_del_element([], _, []).$/
 ord_disjoint	prol-src/ordsets.prolog	/^ord_disjoint(Set1, Set2) :-$/
@@ -3855,8 +3879,25 @@ pMd	c-src/emacs/src/lisp.h	155
 pMu	c-src/emacs/src/lisp.h	151
 pMu	c-src/emacs/src/lisp.h	156
 p_next	c-src/etags.c	258
+page	tex-src/texinfo.tex	/^\\def\\page{\\par\\vfill\\supereject}$/
+page	tex-src/texinfo.tex	/^   \\def\\page{%$/
+page	tex-src/texinfo.tex	/^      \\let\\page = \\oldpage$/
+pagealignmacro	tex-src/texinfo.tex	/^\\global\\let\\pagealignmacro=\\chappager}$/
+pagealignmacro	tex-src/texinfo.tex	/^\\global\\let\\pagealignmacro=\\chappager$/
+pagealignmacro	tex-src/texinfo.tex	/^\\global\\let\\pagealignmacro=\\chapoddpage$/
+pagebody	tex-src/texinfo.tex	/^\\def\\pagebody#1{\\vbox to\\pageheight{\\boxmaxdepth=\\/
+pagecontents	tex-src/texinfo.tex	/^\\gdef\\pagecontents#1{\\ifvoid\\topins\\else\\unvbox\\to/
 pagesize	c-src/emacs/src/gmalloc.c	1703
+pagesofar	tex-src/texinfo.tex	/^\\def\\pagesofar{\\unvbox\\partialpage %$/
 pair	merc-src/accumulator.m	/^:- import_module pair.$/
+par	tex-src/texinfo.tex	/^{\\let\\par=\\endgraf \\smallbreak}%$/
+par	tex-src/texinfo.tex	/^\\let\\par=\\lisppar$/
+par	tex-src/texinfo.tex	/^\\let\\par=\\lisppar$/
+par	tex-src/texinfo.tex	/^\\let\\par=\\lisppar$/
+par	tex-src/texinfo.tex	/^\\let\\par=\\lisppar$/
+par	tex-src/texinfo.tex	/^\\let\\par=\\lisppar$/
+par	tex-src/texinfo.tex	/^\\let\\par=\\lisppar$/
+paragraphindent	tex-src/texinfo.tex	/^\\let\\paragraphindent=\\comment$/
 parent	c-src/emacs/src/keyboard.c	8745
 parent	c-src/emacs/src/lisp.h	1590
 parse	prol-src/natded.prolog	/^parse(Ws,Cat):-$/
@@ -3875,8 +3916,20 @@ parse_return_error	y-src/cccp.y	70
 parse_solitary_modifier	c-src/emacs/src/keyboard.c	/^parse_solitary_modifier (Lisp_Object symbol)$/
 parse_tool_bar_item	c-src/emacs/src/keyboard.c	/^parse_tool_bar_item (Lisp_Object key, Lisp_Object /
 parse_tree	merc-src/accumulator.m	/^:- import_module parse_tree.$/
+parsearg	tex-src/texinfo.tex	/^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/
+parseargdiscardspace	tex-src/texinfo.tex	/^\\gdef\\parseargdiscardspace {\\begingroup\\obeylines\\/
+parseargline	tex-src/texinfo.tex	/^\\def\\parseargline{\\begingroup \\obeylines \\parsearg/
+parsearglinex	tex-src/texinfo.tex	/^\\gdef\\parsearglinex #1^^M{\\endgroup \\next {#1}}}$/
+parseargx	tex-src/texinfo.tex	/^\\def\\parseargx{%$/
+parsebody\Edefmac	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
+parsebody\Edefspec	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
+parsebody\Edeftypefun	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
+parsebody\Edefun	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
 pat	c-src/etags.c	262
 pattern	c-src/etags.c	260
+pchapsepmacro	tex-src/texinfo.tex	/^\\global\\let\\pchapsepmacro=\\chapbreak$/
+pchapsepmacro	tex-src/texinfo.tex	/^\\global\\let\\pchapsepmacro=\\chappager$/
+pchapsepmacro	tex-src/texinfo.tex	/^\\global\\let\\pchapsepmacro=\\chapoddpage$/
 pdlcount	c-src/emacs/src/lisp.h	3046
 pending-delete-mode	el-src/TAGTEST.EL	/^(defalias 'pending-delete-mode 'delete-selection-m/
 pending_funcalls	c-src/emacs/src/keyboard.c	4377
@@ -3884,16 +3937,19 @@ pending_signals	c-src/emacs/src/keyboard.c	80
 pfatal	c-src/etags.c	/^pfatal (const char *s1)$/
 pfdset	c-src/h.h	57
 pfnote	c-src/etags.c	/^pfnote (char *name, bool is_func, char *linestart,/
+pindex	tex-src/texinfo.tex	/^\\def\\pindex {\\pgindex}$/
 pinned	c-src/emacs/src/lisp.h	679
 plain_C_entries	c-src/etags.c	/^plain_C_entries (FILE *inf)$/
 plain_C_suffixes	c-src/etags.c	643
 plainc	c-src/etags.c	2934
+plainsecheading	tex-src/texinfo.tex	/^\\def\\plainsecheading #1{\\secheadingi {#1}}$/
 plist	c-src/emacs/src/lisp.h	697
 plist	c-src/emacs/src/lisp.h	2040
 plus	cp-src/functions.cpp	/^void Date::plus ( int days , int month , int year /
 plus	go-src/test1.go	5
 plusvalseq	prol-src/natded.prolog	/^plusvalseq([]) --> [].$/
 point	forth-src/test-forth.fth	/^BEGIN-STRUCTURE point \\ create the named structure/
+point	tex-src/texinfo.tex	/^\\def\\point{$\\star$}$/
 pointer	c-src/emacs/src/lisp.h	2125
 poll_for_input	c-src/emacs/src/keyboard.c	/^poll_for_input (struct atimer *timer)$/
 poll_for_input_1	c-src/emacs/src/keyboard.c	/^poll_for_input_1 (void)$/
@@ -3944,10 +4000,18 @@ prev	c.c	175
 prev	c-src/emacs/src/gmalloc.c	165
 prev	c-src/emacs/src/gmalloc.c	189
 prev	c-src/emacs/src/lisp.h	2191
+primary	tex-src/texinfo.tex	/^\\def\\primary #1{\\line{#1\\hfil}}$/
+print	tex-src/texinfo.tex	/^\\def\\print{\\realbackslash print}$/
+print	tex-src/texinfo.tex	/^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/
 printClassification	php-src/lce_functions.php	/^      function printClassification()$/
 print_help	c-src/etags.c	/^print_help (argument *argbuffer)$/
 print_language_names	c-src/etags.c	/^print_language_names (void)$/
 print_version	c-src/etags.c	/^print_version (void)$/
+printedmanual	tex-src/texinfo.tex	/^\\def\\printedmanual{\\ignorespaces #5}%$/
+printedmanual	tex-src/texinfo.tex	/^section ``\\printednodename'' in \\cite{\\printedmanu/
+printednodename	tex-src/texinfo.tex	/^\\def\\printednodename{\\ignorespaces #3}%$/
+printednodename	tex-src/texinfo.tex	/^\\def\\printednodename{\\ignorespaces #1}%$/
+printindex	tex-src/texinfo.tex	/^\\def\\printindex{\\parsearg\\doprintindex}$/
 printmax_t	c-src/emacs/src/lisp.h	148
 printmax_t	c-src/emacs/src/lisp.h	153
 proc	c-src/h.h	87
@@ -3962,6 +4026,21 @@ prolog_pr	c-src/etags.c	/^prolog_pr (char *s, char *last)$/
 prolog_skip_comment	c-src/etags.c	/^prolog_skip_comment (linebuffer *plb, FILE *inf)$/
 prop	c-src/etags.c	209
 protect_malloc_state	c-src/emacs/src/gmalloc.c	/^protect_malloc_state (int protect_p)$/
+ptexL	tex-src/texinfo.tex	/^\\let\\ptexL=\\L$/
+ptexb	tex-src/texinfo.tex	/^\\let\\ptexb=\\b$/
+ptexbullet	tex-src/texinfo.tex	/^\\let\\ptexbullet=\\bullet$/
+ptexc	tex-src/texinfo.tex	/^\\let\\ptexc=\\c$/
+ptexdot	tex-src/texinfo.tex	/^\\let\\ptexdot=\\.$/
+ptexdots	tex-src/texinfo.tex	/^\\let\\ptexdots=\\dots$/
+ptexend	tex-src/texinfo.tex	/^\\let\\ptexend=\\end$/
+ptexequiv	tex-src/texinfo.tex	/^\\let\\ptexequiv = \\equiv$/
+ptexfootnote	tex-src/texinfo.tex	/^\\let\\ptexfootnote=\\footnote$/
+ptexi	tex-src/texinfo.tex	/^\\let\\ptexi=\\i$/
+ptexl	tex-src/texinfo.tex	/^\\let\\ptexl=\\l$/
+ptexlbrace	tex-src/texinfo.tex	/^\\let\\ptexlbrace=\\{$/
+ptexrbrace	tex-src/texinfo.tex	/^\\let\\ptexrbrace=\\}$/
+ptexstar	tex-src/texinfo.tex	/^\\let\\ptexstar=\\*$/
+ptext	tex-src/texinfo.tex	/^\\let\\ptext=\\t$/
 pthread_mutexattr_setprio_ceiling/f	ada-src/2ataspri.adb	/^   function pthread_mutexattr_setprio_ceiling$/
 pthread_mutexattr_setprotocol/f	ada-src/2ataspri.adb	/^   function pthread_mutexattr_setprotocol$/
 purpose	c-src/emacs/src/lisp.h	1594
@@ -3969,14 +4048,20 @@ push_kboard	c-src/emacs/src/keyboard.c	/^push_kboard (struct kboard *k)$/
 pushclass_above	c-src/etags.c	/^pushclass_above (int bracelev, char *str, int len)/
 put_entries	c-src/etags.c	/^put_entries (register node *np)$/
 pvec_type	c-src/emacs/src/lisp.h	780
+pxref	tex-src/texinfo.tex	/^\\def\\pxref#1{see \\xrefX[#1,,,,,,,]}$/
 quantizing	html-src/algrthms.html	/^Quantizing the Received$/
 questo	../c/c.web	34
 quiettest	make-src/Makefile	/^quiettest:$/
 quit_char	c-src/emacs/src/keyboard.c	192
 quit_throw_to_read_char	c-src/emacs/src/keyboard.c	/^quit_throw_to_read_char (bool from_signal)$/
+quotation	tex-src/texinfo.tex	/^\\def\\quotation{%$/
 qux	ruby-src/test1.ru	/^    alias_method :qux, :tee, attr_accessor(:bogus)/
 qux1	ruby-src/test1.ru	/^                :qux1)$/
 qux=	ruby-src/test1.ru	/^      def qux=(tee)$/
+r	tex-src/texinfo.tex	/^\\def\\r#1{{\\rm #1}}		% roman font$/
+r	tex-src/texinfo.tex	/^\\def\\r##1{\\realbackslash r {##1}}%$/
+r	tex-src/texinfo.tex	/^\\let\\r=\\indexdummyfont$/
+r	tex-src/texinfo.tex	/^\\def\\r##1{\\realbackslash r {##1}}$/
 r0	c-src/sysdep.h	54
 r1	c-src/sysdep.h	55
 r_alloc	c-src/emacs/src/lisp.h	/^extern void *r_alloc (void **, size_t) ATTRIBUTE_A/
@@ -3984,6 +4069,10 @@ range_exp	y-src/parse.y	269
 range_exp_list	y-src/parse.y	273
 raw_keybuf	c-src/emacs/src/keyboard.c	116
 raw_keybuf_count	c-src/emacs/src/keyboard.c	117
+rawbackslash	tex-src/texinfo.tex	/^\\let\\rawbackslash=\\relax%$/
+rawbackslashxx	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/
+rawbackslashxx	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}%$/
+rbrb	tex-src/texinfo.tex	/^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/
 rbtp	c.c	240
 re_iswctype	c-src/emacs/src/regex.h	602
 re_nsub	c-src/emacs/src/regex.h	364
@@ -4015,6 +4104,7 @@ read_key_sequence_vs	c-src/emacs/src/keyboard.c	/^read_key_sequence_vs (Lisp_Obj
 read_menu_command	c-src/emacs/src/keyboard.c	/^read_menu_command (void)$/
 read_toc	perl-src/htlmify-cystic	/^sub read_toc ()$/
 readable_events	c-src/emacs/src/keyboard.c	/^readable_events (int flags)$/
+readauxfile	tex-src/texinfo.tex	/^\\def\\readauxfile{%$/
 readline	c-src/etags.c	/^readline (linebuffer *lbp, FILE *stream)$/
 readline_internal	c-src/etags.c	/^readline_internal (linebuffer *lbp, register FILE /
 realloc	c-src/emacs/src/gmalloc.c	65
@@ -4039,7 +4129,10 @@ recursive_edit_unwind	c-src/emacs/src/keyboard.c	/^recursive_edit_unwind (Lisp_O
 redirect	c-src/emacs/src/lisp.h	663
 reduce	prol-src/natded.prolog	/^reduce((X^M)@N,L):-     % beta reduction$/
 reduce_subterm	prol-src/natded.prolog	/^reduce_subterm(M,M2):-$/
+ref	tex-src/texinfo.tex	/^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/
+refill	tex-src/texinfo.tex	/^\\let\\refill=\\relax$/
 refreshPort	pyt-src/server.py	/^    def refreshPort(self):$/
+refx	tex-src/texinfo.tex	/^\\def\\refx#1#2{%$/
 reg_errcode_t	c.c	279
 reg_errcode_t	c-src/emacs/src/regex.h	323
 reg_syntax_t	c-src/emacs/src/regex.h	43
@@ -4070,8 +4163,12 @@ requeued_events_pending_p	c-src/emacs/src/keyboard.c	/^requeued_events_pending_p
 require	merc-src/accumulator.m	/^:- import_module require.$/
 required_argument	c-src/getopt.h	90
 reset-this-command-lengths	c-src/emacs/src/keyboard.c	/^DEFUN ("reset-this-command-lengths", Freset_this_c/
+resetmathfonts	tex-src/texinfo.tex	/^\\def\\resetmathfonts{%$/
+rest	tex-src/texinfo.tex	/^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/
 restore_getcjmp	c-src/emacs/src/keyboard.c	/^restore_getcjmp (sys_jmp_buf temp)$/
 restore_kboard_configuration	c-src/emacs/src/keyboard.c	/^restore_kboard_configuration (int was_locked)$/
+result	tex-src/texinfo.tex	/^\\def\\result{\\realbackslash result}$/
+result	tex-src/texinfo.tex	/^\\def\\result{\\leavevmode\\raise.15ex\\hbox to 1em{\\hf/
 return_to_command_loop	c-src/emacs/src/keyboard.c	135
 reverse	prol-src/natded.prolog	/^reverse([],Ws,Ws).$/
 revert	objc-src/PackInsp.m	/^-revert:sender$/
@@ -4079,6 +4176,8 @@ right	c-src/etags.c	216
 right_shift	y-src/cccp.y	/^right_shift (a, b)$/
 ring1	c.c	241
 ring2	c.c	242
+rm	tex-src/texinfo.tex	/^\\def\\rm{\\realbackslash rm }%$/
+rm	tex-src/texinfo.tex	/^      \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/
 rm_eo	c-src/emacs/src/regex.h	450
 rm_so	c-src/emacs/src/regex.h	449
 rng_base	cp-src/Range.h	79
@@ -4105,6 +4204,10 @@ safe_run_hook_funcall	c-src/emacs/src/keyboard.c	/^safe_run_hook_funcall (ptrdif
 safe_run_hooks	c-src/emacs/src/keyboard.c	/^safe_run_hooks (Lisp_Object hook)$/
 safe_run_hooks_1	c-src/emacs/src/keyboard.c	/^safe_run_hooks_1 (ptrdiff_t nargs, Lisp_Object *ar/
 safe_run_hooks_error	c-src/emacs/src/keyboard.c	/^safe_run_hooks_error (Lisp_Object error, ptrdiff_t/
+samp	tex-src/texinfo.tex	/^\\def\\samp #1{`\\tclose{#1}'\\null}$/
+samp	tex-src/texinfo.tex	/^\\def\\samp##1{\\realbackslash samp {##1}}%$/
+samp	tex-src/texinfo.tex	/^\\let\\samp=\\indexdummyfont$/
+samp	tex-src/texinfo.tex	/^\\def\\samp##1{\\realbackslash samp {##1}}$/
 save	pyt-src/server.py	/^    def save(self):$/
 save	pyt-src/server.py	/^    def save(self):$/
 save	pyt-src/server.py	/^    def save(self):$/
@@ -4113,13 +4216,28 @@ save_type	c-src/emacs/src/lisp.h	/^save_type (struct Lisp_Save_Value *v, int n)$
 savenstr	c-src/etags.c	/^savenstr (const char *cp, int len)$/
 savestr	c-src/etags.c	/^savestr (const char *cp)$/
 say	go-src/test.go	/^func say(msg string) {$/
+sc	tex-src/texinfo.tex	/^\\def\\sc#1{{\\smallcaps#1}}	% smallcaps font$/
+sc	tex-src/texinfo.tex	/^\\let\\sc=\\indexdummyfont$/
 scan_separators	c-src/etags.c	/^scan_separators (char *name)$/
 scolonseen	c-src/etags.c	2447
 scratch	c-src/sysdep.h	56
 scroll_bar_parts	c-src/emacs/src/keyboard.c	5189
-sec=\relax	tex-src/texinfo.tex	/^\\let\\appendixsec=\\relax$/
+sec	tex-src/texinfo.tex	/^\\global\\let\\section = \\appendixsec$/
+seccheck	tex-src/texinfo.tex	/^\\def\\seccheck#1{\\if \\pageno<0 %$/
+secentry	tex-src/texinfo.tex	/^      \\def\\secentry ##1##2##3##4{}$/
+secentry	tex-src/texinfo.tex	/^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/
+secentryfonts	tex-src/texinfo.tex	/^\\def\\secentryfonts{\\textfonts}$/
+secfonts	tex-src/texinfo.tex	/^\\def\\secfonts{%$/
+secheading	tex-src/texinfo.tex	/^\\def\\secheading #1#2#3{\\secheadingi {#2.#3\\enspace/
+secheadingbreak	tex-src/texinfo.tex	/^\\def\\secheadingbreak{\\dobreak \\secheadingskip {-10/
+secheadingi	tex-src/texinfo.tex	/^\\def\\secheadingi #1{{\\advance \\secheadingskip by \\/
+secondary	tex-src/texinfo.tex	/^\\def\\secondary #1#2{$/
 section	perl-src/htlmify-cystic	25
-section=\relax	tex-src/texinfo.tex	/^\\let\\appendixsection=\\relax$/
+section	tex-src/texinfo.tex	/^\\let\\section=\\relax$/
+section	tex-src/texinfo.tex	/^\\global\\let\\section = \\numberedsec$/
+section	tex-src/texinfo.tex	/^\\global\\let\\section = \\appendixsec$/
+section	tex-src/texinfo.tex	/^\\global\\let\\section = \\unnumberedsec$/
+section	tex-src/texinfo.tex	/^\\global\\let\\section = \\numberedsec$/
 section_href	perl-src/htlmify-cystic	/^sub section_href ($)$/
 section_name	perl-src/htlmify-cystic	12
 section_name	perl-src/htlmify-cystic	/^sub section_name ($)$/
@@ -4127,6 +4245,10 @@ section_toc	perl-src/htlmify-cystic	15
 section_url	perl-src/htlmify-cystic	/^sub section_url ()$/
 section_url_base	perl-src/htlmify-cystic	/^sub section_url_base ()$/
 section_url_name	perl-src/htlmify-cystic	/^sub section_url_name ()$/
+sectionzzz	tex-src/texinfo.tex	/^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/
+sectionzzz	tex-src/texinfo.tex	/^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/
+seczzz	tex-src/texinfo.tex	/^\\def\\seczzz #1{\\seccheck{section}%$/
+seczzz	tex-src/texinfo.tex	/^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/
 select	prol-src/natded.prolog	/^select(X,[X|Xs],Xs).$/
 select-tags-table	el-src/emacs/lisp/progmodes/etags.el	/^(defun select-tags-table ()$/
 select-tags-table-mode	el-src/emacs/lisp/progmodes/etags.el	/^(define-derived-mode select-tags-table-mode specia/
@@ -4137,9 +4259,11 @@ select_last	prol-src/natded.prolog	/^select_last([X],X,[]).$/
 send	objc-src/Subprocess.m	/^- send:(const char *)string withNewline:(BOOL)want/
 send	objc-src/Subprocess.m	/^- send:(const char *)string$/
 separator_names	c-src/emacs/src/keyboard.c	7372
+sepspaces	tex-src/texinfo.tex	/^\\gdef\\sepspaces{\\def {\\ }}}$/
 serializeToVars	php-src/lce_functions.php	/^      function serializeToVars($prefix)$/
 serializeToVars	php-src/lce_functions.php	/^      function serializeToVars($prefix)$/
 set	cp-src/conway.hpp	/^    void set(void) { alive = 1; }$/
+set	tex-src/texinfo.tex	/^\\def\\set{\\parsearg\\setxxx}$/
 set	merc-src/accumulator.m	/^:- import_module set.$/
 set-input-interrupt-mode	c-src/emacs/src/keyboard.c	/^DEFUN ("set-input-interrupt-mode", Fset_input_inte/
 set-input-meta-mode	c-src/emacs/src/keyboard.c	/^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/
@@ -4170,9 +4294,24 @@ set_symbol_next	c-src/emacs/src/lisp.h	/^set_symbol_next (Lisp_Object sym, struc
 set_symbol_plist	c-src/emacs/src/lisp.h	/^set_symbol_plist (Lisp_Object sym, Lisp_Object pli/
 set_upto	merc-src/accumulator.m	/^:- func set_upto(accu_case, int) = set(accu_goal_i/
 set_waiting_for_input	c-src/emacs/src/keyboard.c	/^set_waiting_for_input (struct timespec *time_to_cl/
+setchapternewpage	tex-src/texinfo.tex	/^\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcs/
+setchapterstyle	tex-src/texinfo.tex	/^\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname/
+setdeffont	tex-src/texinfo.tex	/^\\def\\setdeffont #1 {\\csname DEF#1\\endcsname}$/
+setfilename	tex-src/texinfo.tex	/^\\def\\setfilename{%$/
+setfilename	tex-src/texinfo.tex	/^   \\global\\let\\setfilename=\\comment % Ignore extra/
 setref	tex-src/texinfo.tex	/^\\expandafter\\expandafter\\expandafter\\appendixsetre/
+setref	tex-src/texinfo.tex	/^\\def\\setref#1{%$/
+settitle	tex-src/texinfo.tex	/^\\def\\settitle{\\parsearg\\settitlezzz}$/
+settitlezzz	tex-src/texinfo.tex	/^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/
 setup	cp-src/c.C	5
+setxxx	tex-src/texinfo.tex	/^\\def\\setxxx #1{$/
+sf	tex-src/texinfo.tex	/^\\def\\sf{\\fam=\\sffam \\tensf}$/
+sf	tex-src/texinfo.tex	/^\\def\\sf{\\realbackslash sf}%$/
+sf	tex-src/texinfo.tex	/^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/
 shift	cp-src/functions.cpp	/^void Date::shift ( void ){\/\/Shift this date to pre/
+shortchapentry	tex-src/texinfo.tex	/^\\def\\shortchapentry#1#2#3{%$/
+shortcontents	tex-src/texinfo.tex	/^\\let\\shortcontents = \\summarycontents$/
+shortunnumberedentry	tex-src/texinfo.tex	/^\\def\\shortunnumberedentry#1#2{%$/
 shouldLoad	objc-src/PackInsp.m	/^-(BOOL)shouldLoad$/
 should_attempt_accu_transform	merc-src/accumulator.m	/^:- pred should_attempt_accu_transform(module_info:/
 should_attempt_accu_transform_2	merc-src/accumulator.m	/^:- pred should_attempt_accu_transform_2(module_inf/
@@ -4190,6 +4329,9 @@ signal_handler_t	c-src/h.h	94
 simulation	html-src/software.html	/^Software that I wrote for supporting my research a/
 single_kboard	c-src/emacs/src/keyboard.c	89
 single_kboard_state	c-src/emacs/src/keyboard.c	/^single_kboard_state ()$/
+singlecodeindexer	tex-src/texinfo.tex	/^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/
+singleindexer	tex-src/texinfo.tex	/^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/
+singlespace	tex-src/texinfo.tex	/^\\def\\singlespace{%$/
 site	cp-src/conway.hpp	5
 site	cp-src/conway.hpp	/^    site(int xi, int yi): x(xi), y(yi), alive(0) {/
 size	c-src/etags.c	236
@@ -4203,20 +4345,45 @@ skeyseen	c-src/etags.c	2445
 skip_name	c-src/etags.c	/^skip_name (char *cp)$/
 skip_non_spaces	c-src/etags.c	/^skip_non_spaces (char *cp)$/
 skip_spaces	c-src/etags.c	/^skip_spaces (char *cp)$/
+sl	tex-src/texinfo.tex	/^\\def\\sl{\\realbackslash sl }%$/
+sl	tex-src/texinfo.tex	/^      \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/
+smallbook	tex-src/texinfo.tex	/^\\let\\smallbook=\\relax$/
+smallbook	tex-src/texinfo.tex	/^\\def\\smallbook{$/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/
+smallexample	tex-src/texinfo.tex	/^\\let\\smallexample=\\lisp$/
+smallexample	tex-src/texinfo.tex	/^\\global\\let\\smallexample=\\smalllispx$/
+smalllisp	tex-src/texinfo.tex	/^\\global\\let\\smalllisp=\\smalllispx$/
+smalllispx	tex-src/texinfo.tex	/^\\def\\smalllispx{\\aboveenvbreak\\begingroup\\inENV$/
+smartitalic	tex-src/texinfo.tex	/^\\def\\smartitalic#1{{\\sl #1}\\futurelet\\next\\smartit/
+smartitalicx	tex-src/texinfo.tex	/^\\def\\smartitalicx{\\ifx\\next,\\else\\ifx\\next-\\else\\i/
 snarf-tag-function	el-src/emacs/lisp/progmodes/etags.el	/^(defvar snarf-tag-function nil$/
 snone	c-src/etags.c	2443
 solutions	merc-src/accumulator.m	/^:- import_module solutions.$/
 some_mouse_moved	c-src/emacs/src/keyboard.c	/^some_mouse_moved (void)$/
+sp	tex-src/texinfo.tex	/^\\def\\sp{\\parsearg\\spxxx}$/
+space	tex-src/texinfo.tex	/^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/
 space	tex-src/texinfo.tex	/^    {#2\\labelspace #1}\\dotfill\\doshortpageno{#3}}%/
+space	tex-src/texinfo.tex	/^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/
+space	tex-src/texinfo.tex	/^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/
 space	tex-src/texinfo.tex	/^  \\dosubsubsecentry{#2.#3.#4.#5\\labelspace#1}{#6}}/
 spacer	c-src/emacs/src/lisp.h	1975
 spacer	c-src/emacs/src/lisp.h	1982
 spacer	c-src/emacs/src/lisp.h	2036
 spacer	c-src/emacs/src/lisp.h	2205
+spacesplit	tex-src/texinfo.tex	/^\\gdef\\spacesplit#1#2^^M{\\endgroup\\spacesplitfoo{#1/
+spacesplitfoo	tex-src/texinfo.tex	/^\\long\\gdef\\spacesplitfoo#1#2 #3#4\\spacesplitfoo{%$/
 specbind_tag	c-src/emacs/src/lisp.h	2943
 specbinding	c-src/emacs/src/lisp.h	2955
+specheader	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
 specialsymbol	prol-src/natded.prolog	/^specialsymbol(C1,C2,S):-$/
+specx\defspecheader	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
 splitexp	prol-src/natded.prolog	/^splitexp(E,E,('NIL','NIL')):-!.$/
+splitoff	tex-src/texinfo.tex	/^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/
+spxxx	tex-src/texinfo.tex	/^\\def\\spxxx #1{\\par \\vskip #1\\baselineskip}$/
 srclist	make-src/Makefile	/^srclist: Makefile$/
 ss3	c.c	255
 sss1	c.c	252
@@ -4248,6 +4415,8 @@ start	php-src/lce_functions.php	/^      function start($line, $class)$/
 start	y-src/cccp.y	143
 start_polling	c-src/emacs/src/keyboard.c	/^start_polling (void)$/
 start_up	prol-src/natded.prolog	/^start_up:-$/
+startcontents	tex-src/texinfo.tex	/^\\def\\startcontents#1{%$/
+startenumeration	tex-src/texinfo.tex	/^\\def\\startenumeration#1{%$/
 state_protected_p	c-src/emacs/src/gmalloc.c	400
 statetable	html-src/algrthms.html	/^Next$/
 staticetags	make-src/Makefile	/^staticetags:$/
@@ -4267,24 +4436,61 @@ stripLine	php-src/lce_functions.php	/^      function stripLine($line, $class)$/
 stripname	pas-src/common.pas	/^function stripname; (* ($/
 strncaseeq	c-src/etags.c	/^#define strncaseeq(s,t,n) (assert ((s)!=NULL && (t/
 strneq	c-src/etags.c	/^#define strneq(s,t,n)	(assert ((s)!=NULL || (t)!=N/
+strong	tex-src/texinfo.tex	/^\\let\\strong=\\b$/
+strong	tex-src/texinfo.tex	/^\\let\\strong=\\indexdummyfont$/
 structdef	c-src/etags.c	2448
 stuff_buffered_input	c-src/emacs/src/keyboard.c	/^stuff_buffered_input (Lisp_Object stuffstring)$/
+subheading	tex-src/texinfo.tex	/^\\def\\subheading{\\parsearg\\subsecheadingi}$/
 subprocess	objc-src/PackInsp.m	/^-subprocess:(Subprocess *)sender output:(char *)bu/
 subprocessDone	objc-src/PackInsp.m	/^-subprocessDone:(Subprocess *)sender$/
-subsec=\relax	tex-src/texinfo.tex	/^\\let\\appendixsubsec=\\relax$/
+subsec	tex-src/texinfo.tex	/^\\let\\subsec=\\relax$/
+subsec	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\appendixsubsec$/
+subsecentry	tex-src/texinfo.tex	/^      \\def\\subsecentry ##1##2##3##4##5{}$/
+subsecentry	tex-src/texinfo.tex	/^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/
+subsecentryfonts	tex-src/texinfo.tex	/^\\let\\subsecentryfonts = \\textfonts$/
+subsecfonts	tex-src/texinfo.tex	/^\\def\\subsecfonts{%$/
+subsecheading	tex-src/texinfo.tex	/^\\def\\subsecheading #1#2#3#4{\\subsecheadingi {#2.#3/
+subsecheadingbreak	tex-src/texinfo.tex	/^\\def\\subsecheadingbreak{\\dobreak \\subsecheadingski/
+subsecheadingi	tex-src/texinfo.tex	/^\\def\\subsecheadingi #1{{\\advance \\subsecheadingski/
 subsection	perl-src/htlmify-cystic	26
-subsection=\relax	tex-src/texinfo.tex	/^\\let\\appendixsubsection=\\relax$/
+subsection	tex-src/texinfo.tex	/^\\let\\subsection=\\relax$/
+subsection	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\numberedsubsec$/
+subsection	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\appendixsubsec$/
+subsection	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\unnumberedsubsec$/
+subsection	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\numberedsubsec$/
 subsection_marker	perl-src/htlmify-cystic	161
+subseczzz	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsec{\\parsearg\\appendixsubsec/
+subseczzz	tex-src/texinfo.tex	/^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/
 subst	prol-src/natded.prolog	/^subst(var(Y),var(X),M,N):-$/
 substitute	c-src/etags.c	/^substitute (char *in, char *out, struct re_registe/
-subsubsec=\relax	tex-src/texinfo.tex	/^\\let\\appendixsubsubsec=\\relax$/
+subsubheading	tex-src/texinfo.tex	/^\\def\\subsubheading{\\parsearg\\subsubsecheadingi}$/
+subsubsec	tex-src/texinfo.tex	/^\\let\\subsubsec=\\relax$/
+subsubsec	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\appendixsubsubsec$/
+subsubsecentry	tex-src/texinfo.tex	/^      \\def\\subsubsecentry ##1##2##3##4##5##6{}$/
+subsubsecentry	tex-src/texinfo.tex	/^\\def\\subsubsecentry#1#2#3#4#5#6{%$/
+subsubsecentryfonts	tex-src/texinfo.tex	/^\\let\\subsubsecentryfonts = \\textfonts$/
+subsubsecfonts	tex-src/texinfo.tex	/^\\def\\subsubsecfonts{\\subsecfonts} % Maybe this sho/
+subsubsecheading	tex-src/texinfo.tex	/^\\def\\subsubsecheading #1#2#3#4#5{\\subsubsecheading/
+subsubsecheadingi	tex-src/texinfo.tex	/^\\def\\subsubsecheadingi #1{{\\advance \\subsecheading/
 subsubsection	perl-src/htlmify-cystic	27
-subsubsection=\relax	tex-src/texinfo.tex	/^\\let\\appendixsubsubsection=\\relax$/
+subsubsection	tex-src/texinfo.tex	/^\\let\\subsubsection=\\relax$/
+subsubsection	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\numberedsubsubsec$/
+subsubsection	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\appendixsubsubsec$/
+subsubsection	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\unnumberedsubsubsec$/
+subsubsection	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\numberedsubsubsec$/
+subsubseczzz	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/
+subsubseczzz	tex-src/texinfo.tex	/^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/
+subtitle	tex-src/texinfo.tex	/^   \\def\\subtitle{\\parsearg\\subtitlezzz}%$/
+subtitlefont	tex-src/texinfo.tex	/^   \\def\\subtitlefont{\\subtitlerm \\normalbaselinesk/
+subtitlerm	tex-src/texinfo.tex	/^   \\let\\subtitlerm=\\tenrm$/
+subtitlezzz	tex-src/texinfo.tex	/^   \\def\\subtitlezzz##1{{\\subtitlefont \\rightline{#/
 subtle	ruby-src/test1.ru	/^                 :tee ; attr_reader :subtle$/
 subtree	prol-src/natded.prolog	/^subtree(T,T).$/
 suffix	c-src/etags.c	186
 suffixes	c-src/etags.c	195
 suggest_asking_for_help	c-src/etags.c	/^suggest_asking_for_help (void)$/
+summarycontents	tex-src/texinfo.tex	/^\\outer\\def\\summarycontents{%$/
+supereject	tex-src/texinfo.tex	/^\\def\\supereject{\\par\\penalty -20000\\footnoteno =0 /
 suspend-emacs	c-src/emacs/src/keyboard.c	/^DEFUN ("suspend-emacs", Fsuspend_emacs, Ssuspend_e/
 sval	y-src/cccp.y	116
 swallow_events	c-src/emacs/src/keyboard.c	/^swallow_events (bool do_display)$/
@@ -4299,6 +4505,8 @@ syms_of_abbrev	c-src/abbrev.c	/^syms_of_abbrev ()$/
 syms_of_keyboard	c-src/emacs/src/keyboard.c	/^syms_of_keyboard (void)$/
 synchronize_system_messages_locale	c-src/emacs/src/lisp.h	/^INLINE void synchronize_system_messages_locale (vo/
 synchronize_system_time_locale	c-src/emacs/src/lisp.h	/^INLINE void synchronize_system_time_locale (void) /
+syncodeindex	tex-src/texinfo.tex	/^\\def\\syncodeindex #1 #2 {%$/
+synindex	tex-src/texinfo.tex	/^\\def\\synindex #1 #2 {%$/
 syntax	c-src/emacs/src/regex.h	350
 sys_jmp_buf	c-src/emacs/src/lisp.h	2906
 sys_jmp_buf	c-src/emacs/src/lisp.h	2910
@@ -4311,12 +4519,20 @@ sys_setjmp	c-src/emacs/src/lisp.h	/^# define sys_setjmp(j) sigsetjmp (j, 0)$/
 sys_setjmp	c-src/emacs/src/lisp.h	/^# define sys_setjmp(j) setjmp (j)$/
 syscall_error	c-src/sysdep.h	34
 t	cp-src/c.C	52
+t	tex-src/texinfo.tex	/^\\def\\t#1{{\\tt \\exhyphenpenalty=10000\\rawbackslash /
+t	tex-src/texinfo.tex	/^\\def\\t##1{\\realbackslash r {##1}}%$/
+t	tex-src/texinfo.tex	/^\\let\\t=\\indexdummyfont$/
+t	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
 t1	cp-src/c.C	34
 t2	cp-src/c.C	38
 tab_count_words	c-src/tab.c	/^int			tab_count_words(char **tab)$/
 tab_delete_first	c-src/tab.c	/^int			tab_delete_first(char **tab)$/
 tab_fill	c-src/tab.c	/^char			**tab_fill(char *str, char delim)$/
 tab_free	c-src/tab.c	/^void			tab_free(char **tab)$/
+table	tex-src/texinfo.tex	/^\\def\\table{\\begingroup\\inENV\\obeylines\\obeyspaces\\/
+tablex	tex-src/texinfo.tex	/^\\gdef\\tablex #1^^M{%$/
+tabley	tex-src/texinfo.tex	/^\\gdef\\tabley#1#2 #3 #4 #5 #6 #7\\endtabley{\\endgrou/
+tablez	tex-src/texinfo.tex	/^\\def\\tablez #1#2#3#4#5#6{%$/
 tag-any-match-p	el-src/emacs/lisp/progmodes/etags.el	/^(defun tag-any-match-p (_tag)$/
 tag-exact-file-name-match-p	el-src/emacs/lisp/progmodes/etags.el	/^(defun tag-exact-file-name-match-p (tag)$/
 tag-exact-match-p	el-src/emacs/lisp/progmodes/etags.el	/^(defun tag-exact-match-p (tag)$/
@@ -4395,12 +4611,79 @@ tags-tag-face	el-src/emacs/lisp/progmodes/etags.el	/^(defcustom tags-tag-face 'd
 tags-verify-table	el-src/emacs/lisp/progmodes/etags.el	/^(defun tags-verify-table (file)$/
 tags-with-face	el-src/emacs/lisp/progmodes/etags.el	/^(defmacro tags-with-face (face &rest body)$/
 target_multibyte	c-src/emacs/src/regex.h	407
+tclose	tex-src/texinfo.tex	/^\\def\\tclose#1{{\\rm \\tcloserm=\\fontdimen2\\font \\tt /
+tclose	tex-src/texinfo.tex	/^\\def\\tclose##1{\\realbackslash tclose {##1}}%$/
+tclose	tex-src/texinfo.tex	/^\\let\\tclose=\\indexdummyfont$/
+tclose	tex-src/texinfo.tex	/^\\def\\tclose##1{\\realbackslash tclose {##1}}$/
 tcpdump	html-src/software.html	/^tcpdump$/
 teats	cp-src/c.C	127
 tee	ruby-src/test1.ru	/^    attr_accessor :tee$/
 tee=	ruby-src/test1.ru	/^    attr_accessor :tee$/
+temp	tex-src/texinfo.tex	/^\\expandafter\\ifx\\csname IF#1\\endcsname\\relax \\let\\/
+temp	tex-src/texinfo.tex	/^\\else \\let\\temp=\\relax \\fi$/
+temp	tex-src/texinfo.tex	/^\\expandafter\\ifx\\csname IF#1\\endcsname\\relax \\let\\/
+temp	tex-src/texinfo.tex	/^\\else \\let\\temp=\\ifclearfail \\fi$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{%$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{%$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash chapentry {#1}{\\the\\cha/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash chapentry $/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash unnumbchapentry {#1}{\\n/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash secentry %$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash secentry %$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash unnumbsecentry{#1}{\\noe/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash subsecentry %$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash subsecentry %$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash unnumbsubsecentry{#1}{\\/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash subsubsecentry %$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash subsubsecentry{#1}%$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash unnumbsubsubsecentry{#1/
+temp1	tex-src/texinfo.tex	/^\\xdef\\temp1{#2}%$/
+temp1	tex-src/texinfo.tex	/^\\xdef\\temp1{#2 #3}%$/
 temporarily_switch_to_single_kboard	c-src/emacs/src/keyboard.c	/^temporarily_switch_to_single_kboard (struct frame /
+tenbf	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/
 tend	c-src/etags.c	2432
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\textsf \\let\\teni=\\texti \\let\\tensy=\\/
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\chapsf \\let\\teni=\\chapi \\let\\tensy=\\/
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\secsf \\let\\teni=\\seci \\let\\tensy=\\se/
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\ssecsf \\let\\teni=\\sseci \\let\\tensy=\\/
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\tensy=\\in/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\textrm \\let\\tenit=\\textit \\let\\tensl/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\chaprm \\let\\tenit=\\chapit \\let\\tensl/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\secrm \\let\\tenit=\\secit \\let\\tensl=\\/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\ssecrm \\let\\tenit=\\ssecit \\let\\tensl/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\indrm \\let\\tenit=\\indit \\let\\tensl=\\/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\textrm \\let\\tenit=\\textit \\let\\tensl/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\chaprm \\let\\tenit=\\chapit \\let\\tensl/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\secrm \\let\\tenit=\\secit \\let\\tensl=\\/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\ssecrm \\let\\tenit=\\ssecit \\let\\tensl/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\indrm \\let\\tenit=\\indit \\let\\tensl=\\/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\textsf \\let\\teni=\\texti \\let\\tensy=\\/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\chapsf \\let\\teni=\\chapi \\let\\tensy=\\/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\secsf \\let\\teni=\\seci \\let\\tensy=\\se/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\ssecsf \\let\\teni=\\sseci \\let\\tensy=\\/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\tensy=\\in/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\textrm \\let\\tenit=\\textit \\let\\tensl/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\chaprm \\let\\tenit=\\chapit \\let\\tensl/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\secrm \\let\\tenit=\\secit \\let\\tensl=\\/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\ssecrm \\let\\tenit=\\ssecit \\let\\tensl/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\indrm \\let\\tenit=\\indit \\let\\tensl=\\/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\textsf \\let\\teni=\\texti \\let\\tensy=\\/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\chapsf \\let\\teni=\\chapi \\let\\tensy=\\/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\secsf \\let\\teni=\\seci \\let\\tensy=\\se/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\ssecsf \\let\\teni=\\sseci \\let\\tensy=\\/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\tensy=\\in/
+tentt	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/
+tentt	tex-src/texinfo.tex	/^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/
 term	merc-src/accumulator.m	/^:- import_module term.$/
 terminate	objc-src/Subprocess.m	/^- terminate:sender$/
 terminateInput	objc-src/Subprocess.m	/^- terminateInput$/
@@ -4415,7 +4698,12 @@ test.me22b	lua-src/test.lua	/^   local function test.me22b (one)$/
 test.me_22a	lua-src/test.lua	/^   function test.me_22a(one, two)$/
 test1	rs-src/test.rs	/^fn test1() {$/
 test_undefined	c-src/emacs/src/keyboard.c	/^test_undefined (Lisp_Object binding)$/
+tex	tex-src/texinfo.tex	/^\\def\\tex{\\begingroup$/
+texinfoversion	tex-src/texinfo.tex	/^\\def\\texinfoversion{2.73}$/
+textfonts	tex-src/texinfo.tex	/^\\def\\textfonts{%$/
 texttreelist	prol-src/natded.prolog	/^texttreelist([]).$/
+thearg	tex-src/texinfo.tex	/^  \\def\\thearg{#1}%$/
+thearg	tex-src/texinfo.tex	/^  \\ifx\\thearg\\empty \\def\\thearg{1}\\fi$/
 there-is-a-=-in-the-middle!	scm-src/test.scm	/^(define (there-is-a-=-in-the-middle!) #t)$/
 this	c-src/a/b/b.c	1
 this-command-keys	c-src/emacs/src/keyboard.c	/^DEFUN ("this-command-keys", Fthis_command_keys, St/
@@ -4427,6 +4715,36 @@ this_command_key_count_reset	c-src/emacs/src/keyboard.c	112
 this_command_keys	c-src/emacs/src/keyboard.c	107
 this_file_toc	perl-src/htlmify-cystic	29
 this_single_command_key_start	c-src/emacs/src/keyboard.c	125
+thischapter	tex-src/texinfo.tex	/^\\def\\thischapter{} \\def\\thissection{}$/
+thischapter	tex-src/texinfo.tex	/^\\xdef\\thischapter{Chapter \\the\\chapno: \\noexpand\\t/
+thischapter	tex-src/texinfo.tex	/^\\xdef\\thischapter{Appendix \\appendixletter: \\noexp/
+thischapter	tex-src/texinfo.tex	/^\\gdef\\thischapter{#1}\\gdef\\thissection{#1}%$/
+thischapter	tex-src/texinfo.tex	/^   \\unnumbchapmacro{#1}\\def\\thischapter{}%$/
+thischaptername	tex-src/texinfo.tex	/^\\def\\thischaptername{No Chapter Title}$/
+thischaptername	tex-src/texinfo.tex	/^\\gdef\\thischaptername{#1}%$/
+thischaptername	tex-src/texinfo.tex	/^\\gdef\\thischaptername{#1}%$/
+thisfile	tex-src/texinfo.tex	/^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/
+thisfile	tex-src/texinfo.tex	/^\\def\\thisfile{}$/
+thisfootno	tex-src/texinfo.tex	/^\\edef\\thisfootno{$^{\\the\\footnoteno}$}%$/
+thispage	tex-src/texinfo.tex	/^\\let\\thispage=\\folio$/
+thissection	tex-src/texinfo.tex	/^\\def\\thischapter{} \\def\\thissection{}$/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}%$/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}%$/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thischapter{#1}\\gdef\\thissection{#1}%$/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\secheading {#1}{\\the\\chapno}/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\secheading {#1}{\\appendixlet/
+thissection	tex-src/texinfo.tex	/^\\plainsecheading {#1}\\gdef\\thissection{#1}%$/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\subsubsecno=0 \\global\\advanc/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\subsubsecno=0 \\global\\advanc/
+thissection	tex-src/texinfo.tex	/^\\plainsecheading {#1}\\gdef\\thissection{#1}%$/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\global\\advance \\subsubsecno /
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\global\\advance \\subsubsecno /
+thissection	tex-src/texinfo.tex	/^\\plainsecheading {#1}\\gdef\\thissection{#1}%$/
+thistitle	tex-src/texinfo.tex	/^\\def\\thistitle{No Title}$/
+thistitle	tex-src/texinfo.tex	/^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/
+three	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
+threex	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
+tie	tex-src/texinfo.tex	/^\\def\\tie{\\penalty 10000\\ }     % Save plain tex de/
 tignore	c-src/etags.c	2433
 timer_check	c-src/emacs/src/keyboard.c	/^timer_check (void)$/
 timer_check_2	c-src/emacs/src/keyboard.c	/^timer_check_2 (Lisp_Object timers, Lisp_Object idl/
@@ -4437,9 +4755,16 @@ timer_start_idle	c-src/emacs/src/keyboard.c	/^timer_start_idle (void)$/
 timer_stop_idle	c-src/emacs/src/keyboard.c	/^timer_stop_idle (void)$/
 timers_run	c-src/emacs/src/keyboard.c	320
 tinbody	c-src/etags.c	2431
+tindex	tex-src/texinfo.tex	/^\\def\\tindex {\\tpindex}$/
+title	tex-src/texinfo.tex	/^   \\def\\title{\\parsearg\\titlezzz}%$/
+titlefont	tex-src/texinfo.tex	/^\\def\\titlefont#1{{\\titlerm #1}}$/
+titlepage	tex-src/texinfo.tex	/^\\let\\titlepage=\\relax$/
+titlepage	tex-src/texinfo.tex	/^\\def\\titlepage{\\begingroup \\parindent=0pt \\textfon/
+titlezzz	tex-src/texinfo.tex	/^   \\def\\titlezzz##1{\\leftline{\\titlefont{##1}}$/
 tkeyseen	c-src/etags.c	2429
 tnone	c-src/etags.c	2428
 toc_line	perl-src/htlmify-cystic	/^sub toc_line ($)$/
+today	tex-src/texinfo.tex	/^\\def\\today{\\number\\day\\space$/
 toggleDescription	objc-src/PackInsp.m	/^-toggleDescription$/
 tok	c-src/etags.c	2491
 token	c-src/etags.c	2508
@@ -4452,6 +4777,8 @@ tool_bar_item_properties	c-src/emacs/src/keyboard.c	7970
 tool_bar_items	c-src/emacs/src/keyboard.c	/^tool_bar_items (Lisp_Object reuse, int *nitems)$/
 tool_bar_items_vector	c-src/emacs/src/keyboard.c	7965
 toolkit_menubar_in_use	c-src/emacs/src/keyboard.c	/^toolkit_menubar_in_use (struct frame *f)$/
+top	tex-src/texinfo.tex	/^\\let\\top=\\relax$/
+top	tex-src/texinfo.tex	/^\\outer\\def\\top{\\parsearg\\unnumberedzzz}$/
 top-level	c-src/emacs/src/keyboard.c	/^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, /
 top_level	merc-src/accumulator.m	/^:- type top_level$/
 top_level_1	c-src/emacs/src/keyboard.c	/^top_level_1 (Lisp_Object ignore)$/
@@ -4460,17 +4787,26 @@ total_keys	c-src/emacs/src/keyboard.c	97
 total_size_of_entries	c-src/etags.c	/^total_size_of_entries (register node *np)$/
 total_surrounding	cp-src/conway.cpp	/^int site::total_surrounding(void)$/
 totally_unblock_input	c-src/emacs/src/keyboard.c	/^totally_unblock_input (void)$/
+tpargs	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{#1}\\deftpargs{#3}\\endgrou/
 tpcmd	c-src/h.h	8
 tpcmd	c-src/h.h	15
+tpheader	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
+tpx\deftpheader	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
 track-mouse	c-src/emacs/src/keyboard.c	/^DEFUN ("internal--track-mouse", Ftrack_mouse, Stra/
 tracking_off	c-src/emacs/src/keyboard.c	/^tracking_off (Lisp_Object old_value)$/
 traffic_light	cp-src/conway.cpp	/^void traffic_light(int x, int y)$/
 translate	c-src/emacs/src/regex.h	361
 treats	cp-src/c.C	131
 tt	prol-src/natded.prolog	/^tt:-$/
-tt=cmtt10	tex-src/texinfo.tex	/^\\font\\deftt=cmtt10 scaled \\magstep1$/
+tt	tex-src/texinfo.tex	/^\\font\\deftt=cmtt10 scaled \\magstep1$/
+tt	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
+tt	tex-src/texinfo.tex	/^\\def\\tt{\\realbackslash tt}%$/
+tt	tex-src/texinfo.tex	/^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/
+tt	tex-src/texinfo.tex	/^\\def\\tt{\\realbackslash tt}$/
+ttfont	tex-src/texinfo.tex	/^\\let\\ttfont = \\t$/
 tty_read_avail_input	c-src/emacs/src/keyboard.c	/^tty_read_avail_input (struct terminal *terminal,$/
 ttypeseen	c-src/etags.c	2430
+turnoffactive	tex-src/texinfo.tex	/^\\def\\turnoffactive{\\let"=\\normaldoublequote$/
 typdef	c-src/etags.c	2434
 type	c-src/etags.c	2271
 type	c-src/emacs/src/gmalloc.c	145
@@ -4485,10 +4821,22 @@ type	c-src/emacs/src/lisp.h	2296
 type	c-src/emacs/src/lisp.h	2304
 type	c-src/emacs/src/lisp.h	2364
 type	c-src/emacs/src/lisp.h	3025
+typefnheader	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
+typefnheaderx	tex-src/texinfo.tex	/^\\def\\deftypefnheader #1#2#3{\\deftypefnheaderx{#1}{/
+typefnx\deftypefnheader	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
 typefunargs	tex-src/texinfo.tex	/^\\deftypefunargs {#3}\\endgroup %$/
 typefunargs	tex-src/texinfo.tex	/^\\deftypefunargs {#4}\\endgroup %$/
+typefunheader	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
+typefunheaderx	tex-src/texinfo.tex	/^\\def\\deftypefunheader #1#2{\\deftypefunheaderx{#1}#/
+typefunx\deftypefunheader	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
+typemargin	tex-src/texinfo.tex	/^\\newskip\\deftypemargin \\deftypemargin=12pt$/
 typemargin	tex-src/texinfo.tex	/^\\newskip\\deftypemargin \\deftypemargin=12pt$/
+typemargin	tex-src/texinfo.tex	/^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/
 typemargin	tex-src/texinfo.tex	/^\\rlap{\\rightline{{\\rm #2}\\hskip \\deftypemargin}}}%/
+typevarheader	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
+typevarx\deftypevarheader	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
+typevrheader	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
+typevrx\deftypevrheader	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
 u	c-src/emacs/src/lisp.h	2397
 u_any	c-src/emacs/src/lisp.h	2214
 u_boolfwd	c-src/emacs/src/lisp.h	2371
@@ -4501,6 +4849,7 @@ u_marker	c-src/emacs/src/lisp.h	2216
 u_objfwd	c-src/emacs/src/lisp.h	2372
 u_overlay	c-src/emacs/src/lisp.h	2217
 u_save_value	c-src/emacs/src/lisp.h	2218
+unargs	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{#1}\\defunargs{#3}\\endgrou/
 unargs	tex-src/texinfo.tex	/^\\defunargs {#2}\\endgroup %$/
 unargs	tex-src/texinfo.tex	/^\\defunargs {#2}\\endgroup %$/
 unargs	tex-src/texinfo.tex	/^\\defunargs {#2}\\endgroup %$/
@@ -4510,7 +4859,37 @@ unblock_input	c-src/emacs/src/keyboard.c	/^unblock_input (void)$/
 unblock_input_to	c-src/emacs/src/keyboard.c	/^unblock_input_to (int level)$/
 unchar	c-src/h.h	99
 unexpand-abbrev	c-src/abbrev.c	/^DEFUN ("unexpand-abbrev", Funexpand_abbrev, Sunexp/
+unheader	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
 univ	merc-src/accumulator.m	/^:- import_module univ.$/
+unnchfopen	tex-src/texinfo.tex	/^\\def\\unnchfopen #1{%$/
+unnchfplain	tex-src/texinfo.tex	/^\\def\\unnchfplain #1{%$/
+unnumbchapentry	tex-src/texinfo.tex	/^      \\let\\unnumbchapentry = \\shortunnumberedentry/
+unnumbchapentry	tex-src/texinfo.tex	/^\\def\\unnumbchapentry#1#2{\\dochapentry{#1}{#2}}$/
+unnumbchapmacro	tex-src/texinfo.tex	/^\\global\\let\\unnumbchapmacro=\\unnchfplain}$/
+unnumbchapmacro	tex-src/texinfo.tex	/^\\global\\let\\unnumbchapmacro=\\unnchfopen}$/
+unnumbered	tex-src/texinfo.tex	/^\\let\\unnumbered=\\relax$/
+unnumbered	tex-src/texinfo.tex	/^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/
+unnumberedsec	tex-src/texinfo.tex	/^\\let\\unnumberedsec=\\relax$/
+unnumberedsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsec{\\parsearg\\unnumberedseczz/
+unnumberedsection	tex-src/texinfo.tex	/^\\let\\unnumberedsection=\\relax$/
+unnumberedseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedseczzz #1{\\seccheck{unnumberedsec}%/
+unnumberedsubsec	tex-src/texinfo.tex	/^\\let\\unnumberedsubsec=\\relax$/
+unnumberedsubsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsubsec{\\parsearg\\unnumberedsu/
+unnumberedsubsection	tex-src/texinfo.tex	/^\\let\\unnumberedsubsection=\\relax$/
+unnumberedsubseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedsubseczzz #1{\\seccheck{unnumberedsu/
+unnumberedsubsubsec	tex-src/texinfo.tex	/^\\let\\unnumberedsubsubsec=\\relax$/
+unnumberedsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsubsubsec{\\parsearg\\unnumbere/
+unnumberedsubsubsection	tex-src/texinfo.tex	/^\\let\\unnumberedsubsubsection=\\relax$/
+unnumberedsubsubseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedsubsubseczzz #1{\\seccheck{unnumbere/
+unnumberedzzz	tex-src/texinfo.tex	/^\\def\\unnumberedzzz #1{\\seccheck{unnumbered}%$/
+unnumbnoderef	tex-src/texinfo.tex	/^\\def\\unnumbnoderef{\\ifx\\lastnode\\relax\\else$/
+unnumbsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsecentry ##1##2{}$/
+unnumbsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsecentry#1#2{\\dosecentry{#1}{#2}}$/
+unnumbsetref	tex-src/texinfo.tex	/^\\def\\unnumbsetref#1{%$/
+unnumbsubsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsubsecentry ##1##2{}$/
+unnumbsubsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsubsecentry#1#2{\\dosubsecentry{#1}{#2}}/
+unnumbsubsubsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsubsubsecentry ##1##2{}$/
+unnumbsubsubsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsubsubsecentry#1#2{\\dosubsubsecentry{#1/
 unravel_univ	merc-src/accumulator.m	/^:- some [T] pred unravel_univ(univ::in, T::out) is/
 unread_switch_frame	c-src/emacs/src/keyboard.c	204
 unsignedp	y-src/cccp.y	112
@@ -4518,7 +4897,9 @@ unwind	c-src/emacs/src/lisp.h	2962
 unwind_int	c-src/emacs/src/lisp.h	2972
 unwind_ptr	c-src/emacs/src/lisp.h	2967
 unwind_void	c-src/emacs/src/lisp.h	2976
+unx\defunheader	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
 update_accumulator_pred	merc-src/accumulator.m	/^:- pred update_accumulator_pred(pred_id::in, proc_/
+uppercaseenumerate	tex-src/texinfo.tex	/^\\def\\uppercaseenumerate{%$/
 uprintmax_t	c-src/emacs/src/lisp.h	149
 uprintmax_t	c-src/emacs/src/lisp.h	154
 usage	perl-src/yagrip.pl	/^sub usage {$/
@@ -4546,22 +4927,47 @@ value	c-src/emacs/src/lisp.h	687
 value	y-src/cccp.y	112
 var	c-src/emacs/src/keyboard.c	11023
 var	c-src/emacs/src/lisp.h	3137
+var	tex-src/texinfo.tex	/^\\let\\var=\\smartitalic$/
+var	tex-src/texinfo.tex	/^\\def\\var##1{\\realbackslash var {##1}}%$/
+var	tex-src/texinfo.tex	/^\\let\\var=\\indexdummyfont$/
+var	tex-src/texinfo.tex	/^\\def\\var##1{\\realbackslash var {##1}}$/
 varargs	tex-src/texinfo.tex	/^\\defvarargs {#3}\\endgroup %$/
 varargs	tex-src/texinfo.tex	/^\\defvarargs {#3}\\endgroup %$/
+varargs	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{#1}\\defvarargs{#3}\\endgro/
 varargs	tex-src/texinfo.tex	/^\\defvarargs {#2}\\endgroup %$/
 varargs	tex-src/texinfo.tex	/^\\defvarargs {#2}\\endgroup %$/
+varargs	tex-src/texinfo.tex	/^\\def\\deftpargs #1{\\bf \\defvarargs{#1}}$/
+varheader	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
+varparsebody\Edefopt	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
+varparsebody\Edeftypevar	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
+varparsebody\Edefvar	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
 varset	merc-src/accumulator.m	/^:- import_module varset.$/
+varx\defvarheader	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
 vcopy	c-src/emacs/src/lisp.h	/^vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Objec/
 vectorlike_header	c-src/emacs/src/lisp.h	1343
 verde	cp-src/c.C	40
 verify-tags-table-function	el-src/emacs/lisp/progmodes/etags.el	/^(defvar verify-tags-table-function nil$/
 verify_ascii	c-src/emacs/src/lisp.h	/^# define verify_ascii(str) (str)$/
 vignore	c-src/etags.c	2417
+vindex	tex-src/texinfo.tex	/^\\def\\vindex {\\vrindex}$/
 visit-tags-table	el-src/emacs/lisp/progmodes/etags.el	/^(defun visit-tags-table (file &optional local)$/
 visit-tags-table-buffer	el-src/emacs/lisp/progmodes/etags.el	/^(defun visit-tags-table-buffer (&optional cont)$/
 void	c-src/emacs/src/lisp.h	/^INLINE void (check_cons_list) (void) { lisp_h_chec/
 voidfuncptr	c-src/emacs/src/lisp.h	2108
 voidval	y-src/cccp.y	115
+vrheader	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
+vritemindex	tex-src/texinfo.tex	/^\\def\\vritemindex #1{\\doind {vr}{\\code{#1}}}%$/
+vrparsebody\Edefivar	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
+vrparsebody\Edeftp	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
+vrparsebody\Edeftypevr	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
+vrparsebody\Edefvr	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
+vrx\defvrheader	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
+vtable	tex-src/texinfo.tex	/^\\def\\vtable{\\begingroup\\inENV\\obeylines\\obeyspaces/
+vtablex	tex-src/texinfo.tex	/^\\gdef\\vtablex #1^^M{%$/
+w	tex-src/texinfo.tex	/^\\def\\w#1{\\leavevmode\\hbox{#1}}$/
+w	tex-src/texinfo.tex	/^\\def\\w{\\realbackslash w }%$/
+w	tex-src/texinfo.tex	/^\\let\\w=\\indexdummyfont$/
+w	tex-src/texinfo.tex	/^\\def\\w{\\realbackslash w}$/
 wait_status_ptr_t	c.c	161
 waiting_for_input	c-src/emacs/src/keyboard.c	150
 warning	y-src/cccp.y	/^warning (msg)$/
@@ -4609,18 +5015,31 @@ x	cp-src/clheir.hpp	58
 x	cp-src/fail.C	10
 x	cp-src/fail.C	44
 x	tex-src/texinfo.tex	/^\\refx{#1-snt}{} [\\printednodename], page\\tie\\refx{/
+x	tex-src/texinfo.tex	/^\\refx{#1-snt}{} [\\printednodename], page\\tie\\refx{/
 x-get-selection-internal	c.c	/^DEFUN ("x-get-selection-internal", Fx_get_selectio/
 x-get-selection-internal	c.c	/^       Fx_get_selection_internal, Sx_get_selection/
 xcar_addr	c-src/emacs/src/lisp.h	/^xcar_addr (Lisp_Object c)$/
 xcdr_addr	c-src/emacs/src/lisp.h	/^xcdr_addr (Lisp_Object c)$/
 xdiff	make-src/Makefile	/^xdiff: ETAGS EXTAGS ${infiles}$/
+xitem	tex-src/texinfo.tex	/^\\def\\xitem{\\errmessage{@xitem while not in a table/
+xitem	tex-src/texinfo.tex	/^\\let\\xitem = \\internalBxitem %$/
+xitemsubtopix	tex-src/texinfo.tex	/^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/
+xitemsubtopix	tex-src/texinfo.tex	/^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/
+xitemx	tex-src/texinfo.tex	/^\\def\\xitemx{\\errmessage{@xitemx while not in a tab/
+xitemx	tex-src/texinfo.tex	/^\\let\\xitemx = \\internalBxitemx %$/
+xitemzzz	tex-src/texinfo.tex	/^\\def\\xitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/
+xkey	tex-src/texinfo.tex	/^\\def\\xkey{\\key}$/
 xmalloc	c-src/etags.c	/^xmalloc (size_t size)$/
 xnew	c-src/etags.c	/^#define xnew(n, Type)      ((Type *) xmalloc ((n) /
+xrdef	tex-src/texinfo.tex	/^\\def\\xrdef #1#2{$/
 xrealloc	c-src/etags.c	/^xrealloc (void *ptr, size_t size)$/
+xref	tex-src/texinfo.tex	/^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/
 xref-etags-location	el-src/emacs/lisp/progmodes/etags.el	/^(defclass xref-etags-location (xref-location)$/
 xref-location-line	el-src/emacs/lisp/progmodes/etags.el	/^(cl-defmethod xref-location-line ((l xref-etags-lo/
 xref-location-marker	el-src/emacs/lisp/progmodes/etags.el	/^(cl-defmethod xref-location-marker ((l xref-etags-/
 xref-make-etags-location	el-src/emacs/lisp/progmodes/etags.el	/^(defun xref-make-etags-location (tag-info file)$/
+xrefX	tex-src/texinfo.tex	/^\\def\\xrefX[#1,#2,#3,#4,#5,#6]{\\begingroup%$/
+xreftie	tex-src/texinfo.tex	/^\\gdef\\xreftie{'tie}$/
 xrnew	c-src/etags.c	/^#define xrnew(op, n, Type) ((op) = (Type *) xreall/
 xx	make-src/Makefile	/^xx="this line is here because of a fontlock bug$/
 xyz	ruby-src/test1.ru	/^    alias_method :xyz,$/
@@ -4684,8 +5103,22 @@ z	c.c	144
 z	c.c	164
 z	cp-src/clheir.hpp	49
 z	cp-src/clheir.hpp	58
+zzz	tex-src/texinfo.tex	/^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/
+zzz	tex-src/texinfo.tex	/^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/
+zzz	tex-src/texinfo.tex	/^\\def\\infoappendix{\\parsearg\\appendixzzz}$/
+zzz	tex-src/texinfo.tex	/^\\def\\infochapter{\\parsearg\\chapterzzz}$/
+zzz	tex-src/texinfo.tex	/^\\def\\infosection{\\parsearg\\sectionzzz}$/
+zzz	tex-src/texinfo.tex	/^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/
+zzz	tex-src/texinfo.tex	/^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/
+{	tex-src/texinfo.tex	/^\\let\\{=\\mylbrace$/
+{	tex-src/texinfo.tex	/^\\let\\{=\\ptexlbrace$/
 |	tex-src/texinfo.tex	/^\\def|{{\\tt \\char '174}}$/
+|	tex-src/texinfo.tex	/^\\let|=\\normalverticalbar$/
+}	tex-src/texinfo.tex	/^\\let\\}=\\myrbrace$/
+}	tex-src/texinfo.tex	/^\\let\\}=\\ptexrbrace$/
+~	tex-src/texinfo.tex	/^\\catcode `\\^=7 \\catcode `\\_=8 \\catcode `\\~=13 \\let/
 ~	tex-src/texinfo.tex	/^\\def~{{\\tt \\char '176}}$/
+~	tex-src/texinfo.tex	/^\\let~=\\normaltilde$/
 ~A	cp-src/c.C	/^A::~A() {}$/
 ~B	cp-src/c.C	/^    ~B() {};$/
 ~MDiagArray2	cp-src/MDiagArray2.h	/^  ~MDiagArray2 (void) { }$/
diff --git a/test/manual/etags/CTAGS.good_crlf b/test/manual/etags/CTAGS.good_crlf
index 3d64fa63c7a..29ac01d605d 100644
--- a/test/manual/etags/CTAGS.good_crlf
+++ b/test/manual/etags/CTAGS.good_crlf
@@ -1,3 +1,5 @@
+"	tex-src/texinfo.tex	/^\\def\\turnoffactive{\\let"=\\normaldoublequote$/
+"	tex-src/texinfo.tex	/^\\let"=\\activedoublequote$/
 #a-defer-word	forth-src/test-forth.fth	/^defer #a-defer-word$/
 #some-storage	forth-src/test-forth.fth	/^2000 buffer: #some-storage$/
 $0x80	c-src/sysdep.h	32
@@ -32,14 +34,28 @@ $user_comment_lc	php-src/lce_functions.php	115
 ${CHECKOBJS}	make-src/Makefile	/^${CHECKOBJS}: CFLAGS=-g3 -DNULLFREECHECK=0$/
 %cdiff	make-src/Makefile	/^%cdiff: CTAGS% CTAGS ${infiles}$/
 %ediff	make-src/Makefile	/^%ediff: ETAGS% ETAGS ${infiles}$/
+&	tex-src/texinfo.tex	/^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/
+&	tex-src/texinfo.tex	/^\\gdef\\normalparens{\\boldbrax\\let&=\\ampnr}$/
+'	tex-src/texinfo.tex	/^\\def\\'{{'}}$/
+(	tex-src/texinfo.tex	/^\\gdef\\amprm#1 {{\\rm\\&#1}\\let(=\\oprm \\let)=\\clrm\\ }/
+(	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
+(	tex-src/texinfo.tex	/^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested /
+(	tex-src/texinfo.tex	/^\\ifnum \\parencount=1 {\\rm \\char `\\)}\\sl \\let(=\\opr/
 ($_,$flag,$opt,$f,$r,@temp	perl-src/yagrip.pl	8
 ($prog,$_,@list	perl-src/yagrip.pl	39
 ($string,$flag,@string,@temp,@last	perl-src/yagrip.pl	40
 (a-forth-constant	forth-src/test-forth.fth	/^constant (a-forth-constant$/
 (another-forth-word)	forth-src/test-forth.fth	/^: (another-forth-word) ( -- )$/
 (foo)	forth-src/test-forth.fth	/^: (foo) 1 ;$/
+)	tex-src/texinfo.tex	/^\\gdef\\amprm#1 {{\\rm\\&#1}\\let(=\\oprm \\let)=\\clrm\\ }/
+)	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
+*	tex-src/texinfo.tex	/^\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}$/
+*	tex-src/texinfo.tex	/^\\let\\*=\\ptexstar$/
 +	ruby-src/test.rb	/^        def +(y)$/
 +	tex-src/texinfo.tex	/^\\def+{{\\tt \\char 43}}$/
++	tex-src/texinfo.tex	/^\\let+=\\normalplus}$/
+.	tex-src/texinfo.tex	/^\\def\\.{.\\spacefactor=3000 }$/
+.	tex-src/texinfo.tex	/^\\let\\.=\\ptexdot$/
 .PRECIOUS	make-src/Makefile	/^.PRECIOUS: ETAGS CTAGS ETAGS16 CTAGS16 ETAGS17 CTA/
 /.notdef	ps-src/rfc1245.ps	/^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/
 /.notdef	ps-src/rfc1245.ps	/^\/.notdef \/.notdef \/.notdef \/.notdef \/space \/exclam/
@@ -171,35 +187,26 @@ ${CHECKOBJS}	make-src/Makefile	/^${CHECKOBJS}: CFLAGS=-g3 -DNULLFREECHECK=0$/
 2const	forth-src/test-forth.fth	/^3 4 2constant 2const$/
 2val	forth-src/test-forth.fth	/^2const 2value 2val$/
 2var	forth-src/test-forth.fth	/^2variable 2var$/
+:	tex-src/texinfo.tex	/^\\def\\:{\\spacefactor=1000 }$/
 :a-forth-dictionary-entry	forth-src/test-forth.fth	/^create :a-forth-dictionary-entry$/
 <	tex-src/texinfo.tex	/^\\def<{{\\tt \\less}}$/
+<	tex-src/texinfo.tex	/^\\let<=\\normalless$/
 <<	ruby-src/test.rb	/^        def <<(y)$/
 <=	ruby-src/test.rb	/^        def <=(y)$/
 <=>	ruby-src/test.rb	/^        def <=>(y)$/
 =	tex-src/texinfo.tex	/^\\global\\def={{\\tt \\char 61}}}$/
-=	tex-src/texinfo.tex	/^\\global\\let\\section = \\appendixsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\section = \\numberedsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\section = \\unnumberedsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\appendixsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\numberedsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\unnumberedsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\appendixsubsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\numberedsubsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\unnumberedsubsubsec$/
 =/f	ada-src/etags-test-for.ada	/^   function "=" (L, R : System.Address) return Boo/
 ==	ruby-src/test.rb	/^        def ==(y)$/
 ===	ruby-src/test.rb	/^        def ===(y)$/
-=\indexdummyfont	tex-src/texinfo.tex	/^\\let\\cite=\\indexdummyfont$/
-=\relax	tex-src/texinfo.tex	/^\\let\\appendix=\\relax$/
-=\relax	tex-src/texinfo.tex	/^\\let\\chapter=\\relax$/
-=\relax	tex-src/texinfo.tex	/^\\let\\section=\\relax$/
-=\relax	tex-src/texinfo.tex	/^\\let\\subsection=\\relax$/
-=\relax	tex-src/texinfo.tex	/^\\let\\subsubsection=\\relax$/
-=\smartitalic	tex-src/texinfo.tex	/^\\let\\cite=\\smartitalic$/
 =starts-with-equals!	scm-src/test.scm	/^(define =starts-with-equals! #t)$/
 >	tex-src/texinfo.tex	/^\\def>{{\\tt \\gtr}}$/
+>	tex-src/texinfo.tex	/^\\let>=\\normalgreater$/
 >field1	forth-src/test-forth.fth	/^   9   field   >field1$/
 >field2	forth-src/test-forth.fth	/^   5   field   >field2$/
+@	tex-src/texinfo.tex	/^\\def\\@{@}%$/
+@	tex-src/texinfo.tex	/^\\def\\@{{\\tt \\char '100}}$/
+@sf	tex-src/texinfo.tex	/^\\ifhmode\\edef\\@sf{\\spacefactor\\the\\spacefactor}\\\/\\/
+@sf	tex-src/texinfo.tex	/^\\let\\@sf\\empty$/
 A	c.c	162
 A	cp-src/c.C	/^void A::A() {}$/
 A	cp-src/c.C	117
@@ -324,6 +331,11 @@ CATCHER	c-src/emacs/src/lisp.h	3021
 CDR	c-src/emacs/src/lisp.h	/^CDR (Lisp_Object c)$/
 CDR_SAFE	c-src/emacs/src/lisp.h	/^CDR_SAFE (Lisp_Object c)$/
 CFLAGS	make-src/Makefile	/^CFLAGS=${WARNINGS} -ansi -g3 # -pg -O$/
+CHAPFopen	tex-src/texinfo.tex	/^\\def\\CHAPFopen{$/
+CHAPFplain	tex-src/texinfo.tex	/^\\def\\CHAPFplain{$/
+CHAPPAGodd	tex-src/texinfo.tex	/^\\def\\CHAPPAGodd{$/
+CHAPPAGoff	tex-src/texinfo.tex	/^\\def\\CHAPPAGoff{$/
+CHAPPAGon	tex-src/texinfo.tex	/^\\def\\CHAPPAGon{$/
 CHAR	c-src/etags.c	/^#define CHAR(x)		((unsigned int)(x) & (CHARS - 1))/
 CHAR	y-src/cccp.c	7
 CHARACTERBITS	c-src/emacs/src/lisp.h	2457
@@ -529,6 +541,7 @@ EMACS_UINT	c-src/emacs/src/lisp.h	97
 ENTRY	c-src/sysdep.h	/^#define	ENTRY(name)							      \\$/
 ENUM_BF	c-src/emacs/src/lisp.h	/^#define ENUM_BF(TYPE) enum TYPE$/
 ENUM_BF	c-src/emacs/src/lisp.h	/^#define ENUM_BF(TYPE) unsigned int$/
+ENVcheck	tex-src/texinfo.tex	/^\\def\\ENVcheck{%$/
 EQ	c-src/emacs/src/lisp.h	/^# define EQ(x, y) lisp_h_EQ (x, y)$/
 EQUAL	y-src/cccp.c	12
 ERLSRC	make-src/Makefile	/^ERLSRC=gs_dialog.erl lines.erl lists.erl$/
@@ -542,13 +555,37 @@ EXFUN	c-src/emacs/src/lisp.h	/^#define EXFUN(fnname, maxargs) \\$/
 EXTAGS	make-src/Makefile	/^EXTAGS: extags ${infiles} Makefile$/
 EXTERNALLY_VISIBLE	c-src/emacs/src/keyboard.c	3497
 EXTERNALLY_VISIBLE	c-src/emacs/src/keyboard.c	4372
+Ealphaenumerate	tex-src/texinfo.tex	/^\\def\\Ealphaenumerate{\\Eenumerate}$/
+Ecapsenumerate	tex-src/texinfo.tex	/^\\def\\Ecapsenumerate{\\Eenumerate}$/
+Ecartouche	tex-src/texinfo.tex	/^\\def\\Ecartouche{%$/
+Edescription	tex-src/texinfo.tex	/^\\def\\Edescription{\\Etable}% Necessary kludge.$/
+Edisplay	tex-src/texinfo.tex	/^\\def\\Edisplay{\\endgroup\\afterenvbreak}%$/
+Eexample	tex-src/texinfo.tex	/^\\def\\Eexample{\\Elisp}$/
+Eflushleft	tex-src/texinfo.tex	/^\\def\\Eflushleft{\\endgroup\\afterenvbreak}%$/
+Eflushright	tex-src/texinfo.tex	/^\\def\\Eflushright{\\endgroup\\afterenvbreak}%$/
+Eformat	tex-src/texinfo.tex	/^\\def\\Eformat{\\endgroup\\afterenvbreak}$/
+Eftable	tex-src/texinfo.tex	/^\\def\\Eftable{\\endgraf\\endgroup\\afterenvbreak}%$/
+Egroup	tex-src/texinfo.tex	/^  \\def\\Egroup{\\egroup\\endgroup}%$/
+Eifclear	tex-src/texinfo.tex	/^\\def\\Eifclear{}$/
+Eifset	tex-src/texinfo.tex	/^\\def\\Eifset{}$/
+Eiftex	tex-src/texinfo.tex	/^\\def\\Eiftex{}$/
+Elisp	tex-src/texinfo.tex	/^\\def\\Elisp{\\endgroup\\afterenvbreak}%$/
 EmptyNmStr	pas-src/common.pas	/^function EmptyNmStr(* : NameString*);$/
 Environment	tex-src/gzip.texi	/^@node Environment, Tapes, Advanced usage, Top$/
+Equotation	tex-src/texinfo.tex	/^\\def\\Equotation{\\par\\endgroup\\afterenvbreak}%$/
 Erlang_functions	c-src/etags.c	/^Erlang_functions (FILE *inf)$/
 Erlang_help	c-src/etags.c	567
 Erlang_suffixes	c-src/etags.c	565
 ErrStrToNmStr	pas-src/common.pas	/^function ErrStrToNmStr;(*($/
 Error_Information/t	ada-src/2ataspri.ads	/^   type Error_Information is new Interfaces.C.POSI/
+Esmallexample	tex-src/texinfo.tex	/^\\def\\Esmallexample{\\Elisp}$/
+Esmallexample	tex-src/texinfo.tex	/^\\global\\def\\Esmallexample{\\Esmalllisp}$/
+Esmalllisp	tex-src/texinfo.tex	/^\\def\\Esmalllisp{\\endgroup\\afterenvbreak}%$/
+Etable	tex-src/texinfo.tex	/^\\def\\Etable{\\endgraf\\endgroup\\afterenvbreak}%$/
+Etable	tex-src/texinfo.tex	/^\\let\\Etable=\\relax}}$/
+Etex	tex-src/texinfo.tex	/^\\let\\Etex=\\endgroup}$/
+Etitlepage	tex-src/texinfo.tex	/^\\def\\Etitlepage{%$/
+Evtable	tex-src/texinfo.tex	/^\\def\\Evtable{\\endgraf\\endgroup\\afterenvbreak}%$/
 Exit_LL_Task/p	ada-src/2ataspri.adb	/^   procedure Exit_LL_Task is$/
 Exit_LL_Task/p	ada-src/2ataspri.ads	/^   procedure Exit_LL_Task;$/
 ExtractCommentInfo	pas-src/common.pas	/^procedure ExtractCommentInfo; (*($/
@@ -689,6 +726,20 @@ HASH_TABLE_P	c-src/emacs/src/lisp.h	/^HASH_TABLE_P (Lisp_Object a)$/
 HASH_TABLE_SIZE	c-src/emacs/src/lisp.h	/^HASH_TABLE_SIZE (struct Lisp_Hash_Table *h)$/
 HASH_VALUE	c-src/emacs/src/lisp.h	/^HASH_VALUE (struct Lisp_Hash_Table *h, ptrdiff_t i/
 HAVE_NTGUI	c-src/etags.c	116
+HEADINGSafter	tex-src/texinfo.tex	/^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/
+HEADINGSdouble	tex-src/texinfo.tex	/^\\def\\HEADINGSdouble{$/
+HEADINGSdoubleafter	tex-src/texinfo.tex	/^\\let\\HEADINGSdoubleafter=\\HEADINGSafter$/
+HEADINGSdoublex	tex-src/texinfo.tex	/^\\def\\HEADINGSdoublex{%$/
+HEADINGShook	tex-src/texinfo.tex	/^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/
+HEADINGShook	tex-src/texinfo.tex	/^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/
+HEADINGShook	tex-src/texinfo.tex	/^\\let\\HEADINGShook=\\relax$/
+HEADINGSoff	tex-src/texinfo.tex	/^\\def\\HEADINGSoff{$/
+HEADINGSon	tex-src/texinfo.tex	/^\\def\\HEADINGSon{\\HEADINGSdouble}$/
+HEADINGSon	tex-src/texinfo.tex	/^\\global\\def\\HEADINGSon{\\HEADINGSdouble}}$/
+HEADINGSon	tex-src/texinfo.tex	/^\\global\\def\\HEADINGSon{\\HEADINGSsingle}}$/
+HEADINGSsingle	tex-src/texinfo.tex	/^\\def\\HEADINGSsingle{$/
+HEADINGSsingleafter	tex-src/texinfo.tex	/^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/
+HEADINGSsinglex	tex-src/texinfo.tex	/^\\def\\HEADINGSsinglex{%$/
 HEAP	c-src/emacs/src/gmalloc.c	131
 HTMLSRC	make-src/Makefile	/^HTMLSRC=softwarelibero.html index.shtml algrthms.h/
 HTML_help	c-src/etags.c	584
@@ -750,6 +801,7 @@ JAVASRC	make-src/Makefile	/^JAVASRC=AWTEMul.java KeyEve.java SMan.java SysCol./
 KBD_BUFFER_SIZE	c-src/emacs/src/keyboard.c	82
 KBYTES	objc-src/PackInsp.m	58
 KEY_TO_CHAR	c-src/emacs/src/keyboard.c	/^#define KEY_TO_CHAR(k) (XINT (k) & ((1 << CHARACTE/
+L	tex-src/texinfo.tex	/^\\let\\L=\\ptexL$/
 LATEST	make-src/Makefile	/^LATEST=17$/
 LCE_COMMENT	php-src/lce_functions.php	13
 LCE_COMMENT_TOOL	php-src/lce_functions.php	17
@@ -1407,6 +1459,9 @@ Task_Type/b	ada-src/etags-test-for.ada	/^  task body Task_Type is$/
 Task_Type/b	ada-src/waroquiers.ada	/^  task body Task_Type is$/
 Task_Type/k	ada-src/etags-test-for.ada	/^  task type Task_Type is$/
 Task_Type/k	ada-src/waroquiers.ada	/^  task type Task_Type is$/
+TeX	tex-src/texinfo.tex	/^\\def\\TeX{\\realbackslash TeX}$/
+TeX	tex-src/texinfo.tex	/^\\def\\TeX{\\realbackslash TeX}%$/
+TeX	tex-src/texinfo.tex	/^\\let\\TeX=\\indexdummytex$/
 TeX_commands	c-src/etags.c	/^TeX_commands (FILE *inf)$/
 TeX_help	c-src/etags.c	674
 TeX_suffixes	c-src/etags.c	672
@@ -1666,551 +1721,22 @@ YY_DECL_VARIABLES	/usr/share/bison/bison.simple	391
 Yacc_entries	c-src/etags.c	/^Yacc_entries (FILE *inf)$/
 Yacc_help	c-src/etags.c	693
 Yacc_suffixes	c-src/etags.c	691
+Yappendixletterandtype	tex-src/texinfo.tex	/^\\def\\Yappendixletterandtype{%$/
+Ynothing	tex-src/texinfo.tex	/^\\def\\Ynothing{}$/
+Ypagenumber	tex-src/texinfo.tex	/^\\def\\Ypagenumber{\\folio}$/
+Ysectionnumberandtype	tex-src/texinfo.tex	/^\\def\\Ysectionnumberandtype{%$/
+Ytitle	tex-src/texinfo.tex	/^\\def\\Ytitle{\\thischapter}$/
 Z	c-src/h.h	100
+[	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
 []	ruby-src/test.rb	/^        def [](y)$/
 []=	ruby-src/test.rb	/^        def []=(y, val)$/
-\	tex-src/texinfo.tex	/^\\def\\ {{\\fontdimen2\\font=\\tclosesave{} }}%$/
-\	tex-src/texinfo.tex	/^\\gdef\\sepspaces{\\def {\\ }}}$/
-\'	tex-src/texinfo.tex	/^\\def\\'{{'}}$/
-\*	tex-src/texinfo.tex	/^\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}$/
-\.	tex-src/texinfo.tex	/^\\def\\.{.\\spacefactor=3000 }$/
-\:	tex-src/texinfo.tex	/^\\def\\:{\\spacefactor=1000 }$/
-\@	tex-src/texinfo.tex	/^\\def\\@{@}%$/
-\@	tex-src/texinfo.tex	/^\\def\\@{{\\tt \\char '100}}$/
-\CHAPFopen	tex-src/texinfo.tex	/^\\def\\CHAPFopen{$/
-\CHAPFplain	tex-src/texinfo.tex	/^\\def\\CHAPFplain{$/
-\CHAPPAGodd	tex-src/texinfo.tex	/^\\def\\CHAPPAGodd{$/
-\CHAPPAGoff	tex-src/texinfo.tex	/^\\def\\CHAPPAGoff{$/
-\CHAPPAGon	tex-src/texinfo.tex	/^\\def\\CHAPPAGon{$/
-\ENVcheck	tex-src/texinfo.tex	/^\\def\\ENVcheck{%$/
-\Ealphaenumerate	tex-src/texinfo.tex	/^\\def\\Ealphaenumerate{\\Eenumerate}$/
-\Ecapsenumerate	tex-src/texinfo.tex	/^\\def\\Ecapsenumerate{\\Eenumerate}$/
-\Ecartouche	tex-src/texinfo.tex	/^\\def\\Ecartouche{%$/
-\Edescription	tex-src/texinfo.tex	/^\\def\\Edescription{\\Etable}% Necessary kludge.$/
-\Edisplay	tex-src/texinfo.tex	/^\\def\\Edisplay{\\endgroup\\afterenvbreak}%$/
-\Eexample	tex-src/texinfo.tex	/^\\def\\Eexample{\\Elisp}$/
-\Eflushleft	tex-src/texinfo.tex	/^\\def\\Eflushleft{\\endgroup\\afterenvbreak}%$/
-\Eflushright	tex-src/texinfo.tex	/^\\def\\Eflushright{\\endgroup\\afterenvbreak}%$/
-\Eformat	tex-src/texinfo.tex	/^\\def\\Eformat{\\endgroup\\afterenvbreak}$/
-\Eftable	tex-src/texinfo.tex	/^\\def\\Eftable{\\endgraf\\endgroup\\afterenvbreak}%$/
-\Egroup	tex-src/texinfo.tex	/^  \\def\\Egroup{\\egroup\\endgroup}%$/
-\Eifclear	tex-src/texinfo.tex	/^\\def\\Eifclear{}$/
-\Eifset	tex-src/texinfo.tex	/^\\def\\Eifset{}$/
-\Eiftex	tex-src/texinfo.tex	/^\\def\\Eiftex{}$/
-\Elisp	tex-src/texinfo.tex	/^\\def\\Elisp{\\endgroup\\afterenvbreak}%$/
-\Equotation	tex-src/texinfo.tex	/^\\def\\Equotation{\\par\\endgroup\\afterenvbreak}%$/
-\Esmallexample	tex-src/texinfo.tex	/^\\def\\Esmallexample{\\Elisp}$/
-\Esmallexample	tex-src/texinfo.tex	/^\\global\\def\\Esmallexample{\\Esmalllisp}$/
-\Esmalllisp	tex-src/texinfo.tex	/^\\def\\Esmalllisp{\\endgroup\\afterenvbreak}%$/
-\Etable	tex-src/texinfo.tex	/^\\def\\Etable{\\endgraf\\endgroup\\afterenvbreak}%$/
-\Etitlepage	tex-src/texinfo.tex	/^\\def\\Etitlepage{%$/
-\Evtable	tex-src/texinfo.tex	/^\\def\\Evtable{\\endgraf\\endgroup\\afterenvbreak}%$/
-\HEADINGSafter	tex-src/texinfo.tex	/^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/
-\HEADINGSdouble	tex-src/texinfo.tex	/^\\def\\HEADINGSdouble{$/
-\HEADINGSdoublex	tex-src/texinfo.tex	/^\\def\\HEADINGSdoublex{%$/
-\HEADINGSoff	tex-src/texinfo.tex	/^\\def\\HEADINGSoff{$/
-\HEADINGSon	tex-src/texinfo.tex	/^\\def\\HEADINGSon{\\HEADINGSdouble}$/
-\HEADINGSon	tex-src/texinfo.tex	/^\\global\\def\\HEADINGSon{\\HEADINGSdouble}}$/
-\HEADINGSon	tex-src/texinfo.tex	/^\\global\\def\\HEADINGSon{\\HEADINGSsingle}}$/
-\HEADINGSsingle	tex-src/texinfo.tex	/^\\def\\HEADINGSsingle{$/
-\HEADINGSsingleafter	tex-src/texinfo.tex	/^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/
-\HEADINGSsinglex	tex-src/texinfo.tex	/^\\def\\HEADINGSsinglex{%$/
-\TeX	tex-src/texinfo.tex	/^\\def\\TeX{\\realbackslash TeX}$/
-\TeX	tex-src/texinfo.tex	/^\\def\\TeX{\\realbackslash TeX}%$/
-\Yappendixletterandtype	tex-src/texinfo.tex	/^\\def\\Yappendixletterandtype{%$/
-\Ynothing	tex-src/texinfo.tex	/^\\def\\Ynothing{}$/
-\Ypagenumber	tex-src/texinfo.tex	/^\\def\\Ypagenumber{\\folio}$/
-\Ysectionnumberandtype	tex-src/texinfo.tex	/^\\def\\Ysectionnumberandtype{%$/
-\Ytitle	tex-src/texinfo.tex	/^\\def\\Ytitle{\\thischapter}$/
-\_	tex-src/texinfo.tex	/^\\def\\_{\\lvvmode \\kern.06em \\vbox{\\hrule width.3em /
-\_	tex-src/texinfo.tex	/^\\def\\_{{\\realbackslash _}}%$/
-\`	tex-src/texinfo.tex	/^\\def\\`{{`}}$/
-\aboveenvbreak	tex-src/texinfo.tex	/^\\def\\aboveenvbreak{{\\advance\\aboveenvskipamount by/
-\activedoublequote	tex-src/texinfo.tex	/^\\def\\activedoublequote{{\\tt \\char '042}}$/
-\activeparens	tex-src/texinfo.tex	/^\\def\\activeparens{%$/
-\afourpaper	tex-src/texinfo.tex	/^\\def\\afourpaper{$/
-\afterenvbreak	tex-src/texinfo.tex	/^\\def\\afterenvbreak{\\endgraf \\ifdim\\lastskip<\\above/
-\alphaenumerate	tex-src/texinfo.tex	/^\\def\\alphaenumerate{\\enumerate{a}}$/
-\appendix	tex-src/texinfo.tex	/^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/
-\appendixletter	tex-src/texinfo.tex	/^\\def\\appendixletter{\\char\\the\\appendixno}$/
-\appendixnoderef	tex-src/texinfo.tex	/^\\def\\appendixnoderef{\\ifx\\lastnode\\relax\\else$/
-\appendixsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/
-\appendixsection	tex-src/texinfo.tex	/^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/
-\appendixsectionzzz	tex-src/texinfo.tex	/^\\def\\appendixsectionzzz #1{\\seccheck{appendixsecti/
-\appendixsetref	tex-src/texinfo.tex	/^\\def\\appendixsetref#1{%$/
-\appendixsubsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsec{\\parsearg\\appendixsubsec/
-\appendixsubseczzz	tex-src/texinfo.tex	/^\\def\\appendixsubseczzz #1{\\seccheck{appendixsubsec/
-\appendixsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/
-\appendixsubsubseczzz	tex-src/texinfo.tex	/^\\def\\appendixsubsubseczzz #1{\\seccheck{appendixsub/
-\appendixzzz	tex-src/texinfo.tex	/^\\def\\appendixzzz #1{\\seccheck{appendix}%$/
-\asis	tex-src/texinfo.tex	/^\\def\\asis#1{#1}$/
-\author	tex-src/texinfo.tex	/^   \\def\\author{\\parsearg\\authorzzz}%$/
-\authorfont	tex-src/texinfo.tex	/^   \\def\\authorfont{\\authorrm \\normalbaselineskip =/
-\authorzzz	tex-src/texinfo.tex	/^   \\def\\authorzzz##1{\\ifseenauthor\\else\\vskip 0pt /
-\b	tex-src/texinfo.tex	/^\\def\\b##1{\\realbackslash b {##1}}$/
-\b	tex-src/texinfo.tex	/^\\def\\b##1{\\realbackslash b {##1}}%$/
-\b	tex-src/texinfo.tex	/^\\def\\b#1{{\\bf #1}}$/
-\balancecolumns	tex-src/texinfo.tex	/^\\def\\balancecolumns{%$/
-\begin	tex-src/texinfo.tex	/^\\outer\\def\\begin{\\parsearg\\beginxxx}$/
-\begindoublecolumns	tex-src/texinfo.tex	/^\\def\\begindoublecolumns{\\begingroup$/
-\beginxxx	tex-src/texinfo.tex	/^\\def\\beginxxx #1{%$/
-\bf	tex-src/texinfo.tex	/^\\def\\bf{\\realbackslash bf }$/
-\bf	tex-src/texinfo.tex	/^\\def\\bf{\\realbackslash bf }%$/
-\bullet	tex-src/texinfo.tex	/^\\def\\bullet{$\\ptexbullet$}$/
-\bye	tex-src/texinfo.tex	/^\\outer\\def\\bye{\\pagealignmacro\\tracingstats=1\\ptex/
-\capsenumerate	tex-src/texinfo.tex	/^\\def\\capsenumerate{\\enumerate{A}}$/
-\cartbot	tex-src/texinfo.tex	/^\\def\\cartbot{\\hbox to \\cartouter{\\hskip\\lskip$/
-\cartouche	tex-src/texinfo.tex	/^\\long\\def\\cartouche{%$/
-\carttop	tex-src/texinfo.tex	/^\\def\\carttop{\\hbox to \\cartouter{\\hskip\\lskip$/
-\cbl	tex-src/texinfo.tex	/^\\def\\cbl{{\\circle\\char'012\\hskip -6pt}}$/
-\cbr	tex-src/texinfo.tex	/^\\def\\cbr{{\\hskip 6pt\\circle\\char'011}}$/
-\center	tex-src/texinfo.tex	/^\\def\\center{\\parsearg\\centerzzz}$/
-\centerzzz	tex-src/texinfo.tex	/^\\def\\centerzzz #1{{\\advance\\hsize by -\\leftskip$/
-\chapbreak	tex-src/texinfo.tex	/^\\def\\chapbreak{\\dobreak \\chapheadingskip {-4000}}$/
-\chapentry	tex-src/texinfo.tex	/^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/
-\chapentryfonts	tex-src/texinfo.tex	/^\\def\\chapentryfonts{\\secfonts \\rm}$/
-\chapfonts	tex-src/texinfo.tex	/^\\def\\chapfonts{%$/
-\chapheading	tex-src/texinfo.tex	/^\\def\\chapheading{\\parsearg\\chapheadingzzz}$/
-\chapheadingzzz	tex-src/texinfo.tex	/^\\def\\chapheadingzzz #1{\\chapbreak %$/
-\chapoddpage	tex-src/texinfo.tex	/^\\def\\chapoddpage{\\chappager \\ifodd\\pageno \\else \\h/
-\chappager	tex-src/texinfo.tex	/^\\def\\chappager{\\par\\vfill\\supereject}$/
-\chapter	tex-src/texinfo.tex	/^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/
-\chapternofonts	tex-src/texinfo.tex	/^\\def\\chapternofonts{%$/
-\chapterzzz	tex-src/texinfo.tex	/^\\def\\chapterzzz #1{\\seccheck{chapter}%$/
-\char	tex-src/texinfo.tex	/^\\def\\char{\\realbackslash char}$/
-\char	tex-src/texinfo.tex	/^\\def\\char{\\realbackslash char}%$/
-\chfopen	tex-src/texinfo.tex	/^\\def\\chfopen #1#2{\\chapoddpage {\\chapfonts$/
-\chfplain	tex-src/texinfo.tex	/^\\def\\chfplain #1#2{%$/
-\cindex	tex-src/texinfo.tex	/^\\def\\cindex {\\cpindex}$/
-\cindexsub	tex-src/texinfo.tex	/^\\def\\cindexsub {\\begingroup\\obeylines\\cindexsub}$/
-\cite	tex-src/texinfo.tex	/^\\def\\cite##1{\\realbackslash cite {##1}}$/
-\cite	tex-src/texinfo.tex	/^\\def\\cite##1{\\realbackslash cite {##1}}%$/
-\clear	tex-src/texinfo.tex	/^\\def\\clear{\\parsearg\\clearxxx}$/
-\clearxxx	tex-src/texinfo.tex	/^\\def\\clearxxx #1{$/
-\code	tex-src/texinfo.tex	/^\\def\\code##1{\\realbackslash code {##1}}$/
-\code	tex-src/texinfo.tex	/^\\def\\code##1{\\realbackslash code {##1}}%$/
-\comment	tex-src/texinfo.tex	/^\\def\\comment{\\catcode 64=\\other \\catcode 123=\\othe/
-\commentxxx	tex-src/texinfo.tex	/^\\def\\commentxxx #1{\\catcode 64=0 \\catcode 123=1 \\c/
-\contents	tex-src/texinfo.tex	/^\\outer\\def\\contents{%$/
-\copyright	tex-src/texinfo.tex	/^\\def\\copyright{\\realbackslash copyright }%$/
-\copyright	tex-src/texinfo.tex	/^\\def\\copyright{\\realbackslash copyright}$/
-\cropmarks	tex-src/texinfo.tex	/^\\def\\cropmarks{\\let\\onepageout=\\croppageout }$/
-\croppageout	tex-src/texinfo.tex	/^\\def\\croppageout#1{\\hoffset=0pt % make sure this d/
-\ctl	tex-src/texinfo.tex	/^\\def\\ctl{{\\circle\\char'013\\hskip -6pt}}% 6pt from /
-\ctr	tex-src/texinfo.tex	/^\\def\\ctr{{\\hskip 6pt\\circle\\char'010}}$/
-\ctrl	tex-src/texinfo.tex	/^\\def\\ctrl #1{{\\tt \\rawbackslash \\hat}#1}$/
-\defcodeindex	tex-src/texinfo.tex	/^\\def\\defcodeindex{\\parsearg\\newcodeindex}$/
-\defcv	tex-src/texinfo.tex	/^\\def\\defcv #1 {\\def\\defcvtype{#1}%$/
-\defcvarheader	tex-src/texinfo.tex	/^\\def\\defcvarheader #1#2#3{%$/
-\defcvx	tex-src/texinfo.tex	/^\\def\\defcvx #1 {\\errmessage{@defcvx in invalid con/
-\deffn	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
-\deffnheader	tex-src/texinfo.tex	/^\\def\\deffnheader #1#2#3{\\doind {fn}{\\code{#2}}%$/
-\deffnx	tex-src/texinfo.tex	/^\\def\\deffnx #1 {\\errmessage{@deffnx in invalid con/
-\defindex	tex-src/texinfo.tex	/^\\def\\defindex{\\parsearg\\newindex}$/
-\defivar	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
-\defivarheader	tex-src/texinfo.tex	/^\\def\\defivarheader #1#2#3{%$/
-\defivarx	tex-src/texinfo.tex	/^\\def\\defivarx #1 {\\errmessage{@defivarx in invalid/
-\defmac	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
-\defmacheader	tex-src/texinfo.tex	/^\\def\\defmacheader #1#2{\\doind {fn}{\\code{#1}}% Mak/
-\defmacx	tex-src/texinfo.tex	/^\\def\\defmacx #1 {\\errmessage{@defmacx in invalid c/
-\defmethod	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
-\defmethodheader	tex-src/texinfo.tex	/^\\def\\defmethodheader #1#2#3{%$/
-\defmethodx	tex-src/texinfo.tex	/^\\def\\defmethodx #1 {\\errmessage{@defmethodx in inv/
-\defmethparsebody	tex-src/texinfo.tex	/^\\def\\defmethparsebody #1#2#3#4 {\\begingroup\\inENV /
-\defname	tex-src/texinfo.tex	/^\\def\\defname #1#2{%$/
-\defop	tex-src/texinfo.tex	/^\\def\\defop #1 {\\def\\defoptype{#1}%$/
-\defopheader	tex-src/texinfo.tex	/^\\def\\defopheader #1#2#3{%$/
-\defopparsebody	tex-src/texinfo.tex	/^\\def\\defopparsebody #1#2#3#4#5 {\\begingroup\\inENV /
-\defopt	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
-\defoptheader	tex-src/texinfo.tex	/^\\def\\defoptheader #1#2{\\doind {vr}{\\code{#1}}% Mak/
-\defoptx	tex-src/texinfo.tex	/^\\def\\defoptx #1 {\\errmessage{@defoptx in invalid c/
-\defopvarparsebody	tex-src/texinfo.tex	/^\\def\\defopvarparsebody #1#2#3#4#5 {\\begingroup\\inE/
-\defopx	tex-src/texinfo.tex	/^\\def\\defopx #1 {\\errmessage{@defopx in invalid con/
-\defparsebody	tex-src/texinfo.tex	/^\\def\\defparsebody #1#2#3{\\begingroup\\inENV% Enviro/
-\defspec	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
-\defspecheader	tex-src/texinfo.tex	/^\\def\\defspecheader #1#2{\\doind {fn}{\\code{#1}}% Ma/
-\defspecx	tex-src/texinfo.tex	/^\\def\\defspecx #1 {\\errmessage{@defspecx in invalid/
-\deftp	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
-\deftpargs	tex-src/texinfo.tex	/^\\def\\deftpargs #1{\\bf \\defvarargs{#1}}$/
-\deftpheader	tex-src/texinfo.tex	/^\\def\\deftpheader #1#2#3{\\doind {tp}{\\code{#2}}%$/
-\deftpx	tex-src/texinfo.tex	/^\\def\\deftpx #1 {\\errmessage{@deftpx in invalid con/
-\deftypefn	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
-\deftypefnheader	tex-src/texinfo.tex	/^\\def\\deftypefnheader #1#2#3{\\deftypefnheaderx{#1}{/
-\deftypefnheaderx	tex-src/texinfo.tex	/^\\def\\deftypefnheaderx #1#2#3 #4\\relax{%$/
-\deftypefnx	tex-src/texinfo.tex	/^\\def\\deftypefnx #1 {\\errmessage{@deftypefnx in inv/
-\deftypefun	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
-\deftypefunargs	tex-src/texinfo.tex	/^\\def\\deftypefunargs #1{%$/
-\deftypefunheader	tex-src/texinfo.tex	/^\\def\\deftypefunheader #1#2{\\deftypefunheaderx{#1}#/
-\deftypefunheaderx	tex-src/texinfo.tex	/^\\def\\deftypefunheaderx #1#2 #3\\relax{%$/
-\deftypeunx	tex-src/texinfo.tex	/^\\def\\deftypeunx #1 {\\errmessage{@deftypeunx in inv/
-\deftypevar	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
-\deftypevarheader	tex-src/texinfo.tex	/^\\def\\deftypevarheader #1#2{%$/
-\deftypevarx	tex-src/texinfo.tex	/^\\def\\deftypevarx #1 {\\errmessage{@deftypevarx in i/
-\deftypevr	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
-\deftypevrheader	tex-src/texinfo.tex	/^\\def\\deftypevrheader #1#2#3{\\doind {vr}{\\code{#3}}/
-\deftypevrx	tex-src/texinfo.tex	/^\\def\\deftypevrx #1 {\\errmessage{@deftypevrx in inv/
-\defun	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
-\defunargs	tex-src/texinfo.tex	/^\\def\\defunargs #1{\\functionparens \\sl$/
-\defunheader	tex-src/texinfo.tex	/^\\def\\defunheader #1#2{\\doind {fn}{\\code{#1}}% Make/
-\defunx	tex-src/texinfo.tex	/^\\def\\defunx #1 {\\errmessage{@defunx in invalid con/
-\defvar	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
-\defvarargs	tex-src/texinfo.tex	/^\\def\\defvarargs #1{\\normalparens #1%$/
-\defvarheader	tex-src/texinfo.tex	/^\\def\\defvarheader #1#2{\\doind {vr}{\\code{#1}}% Mak/
-\defvarparsebody	tex-src/texinfo.tex	/^\\def\\defvarparsebody #1#2#3{\\begingroup\\inENV% Env/
-\defvarx	tex-src/texinfo.tex	/^\\def\\defvarx #1 {\\errmessage{@defvarx in invalid c/
-\defvr	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
-\defvrheader	tex-src/texinfo.tex	/^\\def\\defvrheader #1#2#3{\\doind {vr}{\\code{#2}}%$/
-\defvrparsebody	tex-src/texinfo.tex	/^\\def\\defvrparsebody #1#2#3#4 {\\begingroup\\inENV %$/
-\defvrx	tex-src/texinfo.tex	/^\\def\\defvrx #1 {\\errmessage{@defvrx in invalid con/
-\description	tex-src/texinfo.tex	/^\\def\\description{\\tablez{\\dontindex}{1}{}{}{}{}}$/
-\df	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
-\dfn	tex-src/texinfo.tex	/^\\def\\dfn##1{\\realbackslash dfn {##1}}$/
-\direntry	tex-src/texinfo.tex	/^\\def\\direntry{\\begingroup\\direntryxxx}$/
-\direntryxxx	tex-src/texinfo.tex	/^\\long\\def\\direntryxxx #1\\end direntry{\\endgroup\\ig/
-\display	tex-src/texinfo.tex	/^\\def\\display{\\begingroup\\inENV %This group ends at/
-\dmn	tex-src/texinfo.tex	/^\\def\\dmn#1{\\thinspace #1}$/
-\dobreak	tex-src/texinfo.tex	/^\\def\\dobreak#1#2{\\par\\ifdim\\lastskip<#1\\removelast/
-\dochapentry	tex-src/texinfo.tex	/^\\def\\dochapentry#1#2{%$/
-\docodeindex	tex-src/texinfo.tex	/^\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\si/
-\doind	tex-src/texinfo.tex	/^\\def\\doind #1#2{%$/
-\doindex	tex-src/texinfo.tex	/^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/
-\donoderef	tex-src/texinfo.tex	/^\\def\\donoderef{\\ifx\\lastnode\\relax\\else$/
-\dontindex	tex-src/texinfo.tex	/^\\def\\dontindex #1{}$/
-\dopageno	tex-src/texinfo.tex	/^\\def\\dopageno#1{{\\rm #1}}$/
-\doprintindex	tex-src/texinfo.tex	/^\\def\\doprintindex#1{%$/
-\dosecentry	tex-src/texinfo.tex	/^\\def\\dosecentry#1#2{%$/
-\dosetq	tex-src/texinfo.tex	/^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/
-\doshortpageno	tex-src/texinfo.tex	/^\\def\\doshortpageno#1{{\\rm #1}}$/
-\dosubind	tex-src/texinfo.tex	/^\\def\\dosubind #1#2#3{%$/
-\dosubsecentry	tex-src/texinfo.tex	/^\\def\\dosubsecentry#1#2{%$/
-\dosubsubsecentry	tex-src/texinfo.tex	/^\\def\\dosubsubsecentry#1#2{%$/
-\dots	tex-src/texinfo.tex	/^\\def\\dots{$\\ldots$}$/
-\dots	tex-src/texinfo.tex	/^\\def\\dots{\\realbackslash dots }%$/
-\dots	tex-src/texinfo.tex	/^\\def\\dots{\\realbackslash dots}$/
-\doublecolumnout	tex-src/texinfo.tex	/^\\def\\doublecolumnout{\\splittopskip=\\topskip \\split/
-\emph	tex-src/texinfo.tex	/^\\def\\emph##1{\\realbackslash emph {##1}}$/
-\end	tex-src/texinfo.tex	/^\\def\\end{\\parsearg\\endxxx}$/
-\enddoublecolumns	tex-src/texinfo.tex	/^\\def\\enddoublecolumns{\\output={\\balancecolumns}\\ej/
-\endxxx	tex-src/texinfo.tex	/^\\def\\endxxx #1{%$/
-\entry	tex-src/texinfo.tex	/^\\def\\entry #1#2{\\begingroup$/
-\enumerate	tex-src/texinfo.tex	/^\\def\\enumerate{\\parsearg\\enumeratezzz}$/
-\enumeratey	tex-src/texinfo.tex	/^\\def\\enumeratey #1 #2\\endenumeratey{%$/
-\enumeratezzz	tex-src/texinfo.tex	/^\\def\\enumeratezzz #1{\\enumeratey #1  \\endenumerate/
-\equiv	tex-src/texinfo.tex	/^\\def\\equiv{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/
-\equiv	tex-src/texinfo.tex	/^\\def\\equiv{\\realbackslash equiv}$/
-\error	tex-src/texinfo.tex	/^\\def\\error{\\leavevmode\\lower.7ex\\copy\\errorbox}$/
-\errorE	tex-src/texinfo.tex	/^\\def\\errorE#1{$/
-\evenfooting	tex-src/texinfo.tex	/^\\def\\evenfooting{\\parsearg\\evenfootingxxx}$/
-\evenheading	tex-src/texinfo.tex	/^\\def\\evenheading{\\parsearg\\evenheadingxxx}$/
-\everyfooting	tex-src/texinfo.tex	/^\\def\\everyfooting{\\parsearg\\everyfootingxxx}$/
-\everyheading	tex-src/texinfo.tex	/^\\def\\everyheading{\\parsearg\\everyheadingxxx}$/
-\ewbot	tex-src/texinfo.tex	/^\\def\\ewbot{\\vrule height0pt depth\\cornerthick widt/
-\ewtop	tex-src/texinfo.tex	/^\\def\\ewtop{\\vrule height\\cornerthick depth0pt widt/
-\exdent	tex-src/texinfo.tex	/^\\def\\exdent{\\parsearg\\exdentyyy}$/
-\exdentyyy	tex-src/texinfo.tex	/^\\def\\exdentyyy #1{{\\hfil\\break\\hbox{\\kern -\\exdent/
-\expansion	tex-src/texinfo.tex	/^\\def\\expansion{\\leavevmode\\raise.1ex\\hbox to 1em{\\/
-\expansion	tex-src/texinfo.tex	/^\\def\\expansion{\\realbackslash expansion}$/
-\file	tex-src/texinfo.tex	/^\\def\\file##1{\\realbackslash file {##1}}$/
-\file	tex-src/texinfo.tex	/^\\def\\file##1{\\realbackslash file {##1}}%$/
-\finalout	tex-src/texinfo.tex	/^\\def\\finalout{\\overfullrule=0pt}$/
-\findex	tex-src/texinfo.tex	/^\\def\\findex {\\fnindex}$/
-\finishtitlepage	tex-src/texinfo.tex	/^\\def\\finishtitlepage{%$/
-\flushcr	tex-src/texinfo.tex	/^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else /
-\flushleft	tex-src/texinfo.tex	/^\\def\\flushleft{%$/
-\flushright	tex-src/texinfo.tex	/^\\def\\flushright{%$/
-\fnitemindex	tex-src/texinfo.tex	/^\\def\\fnitemindex #1{\\doind {fn}{\\code{#1}}}%$/
-\format	tex-src/texinfo.tex	/^\\def\\format{\\begingroup\\inENV %This group ends at /
-\frenchspacing	tex-src/texinfo.tex	/^\\def\\frenchspacing{\\sfcode46=1000 \\sfcode63=1000 \\/
-\ftable	tex-src/texinfo.tex	/^\\def\\ftable{\\begingroup\\inENV\\obeylines\\obeyspaces/
-\gloggingall	tex-src/texinfo.tex	/^\\def\\gloggingall{\\begingroup \\globaldefs = 1 \\logg/
-\group	tex-src/texinfo.tex	/^\\def\\group{\\begingroup$/
-\gtr	tex-src/texinfo.tex	/^\\def\\gtr{\\realbackslash gtr}$/
-\gtr	tex-src/texinfo.tex	/^\\def\\gtr{\\realbackslash gtr}%$/
-\hat	tex-src/texinfo.tex	/^\\def\\hat{\\realbackslash hat}$/
-\hat	tex-src/texinfo.tex	/^\\def\\hat{\\realbackslash hat}%$/
-\heading	tex-src/texinfo.tex	/^\\def\\heading{\\parsearg\\secheadingi}$/
-\headings	tex-src/texinfo.tex	/^\\def\\headings #1 {\\csname HEADINGS#1\\endcsname}$/
-\i	tex-src/texinfo.tex	/^\\def\\i##1{\\realbackslash i {##1}}$/
-\i	tex-src/texinfo.tex	/^\\def\\i##1{\\realbackslash i {##1}}%$/
-\ifclear	tex-src/texinfo.tex	/^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/
-\ifclearfail	tex-src/texinfo.tex	/^\\def\\ifclearfail{\\begingroup\\ignoresections\\ifclea/
-\ifclearfailxxx	tex-src/texinfo.tex	/^\\long\\def\\ifclearfailxxx #1\\end ifclear{\\endgroup\\/
-\ifclearxxx	tex-src/texinfo.tex	/^\\def\\ifclearxxx #1{\\endgroup$/
-\ifinfo	tex-src/texinfo.tex	/^\\def\\ifinfo{\\begingroup\\ignoresections\\ifinfoxxx}$/
-\ifinfoxxx	tex-src/texinfo.tex	/^\\long\\def\\ifinfoxxx #1\\end ifinfo{\\endgroup\\ignore/
-\ifset	tex-src/texinfo.tex	/^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/
-\ifsetfail	tex-src/texinfo.tex	/^\\def\\ifsetfail{\\begingroup\\ignoresections\\ifsetfai/
-\ifsetfailxxx	tex-src/texinfo.tex	/^\\long\\def\\ifsetfailxxx #1\\end ifset{\\endgroup\\igno/
-\ifsetxxx	tex-src/texinfo.tex	/^\\def\\ifsetxxx #1{\\endgroup$/
-\iftex	tex-src/texinfo.tex	/^\\def\\iftex{}$/
-\ifusingtt	tex-src/texinfo.tex	/^\\def\\ifusingtt#1#2{\\ifdim \\fontdimen3\\the\\font=0pt/
-\ignore	tex-src/texinfo.tex	/^\\def\\ignore{\\begingroup\\ignoresections$/
-\ignoresections	tex-src/texinfo.tex	/^\\def\\ignoresections{%$/
-\ignorexxx	tex-src/texinfo.tex	/^\\long\\def\\ignorexxx #1\\end ignore{\\endgroup\\ignore/
-\ii	tex-src/texinfo.tex	/^\\def\\ii#1{{\\it #1}}		% italic font$/
-\inENV	tex-src/texinfo.tex	/^\\newif\\ifENV \\ENVfalse \\def\\inENV{\\ifENV\\relax\\els/
-\include	tex-src/texinfo.tex	/^\\def\\include{\\parsearg\\includezzz}$/
-\includezzz	tex-src/texinfo.tex	/^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/
-\indexbackslash	tex-src/texinfo.tex	/^  \\def\\indexbackslash{\\rawbackslashxx}$/
-\indexdotfill	tex-src/texinfo.tex	/^\\def\\indexdotfill{\\cleaders$/
-\indexdummies	tex-src/texinfo.tex	/^\\def\\indexdummies{%$/
-\indexdummydots	tex-src/texinfo.tex	/^\\def\\indexdummydots{...}$/
-\indexdummyfont	tex-src/texinfo.tex	/^\\def\\indexdummyfont#1{#1}$/
-\indexdummytex	tex-src/texinfo.tex	/^\\def\\indexdummytex{TeX}$/
-\indexfonts	tex-src/texinfo.tex	/^\\def\\indexfonts{%$/
-\indexnofonts	tex-src/texinfo.tex	/^\\def\\indexnofonts{%$/
-\infoappendix	tex-src/texinfo.tex	/^\\def\\infoappendix{\\parsearg\\appendixzzz}$/
-\infoappendixsec	tex-src/texinfo.tex	/^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/
-\infoappendixsubsec	tex-src/texinfo.tex	/^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/
-\infoappendixsubsubsec	tex-src/texinfo.tex	/^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/
-\infochapter	tex-src/texinfo.tex	/^\\def\\infochapter{\\parsearg\\chapterzzz}$/
-\inforef	tex-src/texinfo.tex	/^\\def\\inforef #1{\\inforefzzz #1,,,,**}$/
-\inforefzzz	tex-src/texinfo.tex	/^\\def\\inforefzzz #1,#2,#3,#4**{See Info file \\file{/
-\infosection	tex-src/texinfo.tex	/^\\def\\infosection{\\parsearg\\sectionzzz}$/
-\infosubsection	tex-src/texinfo.tex	/^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/
-\infosubsubsection	tex-src/texinfo.tex	/^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/
-\infotop	tex-src/texinfo.tex	/^\\def\\infotop{\\parsearg\\unnumberedzzz}$/
-\infounnumbered	tex-src/texinfo.tex	/^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/
-\infounnumberedsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsec{\\parsearg\\unnumberedseczzz}/
-\infounnumberedsubsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsubsec{\\parsearg\\unnumberedsubs/
-\infounnumberedsubsubsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsubsubsec{\\parsearg\\unnumbereds/
-\initial	tex-src/texinfo.tex	/^\\def\\initial #1{%$/
-\internalBitem	tex-src/texinfo.tex	/^\\def\\internalBitem{\\smallbreak \\parsearg\\itemzzz}$/
-\internalBitemx	tex-src/texinfo.tex	/^\\def\\internalBitemx{\\par \\parsearg\\itemzzz}$/
-\internalBkitem	tex-src/texinfo.tex	/^\\def\\internalBkitem{\\smallbreak \\parsearg\\kitemzzz/
-\internalBkitemx	tex-src/texinfo.tex	/^\\def\\internalBkitemx{\\par \\parsearg\\kitemzzz}$/
-\internalBxitem	tex-src/texinfo.tex	/^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/
-\internalBxitemx	tex-src/texinfo.tex	/^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/
-\internalsetq	tex-src/texinfo.tex	/^\\def\\internalsetq #1#2{'xrdef {#1}{\\csname #2\\endc/
-\item	tex-src/texinfo.tex	/^\\def\\item{\\errmessage{@item while not in a table}}/
-\itemcontents	tex-src/texinfo.tex	/^\\def\\itemcontents{#1}%$/
-\itemfont	tex-src/texinfo.tex	/^\\def\\itemfont{#2}%$/
-\itemize	tex-src/texinfo.tex	/^\\def\\itemize{\\parsearg\\itemizezzz}$/
-\itemizeitem	tex-src/texinfo.tex	/^\\def\\itemizeitem{%$/
-\itemizey	tex-src/texinfo.tex	/^\\def\\itemizey #1#2{%$/
-\itemizezzz	tex-src/texinfo.tex	/^\\def\\itemizezzz #1{%$/
-\itemx	tex-src/texinfo.tex	/^\\def\\itemx{\\errmessage{@itemx while not in a table/
-\itemzzz	tex-src/texinfo.tex	/^\\def\\itemzzz #1{\\begingroup %$/
-\kbd	tex-src/texinfo.tex	/^\\def\\kbd##1{\\realbackslash kbd {##1}}$/
-\kbd	tex-src/texinfo.tex	/^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/
-\kbd	tex-src/texinfo.tex	/^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/
-\kbdfoo	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
-\key	tex-src/texinfo.tex	/^\\def\\key #1{{\\tt \\exhyphenpenalty=10000\\uppercase{/
-\key	tex-src/texinfo.tex	/^\\def\\key##1{\\realbackslash key {##1}}$/
-\key	tex-src/texinfo.tex	/^\\def\\key##1{\\realbackslash key {##1}}%$/
-\kindex	tex-src/texinfo.tex	/^\\def\\kindex {\\kyindex}$/
-\kitem	tex-src/texinfo.tex	/^\\def\\kitem{\\errmessage{@kitem while not in a table/
-\kitemx	tex-src/texinfo.tex	/^\\def\\kitemx{\\errmessage{@kitemx while not in a tab/
-\kitemzzz	tex-src/texinfo.tex	/^\\def\\kitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/
-\l	tex-src/texinfo.tex	/^\\def\\l#1{{\\li #1}\\null}		% $/
-\labelspace	tex-src/texinfo.tex	/^\\def\\labelspace{\\hskip1em \\relax}$/
-\lbrb	tex-src/texinfo.tex	/^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/
-\less	tex-src/texinfo.tex	/^\\def\\less{\\realbackslash less}$/
-\less	tex-src/texinfo.tex	/^\\def\\less{\\realbackslash less}%$/
-\linenumber	tex-src/texinfo.tex	/^  \\def\\linenumber{\\the\\inputlineno:\\space}$/
-\lisp	tex-src/texinfo.tex	/^\\def\\lisp{\\aboveenvbreak$/
-\loggingall	tex-src/texinfo.tex	/^\\def\\loggingall{\\tracingcommands2 \\tracingstats2 $/
-\losespace	tex-src/texinfo.tex	/^\\def\\losespace #1{#1}$/
-\lowercaseenumerate	tex-src/texinfo.tex	/^\\def\\lowercaseenumerate{%$/
-\lvvmode	tex-src/texinfo.tex	/^\\def\\lvvmode{\\vbox to 0pt{}}$/
-\majorheading	tex-src/texinfo.tex	/^\\def\\majorheading{\\parsearg\\majorheadingzzz}$/
-\majorheadingzzz	tex-src/texinfo.tex	/^\\def\\majorheadingzzz #1{%$/
-\math	tex-src/texinfo.tex	/^\\def\\math#1{\\implicitmath #1\\implicitmath}$/
-\menu	tex-src/texinfo.tex	/^\\long\\def\\menu #1\\end menu{}$/
-\minus	tex-src/texinfo.tex	/^\\def\\minus{$-$}$/
-\mylbrace	tex-src/texinfo.tex	/^\\def\\mylbrace {{\\tt \\char '173}}$/
-\myrbrace	tex-src/texinfo.tex	/^\\def\\myrbrace {{\\tt \\char '175}}$/
-\need	tex-src/texinfo.tex	/^\\def\\need{\\parsearg\\needx}$/
-\needx	tex-src/texinfo.tex	/^\\def\\needx#1{%$/
-\newcodeindex	tex-src/texinfo.tex	/^\\def\\newcodeindex #1{$/
-\newindex	tex-src/texinfo.tex	/^\\def\\newindex #1{$/
-\next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
-\nm	tex-src/testenv.tex	/^\\newcommand{\\nm}[2]{\\nomenclature{#1}{#2}}$/
-\node	tex-src/texinfo.tex	/^\\def\\node{\\ENVcheck\\parsearg\\nodezzz}$/
-\nodexxx[	tex-src/texinfo.tex	/^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/
-\nodezzz	tex-src/texinfo.tex	/^\\def\\nodezzz#1{\\nodexxx [#1,]}$/
-\nofillexdent	tex-src/texinfo.tex	/^\\def\\nofillexdent{\\parsearg\\nofillexdentyyy}$/
-\nofillexdentyyy	tex-src/texinfo.tex	/^\\def\\nofillexdentyyy #1{{\\advance \\leftskip by -\\e/
-\normalbackslash	tex-src/texinfo.tex	/^\\def\\normalbackslash{{\\tt\\rawbackslashxx}}$/
-\normalcaret	tex-src/texinfo.tex	/^\\def\\normalcaret{^}$/
-\normaldoublequote	tex-src/texinfo.tex	/^\\def\\normaldoublequote{"}$/
-\normalgreater	tex-src/texinfo.tex	/^\\def\\normalgreater{>}$/
-\normalless	tex-src/texinfo.tex	/^\\def\\normalless{<}$/
-\normalplus	tex-src/texinfo.tex	/^\\def\\normalplus{+}$/
-\normaltilde	tex-src/texinfo.tex	/^\\def\\normaltilde{~}$/
-\normalunderscore	tex-src/texinfo.tex	/^\\def\\normalunderscore{_}$/
-\normalverticalbar	tex-src/texinfo.tex	/^\\def\\normalverticalbar{|}$/
-\nsbot	tex-src/texinfo.tex	/^\\def\\nsbot{\\vbox$/
-\nstop	tex-src/texinfo.tex	/^\\def\\nstop{\\vbox$/
-\numberedsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsec{\\parsearg\\seczzz}$/
-\numberedsubsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsubsec{\\parsearg\\numberedsubsec/
-\numberedsubseczzz	tex-src/texinfo.tex	/^\\def\\numberedsubseczzz #1{\\seccheck{subsection}%$/
-\numberedsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsubsubsec{\\parsearg\\numberedsub/
-\numberedsubsubseczzz	tex-src/texinfo.tex	/^\\def\\numberedsubsubseczzz #1{\\seccheck{subsubsecti/
-\numericenumerate	tex-src/texinfo.tex	/^\\def\\numericenumerate{%$/
-\oddfooting	tex-src/texinfo.tex	/^\\def\\oddfooting{\\parsearg\\oddfootingxxx}$/
-\oddheading	tex-src/texinfo.tex	/^\\def\\oddheading{\\parsearg\\oddheadingxxx}$/
-\onepageout	tex-src/texinfo.tex	/^\\def\\onepageout#1{\\hoffset=\\normaloffset$/
-\opencontents	tex-src/texinfo.tex	/^\\def\\opencontents{\\openout \\contentsfile = \\jobnam/
-\openindices	tex-src/texinfo.tex	/^\\def\\openindices{%$/
-\opnr	tex-src/texinfo.tex	/^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} /
-\page	tex-src/texinfo.tex	/^   \\def\\page{%$/
-\page	tex-src/texinfo.tex	/^\\def\\page{\\par\\vfill\\supereject}$/
-\pagebody	tex-src/texinfo.tex	/^\\def\\pagebody#1{\\vbox to\\pageheight{\\boxmaxdepth=\\/
-\pagesofar	tex-src/texinfo.tex	/^\\def\\pagesofar{\\unvbox\\partialpage %$/
-\parsearg	tex-src/texinfo.tex	/^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/
-\parseargline	tex-src/texinfo.tex	/^\\def\\parseargline{\\begingroup \\obeylines \\parsearg/
-\parseargx	tex-src/texinfo.tex	/^\\def\\parseargx{%$/
-\pindex	tex-src/texinfo.tex	/^\\def\\pindex {\\pgindex}$/
-\plainsecheading	tex-src/texinfo.tex	/^\\def\\plainsecheading #1{\\secheadingi {#1}}$/
-\point	tex-src/texinfo.tex	/^\\def\\point{$\\star$}$/
-\primary	tex-src/texinfo.tex	/^\\def\\primary #1{\\line{#1\\hfil}}$/
-\print	tex-src/texinfo.tex	/^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/
-\print	tex-src/texinfo.tex	/^\\def\\print{\\realbackslash print}$/
-\printedmanual	tex-src/texinfo.tex	/^\\def\\printedmanual{\\ignorespaces #5}%$/
-\printedmanual	tex-src/texinfo.tex	/^section ``\\printednodename'' in \\cite{\\printedmanu/
-\printednodename	tex-src/texinfo.tex	/^\\def\\printednodename{\\ignorespaces #1}%$/
-\printednodename	tex-src/texinfo.tex	/^\\def\\printednodename{\\ignorespaces #3}%$/
-\printindex	tex-src/texinfo.tex	/^\\def\\printindex{\\parsearg\\doprintindex}$/
-\pxref	tex-src/texinfo.tex	/^\\def\\pxref#1{see \\xrefX[#1,,,,,,,]}$/
-\quotation	tex-src/texinfo.tex	/^\\def\\quotation{%$/
-\r	tex-src/texinfo.tex	/^\\def\\r##1{\\realbackslash r {##1}}$/
-\r	tex-src/texinfo.tex	/^\\def\\r##1{\\realbackslash r {##1}}%$/
-\r	tex-src/texinfo.tex	/^\\def\\r#1{{\\rm #1}}		% roman font$/
-\rawbackslashxx	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/
-\rawbackslashxx	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}%$/
-\readauxfile	tex-src/texinfo.tex	/^\\def\\readauxfile{%$/
-\ref	tex-src/texinfo.tex	/^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/
-\refx	tex-src/texinfo.tex	/^\\def\\refx#1#2{%$/
-\resetmathfonts	tex-src/texinfo.tex	/^\\def\\resetmathfonts{%$/
-\result	tex-src/texinfo.tex	/^\\def\\result{\\leavevmode\\raise.15ex\\hbox to 1em{\\hf/
-\result	tex-src/texinfo.tex	/^\\def\\result{\\realbackslash result}$/
-\rm	tex-src/texinfo.tex	/^\\def\\rm{\\realbackslash rm }%$/
-\samp	tex-src/texinfo.tex	/^\\def\\samp #1{`\\tclose{#1}'\\null}$/
-\samp	tex-src/texinfo.tex	/^\\def\\samp##1{\\realbackslash samp {##1}}$/
-\samp	tex-src/texinfo.tex	/^\\def\\samp##1{\\realbackslash samp {##1}}%$/
-\sc	tex-src/texinfo.tex	/^\\def\\sc#1{{\\smallcaps#1}}	% smallcaps font$/
-\seccheck	tex-src/texinfo.tex	/^\\def\\seccheck#1{\\if \\pageno<0 %$/
-\secentry	tex-src/texinfo.tex	/^      \\def\\secentry ##1##2##3##4{}$/
-\secentry	tex-src/texinfo.tex	/^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/
-\secentryfonts	tex-src/texinfo.tex	/^\\def\\secentryfonts{\\textfonts}$/
-\secfonts	tex-src/texinfo.tex	/^\\def\\secfonts{%$/
-\secheading	tex-src/texinfo.tex	/^\\def\\secheading #1#2#3{\\secheadingi {#2.#3\\enspace/
-\secheadingbreak	tex-src/texinfo.tex	/^\\def\\secheadingbreak{\\dobreak \\secheadingskip {-10/
-\secheadingi	tex-src/texinfo.tex	/^\\def\\secheadingi #1{{\\advance \\secheadingskip by \\/
-\secondary	tex-src/texinfo.tex	/^\\def\\secondary #1#2{$/
-\seczzz	tex-src/texinfo.tex	/^\\def\\seczzz #1{\\seccheck{section}%$/
-\set	tex-src/texinfo.tex	/^\\def\\set{\\parsearg\\setxxx}$/
-\setchapternewpage	tex-src/texinfo.tex	/^\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcs/
-\setchapterstyle	tex-src/texinfo.tex	/^\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname/
-\setdeffont	tex-src/texinfo.tex	/^\\def\\setdeffont #1 {\\csname DEF#1\\endcsname}$/
-\setfilename	tex-src/texinfo.tex	/^\\def\\setfilename{%$/
-\setref	tex-src/texinfo.tex	/^\\def\\setref#1{%$/
-\settitle	tex-src/texinfo.tex	/^\\def\\settitle{\\parsearg\\settitlezzz}$/
-\settitlezzz	tex-src/texinfo.tex	/^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/
-\setxxx	tex-src/texinfo.tex	/^\\def\\setxxx #1{$/
-\sf	tex-src/texinfo.tex	/^\\def\\sf{\\fam=\\sffam \\tensf}$/
-\sf	tex-src/texinfo.tex	/^\\def\\sf{\\realbackslash sf}%$/
-\shortchapentry	tex-src/texinfo.tex	/^\\def\\shortchapentry#1#2#3{%$/
-\shortunnumberedentry	tex-src/texinfo.tex	/^\\def\\shortunnumberedentry#1#2{%$/
-\singlecodeindexer	tex-src/texinfo.tex	/^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/
-\singleindexer	tex-src/texinfo.tex	/^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/
-\singlespace	tex-src/texinfo.tex	/^\\def\\singlespace{%$/
-\sl	tex-src/texinfo.tex	/^\\def\\sl{\\realbackslash sl }%$/
-\smallbook	tex-src/texinfo.tex	/^\\def\\smallbook{$/
-\smalllispx	tex-src/texinfo.tex	/^\\def\\smalllispx{\\aboveenvbreak\\begingroup\\inENV$/
-\smartitalic	tex-src/texinfo.tex	/^\\def\\smartitalic#1{{\\sl #1}\\futurelet\\next\\smartit/
-\smartitalicx	tex-src/texinfo.tex	/^\\def\\smartitalicx{\\ifx\\next,\\else\\ifx\\next-\\else\\i/
-\sp	tex-src/texinfo.tex	/^\\def\\sp{\\parsearg\\spxxx}$/
-\splitoff	tex-src/texinfo.tex	/^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/
-\spxxx	tex-src/texinfo.tex	/^\\def\\spxxx #1{\\par \\vskip #1\\baselineskip}$/
-\startcontents	tex-src/texinfo.tex	/^\\def\\startcontents#1{%$/
-\startenumeration	tex-src/texinfo.tex	/^\\def\\startenumeration#1{%$/
-\subheading	tex-src/texinfo.tex	/^\\def\\subheading{\\parsearg\\subsecheadingi}$/
-\subsecentry	tex-src/texinfo.tex	/^      \\def\\subsecentry ##1##2##3##4##5{}$/
-\subsecentry	tex-src/texinfo.tex	/^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/
-\subsecfonts	tex-src/texinfo.tex	/^\\def\\subsecfonts{%$/
-\subsecheading	tex-src/texinfo.tex	/^\\def\\subsecheading #1#2#3#4{\\subsecheadingi {#2.#3/
-\subsecheadingbreak	tex-src/texinfo.tex	/^\\def\\subsecheadingbreak{\\dobreak \\subsecheadingski/
-\subsecheadingi	tex-src/texinfo.tex	/^\\def\\subsecheadingi #1{{\\advance \\subsecheadingski/
-\subsubheading	tex-src/texinfo.tex	/^\\def\\subsubheading{\\parsearg\\subsubsecheadingi}$/
-\subsubsecentry	tex-src/texinfo.tex	/^      \\def\\subsubsecentry ##1##2##3##4##5##6{}$/
-\subsubsecentry	tex-src/texinfo.tex	/^\\def\\subsubsecentry#1#2#3#4#5#6{%$/
-\subsubsecfonts	tex-src/texinfo.tex	/^\\def\\subsubsecfonts{\\subsecfonts} % Maybe this sho/
-\subsubsecheading	tex-src/texinfo.tex	/^\\def\\subsubsecheading #1#2#3#4#5{\\subsubsecheading/
-\subsubsecheadingi	tex-src/texinfo.tex	/^\\def\\subsubsecheadingi #1{{\\advance \\subsecheading/
-\subtitle	tex-src/texinfo.tex	/^   \\def\\subtitle{\\parsearg\\subtitlezzz}%$/
-\subtitlefont	tex-src/texinfo.tex	/^   \\def\\subtitlefont{\\subtitlerm \\normalbaselinesk/
-\subtitlezzz	tex-src/texinfo.tex	/^   \\def\\subtitlezzz##1{{\\subtitlefont \\rightline{#/
-\summarycontents	tex-src/texinfo.tex	/^\\outer\\def\\summarycontents{%$/
-\supereject	tex-src/texinfo.tex	/^\\def\\supereject{\\par\\penalty -20000\\footnoteno =0 /
-\syncodeindex	tex-src/texinfo.tex	/^\\def\\syncodeindex #1 #2 {%$/
-\synindex	tex-src/texinfo.tex	/^\\def\\synindex #1 #2 {%$/
-\t	tex-src/texinfo.tex	/^\\def\\t##1{\\realbackslash r {##1}}%$/
-\t	tex-src/texinfo.tex	/^\\def\\t#1{{\\tt \\exhyphenpenalty=10000\\rawbackslash /
-\table	tex-src/texinfo.tex	/^\\def\\table{\\begingroup\\inENV\\obeylines\\obeyspaces\\/
-\tablez	tex-src/texinfo.tex	/^\\def\\tablez #1#2#3#4#5#6{%$/
-\tclose	tex-src/texinfo.tex	/^\\def\\tclose##1{\\realbackslash tclose {##1}}$/
-\tclose	tex-src/texinfo.tex	/^\\def\\tclose##1{\\realbackslash tclose {##1}}%$/
-\tclose	tex-src/texinfo.tex	/^\\def\\tclose#1{{\\rm \\tcloserm=\\fontdimen2\\font \\tt /
-\tex	tex-src/texinfo.tex	/^\\def\\tex{\\begingroup$/
-\texinfoversion	tex-src/texinfo.tex	/^\\def\\texinfoversion{2.73}$/
-\textfonts	tex-src/texinfo.tex	/^\\def\\textfonts{%$/
-\thearg	tex-src/texinfo.tex	/^  \\def\\thearg{#1}%$/
-\thearg	tex-src/texinfo.tex	/^  \\ifx\\thearg\\empty \\def\\thearg{1}\\fi$/
-\thischapter	tex-src/texinfo.tex	/^   \\unnumbchapmacro{#1}\\def\\thischapter{}%$/
-\thischapter	tex-src/texinfo.tex	/^\\def\\thischapter{} \\def\\thissection{}$/
-\thischaptername	tex-src/texinfo.tex	/^\\def\\thischaptername{No Chapter Title}$/
-\thisfile	tex-src/texinfo.tex	/^\\def\\thisfile{}$/
-\thistitle	tex-src/texinfo.tex	/^\\def\\thistitle{No Title}$/
-\tie	tex-src/texinfo.tex	/^\\def\\tie{\\penalty 10000\\ }     % Save plain tex de/
-\tindex	tex-src/texinfo.tex	/^\\def\\tindex {\\tpindex}$/
-\title	tex-src/texinfo.tex	/^   \\def\\title{\\parsearg\\titlezzz}%$/
-\titlefont	tex-src/texinfo.tex	/^\\def\\titlefont#1{{\\titlerm #1}}$/
-\titlepage	tex-src/texinfo.tex	/^\\def\\titlepage{\\begingroup \\parindent=0pt \\textfon/
-\titlezzz	tex-src/texinfo.tex	/^   \\def\\titlezzz##1{\\leftline{\\titlefont{##1}}$/
-\today	tex-src/texinfo.tex	/^\\def\\today{\\number\\day\\space$/
-\top	tex-src/texinfo.tex	/^\\outer\\def\\top{\\parsearg\\unnumberedzzz}$/
-\tt	tex-src/texinfo.tex	/^\\def\\tt{\\realbackslash tt}$/
-\tt	tex-src/texinfo.tex	/^\\def\\tt{\\realbackslash tt}%$/
-\turnoffactive	tex-src/texinfo.tex	/^\\def\\turnoffactive{\\let"=\\normaldoublequote$/
-\unnchfopen	tex-src/texinfo.tex	/^\\def\\unnchfopen #1{%$/
-\unnchfplain	tex-src/texinfo.tex	/^\\def\\unnchfplain #1{%$/
-\unnumbchapentry	tex-src/texinfo.tex	/^\\def\\unnumbchapentry#1#2{\\dochapentry{#1}{#2}}$/
-\unnumbered	tex-src/texinfo.tex	/^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/
-\unnumberedsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsec{\\parsearg\\unnumberedseczz/
-\unnumberedseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedseczzz #1{\\seccheck{unnumberedsec}%/
-\unnumberedsubsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsubsec{\\parsearg\\unnumberedsu/
-\unnumberedsubseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedsubseczzz #1{\\seccheck{unnumberedsu/
-\unnumberedsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsubsubsec{\\parsearg\\unnumbere/
-\unnumberedsubsubseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedsubsubseczzz #1{\\seccheck{unnumbere/
-\unnumberedzzz	tex-src/texinfo.tex	/^\\def\\unnumberedzzz #1{\\seccheck{unnumbered}%$/
-\unnumbnoderef	tex-src/texinfo.tex	/^\\def\\unnumbnoderef{\\ifx\\lastnode\\relax\\else$/
-\unnumbsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsecentry ##1##2{}$/
-\unnumbsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsecentry#1#2{\\dosecentry{#1}{#2}}$/
-\unnumbsetref	tex-src/texinfo.tex	/^\\def\\unnumbsetref#1{%$/
-\unnumbsubsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsubsecentry ##1##2{}$/
-\unnumbsubsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsubsecentry#1#2{\\dosubsecentry{#1}{#2}}/
-\unnumbsubsubsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsubsubsecentry ##1##2{}$/
-\unnumbsubsubsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsubsubsecentry#1#2{\\dosubsubsecentry{#1/
-\uppercaseenumerate	tex-src/texinfo.tex	/^\\def\\uppercaseenumerate{%$/
-\var	tex-src/texinfo.tex	/^\\def\\var##1{\\realbackslash var {##1}}$/
-\var	tex-src/texinfo.tex	/^\\def\\var##1{\\realbackslash var {##1}}%$/
-\vindex	tex-src/texinfo.tex	/^\\def\\vindex {\\vrindex}$/
-\vritemindex	tex-src/texinfo.tex	/^\\def\\vritemindex #1{\\doind {vr}{\\code{#1}}}%$/
-\vtable	tex-src/texinfo.tex	/^\\def\\vtable{\\begingroup\\inENV\\obeylines\\obeyspaces/
-\w	tex-src/texinfo.tex	/^\\def\\w#1{\\leavevmode\\hbox{#1}}$/
-\w	tex-src/texinfo.tex	/^\\def\\w{\\realbackslash w }%$/
-\w	tex-src/texinfo.tex	/^\\def\\w{\\realbackslash w}$/
-\xitem	tex-src/texinfo.tex	/^\\def\\xitem{\\errmessage{@xitem while not in a table/
-\xitemx	tex-src/texinfo.tex	/^\\def\\xitemx{\\errmessage{@xitemx while not in a tab/
-\xitemzzz	tex-src/texinfo.tex	/^\\def\\xitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/
-\xkey	tex-src/texinfo.tex	/^\\def\\xkey{\\key}$/
-\xrdef	tex-src/texinfo.tex	/^\\def\\xrdef #1#2{$/
-\xref	tex-src/texinfo.tex	/^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/
-\xrefX[	tex-src/texinfo.tex	/^\\def\\xrefX[#1,#2,#3,#4,#5,#6]{\\begingroup%$/
+]	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
 ^	tex-src/texinfo.tex	/^\\def^{{\\tt \\hat}}$/
+^	tex-src/texinfo.tex	/^\\let^=\\normalcaret$/
+_	tex-src/texinfo.tex	/^\\def\\_{\\lvvmode \\kern.06em \\vbox{\\hrule width.3em /
+_	tex-src/texinfo.tex	/^\\def\\_{{\\realbackslash _}}%$/
 _	tex-src/texinfo.tex	/^\\def_{\\ifusingtt\\normalunderscore\\_}$/
+_	tex-src/texinfo.tex	/^\\let_=\\normalunderscore$/
 _GETOPT_H	c-src/getopt.h	19
 _GNU_SOURCE	c-src/etags.c	94
 _REGEX_H	c-src/emacs/src/regex.h	21
@@ -2263,6 +1789,7 @@ _realloc	c-src/emacs/src/gmalloc.c	/^_realloc (void *ptr, size_t size)$/
 _realloc_internal	c-src/emacs/src/gmalloc.c	/^_realloc_internal (void *ptr, size_t size)$/
 _realloc_internal_nolock	c-src/emacs/src/gmalloc.c	/^_realloc_internal_nolock (void *ptr, size_t size)$/
 `	ruby-src/test.rb	/^        def `(command)$/
+`	tex-src/texinfo.tex	/^\\def\\`{{`}}$/
 a	c-src/h.h	103
 a	c-src/h.h	40
 a	c.c	/^a ()$/
@@ -2298,6 +1825,7 @@ abbrevs_changed	c-src/abbrev.c	56
 abc	c-src/h.h	33
 abc	c-src/h.h	37
 abort-recursive-edit	c-src/emacs/src/keyboard.c	/^DEFUN ("abort-recursive-edit", Fabort_recursive_ed/
+aboveenvbreak	tex-src/texinfo.tex	/^\\def\\aboveenvbreak{{\\advance\\aboveenvskipamount by/
 abs/f	ada-src/etags-test-for.ada	/^   function "abs"   (Right : Complex) return Real'/
 absolute_dirname	c-src/etags.c	/^absolute_dirname (char *file, char *dir)$/
 absolute_filename	c-src/etags.c	/^absolute_filename (char *file, char *dir)$/
@@ -2346,6 +1874,8 @@ accu_warning	merc-src/accumulator.m	/^:- type accu_warning$/
 act	prol-src/natded.prolog	/^act(OutForm,OutSyn,Ws):-$/
 action	prol-src/natded.prolog	/^action(KeyVals):-$/
 active_maps	c-src/emacs/src/keyboard.c	/^active_maps (Lisp_Object first_event)$/
+activedoublequote	tex-src/texinfo.tex	/^\\def\\activedoublequote{{\\tt \\char '042}}$/
+activeparens	tex-src/texinfo.tex	/^\\def\\activeparens{%$/
 actout	prol-src/natded.prolog	/^actout('Text',Trees):-$/
 addArchs	objc-src/PackInsp.m	/^-(void)addArchs:(const char *)string$/
 addPOReader	php-src/lce_functions.php	/^      function addPOReader($d_name, &$por)$/
@@ -2358,6 +1888,8 @@ add_user_signal	c-src/emacs/src/keyboard.c	/^add_user_signal (int sig, const cha
 addnoise	html-src/algrthms.html	/^Adding Noise to the$/
 address	y-src/cccp.y	113
 adjust_point_for_property	c-src/emacs/src/keyboard.c	/^adjust_point_for_property (ptrdiff_t last_pt, bool/
+afourpaper	tex-src/texinfo.tex	/^\\def\\afourpaper{$/
+afterenvbreak	tex-src/texinfo.tex	/^\\def\\afterenvbreak{\\endgraf \\ifdim\\lastskip<\\above/
 agent	cp-src/clheir.hpp	75
 algorithms	html-src/algrthms.html	/^Description$/
 alias	c-src/emacs/src/lisp.h	688
@@ -2372,6 +1904,9 @@ alive	cp-src/conway.hpp	7
 all_kboards	c-src/emacs/src/keyboard.c	86
 allocate_kboard	c-src/emacs/src/keyboard.c	/^allocate_kboard (Lisp_Object type)$/
 allocated	c-src/emacs/src/regex.h	344
+alphaenumerate	tex-src/texinfo.tex	/^\\def\\alphaenumerate{\\enumerate{a}}$/
+ampnr	tex-src/texinfo.tex	/^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} /
+amprm	tex-src/texinfo.tex	/^\\gdef\\amprm#1 {{\\rm\\&#1}\\let(=\\oprm \\let)=\\clrm\\ }/
 an_extern_linkage	c-src/h.h	44
 an_extern_linkage	c-src/h.h	56
 an_extern_linkage_ptr	c-src/h.h	43
@@ -2388,8 +1923,27 @@ append_list	prol-src/natded.prolog	/^append_list([],[]).$/
 append_string	pas-src/common.pas	/^procedure append_string;(*($/
 append_tool_bar_item	c-src/emacs/src/keyboard.c	/^append_tool_bar_item (void)$/
 appendix	perl-src/htlmify-cystic	24
+appendix	tex-src/texinfo.tex	/^\\let\\appendix=\\relax$/
+appendix	tex-src/texinfo.tex	/^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/
 appendix_name	perl-src/htlmify-cystic	13
 appendix_toc	perl-src/htlmify-cystic	16
+appendixletter	tex-src/texinfo.tex	/^\\def\\appendixletter{\\char\\the\\appendixno}$/
+appendixnoderef	tex-src/texinfo.tex	/^\\def\\appendixnoderef{\\ifx\\lastnode\\relax\\else$/
+appendixsec	tex-src/texinfo.tex	/^\\let\\appendixsec=\\relax$/
+appendixsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/
+appendixsection	tex-src/texinfo.tex	/^\\let\\appendixsection=\\relax$/
+appendixsection	tex-src/texinfo.tex	/^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/
+appendixsectionzzz	tex-src/texinfo.tex	/^\\def\\appendixsectionzzz #1{\\seccheck{appendixsecti/
+appendixsetref	tex-src/texinfo.tex	/^\\def\\appendixsetref#1{%$/
+appendixsubsec	tex-src/texinfo.tex	/^\\let\\appendixsubsec=\\relax$/
+appendixsubsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsec{\\parsearg\\appendixsubsec/
+appendixsubsection	tex-src/texinfo.tex	/^\\let\\appendixsubsection=\\relax$/
+appendixsubseczzz	tex-src/texinfo.tex	/^\\def\\appendixsubseczzz #1{\\seccheck{appendixsubsec/
+appendixsubsubsec	tex-src/texinfo.tex	/^\\let\\appendixsubsubsec=\\relax$/
+appendixsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/
+appendixsubsubsection	tex-src/texinfo.tex	/^\\let\\appendixsubsubsection=\\relax$/
+appendixsubsubseczzz	tex-src/texinfo.tex	/^\\def\\appendixsubsubseczzz #1{\\seccheck{appendixsub/
+appendixzzz	tex-src/texinfo.tex	/^\\def\\appendixzzz #1{\\seccheck{appendix}%$/
 apply_modifiers	c-src/emacs/src/keyboard.c	/^apply_modifiers (int modifiers, Lisp_Object base)$/
 apply_modifiers_uncached	c-src/emacs/src/keyboard.c	/^apply_modifiers_uncached (int modifiers, char *bas/
 aref_addr	c-src/emacs/src/lisp.h	/^aref_addr (Lisp_Object array, ptrdiff_t idx)$/
@@ -2409,6 +1963,7 @@ argument	c-src/etags.c	253
 argvals	prol-src/natded.prolog	/^argvals([]) --> [].$/
 array	c.c	190
 ascii	c-src/emacs/src/lisp.h	1598
+asis	tex-src/texinfo.tex	/^\\def\\asis#1{#1}$/
 asort	cp-src/functions.cpp	/^void asort(int *a, int num){$/
 assemby-code-word	forth-src/test-forth.fth	/^code assemby-code-word ( dunno what it does )$/
 assert	c-src/etags.c	/^# define assert(x) ((void) 0)$/
@@ -2426,7 +1981,11 @@ atom	prol-src/natded.prolog	/^atom(X) --> [X], {atomic(X)}.$/
 atomval	prol-src/natded.prolog	/^atomval(X) --> atom(X).$/
 aultparindent	tex-src/texinfo.tex	/^\\newdimen\\defaultparindent \\defaultparindent = 15p/
 aultparindent	tex-src/texinfo.tex	/^\\parindent = \\defaultparindent$/
-aultparindent\hang\textindent	tex-src/texinfo.tex	/^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/
+aultparindent\hang	tex-src/texinfo.tex	/^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/
+author	tex-src/texinfo.tex	/^   \\def\\author{\\parsearg\\authorzzz}%$/
+authorfont	tex-src/texinfo.tex	/^   \\def\\authorfont{\\authorrm \\normalbaselineskip =/
+authorrm	tex-src/texinfo.tex	/^\\let\\authorrm = \\secrm$/
+authorzzz	tex-src/texinfo.tex	/^   \\def\\authorzzz##1{\\ifseenauthor\\else\\vskip 0pt /
 auto_help	c-src/etags.c	699
 b	c-src/h.h	103
 b	c-src/h.h	104
@@ -2438,7 +1997,14 @@ b	c.c	260
 b	c.c	262
 b	cp-src/c.C	132
 b	ruby-src/test1.ru	/^ def b()$/
-backslash=0	tex-src/texinfo.tex	/^\\let\\indexbackslash=0  %overridden during \\printin/
+b	tex-src/texinfo.tex	/^\\def\\b##1{\\realbackslash b {##1}}$/
+b	tex-src/texinfo.tex	/^\\def\\b##1{\\realbackslash b {##1}}%$/
+b	tex-src/texinfo.tex	/^\\def\\b#1{{\\bf #1}}$/
+b	tex-src/texinfo.tex	/^\\let\\b=\\indexdummyfont$/
+b	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
+backslash	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/
+backslash	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}%$/
+balancecolumns	tex-src/texinfo.tex	/^\\def\\balancecolumns{%$/
 bar	c-src/c.c	/^void bar() {while(0) {}}$/
 bar	c-src/h.h	19
 bar	c.c	143
@@ -2458,9 +2024,16 @@ bbbbbb	c-src/h.h	113
 been_warned	c-src/etags.c	222
 before_command_echo_length	c-src/emacs/src/keyboard.c	130
 before_command_key_count	c-src/emacs/src/keyboard.c	129
+begin	tex-src/texinfo.tex	/^\\outer\\def\\begin{\\parsearg\\beginxxx}$/
+begindoublecolumns	tex-src/texinfo.tex	/^\\def\\begindoublecolumns{\\begingroup$/
+beginxxx	tex-src/texinfo.tex	/^\\def\\beginxxx #1{%$/
 begtoken	c-src/etags.c	/^#define	begtoken(c)	(_btk[CHAR (c)]) \/* c can star/
 behaviour_info	erl-src/gs_dialog.erl	/^behaviour_info(callbacks) ->$/
-bf=cmbx10	tex-src/texinfo.tex	/^\\font\\defbf=cmbx10 scaled \\magstep1 %was 1314$/
+bf	tex-src/texinfo.tex	/^      \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/
+bf	tex-src/texinfo.tex	/^\\def\\bf{\\realbackslash bf }$/
+bf	tex-src/texinfo.tex	/^\\def\\bf{\\realbackslash bf }%$/
+bf	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
+bf	tex-src/texinfo.tex	/^\\font\\defbf=cmbx10 scaled \\magstep1 %was 1314$/
 bind	pyt-src/server.py	/^    def bind(self, key, action):$/
 bind_polling_period	c-src/emacs/src/keyboard.c	/^bind_polling_period (int n)$/
 bits_word	c-src/emacs/src/lisp.h	123
@@ -2476,6 +2049,7 @@ bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by -\\defbodyindent$/
 bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by \\defbodyindent \\advance \\righ/
 bodyindent	tex-src/texinfo.tex	/^\\exdentamount=\\defbodyindent$/
 bodyindent	tex-src/texinfo.tex	/^\\newskip\\defbodyindent \\defbodyindent=.4in$/
+boldbrax	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
 bool	c.c	222
 bool	merc-src/accumulator.m	/^:- import_module bool.$/
 bool_header_size	c-src/emacs/src/lisp.h	1472
@@ -2488,6 +2062,7 @@ bool_vector_size	c-src/emacs/src/lisp.h	/^bool_vector_size (Lisp_Object a)$/
 bool_vector_uchar_data	c-src/emacs/src/lisp.h	/^bool_vector_uchar_data (Lisp_Object a)$/
 bool_vector_words	c-src/emacs/src/lisp.h	/^bool_vector_words (EMACS_INT size)$/
 boolvar	c-src/emacs/src/lisp.h	2287
+br	tex-src/texinfo.tex	/^\\let\\br = \\par$/
 bracelev	c-src/etags.c	2520
 bsp_DevId	c-src/h.h	25
 bt	c-src/emacs/src/lisp.h	2988
@@ -2501,10 +2076,13 @@ build_pure_c_string	c-src/emacs/src/lisp.h	/^build_pure_c_string (const char *st
 build_string	c-src/emacs/src/lisp.h	/^build_string (const char *str)$/
 buildact	prol-src/natded.prolog	/^buildact([SynIn],Right,RightPlus1):-$/
 builtin_lisp_symbol	c-src/emacs/src/lisp.h	/^builtin_lisp_symbol (int index)$/
+bullet	tex-src/texinfo.tex	/^\\def\\bullet{$\\ptexbullet$}$/
+bullet	tex-src/texinfo.tex	/^\\let\\bullet=\\ptexbullet$/
 burst	c-src/h.h	28
 busy	c-src/emacs/src/gmalloc.c	158
 button_down_location	c-src/emacs/src/keyboard.c	5210
 button_down_time	c-src/emacs/src/keyboard.c	5218
+bye	tex-src/texinfo.tex	/^\\outer\\def\\bye{\\pagealignmacro\\tracingstats=1\\ptex/
 byte_stack	c-src/emacs/src/lisp.h	3049
 bytecode_dest	c-src/emacs/src/lisp.h	3037
 bytecode_top	c-src/emacs/src/lisp.h	3036
@@ -2515,6 +2093,8 @@ bytes_used	c-src/emacs/src/gmalloc.c	312
 c	c-src/h.h	/^#define c() d$/
 c	c-src/h.h	106
 c	c.c	180
+c	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
+c	tex-src/texinfo.tex	/^\\let\\c=\\comment$/
 c_ext	c-src/etags.c	2271
 caccacacca	c.c	/^caccacacca (a,b,c,d,e,f,g)$/
 cacheLRUEntry_s	c.c	172
@@ -2527,21 +2107,47 @@ calloc	c-src/emacs/src/gmalloc.c	70
 can_be_null	c-src/emacs/src/regex.h	370
 cancel_echoing	c-src/emacs/src/keyboard.c	/^cancel_echoing (void)$/
 canonicalize_filename	c-src/etags.c	/^canonicalize_filename (register char *fn)$/
+capsenumerate	tex-src/texinfo.tex	/^\\def\\capsenumerate{\\enumerate{A}}$/
+cartbot	tex-src/texinfo.tex	/^\\def\\cartbot{\\hbox to \\cartouter{\\hskip\\lskip$/
+cartouche	tex-src/texinfo.tex	/^\\long\\def\\cartouche{%$/
+carttop	tex-src/texinfo.tex	/^\\def\\carttop{\\hbox to \\cartouter{\\hskip\\lskip$/
 case_Lisp_Int	c-src/emacs/src/lisp.h	438
 cat	c-src/h.h	81
 cat	cp-src/c.C	126
 cat	cp-src/c.C	130
 cat	prol-src/natded.prolog	/^cat(A, Alpha@Beta, Ass3, Qs3, tree(fe,A:Alpha@Beta/
 cat_atoms	prol-src/natded.prolog	/^cat_atoms(A1,A2,A3):-$/
+cbl	tex-src/texinfo.tex	/^\\def\\cbl{{\\circle\\char'012\\hskip -6pt}}$/
+cbr	tex-src/texinfo.tex	/^\\def\\cbr{{\\hskip 6pt\\circle\\char'011}}$/
 cccccccccc	c-src/h.h	115
 cdr	c-src/emacs/src/lisp.h	1159
 cell	y-src/parse.y	279
+center	tex-src/texinfo.tex	/^\\def\\center{\\parsearg\\centerzzz}$/
+centerzzz	tex-src/texinfo.tex	/^\\def\\centerzzz #1{{\\advance\\hsize by -\\leftskip$/
 cgrep	html-src/software.html	/^cgrep$/
 chain	c-src/emacs/src/lisp.h	1162
 chain	c-src/emacs/src/lisp.h	2206
 chain	c-src/emacs/src/lisp.h	2396
 chain_subst	merc-src/accumulator.m	/^:- func chain_subst(accu_subst, accu_subst) = accu/
 chain_subst_2	merc-src/accumulator.m	/^:- pred chain_subst_2(list(A)::in, map(A, B)::in, /
+chapbf	tex-src/texinfo.tex	/^\\let\\chapbf=\\chaprm$/
+chapbreak	tex-src/texinfo.tex	/^\\def\\chapbreak{\\dobreak \\chapheadingskip {-4000}}$/
+chapentry	tex-src/texinfo.tex	/^      \\let\\chapentry = \\shortchapentry$/
+chapentry	tex-src/texinfo.tex	/^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/
+chapentryfonts	tex-src/texinfo.tex	/^\\def\\chapentryfonts{\\secfonts \\rm}$/
+chapfonts	tex-src/texinfo.tex	/^\\def\\chapfonts{%$/
+chapheading	tex-src/texinfo.tex	/^\\def\\chapheading{\\parsearg\\chapheadingzzz}$/
+chapheadingzzz	tex-src/texinfo.tex	/^\\def\\chapheadingzzz #1{\\chapbreak %$/
+chapmacro	tex-src/texinfo.tex	/^\\global\\let\\chapmacro=\\chfopen$/
+chapmacro	tex-src/texinfo.tex	/^\\global\\let\\chapmacro=\\chfplain$/
+chapoddpage	tex-src/texinfo.tex	/^\\def\\chapoddpage{\\chappager \\ifodd\\pageno \\else \\h/
+chappager	tex-src/texinfo.tex	/^\\def\\chappager{\\par\\vfill\\supereject}$/
+chapter	tex-src/texinfo.tex	/^\\let\\chapter=\\relax$/
+chapter	tex-src/texinfo.tex	/^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/
+chapternofonts	tex-src/texinfo.tex	/^\\def\\chapternofonts{%$/
+chapterzzz	tex-src/texinfo.tex	/^\\def\\chapterzzz #1{\\seccheck{chapter}%$/
+char	tex-src/texinfo.tex	/^\\def\\char{\\realbackslash char}$/
+char	tex-src/texinfo.tex	/^\\def\\char{\\realbackslash char}%$/
 char_bits	c-src/emacs/src/lisp.h	2443
 char_table_specials	c-src/emacs/src/lisp.h	1692
 charpos	c-src/emacs/src/lisp.h	2011
@@ -2552,14 +2158,24 @@ check_cons_list	c-src/emacs/src/lisp.h	/^#  define check_cons_list() lisp_h_chec
 checker	make-src/Makefile	/^checker:$/
 checkhdr	c-src/emacs/src/gmalloc.c	/^checkhdr (const struct hdr *hdr)$/
 checkiso	html-src/software.html	/^checkiso$/
+chfopen	tex-src/texinfo.tex	/^\\def\\chfopen #1#2{\\chapoddpage {\\chapfonts$/
+chfplain	tex-src/texinfo.tex	/^\\def\\chfplain #1#2{%$/
 childDidExit	objc-src/Subprocess.m	/^- childDidExit$/
 chunks_free	c-src/emacs/src/gmalloc.c	313
 chunks_used	c-src/emacs/src/gmalloc.c	311
+cindex	tex-src/texinfo.tex	/^\\def\\cindex {\\cpindex}$/
+cindexsub	tex-src/texinfo.tex	/^\\def\\cindexsub {\\begingroup\\obeylines\\cindexsub}$/
+cindexsub	tex-src/texinfo.tex	/^\\gdef\\cindexsub "#1" #2^^M{\\endgroup %$/
+cite	tex-src/texinfo.tex	/^\\def\\cite##1{\\realbackslash cite {##1}}$/
+cite	tex-src/texinfo.tex	/^\\def\\cite##1{\\realbackslash cite {##1}}%$/
+cite	tex-src/texinfo.tex	/^\\let\\cite=\\indexdummyfont$/
+cite	tex-src/texinfo.tex	/^\\let\\cite=\\smartitalic$/
 cjava	c-src/etags.c	2936
 class_method	ruby-src/test.rb	/^        def ClassExample.class_method$/
 classifyLine	php-src/lce_functions.php	/^      function classifyLine($line)$/
 clean	make-src/Makefile	/^clean:$/
 clear	cp-src/conway.hpp	/^    void clear(void) { alive = 0; }$/
+clear	tex-src/texinfo.tex	/^\\def\\clear{\\parsearg\\clearxxx}$/
 clear-abbrev-table	c-src/abbrev.c	/^DEFUN ("clear-abbrev-table", Fclear_abbrev_table, /
 clear-this-command-keys	c-src/emacs/src/keyboard.c	/^DEFUN ("clear-this-command-keys", Fclear_this_comm/
 clearAllKey	objcpp-src/SimpleCalc.M	/^- clearAllKey:sender$/
@@ -2569,12 +2185,19 @@ clear_input_pending	c-src/emacs/src/keyboard.c	/^clear_input_pending (void)$/
 clear_neighbors	cp-src/clheir.cpp	/^void discrete_location::clear_neighbors(void)$/
 clear_screen	cp-src/screen.cpp	/^void clear_screen(void)$/
 clear_waiting_for_input	c-src/emacs/src/keyboard.c	/^clear_waiting_for_input (void)$/
+clearxxx	tex-src/texinfo.tex	/^\\def\\clearxxx #1{$/
+clnr	tex-src/texinfo.tex	/^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} /
+clrm	tex-src/texinfo.tex	/^\\gdef\\clrm{% Print a paren in roman if it is takin/
 cmd_error	c-src/emacs/src/keyboard.c	/^cmd_error (Lisp_Object data)$/
 cmd_error_internal	c-src/emacs/src/keyboard.c	/^cmd_error_internal (Lisp_Object data, const char */
 cmpfn	c-src/emacs/src/lisp.h	/^  bool (*cmpfn) (struct hash_table_test *t, Lisp_O/
 cmt	prol-src/natded.prolog	/^cmt:-$/
 cname	c-src/etags.c	2519
 cno	c-src/etags.c	224
+code	tex-src/texinfo.tex	/^\\def\\code##1{\\realbackslash code {##1}}$/
+code	tex-src/texinfo.tex	/^\\def\\code##1{\\realbackslash code {##1}}%$/
+code	tex-src/texinfo.tex	/^\\let\\code=\\indexdummyfont$/
+code	tex-src/texinfo.tex	/^\\let\\code=\\tclose$/
 colori	cp-src/c.C	40
 commaargvals	prol-src/natded.prolog	/^commaargvals(Args) -->$/
 command	c-src/etags.c	187
@@ -2584,6 +2207,8 @@ command_loop_1	c-src/emacs/src/keyboard.c	/^command_loop_1 (void)$/
 command_loop_2	c-src/emacs/src/keyboard.c	/^command_loop_2 (Lisp_Object ignore)$/
 command_loop_level	c-src/emacs/src/keyboard.c	195
 comment	php-src/lce_functions.php	/^      function comment($line, $class)$/
+comment	tex-src/texinfo.tex	/^\\def\\comment{\\catcode 64=\\other \\catcode 123=\\othe/
+commentxxx	tex-src/texinfo.tex	/^\\def\\commentxxx #1{\\catcode 64=0 \\catcode 123=1 \\c/
 commutativity_assertion	merc-src/accumulator.m	/^:- pred commutativity_assertion(module_info::in,li/
 compile_empty	prol-src/natded.prolog	/^compile_empty:-$/
 compile_lex	prol-src/natded.prolog	/^compile_lex(File):-$/
@@ -2606,6 +2231,10 @@ consult_lex	prol-src/natded.prolog	/^consult_lex:-$/
 contents	c-src/emacs/src/lisp.h	1372
 contents	c-src/emacs/src/lisp.h	1600
 contents	c-src/emacs/src/lisp.h	1624
+contents	tex-src/texinfo.tex	/^\\let\\contents=\\relax$/
+contents	tex-src/texinfo.tex	/^\\outer\\def\\contents{%$/
+copyright	tex-src/texinfo.tex	/^\\def\\copyright{\\realbackslash copyright }%$/
+copyright	tex-src/texinfo.tex	/^\\def\\copyright{\\realbackslash copyright}$/
 count	c-src/emacs/src/lisp.h	1863
 count_layers	lua-src/allegro.lua	/^local function count_layers (layer)$/
 count_words	c-src/tab.c	/^static int		count_words(char *str, char delim)$/
@@ -2625,10 +2254,20 @@ create_new_orig_recursive_goals	merc-src/accumulator.m	/^:- func create_new_orig
 create_new_recursive_goals	merc-src/accumulator.m	/^:- func create_new_recursive_goals(set(accu_goal_i/
 create_new_var	merc-src/accumulator.m	/^:- pred create_new_var(prog_var::in, string::in, p/
 create_orig_goal	merc-src/accumulator.m	/^:- pred create_orig_goal(hlds_goal::in, accu_subst/
+cropmarks	tex-src/texinfo.tex	/^\\def\\cropmarks{\\let\\onepageout=\\croppageout }$/
+croppageout	tex-src/texinfo.tex	/^\\def\\croppageout#1{\\hoffset=0pt % make sure this d/
 cscInitTime	cp-src/c.C	7
 cscSegmentationTime	cp-src/c.C	8
+csname	tex-src/texinfo.tex	/^\\expandafter\\let\\csname IF#1\\endcsname=\\relax}$/
+csname	tex-src/texinfo.tex	/^\\expandafter\\let\\csname IF#1\\endcsname=\\set}$/
+csname	tex-src/texinfo.tex	/^\\expandafter\\let\\csname#1indfile\\endcsname=\\synind/
+csname	tex-src/texinfo.tex	/^\\expandafter\\xdef\\csname#1index\\endcsname{%	% Defi/
+csname	tex-src/texinfo.tex	/^{\\catcode`\\'=\\other\\expandafter \\gdef \\csname X#1\\/
 cstack	c-src/etags.c	2523
 ctags	make-src/Makefile	/^ctags: etags.c ${OBJS}$/
+ctl	tex-src/texinfo.tex	/^\\def\\ctl{{\\circle\\char'013\\hskip -6pt}}% 6pt from /
+ctr	tex-src/texinfo.tex	/^\\def\\ctr{{\\hskip 6pt\\circle\\char'010}}$/
+ctrl	tex-src/texinfo.tex	/^\\def\\ctrl #1{{\\tt \\rawbackslash \\hat}#1}$/
 curlb	c-src/etags.c	2929
 curlinepos	c-src/etags.c	2931
 current-idle-time	c-src/emacs/src/keyboard.c	/^DEFUN ("current-idle-time", Fcurrent_idle_time, Sc/
@@ -2639,6 +2278,10 @@ curry-test	scm-src/test.scm	/^(define (((((curry-test a) b) c) d) e)$/
 cursor_position	cp-src/screen.cpp	/^void cursor_position(void)$/
 cursor_x	cp-src/screen.cpp	15
 cursor_y	cp-src/screen.cpp	15
+cvarheader\defcvtype	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
+cvtype	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{\\defcvtype{} of #1}%$/
+cvtype	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
+cvx\defcvarheader	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
 d	c-src/emacs/src/lisp.h	4673
 d	c-src/emacs/src/lisp.h	4679
 d	c.c	180
@@ -2660,6 +2303,15 @@ default_C_help	c-src/etags.c	515
 default_C_help	c-src/etags.c	523
 default_C_suffixes	c-src/etags.c	512
 defcell	c-src/emacs/src/lisp.h	2351
+defcodeindex	tex-src/texinfo.tex	/^\\def\\defcodeindex{\\parsearg\\newcodeindex}$/
+defcv	tex-src/texinfo.tex	/^\\def\\defcv #1 {\\def\\defcvtype{#1}%$/
+defcvarheader	tex-src/texinfo.tex	/^\\def\\defcvarheader #1#2#3{%$/
+defcvtype	tex-src/texinfo.tex	/^\\def\\defcv #1 {\\def\\defcvtype{#1}%$/
+defcvx	tex-src/texinfo.tex	/^\\def\\defcvx #1 {\\errmessage{@defcvx in invalid con/
+deffn	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
+deffnheader	tex-src/texinfo.tex	/^\\def\\deffnheader #1#2#3{\\doind {fn}{\\code{#2}}%$/
+deffnx	tex-src/texinfo.tex	/^\\def\\deffnx #1 {\\errmessage{@deffnx in invalid con/
+defindex	tex-src/texinfo.tex	/^\\def\\defindex{\\parsearg\\newindex}$/
 define-abbrev	c-src/abbrev.c	/^DEFUN ("define-abbrev", Fdefine_abbrev, Sdefine_ab/
 define-abbrev-table	c-src/abbrev.c	/^DEFUN ("define-abbrev-table", Fdefine_abbrev_table/
 define-global-abbrev	c-src/abbrev.c	/^DEFUN ("define-global-abbrev", Fdefine_global_abbr/
@@ -2667,7 +2319,63 @@ define-mode-abbrev	c-src/abbrev.c	/^DEFUN ("define-mode-abbrev", Fdefine_mode_ab
 defined_GC_CHECK_STRING_BYTES	c-src/emacs/src/lisp.h	4663
 defined_GC_CHECK_STRING_BYTES	c-src/emacs/src/lisp.h	4665
 definedef	c-src/etags.c	2464
+defivar	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
+defivarheader	tex-src/texinfo.tex	/^\\def\\defivarheader #1#2#3{%$/
+defivarx	tex-src/texinfo.tex	/^\\def\\defivarx #1 {\\errmessage{@defivarx in invalid/
+defmac	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
+defmacheader	tex-src/texinfo.tex	/^\\def\\defmacheader #1#2{\\doind {fn}{\\code{#1}}% Mak/
+defmacx	tex-src/texinfo.tex	/^\\def\\defmacx #1 {\\errmessage{@defmacx in invalid c/
+defmethod	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
+defmethodheader	tex-src/texinfo.tex	/^\\def\\defmethodheader #1#2#3{%$/
+defmethodx	tex-src/texinfo.tex	/^\\def\\defmethodx #1 {\\errmessage{@defmethodx in inv/
+defmethparsebody	tex-src/texinfo.tex	/^\\def\\defmethparsebody #1#2#3#4 {\\begingroup\\inENV /
+defname	tex-src/texinfo.tex	/^\\def\\defname #1#2{%$/
+defop	tex-src/texinfo.tex	/^\\def\\defop #1 {\\def\\defoptype{#1}%$/
+defopheader	tex-src/texinfo.tex	/^\\def\\defopheader #1#2#3{%$/
+defopparsebody	tex-src/texinfo.tex	/^\\def\\defopparsebody #1#2#3#4#5 {\\begingroup\\inENV /
+defopt	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
+defoptheader	tex-src/texinfo.tex	/^\\def\\defoptheader #1#2{\\doind {vr}{\\code{#1}}% Mak/
+defoptx	tex-src/texinfo.tex	/^\\def\\defoptx #1 {\\errmessage{@defoptx in invalid c/
+defoptype	tex-src/texinfo.tex	/^\\def\\defop #1 {\\def\\defoptype{#1}%$/
+defopvarparsebody	tex-src/texinfo.tex	/^\\def\\defopvarparsebody #1#2#3#4#5 {\\begingroup\\inE/
+defopx	tex-src/texinfo.tex	/^\\def\\defopx #1 {\\errmessage{@defopx in invalid con/
+defparsebody	tex-src/texinfo.tex	/^\\def\\defparsebody #1#2#3{\\begingroup\\inENV% Enviro/
+defspec	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
+defspecheader	tex-src/texinfo.tex	/^\\def\\defspecheader #1#2{\\doind {fn}{\\code{#1}}% Ma/
+defspecx	tex-src/texinfo.tex	/^\\def\\defspecx #1 {\\errmessage{@defspecx in invalid/
+deftp	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
+deftpargs	tex-src/texinfo.tex	/^\\def\\deftpargs #1{\\bf \\defvarargs{#1}}$/
+deftpheader	tex-src/texinfo.tex	/^\\def\\deftpheader #1#2#3{\\doind {tp}{\\code{#2}}%$/
+deftpx	tex-src/texinfo.tex	/^\\def\\deftpx #1 {\\errmessage{@deftpx in invalid con/
+deftypefn	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
+deftypefnheader	tex-src/texinfo.tex	/^\\def\\deftypefnheader #1#2#3{\\deftypefnheaderx{#1}{/
+deftypefnheaderx	tex-src/texinfo.tex	/^\\def\\deftypefnheaderx #1#2#3 #4\\relax{%$/
+deftypefnx	tex-src/texinfo.tex	/^\\def\\deftypefnx #1 {\\errmessage{@deftypefnx in inv/
+deftypefun	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
+deftypefunargs	tex-src/texinfo.tex	/^\\def\\deftypefunargs #1{%$/
+deftypefunheader	tex-src/texinfo.tex	/^\\def\\deftypefunheader #1#2{\\deftypefunheaderx{#1}#/
+deftypefunheaderx	tex-src/texinfo.tex	/^\\def\\deftypefunheaderx #1#2 #3\\relax{%$/
+deftypeunx	tex-src/texinfo.tex	/^\\def\\deftypeunx #1 {\\errmessage{@deftypeunx in inv/
+deftypevar	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
+deftypevarheader	tex-src/texinfo.tex	/^\\def\\deftypevarheader #1#2{%$/
+deftypevarx	tex-src/texinfo.tex	/^\\def\\deftypevarx #1 {\\errmessage{@deftypevarx in i/
+deftypevr	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
+deftypevrheader	tex-src/texinfo.tex	/^\\def\\deftypevrheader #1#2#3{\\doind {vr}{\\code{#3}}/
+deftypevrx	tex-src/texinfo.tex	/^\\def\\deftypevrx #1 {\\errmessage{@deftypevrx in inv/
+defun	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
 defun_func1	c.c	/^defun_func1()$/
+defunargs	tex-src/texinfo.tex	/^\\def\\defunargs #1{\\functionparens \\sl$/
+defunheader	tex-src/texinfo.tex	/^\\def\\defunheader #1#2{\\doind {fn}{\\code{#1}}% Make/
+defunx	tex-src/texinfo.tex	/^\\def\\defunx #1 {\\errmessage{@defunx in invalid con/
+defvar	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
+defvarargs	tex-src/texinfo.tex	/^\\def\\defvarargs #1{\\normalparens #1%$/
+defvarheader	tex-src/texinfo.tex	/^\\def\\defvarheader #1#2{\\doind {vr}{\\code{#1}}% Mak/
+defvarparsebody	tex-src/texinfo.tex	/^\\def\\defvarparsebody #1#2#3{\\begingroup\\inENV% Env/
+defvarx	tex-src/texinfo.tex	/^\\def\\defvarx #1 {\\errmessage{@defvarx in invalid c/
+defvr	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
+defvrheader	tex-src/texinfo.tex	/^\\def\\defvrheader #1#2#3{\\doind {vr}{\\code{#2}}%$/
+defvrparsebody	tex-src/texinfo.tex	/^\\def\\defvrparsebody #1#2#3#4 {\\begingroup\\inENV %$/
+defvrx	tex-src/texinfo.tex	/^\\def\\defvrx #1 {\\errmessage{@defvrx in invalid con/
 delegate	objc-src/Subprocess.m	/^- delegate$/
 deleteItem	pyt-src/server.py	/^    def deleteItem(self):$/
 delete_kboard	c-src/emacs/src/keyboard.c	/^delete_kboard (KBOARD *kb)$/
@@ -2677,25 +2385,54 @@ deliver_user_signal	c-src/emacs/src/keyboard.c	/^deliver_user_signal (int sig)$/
 depth	c-src/emacs/src/lisp.h	1618
 derived_analyses	prol-src/natded.prolog	/^derived_analyses([],[]).$/
 describe_abbrev	c-src/abbrev.c	/^describe_abbrev (sym, stream)$/
+description	tex-src/texinfo.tex	/^\\def\\description{\\tablez{\\dontindex}{1}{}{}{}{}}$/
 detect_input_pending	c-src/emacs/src/keyboard.c	/^detect_input_pending (void)$/
 detect_input_pending_ignore_squeezables	c-src/emacs/src/keyboard.c	/^detect_input_pending_ignore_squeezables (void)$/
 detect_input_pending_run_timers	c-src/emacs/src/keyboard.c	/^detect_input_pending_run_timers (bool do_display)$/
+df	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
+dfn	tex-src/texinfo.tex	/^\\def\\dfn##1{\\realbackslash dfn {##1}}$/
+dfn	tex-src/texinfo.tex	/^\\let\\dfn=\\smartitalic$/
 dialog_loop	erl-src/gs_dialog.erl	/^dialog_loop(Module, Window, Frame, Extra, Args) ->/
 dignorerest	c-src/etags.c	2463
+direntry	tex-src/texinfo.tex	/^\\def\\direntry{\\begingroup\\direntryxxx}$/
+direntryxxx	tex-src/texinfo.tex	/^\\long\\def\\direntryxxx #1\\end direntry{\\endgroup\\ig/
 discard-input	c-src/emacs/src/keyboard.c	/^DEFUN ("discard-input", Fdiscard_input, Sdiscard_i/
 discard_mouse_events	c-src/emacs/src/keyboard.c	/^discard_mouse_events (void)$/
 discrete_location	cp-src/clheir.hpp	/^    discrete_location(int xi, int yi, int zi):$/
 discrete_location	cp-src/clheir.hpp	56
 display	cp-src/conway.cpp	/^void display(void)$/
+display	tex-src/texinfo.tex	/^\\def\\display{\\begingroup\\inENV %This group ends at/
 disposetextstring	pas-src/common.pas	/^procedure disposetextstring;(*($/
+dmn	tex-src/texinfo.tex	/^\\def\\dmn#1{\\thinspace #1}$/
 dnone	c-src/etags.c	2460
+dobreak	tex-src/texinfo.tex	/^\\def\\dobreak#1#2{\\par\\ifdim\\lastskip<#1\\removelast/
 doc	c-src/emacs/src/lisp.h	1689
+dochapentry	tex-src/texinfo.tex	/^\\def\\dochapentry#1#2{%$/
+docodeindex	tex-src/texinfo.tex	/^\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\si/
 dog	c-src/h.h	81
 dog	cp-src/c.C	126
 dog	cp-src/c.C	130
+doind	tex-src/texinfo.tex	/^\\def\\doind #1#2{%$/
+doindex	tex-src/texinfo.tex	/^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/
+donoderef	tex-src/texinfo.tex	/^\\def\\donoderef{\\ifx\\lastnode\\relax\\else$/
+dontindex	tex-src/texinfo.tex	/^\\def\\dontindex #1{}$/
+dopageno	tex-src/texinfo.tex	/^\\def\\dopageno#1{{\\rm #1}}$/
+doprintindex	tex-src/texinfo.tex	/^\\def\\doprintindex#1{%$/
+dosecentry	tex-src/texinfo.tex	/^\\def\\dosecentry#1#2{%$/
+dosetq	tex-src/texinfo.tex	/^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/
+doshortpageno	tex-src/texinfo.tex	/^\\def\\doshortpageno#1{{\\rm #1}}$/
+dosubind	tex-src/texinfo.tex	/^\\def\\dosubind #1#2#3{%$/
+dosubsecentry	tex-src/texinfo.tex	/^\\def\\dosubsecentry#1#2{%$/
+dosubsubsecentry	tex-src/texinfo.tex	/^\\def\\dosubsubsecentry#1#2{%$/
 dotfill	tex-src/texinfo.tex	/^  \\null\\nobreak\\indexdotfill % Have leaders before/
 dotfill	tex-src/texinfo.tex	/^\\noindent\\hskip\\secondaryindent\\hbox{#1}\\indexdotf/
+dots	tex-src/texinfo.tex	/^\\def\\dots{$\\ldots$}$/
+dots	tex-src/texinfo.tex	/^\\def\\dots{\\realbackslash dots }%$/
+dots	tex-src/texinfo.tex	/^\\def\\dots{\\realbackslash dots}$/
+dots	tex-src/texinfo.tex	/^\\let\\dots=\\indexdummydots$/
+dots	tex-src/texinfo.tex	/^\\let\\dots=\\ptexdots$/
 double_click_count	c-src/emacs/src/keyboard.c	5222
+doublecolumnout	tex-src/texinfo.tex	/^\\def\\doublecolumnout{\\splittopskip=\\topskip \\split/
 drag_n_drop_syms	c-src/emacs/src/keyboard.c	4629
 dribble	c-src/emacs/src/keyboard.c	236
 dsharpseen	c-src/etags.c	2461
@@ -2705,6 +2442,7 @@ dummy2	cp-src/burton.cpp	/^::dummy::dummy test::dummy2(::CORBA::Long dummy)$/
 dummy3	cp-src/burton.cpp	/^::dummy::dummy test::dummy3(char* name, ::CORBA::L/
 dummydots	tex-src/texinfo.tex	/^\\let\\dots=\\indexdummydots$/
 dummyfont	tex-src/texinfo.tex	/^\\let\\b=\\indexdummyfont$/
+dummyfont	tex-src/texinfo.tex	/^\\let\\cite=\\indexdummyfont$/
 dummyfont	tex-src/texinfo.tex	/^\\let\\code=\\indexdummyfont$/
 dummyfont	tex-src/texinfo.tex	/^\\let\\emph=\\indexdummyfont$/
 dummyfont	tex-src/texinfo.tex	/^\\let\\file=\\indexdummyfont$/
@@ -2743,10 +2481,16 @@ editsite	pyt-src/server.py	/^    def editsite(self, site):$/
 edituser	pyt-src/server.py	/^    def edituser(self, user):$/
 egetenv	c-src/emacs/src/lisp.h	/^egetenv (const char *var)$/
 emacs_abort	c-src/emacs/src/lisp.h	/^extern _Noreturn void emacs_abort (void) NO_INLINE/
+emph	tex-src/texinfo.tex	/^\\def\\emph##1{\\realbackslash emph {##1}}$/
+emph	tex-src/texinfo.tex	/^\\let\\emph=\\indexdummyfont$/
+emph	tex-src/texinfo.tex	/^\\let\\emph=\\smartitalic$/
 end	c-src/emacs/src/keyboard.c	8753
 end	c-src/emacs/src/lisp.h	2039
 end	c-src/emacs/src/regex.h	432
+end	tex-src/texinfo.tex	/^\\def\\end{\\parsearg\\endxxx}$/
+enddoublecolumns	tex-src/texinfo.tex	/^\\def\\enddoublecolumns{\\output={\\balancecolumns}\\ej/
 endtoken	c-src/etags.c	/^#define	endtoken(c)	(_etk[CHAR (c)]) \/* c ends tok/
+endxxx	tex-src/texinfo.tex	/^\\def\\endxxx #1{%$/
 enter_critical_section	c-src/h.h	116
 entry	perl-src/htlmify-cystic	218
 entry	perl-src/htlmify-cystic	234
@@ -2756,14 +2500,22 @@ entry	perl-src/htlmify-cystic	268
 entry	perl-src/htlmify-cystic	276
 entry	perl-src/htlmify-cystic	281
 entry	perl-src/htlmify-cystic	296
+entry	tex-src/texinfo.tex	/^\\def\\entry #1#2{\\begingroup$/
+enumerate	tex-src/texinfo.tex	/^\\def\\enumerate{\\parsearg\\enumeratezzz}$/
+enumeratey	tex-src/texinfo.tex	/^\\def\\enumeratey #1 #2\\endenumeratey{%$/
+enumeratezzz	tex-src/texinfo.tex	/^\\def\\enumeratezzz #1{\\enumeratey #1  \\endenumerate/
 equalsKey	objcpp-src/SimpleCalc.M	/^- equalsKey:sender$/
+equiv	tex-src/texinfo.tex	/^\\def\\equiv{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/
+equiv	tex-src/texinfo.tex	/^\\def\\equiv{\\realbackslash equiv}$/
 erlang_atom	c-src/etags.c	/^erlang_atom (char *s)$/
 erlang_attribute	c-src/etags.c	/^erlang_attribute (char *s)$/
 erlang_func	c-src/etags.c	/^erlang_func (char *s, char *last)$/
 error	c-src/emacs/src/lisp.h	/^extern _Noreturn void error (const char *, ...) AT/
 error	c-src/etags.c	/^error (const char *format, ...)$/
 error	c-src/etags.c	/^static void error (const char *, ...) ATTRIBUTE_FO/
+error	tex-src/texinfo.tex	/^\\def\\error{\\leavevmode\\lower.7ex\\copy\\errorbox}$/
 error	y-src/cccp.y	/^error (msg)$/
+errorE	tex-src/texinfo.tex	/^\\def\\errorE#1{$/
 error_signaled	c-src/etags.c	264
 etags	el-src/emacs/lisp/progmodes/etags.el	/^(defgroup etags nil "Tags tables."$/
 etags	html-src/software.html	/^Etags$/
@@ -2786,11 +2538,29 @@ etags-xref-find-definitions-tag-order	el-src/emacs/lisp/progmodes/etags.el	/^(de
 etags.1.man	make-src/Makefile	/^etags.1.man: etags.1$/
 etags_getcwd	c-src/etags.c	/^etags_getcwd (void)$/
 eval_dyn	c-src/emacs/src/keyboard.c	/^eval_dyn (Lisp_Object form)$/
+evenfooting	tex-src/texinfo.tex	/^\\def\\evenfooting{\\parsearg\\evenfootingxxx}$/
+evenfootingxxx	tex-src/texinfo.tex	/^\\gdef\\evenfootingxxx #1{\\evenfootingyyy #1@|@|@|@|/
+evenfootingyyy	tex-src/texinfo.tex	/^\\gdef\\evenfootingyyy #1@|#2@|#3@|#4\\finish{%$/
+evenheading	tex-src/texinfo.tex	/^\\def\\evenheading{\\parsearg\\evenheadingxxx}$/
+evenheadingxxx	tex-src/texinfo.tex	/^\\gdef\\evenheadingxxx #1{\\evenheadingyyy #1@|@|@|@|/
+evenheadingyyy	tex-src/texinfo.tex	/^\\gdef\\evenheadingyyy #1@|#2@|#3@|#4\\finish{%$/
 event-convert-list	c-src/emacs/src/keyboard.c	/^DEFUN ("event-convert-list", Fevent_convert_list, /
 event-symbol-parse-modifiers	c-src/emacs/src/keyboard.c	/^DEFUN ("internal-event-symbol-parse-modifiers", Fe/
 event_head	c-src/emacs/src/keyboard.c	11021
 event_to_kboard	c-src/emacs/src/keyboard.c	/^event_to_kboard (struct input_event *event)$/
+everyfooting	tex-src/texinfo.tex	/^\\def\\everyfooting{\\parsearg\\everyfootingxxx}$/
+everyfootingxxx	tex-src/texinfo.tex	/^\\gdef\\everyfootingxxx #1{\\everyfootingyyy #1@|@|@|/
+everyfootingyyy	tex-src/texinfo.tex	/^\\gdef\\everyfootingyyy #1@|#2@|#3@|#4\\finish{%$/
+everyheading	tex-src/texinfo.tex	/^\\def\\everyheading{\\parsearg\\everyheadingxxx}$/
+everyheadingxxx	tex-src/texinfo.tex	/^\\gdef\\everyheadingxxx #1{\\everyheadingyyy #1@|@|@|/
+everyheadingyyy	tex-src/texinfo.tex	/^\\gdef\\everyheadingyyy #1@|#2@|#3@|#4\\finish{%$/
+ewbot	tex-src/texinfo.tex	/^\\def\\ewbot{\\vrule height0pt depth\\cornerthick widt/
+ewtop	tex-src/texinfo.tex	/^\\def\\ewtop{\\vrule height\\cornerthick depth0pt widt/
 exact	c-src/emacs/src/gmalloc.c	200
+example	tex-src/texinfo.tex	/^\\let\\example=\\lisp$/
+exdent	tex-src/texinfo.tex	/^\\def\\exdent{\\parsearg\\exdentyyy}$/
+exdent	tex-src/texinfo.tex	/^\\let\\exdent=\\nofillexdent$/
+exdentyyy	tex-src/texinfo.tex	/^\\def\\exdentyyy #1{{\\hfil\\break\\hbox{\\kern -\\exdent/
 execute	cp-src/c.C	/^        void execute(CPluginCSCState& p, int w, in/
 exit	c-src/exit.c	/^DEFUN(exit, (status), int status)$/
 exit	c-src/exit.strange_suffix	/^DEFUN(exit, (status), int status)$/
@@ -2803,10 +2573,13 @@ exp	y-src/parse.y	95
 exp1	y-src/cccp.y	148
 exp_list	y-src/parse.y	263
 expand-abbrev	c-src/abbrev.c	/^DEFUN ("expand-abbrev", Fexpand_abbrev, Sexpand_ab/
+expandafter	tex-src/texinfo.tex	/^\\expandafter\\let\\expandafter\\synindexfoo\\expandaft/
 expandmng	prol-src/natded.prolog	/^expandmng(var(V),var(V)).$/
 expandmng_tree	prol-src/natded.prolog	/^expandmng_tree(tree(Rule,Syn:Sem,Trees),$/
 expandmng_trees	prol-src/natded.prolog	/^expandmng_trees([],[]).$/
 expandsyn	prol-src/natded.prolog	/^expandsyn(Syn,Syn):-$/
+expansion	tex-src/texinfo.tex	/^\\def\\expansion{\\leavevmode\\raise.1ex\\hbox to 1em{\\/
+expansion	tex-src/texinfo.tex	/^\\def\\expansion{\\realbackslash expansion}$/
 explicitly-quoted-pending-delete-mode	el-src/TAGTEST.EL	/^(defalias (quote explicitly-quoted-pending-delete-/
 expression_value	y-src/cccp.y	68
 extras	c-src/emacs/src/lisp.h	1603
@@ -2853,6 +2626,10 @@ fdp	c-src/etags.c	217
 ff	cp-src/c.C	/^  int ff(){return 1;};$/
 field_of_play	cp-src/conway.cpp	18
 fignore	c-src/etags.c	2416
+file	tex-src/texinfo.tex	/^\\def\\file##1{\\realbackslash file {##1}}$/
+file	tex-src/texinfo.tex	/^\\def\\file##1{\\realbackslash file {##1}}%$/
+file	tex-src/texinfo.tex	/^\\let\\file=\\indexdummyfont$/
+file	tex-src/texinfo.tex	/^\\let\\file=\\samp$/
 file-of-tag	el-src/emacs/lisp/progmodes/etags.el	/^(defun file-of-tag (&optional relative)$/
 file-of-tag-function	el-src/emacs/lisp/progmodes/etags.el	/^(defvar file-of-tag-function nil$/
 fileJoin	php-src/lce_functions.php	/^  function fileJoin()$/
@@ -2861,6 +2638,7 @@ file_index	perl-src/htlmify-cystic	33
 file_tocs	perl-src/htlmify-cystic	30
 filename_is_absolute	c-src/etags.c	/^filename_is_absolute (char *fn)$/
 filenames	c-src/etags.c	196
+finalout	tex-src/texinfo.tex	/^\\def\\finalout{\\overfullrule=0pt}$/
 find-tag	el-src/emacs/lisp/progmodes/etags.el	/^(defun find-tag (tagname &optional next-p regexp-p/
 find-tag-default-function	el-src/emacs/lisp/progmodes/etags.el	/^(defcustom find-tag-default-function nil$/
 find-tag-history	el-src/emacs/lisp/progmodes/etags.el	/^(defvar find-tag-history nil) ; Doc string?$/
@@ -2883,21 +2661,33 @@ find-tag-tag-order	el-src/emacs/lisp/progmodes/etags.el	/^(defvar find-tag-tag-o
 find_entries	c-src/etags.c	/^find_entries (FILE *inf)$/
 find_user_signal_name	c-src/emacs/src/keyboard.c	/^find_user_signal_name (int sig)$/
 findcats	prol-src/natded.prolog	/^findcats([],Left,Left).$/
+findex	tex-src/texinfo.tex	/^\\def\\findex {\\fnindex}$/
 finish_appendices	perl-src/htlmify-cystic	/^sub finish_appendices ()$/
 finish_sections	perl-src/htlmify-cystic	/^sub finish_sections ()$/
 finish_subsections	perl-src/htlmify-cystic	/^sub finish_subsections ()$/
 finish_subsubsections	perl-src/htlmify-cystic	/^sub finish_subsubsections ()$/
+finishtitlepage	tex-src/texinfo.tex	/^\\def\\finishtitlepage{%$/
 finlist	c-src/etags.c	2414
 first	c-src/emacs/src/gmalloc.c	151
+first	tex-src/texinfo.tex	/^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/
 fitchtreelist	prol-src/natded.prolog	/^fitchtreelist([]).$/
 fixup_locale	c-src/emacs/src/lisp.h	/^INLINE void fixup_locale (void) {}$/
 flag	c-src/getopt.h	83
 flag2str	pyt-src/server.py	/^def flag2str(value, string):$/
 flistseen	c-src/etags.c	2415
+flushcr	tex-src/texinfo.tex	/^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else /
+flushleft	tex-src/texinfo.tex	/^\\def\\flushleft{%$/
+flushright	tex-src/texinfo.tex	/^\\def\\flushright{%$/
 fn	c-src/exit.c	/^    void EXFUN((*fn[1]), (NOARGS));$/
 fn	c-src/exit.strange_suffix	/^    void EXFUN((*fn[1]), (NOARGS));$/
+fnheader	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
 fnin	y-src/parse.y	68
+fnitemindex	tex-src/texinfo.tex	/^\\def\\fnitemindex #1{\\doind {fn}{\\code{#1}}}%$/
+fnx\deffnheader	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
 focus_set	pyt-src/server.py	/^    def focus_set(self):$/
+folio	tex-src/texinfo.tex	/^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/
+folio	tex-src/texinfo.tex	/^{\\let\\folio=0% Expand all macros now EXCEPT \\folio/
+folio	tex-src/texinfo.tex	/^{\\let\\folio=0%$/
 follow_key	c-src/emacs/src/keyboard.c	/^follow_key (Lisp_Object keymap, Lisp_Object key)$/
 fonts	tex-src/texinfo.tex	/^\\obeyspaces \\obeylines \\ninett \\indexfonts \\rawbac/
 fonts\rm	tex-src/texinfo.tex	/^  \\indexfonts\\rm \\tolerance=9500 \\advance\\baseline/
@@ -2925,11 +2715,15 @@ foobar	c-src/c.c	/^int foobar() {;}$/
 foobar	c.c	/^extern void foobar (void) __attribute__ ((section /
 foobar2	c-src/h.h	20
 foobar2_	c-src/h.h	16
+footnote	tex-src/texinfo.tex	/^\\long\\gdef\\footnote #1{\\global\\advance \\footnoteno/
+footnotestyle	tex-src/texinfo.tex	/^\\let\\footnotestyle=\\comment$/
+footnotezzz	tex-src/texinfo.tex	/^\\long\\gdef\\footnotezzz #1{\\insert\\footins{$/
 foperator	c-src/etags.c	2411
 force_auto_save_soon	c-src/emacs/src/keyboard.c	/^force_auto_save_soon (void)$/
 force_explicit_name	c-src/etags.c	265
 force_quit_count	c-src/emacs/src/keyboard.c	10387
 foreign_export	merc-src/accumulator.m	/^:- pragma foreign_export("C", unravel_univ(in, out/
+format	tex-src/texinfo.tex	/^\\def\\format{\\begingroup\\inENV %This group ends at /
 formatSize	objc-src/PackInsp.m	/^-(const char *)formatSize:(const char *)size inBuf/
 found	c-src/emacs/src/lisp.h	2344
 fracas	html-src/software.html	/^Fracas$/
@@ -2946,8 +2740,12 @@ free_regexps	c-src/etags.c	/^free_regexps (void)$/
 free_tree	c-src/etags.c	/^free_tree (register node *np)$/
 free_var	prol-src/natded.prolog	/^free_var(var(V),var(V)).$/
 freehook	c-src/emacs/src/gmalloc.c	/^freehook (void *ptr)$/
+frenchspacing	tex-src/texinfo.tex	/^\\def\\frenchspacing{\\sfcode46=1000 \\sfcode63=1000 \\/
+frenchspacing	tex-src/texinfo.tex	/^\\let\\frenchspacing=\\relax%$/
 fresh_vars	prol-src/natded.prolog	/^fresh_vars(var(V),var(V)).$/
 fstartlist	c-src/etags.c	2413
+ftable	tex-src/texinfo.tex	/^\\def\\ftable{\\begingroup\\inENV\\obeylines\\obeyspaces/
+ftablex	tex-src/texinfo.tex	/^\\gdef\\ftablex #1^^M{%$/
 func	c-src/emacs/src/lisp.h	/^      void (*func) (Lisp_Object);$/
 func	c-src/emacs/src/lisp.h	/^      void (*func) (int);$/
 func	c-src/emacs/src/lisp.h	/^      void (*func) (void *);$/
@@ -2964,6 +2762,7 @@ function	c-src/emacs/src/lisp.h	2985
 function	c-src/emacs/src/lisp.h	694
 function	c-src/etags.c	194
 functionp	c-src/emacs/src/lisp.h	/^functionp (Lisp_Object object)$/
+functionparens	tex-src/texinfo.tex	/^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/
 fval	forth-src/test-forth.fth	/^fconst fvalue fval$/
 fvar	forth-src/test-forth.fth	/^fvariable fvar$/
 fvdef	c-src/etags.c	2418
@@ -3019,10 +2818,14 @@ ghi1	c-src/h.h	36
 ghi2	c-src/h.h	39
 giallo	cp-src/c.C	40
 glider	cp-src/conway.cpp	/^void glider(int x, int y)$/
+gloggingall	tex-src/texinfo.tex	/^\\def\\gloggingall{\\begingroup \\globaldefs = 1 \\logg/
 gnu	html-src/software.html	/^Free software that I wrote for the GNU project or /
 gobble_input	c-src/emacs/src/keyboard.c	/^gobble_input (void)$/
 goto-tag-location-function	el-src/emacs/lisp/progmodes/etags.el	/^(defvar goto-tag-location-function nil$/
 goto_xy	cp-src/screen.cpp	/^void goto_xy(unsigned char x, unsigned char y)$/
+group	tex-src/texinfo.tex	/^\\def\\group{\\begingroup$/
+gtr	tex-src/texinfo.tex	/^\\def\\gtr{\\realbackslash gtr}$/
+gtr	tex-src/texinfo.tex	/^\\def\\gtr{\\realbackslash gtr}%$/
 handleList	pyt-src/server.py	/^    def handleList(self, event):$/
 handleNew	pyt-src/server.py	/^    def handleNew(self, event):$/
 handle_async_input	c-src/emacs/src/keyboard.c	/^handle_async_input (void)$/
@@ -3037,6 +2840,8 @@ hash	c-src/emacs/src/lisp.h	1843
 hash	c-src/etags.c	/^hash (const char *str, int len)$/
 hash_table_test	c-src/emacs/src/lisp.h	1805
 hashfn	c-src/emacs/src/lisp.h	/^  EMACS_UINT (*hashfn) (struct hash_table_test *t,/
+hat	tex-src/texinfo.tex	/^\\def\\hat{\\realbackslash hat}$/
+hat	tex-src/texinfo.tex	/^\\def\\hat{\\realbackslash hat}%$/
 hdr	c-src/emacs/src/gmalloc.c	1860
 head_table	c-src/emacs/src/keyboard.c	11027
 header	c-src/emacs/src/lisp.h	1371
@@ -3046,6 +2851,8 @@ header	c-src/emacs/src/lisp.h	1610
 header	c-src/emacs/src/lisp.h	1672
 header	c-src/emacs/src/lisp.h	1826
 header_size	c-src/emacs/src/lisp.h	1471
+heading	tex-src/texinfo.tex	/^\\def\\heading{\\parsearg\\secheadingi}$/
+headings	tex-src/texinfo.tex	/^\\def\\headings #1 {\\csname HEADINGS#1\\endcsname}$/
 heapsize	c-src/emacs/src/gmalloc.c	361
 hello	scm-src/test.scm	/^(define hello "Hello, Emacs!")$/
 hello	scm-src/test.scm	/^(set! hello "Hello, world!")$/
@@ -3057,6 +2864,10 @@ help_form_saved_window_configs	c-src/emacs/src/keyboard.c	2156
 helpwin	pyt-src/server.py	/^def helpwin(helpdict):$/
 hide_cursor	cp-src/screen.cpp	/^void hide_cursor(void)$/
 hlds	merc-src/accumulator.m	/^:- import_module hlds.$/
+hsize	tex-src/texinfo.tex	/^			{\\let\\hsize=\\pagewidth \\makefootline}}$/
+hsize	tex-src/texinfo.tex	/^			{\\let\\hsize=\\pagewidth \\makeheadline}$/
+hsize	tex-src/texinfo.tex	/^\\shipout\\vbox{{\\let\\hsize=\\pagewidth \\makeheadline/
+hsize	tex-src/texinfo.tex	/^{\\let\\hsize=\\pagewidth \\makefootline}}}%$/
 htmltreelist	prol-src/natded.prolog	/^htmltreelist([]).$/
 hybrid_aligned_alloc	c-src/emacs/src/gmalloc.c	/^hybrid_aligned_alloc (size_t alignment, size_t siz/
 hybrid_calloc	c-src/emacs/src/gmalloc.c	/^hybrid_calloc (size_t nmemb, size_t size)$/
@@ -3071,31 +2882,87 @@ i	c-src/emacs/src/lisp.h	4679
 i	c-src/emacs/src/lisp.h	567
 i	c.c	169
 i	cp-src/c.C	132
+i	tex-src/texinfo.tex	/^\\def\\i##1{\\realbackslash i {##1}}$/
+i	tex-src/texinfo.tex	/^\\def\\i##1{\\realbackslash i {##1}}%$/
+i	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
+i	tex-src/texinfo.tex	/^\\let\\i=\\indexdummyfont$/
+i	tex-src/texinfo.tex	/^\\let\\i=\\smartitalic$/
 ialpage	tex-src/texinfo.tex	/^     \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\pa/
 ialpage	tex-src/texinfo.tex	/^  \\availdimen@=\\pageheight \\advance\\availdimen@ by/
 ialpage	tex-src/texinfo.tex	/^  \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\parti/
+ialpage	tex-src/texinfo.tex	/^  \\output={\\global\\setbox\\partialpage=$/
+ialpage	tex-src/texinfo.tex	/^\\def\\pagesofar{\\unvbox\\partialpage %$/
 ialpage	tex-src/texinfo.tex	/^\\newbox\\partialpage$/
-ialpage=	tex-src/texinfo.tex	/^  \\output={\\global\\setbox\\partialpage=$/
 identify_goal_type	merc-src/accumulator.m	/^:- pred identify_goal_type(pred_id::in, proc_id::i/
 identify_out_and_out_prime	merc-src/accumulator.m	/^:- pred identify_out_and_out_prime(module_info::in/
 identify_recursive_calls	merc-src/accumulator.m	/^:- pred identify_recursive_calls(pred_id::in, proc/
 idx	c-src/emacs/src/lisp.h	3150
+ifclear	tex-src/texinfo.tex	/^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/
+ifclearfail	tex-src/texinfo.tex	/^\\def\\ifclearfail{\\begingroup\\ignoresections\\ifclea/
+ifclearfailxxx	tex-src/texinfo.tex	/^\\long\\def\\ifclearfailxxx #1\\end ifclear{\\endgroup\\/
+ifclearxxx	tex-src/texinfo.tex	/^\\def\\ifclearxxx #1{\\endgroup$/
+ifinfo	tex-src/texinfo.tex	/^\\def\\ifinfo{\\begingroup\\ignoresections\\ifinfoxxx}$/
+ifinfoxxx	tex-src/texinfo.tex	/^\\long\\def\\ifinfoxxx #1\\end ifinfo{\\endgroup\\ignore/
+ifset	tex-src/texinfo.tex	/^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/
+ifsetfail	tex-src/texinfo.tex	/^\\def\\ifsetfail{\\begingroup\\ignoresections\\ifsetfai/
+ifsetfailxxx	tex-src/texinfo.tex	/^\\long\\def\\ifsetfailxxx #1\\end ifset{\\endgroup\\igno/
+ifsetxxx	tex-src/texinfo.tex	/^\\def\\ifsetxxx #1{\\endgroup$/
+iftex	tex-src/texinfo.tex	/^\\def\\iftex{}$/
+ifusingtt	tex-src/texinfo.tex	/^\\def\\ifusingtt#1#2{\\ifdim \\fontdimen3\\the\\font=0pt/
+ignore	tex-src/texinfo.tex	/^\\def\\ignore{\\begingroup\\ignoresections$/
 ignore_case	c-src/etags.c	266
 ignore_mouse_drag_p	c-src/emacs/src/keyboard.c	1256
-ill=\relax	tex-src/texinfo.tex	/^\\let\\refill=\\relax$/
+ignoresections	tex-src/texinfo.tex	/^\\def\\ignoresections{%$/
+ignorexxx	tex-src/texinfo.tex	/^\\long\\def\\ignorexxx #1\\end ignore{\\endgroup\\ignore/
+ii	tex-src/texinfo.tex	/^\\def\\ii#1{{\\it #1}}		% italic font$/
 immediate_quit	c-src/emacs/src/keyboard.c	174
 impatto	html-src/softwarelibero.html	/^Impatto pratico del software libero$/
 implementation	merc-src/accumulator.m	/^:- implementation.$/
+implicitmath	tex-src/texinfo.tex	/^\\let\\implicitmath = $$/
+inENV	tex-src/texinfo.tex	/^\\newif\\ifENV \\ENVfalse \\def\\inENV{\\ifENV\\relax\\els/
 in_word_set	c-src/etags.c	/^in_word_set (register const char *str, register un/
 inattribute	c-src/etags.c	2400
 inc	cp-src/Range.h	/^  double inc (void) const { return rng_inc;   }$/
+include	tex-src/texinfo.tex	/^\\def\\include{\\parsearg\\includezzz}$/
+includezzz	tex-src/texinfo.tex	/^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/
+indbf	tex-src/texinfo.tex	/^\\let\\indbf=\\indrm$/
 index	c-src/emacs/src/lisp.h	1856
+indexbackslash	tex-src/texinfo.tex	/^  \\def\\indexbackslash{\\rawbackslashxx}$/
+indexbackslash	tex-src/texinfo.tex	/^\\let\\indexbackslash=0  %overridden during \\printin/
+indexdotfill	tex-src/texinfo.tex	/^\\def\\indexdotfill{\\cleaders$/
+indexdummies	tex-src/texinfo.tex	/^\\def\\indexdummies{%$/
+indexdummydots	tex-src/texinfo.tex	/^\\def\\indexdummydots{...}$/
+indexdummyfont	tex-src/texinfo.tex	/^\\def\\indexdummyfont#1{#1}$/
+indexdummytex	tex-src/texinfo.tex	/^\\def\\indexdummytex{TeX}$/
+indexfonts	tex-src/texinfo.tex	/^\\def\\indexfonts{%$/
+indexname	tex-src/texinfo.tex	/^\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\si/
+indexname	tex-src/texinfo.tex	/^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/
+indexnofonts	tex-src/texinfo.tex	/^\\def\\indexnofonts{%$/
+indsc	tex-src/texinfo.tex	/^\\let\\indsc=\\indrm$/
+indsf	tex-src/texinfo.tex	/^\\let\\indsf=\\indrm$/
+indsl	tex-src/texinfo.tex	/^\\let\\indsl=\\indit$/
+indtt	tex-src/texinfo.tex	/^\\let\\indtt=\\ninett$/
 infabsdir	c-src/etags.c	206
 infabsname	c-src/etags.c	205
 infiles	make-src/Makefile	/^infiles = $(filter-out ${NONSRCS},${SRCS}) srclist/
 infname	c-src/etags.c	204
 info	c-src/emacs/src/gmalloc.c	157
 infoPanel	objcpp-src/SimpleCalc.M	/^- infoPanel:sender$/
+infoappendix	tex-src/texinfo.tex	/^\\def\\infoappendix{\\parsearg\\appendixzzz}$/
+infoappendixsec	tex-src/texinfo.tex	/^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/
+infoappendixsubsec	tex-src/texinfo.tex	/^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/
+infoappendixsubsubsec	tex-src/texinfo.tex	/^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/
+infochapter	tex-src/texinfo.tex	/^\\def\\infochapter{\\parsearg\\chapterzzz}$/
+inforef	tex-src/texinfo.tex	/^\\def\\inforef #1{\\inforefzzz #1,,,,**}$/
+inforefzzz	tex-src/texinfo.tex	/^\\def\\inforefzzz #1,#2,#3,#4**{See Info file \\file{/
+infosection	tex-src/texinfo.tex	/^\\def\\infosection{\\parsearg\\sectionzzz}$/
+infosubsection	tex-src/texinfo.tex	/^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/
+infosubsubsection	tex-src/texinfo.tex	/^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/
+infotop	tex-src/texinfo.tex	/^\\def\\infotop{\\parsearg\\unnumberedzzz}$/
+infounnumbered	tex-src/texinfo.tex	/^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/
+infounnumberedsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsec{\\parsearg\\unnumberedseczzz}/
+infounnumberedsubsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsubsec{\\parsearg\\unnumberedsubs/
+infounnumberedsubsubsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsubsubsec{\\parsearg\\unnumbereds/
 init	c-src/etags.c	/^init (void)$/
 init	objc-src/Subprocess.m	/^    andStdErr:(BOOL)wantsStdErr$/
 init	objc-src/Subprocess.m	/^- init:(const char *)subprocessString$/
@@ -3107,6 +2974,7 @@ init_registry	cp-src/clheir.cpp	/^void init_registry(void)$/
 init_tool_bar_items	c-src/emacs/src/keyboard.c	/^init_tool_bar_items (Lisp_Object reuse)$/
 inita	c.c	/^static void inita () {}$/
 initb	c.c	/^static void initb () {}$/
+initial	tex-src/texinfo.tex	/^\\def\\initial #1{%$/
 initial_kboard	c-src/emacs/src/keyboard.c	84
 initialize-new-tags-table	el-src/emacs/lisp/progmodes/etags.el	/^(defun initialize-new-tags-table ()$/
 initialize_goal_store	merc-src/accumulator.m	/^:- func initialize_goal_store(list(hlds_goal), ins/
@@ -3138,7 +3006,14 @@ interface	merc-src/accumulator.m	/^:- interface.$/
 interface_locate	c-src/c.c	/^interface_locate(void)$/
 intern	c-src/emacs/src/lisp.h	/^intern (const char *str)$/
 intern_c_string	c-src/emacs/src/lisp.h	/^intern_c_string (const char *str)$/
+internalBitem	tex-src/texinfo.tex	/^\\def\\internalBitem{\\smallbreak \\parsearg\\itemzzz}$/
+internalBitemx	tex-src/texinfo.tex	/^\\def\\internalBitemx{\\par \\parsearg\\itemzzz}$/
+internalBkitem	tex-src/texinfo.tex	/^\\def\\internalBkitem{\\smallbreak \\parsearg\\kitemzzz/
+internalBkitemx	tex-src/texinfo.tex	/^\\def\\internalBkitemx{\\par \\parsearg\\kitemzzz}$/
+internalBxitem	tex-src/texinfo.tex	/^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/
+internalBxitemx	tex-src/texinfo.tex	/^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/
 internal_last_event_frame	c-src/emacs/src/keyboard.c	228
+internalsetq	tex-src/texinfo.tex	/^\\def\\internalsetq #1#2{'xrdef {#1}{\\csname #2\\endc/
 interned	c-src/emacs/src/lisp.h	672
 interpreters	c-src/etags.c	197
 interrupt_input	c-src/emacs/src/keyboard.c	328
@@ -3173,9 +3048,28 @@ iso_lispy_function_keys	c-src/emacs/src/keyboard.c	5151
 isoperator	prol-src/natded.prolog	/^isoperator(Char):-$/
 isoptab	prol-src/natded.prolog	/^isoptab('%').$/
 iswhite	c-src/etags.c	/^#define	iswhite(c)	(_wht[CHAR (c)]) \/* c is white /
+item	tex-src/texinfo.tex	/^\\def\\item{\\errmessage{@item while not in a table}}/
+item	tex-src/texinfo.tex	/^\\let\\item = \\internalBitem %$/
+item	tex-src/texinfo.tex	/^\\let\\item=\\itemizeitem}$/
 item_properties	c-src/emacs/src/keyboard.c	7568
+itemcontents	tex-src/texinfo.tex	/^\\def\\itemcontents{#1}%$/
+itemfont	tex-src/texinfo.tex	/^\\def\\itemfont{#2}%$/
+itemindex	tex-src/texinfo.tex	/^\\let\\itemindex=#1%$/
+itemize	tex-src/texinfo.tex	/^\\def\\itemize{\\parsearg\\itemizezzz}$/
+itemizeitem	tex-src/texinfo.tex	/^\\def\\itemizeitem{%$/
+itemizey	tex-src/texinfo.tex	/^\\def\\itemizey #1#2{%$/
+itemizezzz	tex-src/texinfo.tex	/^\\def\\itemizezzz #1{%$/
+itemx	tex-src/texinfo.tex	/^\\def\\itemx{\\errmessage{@itemx while not in a table/
+itemx	tex-src/texinfo.tex	/^\\let\\itemx = \\internalBitemx %$/
+itemzzz	tex-src/texinfo.tex	/^\\def\\itemzzz #1{\\begingroup %$/
+ivarheader	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
+ivarx\defivarheader	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
 jmp	c-src/emacs/src/lisp.h	3044
 just_read_file	c-src/etags.c	/^just_read_file (FILE *inf)$/
+kbd	tex-src/texinfo.tex	/^\\def\\kbd##1{\\realbackslash kbd {##1}}$/
+kbd	tex-src/texinfo.tex	/^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/
+kbd	tex-src/texinfo.tex	/^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/
+kbd	tex-src/texinfo.tex	/^\\let\\kbd=\\indexdummyfont$/
 kbd_buffer	c-src/emacs/src/keyboard.c	291
 kbd_buffer_events_waiting	c-src/emacs/src/keyboard.c	/^kbd_buffer_events_waiting (void)$/
 kbd_buffer_get_event	c-src/emacs/src/keyboard.c	/^kbd_buffer_get_event (KBOARD **kbp,$/
@@ -3186,9 +3080,14 @@ kbd_buffer_store_help_event	c-src/emacs/src/keyboard.c	/^kbd_buffer_store_help_e
 kbd_buffer_unget_event	c-src/emacs/src/keyboard.c	/^kbd_buffer_unget_event (register struct input_even/
 kbd_fetch_ptr	c-src/emacs/src/keyboard.c	297
 kbd_store_ptr	c-src/emacs/src/keyboard.c	302
+kbdfoo	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
 kboard	c-src/emacs/src/keyboard.c	860
 kboard_stack	c-src/emacs/src/keyboard.c	858
 kboard_stack	c-src/emacs/src/keyboard.c	864
+key	tex-src/texinfo.tex	/^\\def\\key #1{{\\tt \\exhyphenpenalty=10000\\uppercase{/
+key	tex-src/texinfo.tex	/^\\def\\key##1{\\realbackslash key {##1}}$/
+key	tex-src/texinfo.tex	/^\\def\\key##1{\\realbackslash key {##1}}%$/
+key	tex-src/texinfo.tex	/^\\let\\key=\\indexdummyfont$/
 key_and_value	c-src/emacs/src/lisp.h	1868
 keyremap	c-src/emacs/src/keyboard.c	8742
 keyremap	c-src/emacs/src/keyboard.c	8754
@@ -3203,6 +3102,12 @@ keywords	y-src/cccp.y	114
 keywords	y-src/cccp.y	306
 kind	c-src/emacs/src/keyboard.c	11024
 kind	c-src/h.h	46
+kindex	tex-src/texinfo.tex	/^\\def\\kindex {\\kyindex}$/
+kitem	tex-src/texinfo.tex	/^\\def\\kitem{\\errmessage{@kitem while not in a table/
+kitem	tex-src/texinfo.tex	/^\\let\\kitem = \\internalBkitem %$/
+kitemx	tex-src/texinfo.tex	/^\\def\\kitemx{\\errmessage{@kitemx while not in a tab/
+kitemx	tex-src/texinfo.tex	/^\\let\\kitemx = \\internalBkitemx %$/
+kitemzzz	tex-src/texinfo.tex	/^\\def\\kitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/
 kset_echo_string	c-src/emacs/src/keyboard.c	/^kset_echo_string (struct kboard *kb, Lisp_Object v/
 kset_kbd_queue	c-src/emacs/src/keyboard.c	/^kset_kbd_queue (struct kboard *kb, Lisp_Object val/
 kset_keyboard_translate_table	c-src/emacs/src/keyboard.c	/^kset_keyboard_translate_table (struct kboard *kb, /
@@ -3212,6 +3117,9 @@ kset_local_function_key_map	c-src/emacs/src/keyboard.c	/^kset_local_function_key
 kset_overriding_terminal_local_map	c-src/emacs/src/keyboard.c	/^kset_overriding_terminal_local_map (struct kboard /
 kset_real_last_command	c-src/emacs/src/keyboard.c	/^kset_real_last_command (struct kboard *kb, Lisp_Ob/
 kset_system_key_syms	c-src/emacs/src/keyboard.c	/^kset_system_key_syms (struct kboard *kb, Lisp_Obje/
+l	tex-src/texinfo.tex	/^\\def\\l#1{{\\li #1}\\null}		% $/
+l	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
+labelspace	tex-src/texinfo.tex	/^\\def\\labelspace{\\hskip1em \\relax}$/
 lang	c-src/etags.c	208
 lang	c-src/etags.c	251
 lang	c-src/etags.c	259
@@ -3232,7 +3140,11 @@ lasta	c.c	272
 lastargmargin	tex-src/texinfo.tex	/^\\newskip\\deflastargmargin \\deflastargmargin=18pt$/
 lastargmargin	tex-src/texinfo.tex	/^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/
 lastb	c.c	278
+lastnode	tex-src/texinfo.tex	/^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/
+lastnode	tex-src/texinfo.tex	/^\\let\\lastnode=\\relax$/
+lastnode	tex-src/texinfo.tex	/^\\let\\lastnode=\\relax}$/
 lb	c-src/etags.c	2923
+lbrb	tex-src/texinfo.tex	/^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/
 lbs	c-src/etags.c	2924
 lce	php-src/lce_functions.php	/^      function lce()$/
 lce_bindtextdomain	php-src/lce_functions.php	/^      function lce_bindtextdomain($d_name, $d_path/
@@ -3248,12 +3160,15 @@ len	c-src/etags.c	237
 length	c-src/etags.c	2495
 length	y-src/cccp.y	113
 length	y-src/cccp.y	44
+less	tex-src/texinfo.tex	/^\\def\\less{\\realbackslash less}$/
+less	tex-src/texinfo.tex	/^\\def\\less{\\realbackslash less}%$/
 let	c-src/emacs/src/lisp.h	2981
 letter	tex-src/texinfo.tex	/^  {#1}{Appendix \\appendixletter}{\\noexpand\\folio}}/
 letter	tex-src/texinfo.tex	/^  {\\appendixletter}$/
 letter	tex-src/texinfo.tex	/^  {\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\th/
 letter	tex-src/texinfo.tex	/^\\chapmacro {#1}{Appendix \\appendixletter}%$/
 letter	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\secheading {#1}{\\appendixlet/
+letter	tex-src/texinfo.tex	/^\\global\\advance \\appendixno by 1 \\message{Appendix/
 letter	tex-src/texinfo.tex	/^\\subsecheading {#1}{\\appendixletter}{\\the\\secno}{\\/
 letter	tex-src/texinfo.tex	/^{#1}{\\appendixletter}{\\the\\secno}{\\noexpand\\folio}/
 letter	tex-src/texinfo.tex	/^{#1}{\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\/
@@ -3261,6 +3176,7 @@ letter:	tex-src/texinfo.tex	/^\\xdef\\thischapter{Appendix \\appendixletter: \\n
 level	c-src/emacs/src/lisp.h	3153
 lex	prol-src/natded.prolog	/^lex(W,SynOut,Sem):-$/
 lexptr	y-src/cccp.y	332
+li	tex-src/texinfo.tex	/^\\let\\li = \\sf % Sometimes we call it \\li, not \\sf./
 libs	merc-src/accumulator.m	/^:- import_module libs.$/
 licenze	html-src/softwarelibero.html	/^Licenze d'uso di un programma$/
 limit	cp-src/Range.h	/^  double limit (void) const { return rng_limit; }$/
@@ -3273,9 +3189,12 @@ linebuffer_init	c-src/etags.c	/^linebuffer_init (linebuffer *lbp)$/
 linebuffer_setlen	c-src/etags.c	/^linebuffer_setlen (linebuffer *lbp, int toksize)$/
 lineno	c-src/emacs/src/lisp.h	3147
 lineno	c-src/etags.c	2506
+linenumber	tex-src/texinfo.tex	/^  \\def\\linenumber{\\the\\inputlineno:\\space}$/
+linenumber	tex-src/texinfo.tex	/^  \\let\\linenumber = \\empty % Non-3.0.$/
 linepos	c-src/etags.c	2507
 linepos	c-src/etags.c	2922
 links	html-src/software.html	/^Links to interesting software$/
+lisp	tex-src/texinfo.tex	/^\\def\\lisp{\\aboveenvbreak$/
 lisp_eval_depth	c-src/emacs/src/lisp.h	3045
 lisp_h_CHECK_LIST_CONS	c-src/emacs/src/lisp.h	/^#define lisp_h_CHECK_LIST_CONS(x, y) CHECK_TYPE (C/
 lisp_h_CHECK_NUMBER	c-src/emacs/src/lisp.h	/^#define lisp_h_CHECK_NUMBER(x) CHECK_TYPE (INTEGER/
@@ -3309,6 +3228,7 @@ lisp_h_XTYPE	c-src/emacs/src/lisp.h	/^# define lisp_h_XTYPE(a) ((enum Lisp_Type)
 lisp_h_XUNTAG	c-src/emacs/src/lisp.h	/^# define lisp_h_XUNTAG(a, type) ((void *) (intptr_/
 lisp_h_check_cons_list	c-src/emacs/src/lisp.h	/^# define lisp_h_check_cons_list() ((void) 0)$/
 lisp_h_make_number	c-src/emacs/src/lisp.h	/^# define lisp_h_make_number(n) \\$/
+lisppar	tex-src/texinfo.tex	/^\\gdef\\lisppar{\\null\\endgraf}}$/
 lispy_accent_codes	c-src/emacs/src/keyboard.c	4634
 lispy_accent_keys	c-src/emacs/src/keyboard.c	4741
 lispy_drag_n_drop_names	c-src/emacs/src/keyboard.c	5181
@@ -3335,18 +3255,29 @@ loadPORManager	php-src/lce_functions.php	/^  function &loadPORManager()$/
 local_if_set	c-src/emacs/src/lisp.h	2338
 location	cp-src/clheir.hpp	/^    location() { }$/
 location	cp-src/clheir.hpp	33
+loggingall	tex-src/texinfo.tex	/^\\def\\loggingall{\\tracingcommands2 \\tracingstats2 $/
+look	tex-src/texinfo.tex	/^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/
 lookup	y-src/cccp.y	/^lookup (name, len, hash)$/
 lookup_call	merc-src/accumulator.m	/^:- pred lookup_call(accu_goal_store::in, accu_goal/
+losespace	tex-src/texinfo.tex	/^\\def\\losespace #1{#1}$/
 lowcase	c-src/etags.c	/^#define lowcase(c)	tolower (CHAR (c))$/
+lowercaseenumerate	tex-src/texinfo.tex	/^\\def\\lowercaseenumerate{%$/
 lucid_event_type_list_p	c-src/emacs/src/keyboard.c	/^lucid_event_type_list_p (Lisp_Object object)$/
+lvvmode	tex-src/texinfo.tex	/^\\def\\lvvmode{\\vbox to 0pt{}}$/
 mabort	c-src/emacs/src/gmalloc.c	/^mabort (enum mcheck_status status)$/
 mach_host_self	c-src/machsyscalls.h	/^SYSCALL (mach_host_self, -29,$/
 mach_msg_trap	c-src/machsyscalls.h	/^SYSCALL (mach_msg_trap, -25,$/
 mach_reply_port	c-src/machsyscalls.h	/^SYSCALL (mach_reply_port, -26,$/
 mach_task_self	c-src/machsyscalls.h	/^SYSCALL (mach_task_self, -28,$/
 mach_thread_self	c-src/machsyscalls.h	/^SYSCALL (mach_thread_self, -27,$/
+macheader	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
+macx\defmacheader	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
 magic	c-src/emacs/src/gmalloc.c	1863
+mainmagstep	tex-src/texinfo.tex	/^\\let\\mainmagstep=\\magstep1$/
+mainmagstep	tex-src/texinfo.tex	/^\\let\\mainmagstep=\\magstephalf$/
 maintaining.info	make-src/Makefile	/^maintaining.info: maintaining.texi$/
+majorheading	tex-src/texinfo.tex	/^\\def\\majorheading{\\parsearg\\majorheadingzzz}$/
+majorheadingzzz	tex-src/texinfo.tex	/^\\def\\majorheadingzzz #1{%$/
 make-abbrev-table	c-src/abbrev.c	/^DEFUN ("make-abbrev-table", Fmake_abbrev_table, Sm/
 make_C_tag	c-src/etags.c	/^make_C_tag (bool isfun)$/
 make_coor	prol-src/natded.prolog	/^make_coor(s(_),Alpha,Sem1,Sem2,Alpha@Sem1@Sem2).$/
@@ -3387,6 +3318,7 @@ map_word	prol-src/natded.prolog	/^map_word([[_]|Ws],Exp):-$/
 mapping	html-src/algrthms.html	/^Mapping the Channel Symbols$/
 mapsyn	prol-src/natded.prolog	/^mapsyn(A\/B,AM\/BM):-$/
 mark_kboards	c-src/emacs/src/keyboard.c	/^mark_kboards (void)$/
+math	tex-src/texinfo.tex	/^\\def\\math#1{\\implicitmath #1\\implicitmath}$/
 max	c-src/emacs/src/lisp.h	/^#define max(a, b) ((a) > (b) ? (a) : (b))$/
 max	c-src/emacs/src/lisp.h	58
 max	c.c	/^__attribute__ ((always_inline)) max (int a, int b)/
@@ -3409,6 +3341,7 @@ memalign	c-src/emacs/src/gmalloc.c	/^memalign (size_t alignment, size_t size)$/
 member	prol-src/natded.prolog	/^member(X,[X|_]).$/
 member_lessthan_goalid	merc-src/accumulator.m	/^:- pred member_lessthan_goalid(accu_goal_store::in/
 memclear	c-src/emacs/src/lisp.h	/^memclear (void *p, ptrdiff_t nbytes)$/
+menu	tex-src/texinfo.tex	/^\\long\\def\\menu #1\\end menu{}$/
 menu_bar_item	c-src/emacs/src/keyboard.c	/^menu_bar_item (Lisp_Object key, Lisp_Object item, /
 menu_bar_items	c-src/emacs/src/keyboard.c	/^menu_bar_items (Lisp_Object old)$/
 menu_bar_items_index	c-src/emacs/src/keyboard.c	7369
@@ -3418,6 +3351,11 @@ menu_item_eval_property	c-src/emacs/src/keyboard.c	/^menu_item_eval_property (Li
 menu_item_eval_property_1	c-src/emacs/src/keyboard.c	/^menu_item_eval_property_1 (Lisp_Object arg)$/
 menu_separator_name_p	c-src/emacs/src/keyboard.c	/^menu_separator_name_p (const char *label)$/
 metasource	c-src/etags.c	198
+methodheader	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
+methodx\defmethodheader	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
+methparsebody\Edeffn	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
+methparsebody\Edefmethod	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
+methparsebody\Edeftypefn	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
 min	c-src/emacs/src/gmalloc.c	/^#define min(a, b) ((a) < (b) ? (a) : (b))$/
 min	c-src/emacs/src/lisp.h	/^#define min(a, b) ((a) < (b) ? (a) : (b))$/
 min	c-src/emacs/src/lisp.h	57
@@ -3425,6 +3363,7 @@ min	cp-src/conway.cpp	/^#define min(x,y)  ((x > y) ? y : x)$/
 min_args	c-src/emacs/src/lisp.h	1686
 min_char	c-src/emacs/src/lisp.h	1621
 minus	cp-src/functions.cpp	/^void Date::minus ( int days , int month , int year/
+minus	tex-src/texinfo.tex	/^\\def\\minus{$-$}$/
 miti	html-src/softwarelibero.html	/^Sfatiamo alcuni miti$/
 modifier_names	c-src/emacs/src/keyboard.c	6319
 modifier_symbols	c-src/emacs/src/keyboard.c	6327
@@ -3450,7 +3389,9 @@ my_struct	c-src/h.h	91
 my_struct	c.c	226
 my_typedef	c-src/h.h	93
 my_typedef	c.c	228
+mylbrace	tex-src/texinfo.tex	/^\\def\\mylbrace {{\\tt \\char '173}}$/
 mypi	forth-src/test-forth.fth	/^synonym mypi fconst$/
+myrbrace	tex-src/texinfo.tex	/^\\def\\myrbrace {{\\tt \\char '175}}$/
 n	c-src/exit.c	28
 n	c-src/exit.strange_suffix	28
 name	c-src/emacs/src/keyboard.c	7241
@@ -3480,21 +3421,28 @@ name	tex-src/texinfo.tex	/^\\begingroup\\defname {\\code{#1} #2}{Function}%$/
 name	tex-src/texinfo.tex	/^\\begingroup\\defname {\\code{#1} #2}{Variable}%$/
 name	tex-src/texinfo.tex	/^\\begingroup\\defname {\\code{#2} #3}{#1}$/
 name	tex-src/texinfo.tex	/^\\begingroup\\defname {\\code{#2} #3}{#1}%$/
+name	tex-src/texinfo.tex	/^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/
+name	tex-src/texinfo.tex	/^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/
 name	y-src/cccp.y	113
 name	y-src/cccp.y	43
 named	c-src/etags.c	2505
 namestringequal	pas-src/common.pas	/^function namestringequal;(*(var Name1,Name2 : Name/
 nargs	c-src/emacs/src/lisp.h	2987
+need	tex-src/texinfo.tex	/^\\def\\need{\\parsearg\\needx}$/
 need_adjustment	c-src/emacs/src/lisp.h	1986
+needx	tex-src/texinfo.tex	/^\\def\\needx#1{%$/
 neighbors	cp-src/clheir.hpp	59
 nelem	cp-src/Range.h	/^  int nelem (void) const { return rng_nelem; }$/
 nestlev	c-src/etags.c	2525
 new	objc-src/PackInsp.m	/^+new$/
 new	perl-src/htlmify-cystic	163
 new_tag	perl-src/htlmify-cystic	18
+newcodeindex	tex-src/texinfo.tex	/^\\def\\newcodeindex #1{$/
+newindex	tex-src/texinfo.tex	/^\\def\\newindex #1{$/
 newlb	c-src/etags.c	2930
 newlinepos	c-src/etags.c	2932
 newtextstring	pas-src/common.pas	/^function newtextstring; (*: TextString;*)$/
+newwrite	tex-src/texinfo.tex	/^\\gdef\\newwrite{\\alloc@7\\write\\chardef\\sixt@@n}}$/
 next	c-src/emacs/src/gmalloc.c	164
 next	c-src/emacs/src/gmalloc.c	188
 next	c-src/emacs/src/gmalloc.c	198
@@ -3509,6 +3457,10 @@ next	c-src/emacs/src/lisp.h	3134
 next	c-src/emacs/src/lisp.h	700
 next	c-src/etags.c	203
 next	c.c	174
+next	tex-src/texinfo.tex	/^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else /
+next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
+next	tex-src/texinfo.tex	/^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/
+next	tex-src/texinfo.tex	/^\\edef\\next{\\write\\auxfile{\\internalsetq {#1}{#2}}}/
 next	y-src/cccp.y	42
 next-file	el-src/emacs/lisp/progmodes/etags.el	/^(defun next-file (&optional initialize novisit)$/
 next-file-list	el-src/emacs/lisp/progmodes/etags.el	/^(defvar next-file-list nil$/
@@ -3519,26 +3471,44 @@ next_weak	c-src/emacs/src/lisp.h	1875
 nextfree	c-src/emacs/src/lisp.h	3029
 nfree	c-src/emacs/src/gmalloc.c	150
 nl	c-src/etags.c	2521
+nm	tex-src/testenv.tex	/^\\newcommand{\\nm}[2]{\\nomenclature{#1}{#2}}$/
+no	tex-src/texinfo.tex	/^\\def\\appendixletter{\\char\\the\\appendixno}$/
 no	tex-src/texinfo.tex	/^\\global\\advance \\appendixno by 1 \\message{Appendix/
 no	tex-src/texinfo.tex	/^\\ifnum\\secno=0 Appendix\\xreftie'char\\the\\appendixn/
 no	tex-src/texinfo.tex	/^\\newcount \\appendixno  \\appendixno = `\\@$/
-no.\the\secno	tex-src/texinfo.tex	/^\\else \\ifnum \\subsecno=0 Section\\xreftie'char\\the\\/
-no.\the\secno.\the\subsecno	tex-src/texinfo.tex	/^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/
-no.\the\secno.\the\subsecno.\the\subsubsecno	tex-src/texinfo.tex	/^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/
+no.\the	tex-src/texinfo.tex	/^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/
+no.\the	tex-src/texinfo.tex	/^\\else \\ifnum \\subsecno=0 Section\\xreftie'char\\the\\/
 no_argument	c-src/getopt.h	89
 no_lang_help	c-src/etags.c	707
 no_sub	c-src/emacs/src/regex.h	387
 nocase_tail	c-src/etags.c	/^nocase_tail (const char *cp)$/
 node	c-src/etags.c	225
+node	tex-src/texinfo.tex	/^\\def\\node{\\ENVcheck\\parsearg\\nodezzz}$/
 node_st	c-src/etags.c	214
 noderef	tex-src/texinfo.tex	/^\\appendixnoderef %$/
+nodexxx	tex-src/texinfo.tex	/^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/
+nodezzz	tex-src/texinfo.tex	/^\\def\\nodezzz#1{\\nodexxx [#1,]}$/
+nofillexdent	tex-src/texinfo.tex	/^\\def\\nofillexdent{\\parsearg\\nofillexdentyyy}$/
+nofillexdentyyy	tex-src/texinfo.tex	/^\\def\\nofillexdentyyy #1{{\\advance \\leftskip by -\\e/
+nofonts	tex-src/texinfo.tex	/^{\\chapternofonts%$/
 nofonts	tex-src/texinfo.tex	/^{\\indexnofonts$/
-nofonts%	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nonarrowing	tex-src/texinfo.tex	/^	\\let\\nonarrowing=\\comment$/
+nonarrowing	tex-src/texinfo.tex	/^\\let\\nonarrowing=\\relax$/
 none_help	c-src/etags.c	703
+normalbackslash	tex-src/texinfo.tex	/^\\def\\normalbackslash{{\\tt\\rawbackslashxx}}$/
+normalcaret	tex-src/texinfo.tex	/^\\def\\normalcaret{^}$/
+normaldoublequote	tex-src/texinfo.tex	/^\\def\\normaldoublequote{"}$/
+normalgreater	tex-src/texinfo.tex	/^\\def\\normalgreater{>}$/
 normalize	prol-src/natded.prolog	/^normalize(M,MNorm):-$/
 normalize_fresh	prol-src/natded.prolog	/^normalize_fresh(M,N):-$/
 normalize_tree	prol-src/natded.prolog	/^normalize_tree(tree(Rule,Syn:Sem,Trees),$/
 normalize_trees	prol-src/natded.prolog	/^normalize_trees([],[]).$/
+normalless	tex-src/texinfo.tex	/^\\def\\normalless{<}$/
+normalparens	tex-src/texinfo.tex	/^\\gdef\\normalparens{\\boldbrax\\let&=\\ampnr}$/
+normalplus	tex-src/texinfo.tex	/^\\def\\normalplus{+}$/
+normaltilde	tex-src/texinfo.tex	/^\\def\\normaltilde{~}$/
+normalunderscore	tex-src/texinfo.tex	/^\\def\\normalunderscore{_}$/
+normalverticalbar	tex-src/texinfo.tex	/^\\def\\normalverticalbar{|}$/
 nosave	pyt-src/server.py	/^    def nosave(self):$/
 not_bol	c-src/emacs/src/regex.h	391
 not_eol	c-src/emacs/src/regex.h	394
@@ -3549,6 +3519,8 @@ notag4	c-src/dostorture.c	45
 notag4	c-src/torture.c	45
 notinname	c-src/etags.c	/^#define notinname(c)	(_nin[CHAR (c)]) \/* c is not /
 npending	c-src/emacs/src/keyboard.c	7244
+nsbot	tex-src/texinfo.tex	/^\\def\\nsbot{\\vbox$/
+nstop	tex-src/texinfo.tex	/^\\def\\nstop{\\vbox$/
 ntool_bar_items	c-src/emacs/src/keyboard.c	7974
 numOfChannels	cp-src/c.C	1
 num_columns	cp-src/conway.cpp	16
@@ -3557,8 +3529,15 @@ num_regs	c-src/emacs/src/regex.h	430
 num_rows	cp-src/conway.cpp	15
 numberKeys	objcpp-src/SimpleCalc.M	/^- numberKeys:sender$/
 number_len	c-src/etags.c	/^static int number_len (long) ATTRIBUTE_CONST;$/
+numberedsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsec{\\parsearg\\seczzz}$/
+numberedsubsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsubsec{\\parsearg\\numberedsubsec/
+numberedsubseczzz	tex-src/texinfo.tex	/^\\def\\numberedsubseczzz #1{\\seccheck{subsection}%$/
+numberedsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsubsubsec{\\parsearg\\numberedsub/
+numberedsubsubseczzz	tex-src/texinfo.tex	/^\\def\\numberedsubsubseczzz #1{\\seccheck{subsubsecti/
 numbervars	prol-src/natded.prolog	/^numbervars(X):-$/
+numericenumerate	tex-src/texinfo.tex	/^\\def\\numericenumerate{%$/
 nvars	c-src/emacs/src/lisp.h	3140
+obeyedspace	tex-src/texinfo.tex	/^\\gdef\\obeyedspace{\\ }$/
 objdef	c-src/etags.c	2484
 object	c-src/emacs/src/lisp.h	2128
 object_registry	cp-src/clheir.cpp	10
@@ -3569,6 +3548,12 @@ obstack_chunk_free	y-src/parse.y	48
 ocatseen	c-src/etags.c	2477
 octave_MDiagArray2_h	cp-src/MDiagArray2.h	29
 octave_Range_h	cp-src/Range.h	24
+oddfooting	tex-src/texinfo.tex	/^\\def\\oddfooting{\\parsearg\\oddfootingxxx}$/
+oddfootingxxx	tex-src/texinfo.tex	/^\\gdef\\oddfootingxxx #1{\\oddfootingyyy #1@|@|@|@|\\f/
+oddfootingyyy	tex-src/texinfo.tex	/^\\gdef\\oddfootingyyy #1@|#2@|#3@|#4\\finish{%$/
+oddheading	tex-src/texinfo.tex	/^\\def\\oddheading{\\parsearg\\oddheadingxxx}$/
+oddheadingxxx	tex-src/texinfo.tex	/^\\gdef\\oddheadingxxx #1{\\oddheadingyyy #1@|@|@|@|\\f/
+oddheadingyyy	tex-src/texinfo.tex	/^\\gdef\\oddheadingyyy #1@|#2@|#3@|#4\\finish{%$/
 oediff	make-src/Makefile	/^oediff: OTAGS ETAGS ${infiles}$/
 offset	c-src/emacs/src/lisp.h	2305
 offset	c-src/emacs/src/lisp.h	2365
@@ -3579,15 +3564,21 @@ oinbody	c-src/etags.c	2478
 ok	objc-src/PackInsp.m	/^-ok:sender$/
 ok_to_echo_at_next_pause	c-src/emacs/src/keyboard.c	159
 old_value	c-src/emacs/src/lisp.h	2980
+oldpage	tex-src/texinfo.tex	/^   \\let\\oldpage = \\page$/
 omethodcolon	c-src/etags.c	2481
 omethodparm	c-src/etags.c	2482
 omethodsign	c-src/etags.c	2479
 omethodtag	c-src/etags.c	2480
+one	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
+onepageout	tex-src/texinfo.tex	/^\\def\\cropmarks{\\let\\onepageout=\\croppageout }$/
+onepageout	tex-src/texinfo.tex	/^\\def\\onepageout#1{\\hoffset=\\normaloffset$/
 onone	c-src/etags.c	2472
 oparenseen	c-src/etags.c	2476
 open	objc-src/PackInsp.m	/^-open:sender$/
 open-dribble-file	c-src/emacs/src/keyboard.c	/^DEFUN ("open-dribble-file", Fopen_dribble_file, So/
 openInWorkspace	objc-src/PackInsp.m	/^static void openInWorkspace(const char *filename)$/
+opencontents	tex-src/texinfo.tex	/^\\def\\opencontents{\\openout \\contentsfile = \\jobnam/
+openindices	tex-src/texinfo.tex	/^\\def\\openindices{%$/
 operationKeys	objcpp-src/SimpleCalc.M	/^- operationKeys:sender$/
 operator	y-src/cccp.y	438
 operator ++	cp-src/functions.cpp	/^Date & Date::operator ++ ( void ){$/
@@ -3609,11 +3600,20 @@ operator int	cp-src/fail.C	/^			   operator int() const {return x;}$/
 operator+	cp-src/c.C	/^  A operator+(A& a) {};$/
 operator+	cp-src/c.C	/^const A& A::operator+(const A&) { }$/
 operator+	cp-src/c.C	/^void operator+(int, int) {}$/
-opparsebody\Edefop\defopx\defopheader\defoptype	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
+opheader\defoptype	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
+opnested	tex-src/texinfo.tex	/^\\gdef\\opnested{\\char`\\(\\global\\advance\\parencount /
+opnr	tex-src/texinfo.tex	/^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} /
+opparsebody\Edefop	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
+oprm	tex-src/texinfo.tex	/^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested /
 oprotocol	c-src/etags.c	2473
+optheader	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
 option	c-src/getopt.h	73
 optional_argument	c-src/getopt.h	91
-opvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
+optx\defoptheader	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
+optype	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{\\defoptype{} on #1}%$/
+optype	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
+opvarparsebody\Edefcv	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
+opx\defopheader	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
 ord_add_element	prol-src/ordsets.prolog	/^ord_add_element([], Element, [Element]).$/
 ord_del_element	prol-src/ordsets.prolog	/^ord_del_element([], _, []).$/
 ord_disjoint	prol-src/ordsets.prolog	/^ord_disjoint(Set1, Set2) :-$/
@@ -3659,8 +3659,20 @@ pMd	c-src/emacs/src/lisp.h	155
 pMu	c-src/emacs/src/lisp.h	151
 pMu	c-src/emacs/src/lisp.h	156
 p_next	c-src/etags.c	258
+page	tex-src/texinfo.tex	/^      \\let\\page = \\oldpage$/
+page	tex-src/texinfo.tex	/^   \\def\\page{%$/
+page	tex-src/texinfo.tex	/^\\def\\page{\\par\\vfill\\supereject}$/
+pagealignmacro	tex-src/texinfo.tex	/^\\global\\let\\pagealignmacro=\\chapoddpage$/
+pagealignmacro	tex-src/texinfo.tex	/^\\global\\let\\pagealignmacro=\\chappager$/
+pagealignmacro	tex-src/texinfo.tex	/^\\global\\let\\pagealignmacro=\\chappager}$/
+pagebody	tex-src/texinfo.tex	/^\\def\\pagebody#1{\\vbox to\\pageheight{\\boxmaxdepth=\\/
+pagecontents	tex-src/texinfo.tex	/^\\gdef\\pagecontents#1{\\ifvoid\\topins\\else\\unvbox\\to/
 pagesize	c-src/emacs/src/gmalloc.c	1703
+pagesofar	tex-src/texinfo.tex	/^\\def\\pagesofar{\\unvbox\\partialpage %$/
 pair	merc-src/accumulator.m	/^:- import_module pair.$/
+par	tex-src/texinfo.tex	/^\\let\\par=\\lisppar$/
+par	tex-src/texinfo.tex	/^{\\let\\par=\\endgraf \\smallbreak}%$/
+paragraphindent	tex-src/texinfo.tex	/^\\let\\paragraphindent=\\comment$/
 parent	c-src/emacs/src/keyboard.c	8745
 parent	c-src/emacs/src/lisp.h	1590
 parse	prol-src/natded.prolog	/^parse(Ws,Cat):-$/
@@ -3679,8 +3691,20 @@ parse_return_error	y-src/cccp.y	70
 parse_solitary_modifier	c-src/emacs/src/keyboard.c	/^parse_solitary_modifier (Lisp_Object symbol)$/
 parse_tool_bar_item	c-src/emacs/src/keyboard.c	/^parse_tool_bar_item (Lisp_Object key, Lisp_Object /
 parse_tree	merc-src/accumulator.m	/^:- import_module parse_tree.$/
+parsearg	tex-src/texinfo.tex	/^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/
+parseargdiscardspace	tex-src/texinfo.tex	/^\\gdef\\parseargdiscardspace {\\begingroup\\obeylines\\/
+parseargline	tex-src/texinfo.tex	/^\\def\\parseargline{\\begingroup \\obeylines \\parsearg/
+parsearglinex	tex-src/texinfo.tex	/^\\gdef\\parsearglinex #1^^M{\\endgroup \\next {#1}}}$/
+parseargx	tex-src/texinfo.tex	/^\\def\\parseargx{%$/
+parsebody\Edefmac	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
+parsebody\Edefspec	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
+parsebody\Edeftypefun	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
+parsebody\Edefun	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
 pat	c-src/etags.c	262
 pattern	c-src/etags.c	260
+pchapsepmacro	tex-src/texinfo.tex	/^\\global\\let\\pchapsepmacro=\\chapbreak$/
+pchapsepmacro	tex-src/texinfo.tex	/^\\global\\let\\pchapsepmacro=\\chapoddpage$/
+pchapsepmacro	tex-src/texinfo.tex	/^\\global\\let\\pchapsepmacro=\\chappager$/
 pdlcount	c-src/emacs/src/lisp.h	3046
 pending-delete-mode	el-src/TAGTEST.EL	/^(defalias 'pending-delete-mode 'delete-selection-m/
 pending_funcalls	c-src/emacs/src/keyboard.c	4377
@@ -3688,16 +3712,19 @@ pending_signals	c-src/emacs/src/keyboard.c	80
 pfatal	c-src/etags.c	/^pfatal (const char *s1)$/
 pfdset	c-src/h.h	57
 pfnote	c-src/etags.c	/^pfnote (char *name, bool is_func, char *linestart,/
+pindex	tex-src/texinfo.tex	/^\\def\\pindex {\\pgindex}$/
 pinned	c-src/emacs/src/lisp.h	679
 plain_C_entries	c-src/etags.c	/^plain_C_entries (FILE *inf)$/
 plain_C_suffixes	c-src/etags.c	643
 plainc	c-src/etags.c	2934
+plainsecheading	tex-src/texinfo.tex	/^\\def\\plainsecheading #1{\\secheadingi {#1}}$/
 plist	c-src/emacs/src/lisp.h	2040
 plist	c-src/emacs/src/lisp.h	697
 plus	cp-src/functions.cpp	/^void Date::plus ( int days , int month , int year /
 plus	go-src/test1.go	5
 plusvalseq	prol-src/natded.prolog	/^plusvalseq([]) --> [].$/
 point	forth-src/test-forth.fth	/^BEGIN-STRUCTURE point \\ create the named structure/
+point	tex-src/texinfo.tex	/^\\def\\point{$\\star$}$/
 pointer	c-src/emacs/src/lisp.h	2125
 poll_for_input	c-src/emacs/src/keyboard.c	/^poll_for_input (struct atimer *timer)$/
 poll_for_input_1	c-src/emacs/src/keyboard.c	/^poll_for_input_1 (void)$/
@@ -3747,10 +3774,18 @@ prev	c-src/emacs/src/gmalloc.c	165
 prev	c-src/emacs/src/gmalloc.c	189
 prev	c-src/emacs/src/lisp.h	2191
 prev	c.c	175
+primary	tex-src/texinfo.tex	/^\\def\\primary #1{\\line{#1\\hfil}}$/
+print	tex-src/texinfo.tex	/^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/
+print	tex-src/texinfo.tex	/^\\def\\print{\\realbackslash print}$/
 printClassification	php-src/lce_functions.php	/^      function printClassification()$/
 print_help	c-src/etags.c	/^print_help (argument *argbuffer)$/
 print_language_names	c-src/etags.c	/^print_language_names (void)$/
 print_version	c-src/etags.c	/^print_version (void)$/
+printedmanual	tex-src/texinfo.tex	/^\\def\\printedmanual{\\ignorespaces #5}%$/
+printedmanual	tex-src/texinfo.tex	/^section ``\\printednodename'' in \\cite{\\printedmanu/
+printednodename	tex-src/texinfo.tex	/^\\def\\printednodename{\\ignorespaces #1}%$/
+printednodename	tex-src/texinfo.tex	/^\\def\\printednodename{\\ignorespaces #3}%$/
+printindex	tex-src/texinfo.tex	/^\\def\\printindex{\\parsearg\\doprintindex}$/
 printmax_t	c-src/emacs/src/lisp.h	148
 printmax_t	c-src/emacs/src/lisp.h	153
 proc	c-src/h.h	87
@@ -3765,6 +3800,21 @@ prolog_pr	c-src/etags.c	/^prolog_pr (char *s, char *last)$/
 prolog_skip_comment	c-src/etags.c	/^prolog_skip_comment (linebuffer *plb, FILE *inf)$/
 prop	c-src/etags.c	209
 protect_malloc_state	c-src/emacs/src/gmalloc.c	/^protect_malloc_state (int protect_p)$/
+ptexL	tex-src/texinfo.tex	/^\\let\\ptexL=\\L$/
+ptexb	tex-src/texinfo.tex	/^\\let\\ptexb=\\b$/
+ptexbullet	tex-src/texinfo.tex	/^\\let\\ptexbullet=\\bullet$/
+ptexc	tex-src/texinfo.tex	/^\\let\\ptexc=\\c$/
+ptexdot	tex-src/texinfo.tex	/^\\let\\ptexdot=\\.$/
+ptexdots	tex-src/texinfo.tex	/^\\let\\ptexdots=\\dots$/
+ptexend	tex-src/texinfo.tex	/^\\let\\ptexend=\\end$/
+ptexequiv	tex-src/texinfo.tex	/^\\let\\ptexequiv = \\equiv$/
+ptexfootnote	tex-src/texinfo.tex	/^\\let\\ptexfootnote=\\footnote$/
+ptexi	tex-src/texinfo.tex	/^\\let\\ptexi=\\i$/
+ptexl	tex-src/texinfo.tex	/^\\let\\ptexl=\\l$/
+ptexlbrace	tex-src/texinfo.tex	/^\\let\\ptexlbrace=\\{$/
+ptexrbrace	tex-src/texinfo.tex	/^\\let\\ptexrbrace=\\}$/
+ptexstar	tex-src/texinfo.tex	/^\\let\\ptexstar=\\*$/
+ptext	tex-src/texinfo.tex	/^\\let\\ptext=\\t$/
 pthread_mutexattr_setprio_ceiling/f	ada-src/2ataspri.adb	/^   function pthread_mutexattr_setprio_ceiling$/
 pthread_mutexattr_setprotocol/f	ada-src/2ataspri.adb	/^   function pthread_mutexattr_setprotocol$/
 purpose	c-src/emacs/src/lisp.h	1594
@@ -3772,14 +3822,20 @@ push_kboard	c-src/emacs/src/keyboard.c	/^push_kboard (struct kboard *k)$/
 pushclass_above	c-src/etags.c	/^pushclass_above (int bracelev, char *str, int len)/
 put_entries	c-src/etags.c	/^put_entries (register node *np)$/
 pvec_type	c-src/emacs/src/lisp.h	780
+pxref	tex-src/texinfo.tex	/^\\def\\pxref#1{see \\xrefX[#1,,,,,,,]}$/
 quantizing	html-src/algrthms.html	/^Quantizing the Received$/
 questo	../c/c.web	34
 quiettest	make-src/Makefile	/^quiettest:$/
 quit_char	c-src/emacs/src/keyboard.c	192
 quit_throw_to_read_char	c-src/emacs/src/keyboard.c	/^quit_throw_to_read_char (bool from_signal)$/
+quotation	tex-src/texinfo.tex	/^\\def\\quotation{%$/
 qux	ruby-src/test1.ru	/^    alias_method :qux, :tee, attr_accessor(:bogus)/
 qux1	ruby-src/test1.ru	/^                :qux1)$/
 qux=	ruby-src/test1.ru	/^      def qux=(tee)$/
+r	tex-src/texinfo.tex	/^\\def\\r##1{\\realbackslash r {##1}}$/
+r	tex-src/texinfo.tex	/^\\def\\r##1{\\realbackslash r {##1}}%$/
+r	tex-src/texinfo.tex	/^\\def\\r#1{{\\rm #1}}		% roman font$/
+r	tex-src/texinfo.tex	/^\\let\\r=\\indexdummyfont$/
 r0	c-src/sysdep.h	54
 r1	c-src/sysdep.h	55
 r_alloc	c-src/emacs/src/lisp.h	/^extern void *r_alloc (void **, size_t) ATTRIBUTE_A/
@@ -3787,6 +3843,10 @@ range_exp	y-src/parse.y	269
 range_exp_list	y-src/parse.y	273
 raw_keybuf	c-src/emacs/src/keyboard.c	116
 raw_keybuf_count	c-src/emacs/src/keyboard.c	117
+rawbackslash	tex-src/texinfo.tex	/^\\let\\rawbackslash=\\relax%$/
+rawbackslashxx	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/
+rawbackslashxx	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}%$/
+rbrb	tex-src/texinfo.tex	/^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/
 rbtp	c.c	240
 re_iswctype	c-src/emacs/src/regex.h	602
 re_nsub	c-src/emacs/src/regex.h	364
@@ -3818,6 +3878,7 @@ read_key_sequence_vs	c-src/emacs/src/keyboard.c	/^read_key_sequence_vs (Lisp_Obj
 read_menu_command	c-src/emacs/src/keyboard.c	/^read_menu_command (void)$/
 read_toc	perl-src/htlmify-cystic	/^sub read_toc ()$/
 readable_events	c-src/emacs/src/keyboard.c	/^readable_events (int flags)$/
+readauxfile	tex-src/texinfo.tex	/^\\def\\readauxfile{%$/
 readline	c-src/etags.c	/^readline (linebuffer *lbp, FILE *stream)$/
 readline_internal	c-src/etags.c	/^readline_internal (linebuffer *lbp, register FILE /
 realloc	c-src/emacs/src/gmalloc.c	/^realloc (void *ptr, size_t size)$/
@@ -3842,7 +3903,10 @@ recursive_edit_unwind	c-src/emacs/src/keyboard.c	/^recursive_edit_unwind (Lisp_O
 redirect	c-src/emacs/src/lisp.h	663
 reduce	prol-src/natded.prolog	/^reduce((X^M)@N,L):-     % beta reduction$/
 reduce_subterm	prol-src/natded.prolog	/^reduce_subterm(M,M2):-$/
+ref	tex-src/texinfo.tex	/^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/
+refill	tex-src/texinfo.tex	/^\\let\\refill=\\relax$/
 refreshPort	pyt-src/server.py	/^    def refreshPort(self):$/
+refx	tex-src/texinfo.tex	/^\\def\\refx#1#2{%$/
 reg_errcode_t	c-src/emacs/src/regex.h	323
 reg_errcode_t	c.c	279
 reg_syntax_t	c-src/emacs/src/regex.h	43
@@ -3873,8 +3937,12 @@ requeued_events_pending_p	c-src/emacs/src/keyboard.c	/^requeued_events_pending_p
 require	merc-src/accumulator.m	/^:- import_module require.$/
 required_argument	c-src/getopt.h	90
 reset-this-command-lengths	c-src/emacs/src/keyboard.c	/^DEFUN ("reset-this-command-lengths", Freset_this_c/
+resetmathfonts	tex-src/texinfo.tex	/^\\def\\resetmathfonts{%$/
+rest	tex-src/texinfo.tex	/^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/
 restore_getcjmp	c-src/emacs/src/keyboard.c	/^restore_getcjmp (sys_jmp_buf temp)$/
 restore_kboard_configuration	c-src/emacs/src/keyboard.c	/^restore_kboard_configuration (int was_locked)$/
+result	tex-src/texinfo.tex	/^\\def\\result{\\leavevmode\\raise.15ex\\hbox to 1em{\\hf/
+result	tex-src/texinfo.tex	/^\\def\\result{\\realbackslash result}$/
 return_to_command_loop	c-src/emacs/src/keyboard.c	135
 reverse	prol-src/natded.prolog	/^reverse([],Ws,Ws).$/
 revert	objc-src/PackInsp.m	/^-revert:sender$/
@@ -3882,6 +3950,8 @@ right	c-src/etags.c	216
 right_shift	y-src/cccp.y	/^right_shift (a, b)$/
 ring1	c.c	241
 ring2	c.c	242
+rm	tex-src/texinfo.tex	/^      \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/
+rm	tex-src/texinfo.tex	/^\\def\\rm{\\realbackslash rm }%$/
 rm_eo	c-src/emacs/src/regex.h	450
 rm_so	c-src/emacs/src/regex.h	449
 rng_base	cp-src/Range.h	79
@@ -3908,19 +3978,37 @@ safe_run_hook_funcall	c-src/emacs/src/keyboard.c	/^safe_run_hook_funcall (ptrdif
 safe_run_hooks	c-src/emacs/src/keyboard.c	/^safe_run_hooks (Lisp_Object hook)$/
 safe_run_hooks_1	c-src/emacs/src/keyboard.c	/^safe_run_hooks_1 (ptrdiff_t nargs, Lisp_Object *ar/
 safe_run_hooks_error	c-src/emacs/src/keyboard.c	/^safe_run_hooks_error (Lisp_Object error, ptrdiff_t/
+samp	tex-src/texinfo.tex	/^\\def\\samp #1{`\\tclose{#1}'\\null}$/
+samp	tex-src/texinfo.tex	/^\\def\\samp##1{\\realbackslash samp {##1}}$/
+samp	tex-src/texinfo.tex	/^\\def\\samp##1{\\realbackslash samp {##1}}%$/
+samp	tex-src/texinfo.tex	/^\\let\\samp=\\indexdummyfont$/
 save	pyt-src/server.py	/^    def save(self):$/
 save_getcjmp	c-src/emacs/src/keyboard.c	/^save_getcjmp (sys_jmp_buf temp)$/
 save_type	c-src/emacs/src/lisp.h	/^save_type (struct Lisp_Save_Value *v, int n)$/
 savenstr	c-src/etags.c	/^savenstr (const char *cp, int len)$/
 savestr	c-src/etags.c	/^savestr (const char *cp)$/
 say	go-src/test.go	/^func say(msg string) {$/
+sc	tex-src/texinfo.tex	/^\\def\\sc#1{{\\smallcaps#1}}	% smallcaps font$/
+sc	tex-src/texinfo.tex	/^\\let\\sc=\\indexdummyfont$/
 scan_separators	c-src/etags.c	/^scan_separators (char *name)$/
 scolonseen	c-src/etags.c	2447
 scratch	c-src/sysdep.h	56
 scroll_bar_parts	c-src/emacs/src/keyboard.c	5189
-sec=\relax	tex-src/texinfo.tex	/^\\let\\appendixsec=\\relax$/
+sec	tex-src/texinfo.tex	/^\\global\\let\\section = \\appendixsec$/
+seccheck	tex-src/texinfo.tex	/^\\def\\seccheck#1{\\if \\pageno<0 %$/
+secentry	tex-src/texinfo.tex	/^      \\def\\secentry ##1##2##3##4{}$/
+secentry	tex-src/texinfo.tex	/^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/
+secentryfonts	tex-src/texinfo.tex	/^\\def\\secentryfonts{\\textfonts}$/
+secfonts	tex-src/texinfo.tex	/^\\def\\secfonts{%$/
+secheading	tex-src/texinfo.tex	/^\\def\\secheading #1#2#3{\\secheadingi {#2.#3\\enspace/
+secheadingbreak	tex-src/texinfo.tex	/^\\def\\secheadingbreak{\\dobreak \\secheadingskip {-10/
+secheadingi	tex-src/texinfo.tex	/^\\def\\secheadingi #1{{\\advance \\secheadingskip by \\/
+secondary	tex-src/texinfo.tex	/^\\def\\secondary #1#2{$/
 section	perl-src/htlmify-cystic	25
-section=\relax	tex-src/texinfo.tex	/^\\let\\appendixsection=\\relax$/
+section	tex-src/texinfo.tex	/^\\global\\let\\section = \\appendixsec$/
+section	tex-src/texinfo.tex	/^\\global\\let\\section = \\numberedsec$/
+section	tex-src/texinfo.tex	/^\\global\\let\\section = \\unnumberedsec$/
+section	tex-src/texinfo.tex	/^\\let\\section=\\relax$/
 section_href	perl-src/htlmify-cystic	/^sub section_href ($)$/
 section_name	perl-src/htlmify-cystic	/^sub section_name ($)$/
 section_name	perl-src/htlmify-cystic	12
@@ -3928,6 +4016,10 @@ section_toc	perl-src/htlmify-cystic	15
 section_url	perl-src/htlmify-cystic	/^sub section_url ()$/
 section_url_base	perl-src/htlmify-cystic	/^sub section_url_base ()$/
 section_url_name	perl-src/htlmify-cystic	/^sub section_url_name ()$/
+sectionzzz	tex-src/texinfo.tex	/^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/
+sectionzzz	tex-src/texinfo.tex	/^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/
+seczzz	tex-src/texinfo.tex	/^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/
+seczzz	tex-src/texinfo.tex	/^\\def\\seczzz #1{\\seccheck{section}%$/
 select	prol-src/natded.prolog	/^select(X,[X|Xs],Xs).$/
 select-tags-table	el-src/emacs/lisp/progmodes/etags.el	/^(defun select-tags-table ()$/
 select-tags-table-mode	el-src/emacs/lisp/progmodes/etags.el	/^(define-derived-mode select-tags-table-mode specia/
@@ -3938,9 +4030,11 @@ select_last	prol-src/natded.prolog	/^select_last([X],X,[]).$/
 send	objc-src/Subprocess.m	/^- send:(const char *)string withNewline:(BOOL)want/
 send	objc-src/Subprocess.m	/^- send:(const char *)string$/
 separator_names	c-src/emacs/src/keyboard.c	7372
+sepspaces	tex-src/texinfo.tex	/^\\gdef\\sepspaces{\\def {\\ }}}$/
 serializeToVars	php-src/lce_functions.php	/^      function serializeToVars($prefix)$/
 set	cp-src/conway.hpp	/^    void set(void) { alive = 1; }$/
 set	merc-src/accumulator.m	/^:- import_module set.$/
+set	tex-src/texinfo.tex	/^\\def\\set{\\parsearg\\setxxx}$/
 set-input-interrupt-mode	c-src/emacs/src/keyboard.c	/^DEFUN ("set-input-interrupt-mode", Fset_input_inte/
 set-input-meta-mode	c-src/emacs/src/keyboard.c	/^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/
 set-input-mode	c-src/emacs/src/keyboard.c	/^DEFUN ("set-input-mode", Fset_input_mode, Sset_inp/
@@ -3970,9 +4064,24 @@ set_symbol_next	c-src/emacs/src/lisp.h	/^set_symbol_next (Lisp_Object sym, struc
 set_symbol_plist	c-src/emacs/src/lisp.h	/^set_symbol_plist (Lisp_Object sym, Lisp_Object pli/
 set_upto	merc-src/accumulator.m	/^:- func set_upto(accu_case, int) = set(accu_goal_i/
 set_waiting_for_input	c-src/emacs/src/keyboard.c	/^set_waiting_for_input (struct timespec *time_to_cl/
+setchapternewpage	tex-src/texinfo.tex	/^\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcs/
+setchapterstyle	tex-src/texinfo.tex	/^\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname/
+setdeffont	tex-src/texinfo.tex	/^\\def\\setdeffont #1 {\\csname DEF#1\\endcsname}$/
+setfilename	tex-src/texinfo.tex	/^   \\global\\let\\setfilename=\\comment % Ignore extra/
+setfilename	tex-src/texinfo.tex	/^\\def\\setfilename{%$/
+setref	tex-src/texinfo.tex	/^\\def\\setref#1{%$/
 setref	tex-src/texinfo.tex	/^\\expandafter\\expandafter\\expandafter\\appendixsetre/
+settitle	tex-src/texinfo.tex	/^\\def\\settitle{\\parsearg\\settitlezzz}$/
+settitlezzz	tex-src/texinfo.tex	/^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/
 setup	cp-src/c.C	5
+setxxx	tex-src/texinfo.tex	/^\\def\\setxxx #1{$/
+sf	tex-src/texinfo.tex	/^\\def\\sf{\\fam=\\sffam \\tensf}$/
+sf	tex-src/texinfo.tex	/^\\def\\sf{\\realbackslash sf}%$/
+sf	tex-src/texinfo.tex	/^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/
 shift	cp-src/functions.cpp	/^void Date::shift ( void ){\/\/Shift this date to pre/
+shortchapentry	tex-src/texinfo.tex	/^\\def\\shortchapentry#1#2#3{%$/
+shortcontents	tex-src/texinfo.tex	/^\\let\\shortcontents = \\summarycontents$/
+shortunnumberedentry	tex-src/texinfo.tex	/^\\def\\shortunnumberedentry#1#2{%$/
 shouldLoad	objc-src/PackInsp.m	/^-(BOOL)shouldLoad$/
 should_attempt_accu_transform	merc-src/accumulator.m	/^:- pred should_attempt_accu_transform(module_info:/
 should_attempt_accu_transform_2	merc-src/accumulator.m	/^:- pred should_attempt_accu_transform_2(module_inf/
@@ -3990,6 +4099,9 @@ signal_handler_t	c-src/h.h	94
 simulation	html-src/software.html	/^Software that I wrote for supporting my research a/
 single_kboard	c-src/emacs/src/keyboard.c	89
 single_kboard_state	c-src/emacs/src/keyboard.c	/^single_kboard_state ()$/
+singlecodeindexer	tex-src/texinfo.tex	/^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/
+singleindexer	tex-src/texinfo.tex	/^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/
+singlespace	tex-src/texinfo.tex	/^\\def\\singlespace{%$/
 site	cp-src/conway.hpp	/^    site(int xi, int yi): x(xi), y(yi), alive(0) {/
 site	cp-src/conway.hpp	5
 size	c-src/emacs/src/gmalloc.c	156
@@ -4003,20 +4115,45 @@ skeyseen	c-src/etags.c	2445
 skip_name	c-src/etags.c	/^skip_name (char *cp)$/
 skip_non_spaces	c-src/etags.c	/^skip_non_spaces (char *cp)$/
 skip_spaces	c-src/etags.c	/^skip_spaces (char *cp)$/
+sl	tex-src/texinfo.tex	/^      \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/
+sl	tex-src/texinfo.tex	/^\\def\\sl{\\realbackslash sl }%$/
+smallbook	tex-src/texinfo.tex	/^\\def\\smallbook{$/
+smallbook	tex-src/texinfo.tex	/^\\let\\smallbook=\\relax$/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/
+smallexample	tex-src/texinfo.tex	/^\\global\\let\\smallexample=\\smalllispx$/
+smallexample	tex-src/texinfo.tex	/^\\let\\smallexample=\\lisp$/
+smalllisp	tex-src/texinfo.tex	/^\\global\\let\\smalllisp=\\smalllispx$/
+smalllispx	tex-src/texinfo.tex	/^\\def\\smalllispx{\\aboveenvbreak\\begingroup\\inENV$/
+smartitalic	tex-src/texinfo.tex	/^\\def\\smartitalic#1{{\\sl #1}\\futurelet\\next\\smartit/
+smartitalicx	tex-src/texinfo.tex	/^\\def\\smartitalicx{\\ifx\\next,\\else\\ifx\\next-\\else\\i/
 snarf-tag-function	el-src/emacs/lisp/progmodes/etags.el	/^(defvar snarf-tag-function nil$/
 snone	c-src/etags.c	2443
 solutions	merc-src/accumulator.m	/^:- import_module solutions.$/
 some_mouse_moved	c-src/emacs/src/keyboard.c	/^some_mouse_moved (void)$/
+sp	tex-src/texinfo.tex	/^\\def\\sp{\\parsearg\\spxxx}$/
 space	tex-src/texinfo.tex	/^    {#2\\labelspace #1}\\dotfill\\doshortpageno{#3}}%/
 space	tex-src/texinfo.tex	/^  \\dosubsubsecentry{#2.#3.#4.#5\\labelspace#1}{#6}}/
+space	tex-src/texinfo.tex	/^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/
+space	tex-src/texinfo.tex	/^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/
+space	tex-src/texinfo.tex	/^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/
 spacer	c-src/emacs/src/lisp.h	1975
 spacer	c-src/emacs/src/lisp.h	1982
 spacer	c-src/emacs/src/lisp.h	2036
 spacer	c-src/emacs/src/lisp.h	2205
+spacesplit	tex-src/texinfo.tex	/^\\gdef\\spacesplit#1#2^^M{\\endgroup\\spacesplitfoo{#1/
+spacesplitfoo	tex-src/texinfo.tex	/^\\long\\gdef\\spacesplitfoo#1#2 #3#4\\spacesplitfoo{%$/
 specbind_tag	c-src/emacs/src/lisp.h	2943
 specbinding	c-src/emacs/src/lisp.h	2955
+specheader	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
 specialsymbol	prol-src/natded.prolog	/^specialsymbol(C1,C2,S):-$/
+specx\defspecheader	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
 splitexp	prol-src/natded.prolog	/^splitexp(E,E,('NIL','NIL')):-!.$/
+splitoff	tex-src/texinfo.tex	/^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/
+spxxx	tex-src/texinfo.tex	/^\\def\\spxxx #1{\\par \\vskip #1\\baselineskip}$/
 srclist	make-src/Makefile	/^srclist: Makefile$/
 ss3	c.c	255
 sss1	c.c	252
@@ -4048,6 +4185,8 @@ start	php-src/lce_functions.php	/^      function start($line, $class)$/
 start	y-src/cccp.y	143
 start_polling	c-src/emacs/src/keyboard.c	/^start_polling (void)$/
 start_up	prol-src/natded.prolog	/^start_up:-$/
+startcontents	tex-src/texinfo.tex	/^\\def\\startcontents#1{%$/
+startenumeration	tex-src/texinfo.tex	/^\\def\\startenumeration#1{%$/
 state_protected_p	c-src/emacs/src/gmalloc.c	400
 statetable	html-src/algrthms.html	/^Next$/
 staticetags	make-src/Makefile	/^staticetags:$/
@@ -4067,24 +4206,59 @@ stripLine	php-src/lce_functions.php	/^      function stripLine($line, $class)$/
 stripname	pas-src/common.pas	/^function stripname; (* ($/
 strncaseeq	c-src/etags.c	/^#define strncaseeq(s,t,n) (assert ((s)!=NULL && (t/
 strneq	c-src/etags.c	/^#define strneq(s,t,n)	(assert ((s)!=NULL || (t)!=N/
+strong	tex-src/texinfo.tex	/^\\let\\strong=\\b$/
+strong	tex-src/texinfo.tex	/^\\let\\strong=\\indexdummyfont$/
 structdef	c-src/etags.c	2448
 stuff_buffered_input	c-src/emacs/src/keyboard.c	/^stuff_buffered_input (Lisp_Object stuffstring)$/
+subheading	tex-src/texinfo.tex	/^\\def\\subheading{\\parsearg\\subsecheadingi}$/
 subprocess	objc-src/PackInsp.m	/^-subprocess:(Subprocess *)sender output:(char *)bu/
 subprocessDone	objc-src/PackInsp.m	/^-subprocessDone:(Subprocess *)sender$/
-subsec=\relax	tex-src/texinfo.tex	/^\\let\\appendixsubsec=\\relax$/
+subsec	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\appendixsubsec$/
+subsec	tex-src/texinfo.tex	/^\\let\\subsec=\\relax$/
+subsecentry	tex-src/texinfo.tex	/^      \\def\\subsecentry ##1##2##3##4##5{}$/
+subsecentry	tex-src/texinfo.tex	/^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/
+subsecentryfonts	tex-src/texinfo.tex	/^\\let\\subsecentryfonts = \\textfonts$/
+subsecfonts	tex-src/texinfo.tex	/^\\def\\subsecfonts{%$/
+subsecheading	tex-src/texinfo.tex	/^\\def\\subsecheading #1#2#3#4{\\subsecheadingi {#2.#3/
+subsecheadingbreak	tex-src/texinfo.tex	/^\\def\\subsecheadingbreak{\\dobreak \\subsecheadingski/
+subsecheadingi	tex-src/texinfo.tex	/^\\def\\subsecheadingi #1{{\\advance \\subsecheadingski/
 subsection	perl-src/htlmify-cystic	26
-subsection=\relax	tex-src/texinfo.tex	/^\\let\\appendixsubsection=\\relax$/
+subsection	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\appendixsubsec$/
+subsection	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\numberedsubsec$/
+subsection	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\unnumberedsubsec$/
+subsection	tex-src/texinfo.tex	/^\\let\\subsection=\\relax$/
 subsection_marker	perl-src/htlmify-cystic	161
+subseczzz	tex-src/texinfo.tex	/^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/
+subseczzz	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsec{\\parsearg\\appendixsubsec/
 subst	prol-src/natded.prolog	/^subst(var(Y),var(X),M,N):-$/
 substitute	c-src/etags.c	/^substitute (char *in, char *out, struct re_registe/
-subsubsec=\relax	tex-src/texinfo.tex	/^\\let\\appendixsubsubsec=\\relax$/
+subsubheading	tex-src/texinfo.tex	/^\\def\\subsubheading{\\parsearg\\subsubsecheadingi}$/
+subsubsec	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\appendixsubsubsec$/
+subsubsec	tex-src/texinfo.tex	/^\\let\\subsubsec=\\relax$/
+subsubsecentry	tex-src/texinfo.tex	/^      \\def\\subsubsecentry ##1##2##3##4##5##6{}$/
+subsubsecentry	tex-src/texinfo.tex	/^\\def\\subsubsecentry#1#2#3#4#5#6{%$/
+subsubsecentryfonts	tex-src/texinfo.tex	/^\\let\\subsubsecentryfonts = \\textfonts$/
+subsubsecfonts	tex-src/texinfo.tex	/^\\def\\subsubsecfonts{\\subsecfonts} % Maybe this sho/
+subsubsecheading	tex-src/texinfo.tex	/^\\def\\subsubsecheading #1#2#3#4#5{\\subsubsecheading/
+subsubsecheadingi	tex-src/texinfo.tex	/^\\def\\subsubsecheadingi #1{{\\advance \\subsecheading/
 subsubsection	perl-src/htlmify-cystic	27
-subsubsection=\relax	tex-src/texinfo.tex	/^\\let\\appendixsubsubsection=\\relax$/
+subsubsection	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\appendixsubsubsec$/
+subsubsection	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\numberedsubsubsec$/
+subsubsection	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\unnumberedsubsubsec$/
+subsubsection	tex-src/texinfo.tex	/^\\let\\subsubsection=\\relax$/
+subsubseczzz	tex-src/texinfo.tex	/^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/
+subsubseczzz	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/
+subtitle	tex-src/texinfo.tex	/^   \\def\\subtitle{\\parsearg\\subtitlezzz}%$/
+subtitlefont	tex-src/texinfo.tex	/^   \\def\\subtitlefont{\\subtitlerm \\normalbaselinesk/
+subtitlerm	tex-src/texinfo.tex	/^   \\let\\subtitlerm=\\tenrm$/
+subtitlezzz	tex-src/texinfo.tex	/^   \\def\\subtitlezzz##1{{\\subtitlefont \\rightline{#/
 subtle	ruby-src/test1.ru	/^                 :tee ; attr_reader :subtle$/
 subtree	prol-src/natded.prolog	/^subtree(T,T).$/
 suffix	c-src/etags.c	186
 suffixes	c-src/etags.c	195
 suggest_asking_for_help	c-src/etags.c	/^suggest_asking_for_help (void)$/
+summarycontents	tex-src/texinfo.tex	/^\\outer\\def\\summarycontents{%$/
+supereject	tex-src/texinfo.tex	/^\\def\\supereject{\\par\\penalty -20000\\footnoteno =0 /
 suspend-emacs	c-src/emacs/src/keyboard.c	/^DEFUN ("suspend-emacs", Fsuspend_emacs, Ssuspend_e/
 sval	y-src/cccp.y	116
 swallow_events	c-src/emacs/src/keyboard.c	/^swallow_events (bool do_display)$/
@@ -4099,6 +4273,8 @@ syms_of_abbrev	c-src/abbrev.c	/^syms_of_abbrev ()$/
 syms_of_keyboard	c-src/emacs/src/keyboard.c	/^syms_of_keyboard (void)$/
 synchronize_system_messages_locale	c-src/emacs/src/lisp.h	/^INLINE void synchronize_system_messages_locale (vo/
 synchronize_system_time_locale	c-src/emacs/src/lisp.h	/^INLINE void synchronize_system_time_locale (void) /
+syncodeindex	tex-src/texinfo.tex	/^\\def\\syncodeindex #1 #2 {%$/
+synindex	tex-src/texinfo.tex	/^\\def\\synindex #1 #2 {%$/
 syntax	c-src/emacs/src/regex.h	350
 sys_jmp_buf	c-src/emacs/src/lisp.h	2906
 sys_jmp_buf	c-src/emacs/src/lisp.h	2910
@@ -4111,12 +4287,20 @@ sys_setjmp	c-src/emacs/src/lisp.h	/^# define sys_setjmp(j) setjmp (j)$/
 sys_setjmp	c-src/emacs/src/lisp.h	/^# define sys_setjmp(j) sigsetjmp (j, 0)$/
 syscall_error	c-src/sysdep.h	34
 t	cp-src/c.C	52
+t	tex-src/texinfo.tex	/^\\def\\t##1{\\realbackslash r {##1}}%$/
+t	tex-src/texinfo.tex	/^\\def\\t#1{{\\tt \\exhyphenpenalty=10000\\rawbackslash /
+t	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
+t	tex-src/texinfo.tex	/^\\let\\t=\\indexdummyfont$/
 t1	cp-src/c.C	34
 t2	cp-src/c.C	38
 tab_count_words	c-src/tab.c	/^int			tab_count_words(char **tab)$/
 tab_delete_first	c-src/tab.c	/^int			tab_delete_first(char **tab)$/
 tab_fill	c-src/tab.c	/^char			**tab_fill(char *str, char delim)$/
 tab_free	c-src/tab.c	/^void			tab_free(char **tab)$/
+table	tex-src/texinfo.tex	/^\\def\\table{\\begingroup\\inENV\\obeylines\\obeyspaces\\/
+tablex	tex-src/texinfo.tex	/^\\gdef\\tablex #1^^M{%$/
+tabley	tex-src/texinfo.tex	/^\\gdef\\tabley#1#2 #3 #4 #5 #6 #7\\endtabley{\\endgrou/
+tablez	tex-src/texinfo.tex	/^\\def\\tablez #1#2#3#4#5#6{%$/
 tag-any-match-p	el-src/emacs/lisp/progmodes/etags.el	/^(defun tag-any-match-p (_tag)$/
 tag-exact-file-name-match-p	el-src/emacs/lisp/progmodes/etags.el	/^(defun tag-exact-file-name-match-p (tag)$/
 tag-exact-match-p	el-src/emacs/lisp/progmodes/etags.el	/^(defun tag-exact-match-p (tag)$/
@@ -4195,12 +4379,75 @@ tags-tag-face	el-src/emacs/lisp/progmodes/etags.el	/^(defcustom tags-tag-face 'd
 tags-verify-table	el-src/emacs/lisp/progmodes/etags.el	/^(defun tags-verify-table (file)$/
 tags-with-face	el-src/emacs/lisp/progmodes/etags.el	/^(defmacro tags-with-face (face &rest body)$/
 target_multibyte	c-src/emacs/src/regex.h	407
+tclose	tex-src/texinfo.tex	/^\\def\\tclose##1{\\realbackslash tclose {##1}}$/
+tclose	tex-src/texinfo.tex	/^\\def\\tclose##1{\\realbackslash tclose {##1}}%$/
+tclose	tex-src/texinfo.tex	/^\\def\\tclose#1{{\\rm \\tcloserm=\\fontdimen2\\font \\tt /
+tclose	tex-src/texinfo.tex	/^\\let\\tclose=\\indexdummyfont$/
 tcpdump	html-src/software.html	/^tcpdump$/
 teats	cp-src/c.C	127
 tee	ruby-src/test1.ru	/^    attr_accessor :tee$/
 tee=	ruby-src/test1.ru	/^    attr_accessor :tee$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{%$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash chapentry $/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash chapentry {#1}{\\the\\cha/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash secentry %$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash subsecentry %$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash subsubsecentry %$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash subsubsecentry{#1}%$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash unnumbchapentry {#1}{\\n/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash unnumbsecentry{#1}{\\noe/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash unnumbsubsecentry{#1}{\\/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash unnumbsubsubsecentry{#1/
+temp	tex-src/texinfo.tex	/^\\else \\let\\temp=\\ifclearfail \\fi$/
+temp	tex-src/texinfo.tex	/^\\else \\let\\temp=\\relax \\fi$/
+temp	tex-src/texinfo.tex	/^\\expandafter\\ifx\\csname IF#1\\endcsname\\relax \\let\\/
+temp1	tex-src/texinfo.tex	/^\\xdef\\temp1{#2 #3}%$/
+temp1	tex-src/texinfo.tex	/^\\xdef\\temp1{#2}%$/
 temporarily_switch_to_single_kboard	c-src/emacs/src/keyboard.c	/^temporarily_switch_to_single_kboard (struct frame /
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/
+tenbf	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
 tend	c-src/etags.c	2432
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\chapsf \\let\\teni=\\chapi \\let\\tensy=\\/
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\tensy=\\in/
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\secsf \\let\\teni=\\seci \\let\\tensy=\\se/
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\ssecsf \\let\\teni=\\sseci \\let\\tensy=\\/
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\textsf \\let\\teni=\\texti \\let\\tensy=\\/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\chaprm \\let\\tenit=\\chapit \\let\\tensl/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\indrm \\let\\tenit=\\indit \\let\\tensl=\\/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\secrm \\let\\tenit=\\secit \\let\\tensl=\\/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\ssecrm \\let\\tenit=\\ssecit \\let\\tensl/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\textrm \\let\\tenit=\\textit \\let\\tensl/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\chaprm \\let\\tenit=\\chapit \\let\\tensl/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\indrm \\let\\tenit=\\indit \\let\\tensl=\\/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\secrm \\let\\tenit=\\secit \\let\\tensl=\\/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\ssecrm \\let\\tenit=\\ssecit \\let\\tensl/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\textrm \\let\\tenit=\\textit \\let\\tensl/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\chapsf \\let\\teni=\\chapi \\let\\tensy=\\/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\tensy=\\in/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\secsf \\let\\teni=\\seci \\let\\tensy=\\se/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\ssecsf \\let\\teni=\\sseci \\let\\tensy=\\/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\textsf \\let\\teni=\\texti \\let\\tensy=\\/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\chaprm \\let\\tenit=\\chapit \\let\\tensl/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\indrm \\let\\tenit=\\indit \\let\\tensl=\\/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\secrm \\let\\tenit=\\secit \\let\\tensl=\\/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\ssecrm \\let\\tenit=\\ssecit \\let\\tensl/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\textrm \\let\\tenit=\\textit \\let\\tensl/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\chapsf \\let\\teni=\\chapi \\let\\tensy=\\/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\tensy=\\in/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\secsf \\let\\teni=\\seci \\let\\tensy=\\se/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\ssecsf \\let\\teni=\\sseci \\let\\tensy=\\/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\textsf \\let\\teni=\\texti \\let\\tensy=\\/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/
+tentt	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
+tentt	tex-src/texinfo.tex	/^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/
 term	merc-src/accumulator.m	/^:- import_module term.$/
 terminate	objc-src/Subprocess.m	/^- terminate:sender$/
 terminateInput	objc-src/Subprocess.m	/^- terminateInput$/
@@ -4217,7 +4464,12 @@ test1	rs-src/test.rs	/^fn test1() {$/
 test_crlf1	test_crlf.c	/^void test_crlf1()$/
 test_crlf2	tset_crlf.c	/^void test_crlf2()$/
 test_undefined	c-src/emacs/src/keyboard.c	/^test_undefined (Lisp_Object binding)$/
+tex	tex-src/texinfo.tex	/^\\def\\tex{\\begingroup$/
+texinfoversion	tex-src/texinfo.tex	/^\\def\\texinfoversion{2.73}$/
+textfonts	tex-src/texinfo.tex	/^\\def\\textfonts{%$/
 texttreelist	prol-src/natded.prolog	/^texttreelist([]).$/
+thearg	tex-src/texinfo.tex	/^  \\def\\thearg{#1}%$/
+thearg	tex-src/texinfo.tex	/^  \\ifx\\thearg\\empty \\def\\thearg{1}\\fi$/
 there-is-a-=-in-the-middle!	scm-src/test.scm	/^(define (there-is-a-=-in-the-middle!) #t)$/
 this	c-src/a/b/b.c	1
 this-command-keys	c-src/emacs/src/keyboard.c	/^DEFUN ("this-command-keys", Fthis_command_keys, St/
@@ -4229,6 +4481,30 @@ this_command_key_count_reset	c-src/emacs/src/keyboard.c	112
 this_command_keys	c-src/emacs/src/keyboard.c	107
 this_file_toc	perl-src/htlmify-cystic	29
 this_single_command_key_start	c-src/emacs/src/keyboard.c	125
+thischapter	tex-src/texinfo.tex	/^   \\unnumbchapmacro{#1}\\def\\thischapter{}%$/
+thischapter	tex-src/texinfo.tex	/^\\def\\thischapter{} \\def\\thissection{}$/
+thischapter	tex-src/texinfo.tex	/^\\gdef\\thischapter{#1}\\gdef\\thissection{#1}%$/
+thischapter	tex-src/texinfo.tex	/^\\xdef\\thischapter{Appendix \\appendixletter: \\noexp/
+thischapter	tex-src/texinfo.tex	/^\\xdef\\thischapter{Chapter \\the\\chapno: \\noexpand\\t/
+thischaptername	tex-src/texinfo.tex	/^\\def\\thischaptername{No Chapter Title}$/
+thischaptername	tex-src/texinfo.tex	/^\\gdef\\thischaptername{#1}%$/
+thisfile	tex-src/texinfo.tex	/^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/
+thisfile	tex-src/texinfo.tex	/^\\def\\thisfile{}$/
+thisfootno	tex-src/texinfo.tex	/^\\edef\\thisfootno{$^{\\the\\footnoteno}$}%$/
+thispage	tex-src/texinfo.tex	/^\\let\\thispage=\\folio$/
+thissection	tex-src/texinfo.tex	/^\\def\\thischapter{} \\def\\thissection{}$/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thischapter{#1}\\gdef\\thissection{#1}%$/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}%$/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\global\\advance \\subsubsecno /
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\secheading {#1}{\\appendixlet/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\secheading {#1}{\\the\\chapno}/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\subsubsecno=0 \\global\\advanc/
+thissection	tex-src/texinfo.tex	/^\\plainsecheading {#1}\\gdef\\thissection{#1}%$/
+thistitle	tex-src/texinfo.tex	/^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/
+thistitle	tex-src/texinfo.tex	/^\\def\\thistitle{No Title}$/
+three	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
+threex	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
+tie	tex-src/texinfo.tex	/^\\def\\tie{\\penalty 10000\\ }     % Save plain tex de/
 tignore	c-src/etags.c	2433
 timer_check	c-src/emacs/src/keyboard.c	/^timer_check (void)$/
 timer_check_2	c-src/emacs/src/keyboard.c	/^timer_check_2 (Lisp_Object timers, Lisp_Object idl/
@@ -4239,9 +4515,16 @@ timer_start_idle	c-src/emacs/src/keyboard.c	/^timer_start_idle (void)$/
 timer_stop_idle	c-src/emacs/src/keyboard.c	/^timer_stop_idle (void)$/
 timers_run	c-src/emacs/src/keyboard.c	320
 tinbody	c-src/etags.c	2431
+tindex	tex-src/texinfo.tex	/^\\def\\tindex {\\tpindex}$/
+title	tex-src/texinfo.tex	/^   \\def\\title{\\parsearg\\titlezzz}%$/
+titlefont	tex-src/texinfo.tex	/^\\def\\titlefont#1{{\\titlerm #1}}$/
+titlepage	tex-src/texinfo.tex	/^\\def\\titlepage{\\begingroup \\parindent=0pt \\textfon/
+titlepage	tex-src/texinfo.tex	/^\\let\\titlepage=\\relax$/
+titlezzz	tex-src/texinfo.tex	/^   \\def\\titlezzz##1{\\leftline{\\titlefont{##1}}$/
 tkeyseen	c-src/etags.c	2429
 tnone	c-src/etags.c	2428
 toc_line	perl-src/htlmify-cystic	/^sub toc_line ($)$/
+today	tex-src/texinfo.tex	/^\\def\\today{\\number\\day\\space$/
 toggleDescription	objc-src/PackInsp.m	/^-toggleDescription$/
 tok	c-src/etags.c	2491
 token	c-src/etags.c	2508
@@ -4254,6 +4537,8 @@ tool_bar_item_properties	c-src/emacs/src/keyboard.c	7970
 tool_bar_items	c-src/emacs/src/keyboard.c	/^tool_bar_items (Lisp_Object reuse, int *nitems)$/
 tool_bar_items_vector	c-src/emacs/src/keyboard.c	7965
 toolkit_menubar_in_use	c-src/emacs/src/keyboard.c	/^toolkit_menubar_in_use (struct frame *f)$/
+top	tex-src/texinfo.tex	/^\\let\\top=\\relax$/
+top	tex-src/texinfo.tex	/^\\outer\\def\\top{\\parsearg\\unnumberedzzz}$/
 top-level	c-src/emacs/src/keyboard.c	/^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, /
 top_level	merc-src/accumulator.m	/^:- type top_level$/
 top_level_1	c-src/emacs/src/keyboard.c	/^top_level_1 (Lisp_Object ignore)$/
@@ -4262,17 +4547,26 @@ total_keys	c-src/emacs/src/keyboard.c	97
 total_size_of_entries	c-src/etags.c	/^total_size_of_entries (register node *np)$/
 total_surrounding	cp-src/conway.cpp	/^int site::total_surrounding(void)$/
 totally_unblock_input	c-src/emacs/src/keyboard.c	/^totally_unblock_input (void)$/
+tpargs	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{#1}\\deftpargs{#3}\\endgrou/
 tpcmd	c-src/h.h	15
 tpcmd	c-src/h.h	8
+tpheader	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
+tpx\deftpheader	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
 track-mouse	c-src/emacs/src/keyboard.c	/^DEFUN ("internal--track-mouse", Ftrack_mouse, Stra/
 tracking_off	c-src/emacs/src/keyboard.c	/^tracking_off (Lisp_Object old_value)$/
 traffic_light	cp-src/conway.cpp	/^void traffic_light(int x, int y)$/
 translate	c-src/emacs/src/regex.h	361
 treats	cp-src/c.C	131
 tt	prol-src/natded.prolog	/^tt:-$/
-tt=cmtt10	tex-src/texinfo.tex	/^\\font\\deftt=cmtt10 scaled \\magstep1$/
+tt	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
+tt	tex-src/texinfo.tex	/^\\def\\tt{\\realbackslash tt}$/
+tt	tex-src/texinfo.tex	/^\\def\\tt{\\realbackslash tt}%$/
+tt	tex-src/texinfo.tex	/^\\font\\deftt=cmtt10 scaled \\magstep1$/
+tt	tex-src/texinfo.tex	/^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/
+ttfont	tex-src/texinfo.tex	/^\\let\\ttfont = \\t$/
 tty_read_avail_input	c-src/emacs/src/keyboard.c	/^tty_read_avail_input (struct terminal *terminal,$/
 ttypeseen	c-src/etags.c	2430
+turnoffactive	tex-src/texinfo.tex	/^\\def\\turnoffactive{\\let"=\\normaldoublequote$/
 typdef	c-src/etags.c	2434
 type	c-src/emacs/src/gmalloc.c	145
 type	c-src/emacs/src/lisp.h	1973
@@ -4287,10 +4581,21 @@ type	c-src/emacs/src/lisp.h	2304
 type	c-src/emacs/src/lisp.h	2364
 type	c-src/emacs/src/lisp.h	3025
 type	c-src/etags.c	2271
+typefnheader	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
+typefnheaderx	tex-src/texinfo.tex	/^\\def\\deftypefnheader #1#2#3{\\deftypefnheaderx{#1}{/
+typefnx\deftypefnheader	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
 typefunargs	tex-src/texinfo.tex	/^\\deftypefunargs {#3}\\endgroup %$/
 typefunargs	tex-src/texinfo.tex	/^\\deftypefunargs {#4}\\endgroup %$/
+typefunheader	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
+typefunheaderx	tex-src/texinfo.tex	/^\\def\\deftypefunheader #1#2{\\deftypefunheaderx{#1}#/
+typefunx\deftypefunheader	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
 typemargin	tex-src/texinfo.tex	/^\\newskip\\deftypemargin \\deftypemargin=12pt$/
 typemargin	tex-src/texinfo.tex	/^\\rlap{\\rightline{{\\rm #2}\\hskip \\deftypemargin}}}%/
+typemargin	tex-src/texinfo.tex	/^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/
+typevarheader	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
+typevarx\deftypevarheader	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
+typevrheader	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
+typevrx\deftypevrheader	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
 u	c-src/emacs/src/lisp.h	2397
 u_any	c-src/emacs/src/lisp.h	2214
 u_boolfwd	c-src/emacs/src/lisp.h	2371
@@ -4303,13 +4608,44 @@ u_marker	c-src/emacs/src/lisp.h	2216
 u_objfwd	c-src/emacs/src/lisp.h	2372
 u_overlay	c-src/emacs/src/lisp.h	2217
 u_save_value	c-src/emacs/src/lisp.h	2218
+unargs	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{#1}\\defunargs{#3}\\endgrou/
 unargs	tex-src/texinfo.tex	/^\\defunargs {#2}\\endgroup %$/
 unargs	tex-src/texinfo.tex	/^\\defunargs {#3}\\endgroup %$/
 unblock_input	c-src/emacs/src/keyboard.c	/^unblock_input (void)$/
 unblock_input_to	c-src/emacs/src/keyboard.c	/^unblock_input_to (int level)$/
 unchar	c-src/h.h	99
 unexpand-abbrev	c-src/abbrev.c	/^DEFUN ("unexpand-abbrev", Funexpand_abbrev, Sunexp/
+unheader	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
 univ	merc-src/accumulator.m	/^:- import_module univ.$/
+unnchfopen	tex-src/texinfo.tex	/^\\def\\unnchfopen #1{%$/
+unnchfplain	tex-src/texinfo.tex	/^\\def\\unnchfplain #1{%$/
+unnumbchapentry	tex-src/texinfo.tex	/^      \\let\\unnumbchapentry = \\shortunnumberedentry/
+unnumbchapentry	tex-src/texinfo.tex	/^\\def\\unnumbchapentry#1#2{\\dochapentry{#1}{#2}}$/
+unnumbchapmacro	tex-src/texinfo.tex	/^\\global\\let\\unnumbchapmacro=\\unnchfopen}$/
+unnumbchapmacro	tex-src/texinfo.tex	/^\\global\\let\\unnumbchapmacro=\\unnchfplain}$/
+unnumbered	tex-src/texinfo.tex	/^\\let\\unnumbered=\\relax$/
+unnumbered	tex-src/texinfo.tex	/^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/
+unnumberedsec	tex-src/texinfo.tex	/^\\let\\unnumberedsec=\\relax$/
+unnumberedsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsec{\\parsearg\\unnumberedseczz/
+unnumberedsection	tex-src/texinfo.tex	/^\\let\\unnumberedsection=\\relax$/
+unnumberedseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedseczzz #1{\\seccheck{unnumberedsec}%/
+unnumberedsubsec	tex-src/texinfo.tex	/^\\let\\unnumberedsubsec=\\relax$/
+unnumberedsubsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsubsec{\\parsearg\\unnumberedsu/
+unnumberedsubsection	tex-src/texinfo.tex	/^\\let\\unnumberedsubsection=\\relax$/
+unnumberedsubseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedsubseczzz #1{\\seccheck{unnumberedsu/
+unnumberedsubsubsec	tex-src/texinfo.tex	/^\\let\\unnumberedsubsubsec=\\relax$/
+unnumberedsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsubsubsec{\\parsearg\\unnumbere/
+unnumberedsubsubsection	tex-src/texinfo.tex	/^\\let\\unnumberedsubsubsection=\\relax$/
+unnumberedsubsubseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedsubsubseczzz #1{\\seccheck{unnumbere/
+unnumberedzzz	tex-src/texinfo.tex	/^\\def\\unnumberedzzz #1{\\seccheck{unnumbered}%$/
+unnumbnoderef	tex-src/texinfo.tex	/^\\def\\unnumbnoderef{\\ifx\\lastnode\\relax\\else$/
+unnumbsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsecentry ##1##2{}$/
+unnumbsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsecentry#1#2{\\dosecentry{#1}{#2}}$/
+unnumbsetref	tex-src/texinfo.tex	/^\\def\\unnumbsetref#1{%$/
+unnumbsubsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsubsecentry ##1##2{}$/
+unnumbsubsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsubsecentry#1#2{\\dosubsecentry{#1}{#2}}/
+unnumbsubsubsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsubsubsecentry ##1##2{}$/
+unnumbsubsubsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsubsubsecentry#1#2{\\dosubsubsecentry{#1/
 unravel_univ	merc-src/accumulator.m	/^:- some [T] pred unravel_univ(univ::in, T::out) is/
 unread_switch_frame	c-src/emacs/src/keyboard.c	204
 unsignedp	y-src/cccp.y	112
@@ -4317,7 +4653,9 @@ unwind	c-src/emacs/src/lisp.h	2962
 unwind_int	c-src/emacs/src/lisp.h	2972
 unwind_ptr	c-src/emacs/src/lisp.h	2967
 unwind_void	c-src/emacs/src/lisp.h	2976
+unx\defunheader	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
 update_accumulator_pred	merc-src/accumulator.m	/^:- pred update_accumulator_pred(pred_id::in, proc_/
+uppercaseenumerate	tex-src/texinfo.tex	/^\\def\\uppercaseenumerate{%$/
 uprintmax_t	c-src/emacs/src/lisp.h	149
 uprintmax_t	c-src/emacs/src/lisp.h	154
 usage	perl-src/yagrip.pl	/^sub usage {$/
@@ -4344,20 +4682,45 @@ value	c-src/emacs/src/lisp.h	687
 value	y-src/cccp.y	112
 var	c-src/emacs/src/keyboard.c	11023
 var	c-src/emacs/src/lisp.h	3137
+var	tex-src/texinfo.tex	/^\\def\\var##1{\\realbackslash var {##1}}$/
+var	tex-src/texinfo.tex	/^\\def\\var##1{\\realbackslash var {##1}}%$/
+var	tex-src/texinfo.tex	/^\\let\\var=\\indexdummyfont$/
+var	tex-src/texinfo.tex	/^\\let\\var=\\smartitalic$/
+varargs	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{#1}\\defvarargs{#3}\\endgro/
+varargs	tex-src/texinfo.tex	/^\\def\\deftpargs #1{\\bf \\defvarargs{#1}}$/
 varargs	tex-src/texinfo.tex	/^\\defvarargs {#2}\\endgroup %$/
 varargs	tex-src/texinfo.tex	/^\\defvarargs {#3}\\endgroup %$/
+varheader	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
+varparsebody\Edefopt	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
+varparsebody\Edeftypevar	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
+varparsebody\Edefvar	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
 varset	merc-src/accumulator.m	/^:- import_module varset.$/
+varx\defvarheader	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
 vcopy	c-src/emacs/src/lisp.h	/^vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Objec/
 vectorlike_header	c-src/emacs/src/lisp.h	1343
 verde	cp-src/c.C	40
 verify-tags-table-function	el-src/emacs/lisp/progmodes/etags.el	/^(defvar verify-tags-table-function nil$/
 verify_ascii	c-src/emacs/src/lisp.h	/^# define verify_ascii(str) (str)$/
 vignore	c-src/etags.c	2417
+vindex	tex-src/texinfo.tex	/^\\def\\vindex {\\vrindex}$/
 visit-tags-table	el-src/emacs/lisp/progmodes/etags.el	/^(defun visit-tags-table (file &optional local)$/
 visit-tags-table-buffer	el-src/emacs/lisp/progmodes/etags.el	/^(defun visit-tags-table-buffer (&optional cont)$/
 void	c-src/emacs/src/lisp.h	/^INLINE void (check_cons_list) (void) { lisp_h_chec/
 voidfuncptr	c-src/emacs/src/lisp.h	2108
 voidval	y-src/cccp.y	115
+vrheader	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
+vritemindex	tex-src/texinfo.tex	/^\\def\\vritemindex #1{\\doind {vr}{\\code{#1}}}%$/
+vrparsebody\Edefivar	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
+vrparsebody\Edeftp	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
+vrparsebody\Edeftypevr	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
+vrparsebody\Edefvr	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
+vrx\defvrheader	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
+vtable	tex-src/texinfo.tex	/^\\def\\vtable{\\begingroup\\inENV\\obeylines\\obeyspaces/
+vtablex	tex-src/texinfo.tex	/^\\gdef\\vtablex #1^^M{%$/
+w	tex-src/texinfo.tex	/^\\def\\w#1{\\leavevmode\\hbox{#1}}$/
+w	tex-src/texinfo.tex	/^\\def\\w{\\realbackslash w }%$/
+w	tex-src/texinfo.tex	/^\\def\\w{\\realbackslash w}$/
+w	tex-src/texinfo.tex	/^\\let\\w=\\indexdummyfont$/
 wait_status_ptr_t	c.c	161
 waiting_for_input	c-src/emacs/src/keyboard.c	150
 warning	y-src/cccp.y	/^warning (msg)$/
@@ -4410,13 +4773,25 @@ x-get-selection-internal	c.c	/^DEFUN ("x-get-selection-internal", Fx_get_selecti
 xcar_addr	c-src/emacs/src/lisp.h	/^xcar_addr (Lisp_Object c)$/
 xcdr_addr	c-src/emacs/src/lisp.h	/^xcdr_addr (Lisp_Object c)$/
 xdiff	make-src/Makefile	/^xdiff: ETAGS EXTAGS ${infiles}$/
+xitem	tex-src/texinfo.tex	/^\\def\\xitem{\\errmessage{@xitem while not in a table/
+xitem	tex-src/texinfo.tex	/^\\let\\xitem = \\internalBxitem %$/
+xitemsubtopix	tex-src/texinfo.tex	/^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/
+xitemsubtopix	tex-src/texinfo.tex	/^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/
+xitemx	tex-src/texinfo.tex	/^\\def\\xitemx{\\errmessage{@xitemx while not in a tab/
+xitemx	tex-src/texinfo.tex	/^\\let\\xitemx = \\internalBxitemx %$/
+xitemzzz	tex-src/texinfo.tex	/^\\def\\xitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/
+xkey	tex-src/texinfo.tex	/^\\def\\xkey{\\key}$/
 xmalloc	c-src/etags.c	/^xmalloc (size_t size)$/
 xnew	c-src/etags.c	/^#define xnew(n, Type)      ((Type *) xmalloc ((n) /
+xrdef	tex-src/texinfo.tex	/^\\def\\xrdef #1#2{$/
 xrealloc	c-src/etags.c	/^xrealloc (void *ptr, size_t size)$/
+xref	tex-src/texinfo.tex	/^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/
 xref-etags-location	el-src/emacs/lisp/progmodes/etags.el	/^(defclass xref-etags-location (xref-location)$/
 xref-location-line	el-src/emacs/lisp/progmodes/etags.el	/^(cl-defmethod xref-location-line ((l xref-etags-lo/
 xref-location-marker	el-src/emacs/lisp/progmodes/etags.el	/^(cl-defmethod xref-location-marker ((l xref-etags-/
 xref-make-etags-location	el-src/emacs/lisp/progmodes/etags.el	/^(defun xref-make-etags-location (tag-info file)$/
+xrefX	tex-src/texinfo.tex	/^\\def\\xrefX[#1,#2,#3,#4,#5,#6]{\\begingroup%$/
+xreftie	tex-src/texinfo.tex	/^\\gdef\\xreftie{'tie}$/
 xrnew	c-src/etags.c	/^#define xrnew(op, n, Type) ((op) = (Type *) xreall/
 xx	make-src/Makefile	/^xx="this line is here because of a fontlock bug$/
 xyz	ruby-src/test1.ru	/^    alias_method :xyz,$/
@@ -4476,8 +4851,22 @@ z	c.c	144
 z	c.c	164
 z	cp-src/clheir.hpp	49
 z	cp-src/clheir.hpp	58
+zzz	tex-src/texinfo.tex	/^\\def\\infoappendix{\\parsearg\\appendixzzz}$/
+zzz	tex-src/texinfo.tex	/^\\def\\infochapter{\\parsearg\\chapterzzz}$/
+zzz	tex-src/texinfo.tex	/^\\def\\infosection{\\parsearg\\sectionzzz}$/
+zzz	tex-src/texinfo.tex	/^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/
+zzz	tex-src/texinfo.tex	/^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/
+zzz	tex-src/texinfo.tex	/^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/
+zzz	tex-src/texinfo.tex	/^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/
+{	tex-src/texinfo.tex	/^\\let\\{=\\mylbrace$/
+{	tex-src/texinfo.tex	/^\\let\\{=\\ptexlbrace$/
 |	tex-src/texinfo.tex	/^\\def|{{\\tt \\char '174}}$/
+|	tex-src/texinfo.tex	/^\\let|=\\normalverticalbar$/
+}	tex-src/texinfo.tex	/^\\let\\}=\\myrbrace$/
+}	tex-src/texinfo.tex	/^\\let\\}=\\ptexrbrace$/
+~	tex-src/texinfo.tex	/^\\catcode `\\^=7 \\catcode `\\_=8 \\catcode `\\~=13 \\let/
 ~	tex-src/texinfo.tex	/^\\def~{{\\tt \\char '176}}$/
+~	tex-src/texinfo.tex	/^\\let~=\\normaltilde$/
 ~A	cp-src/c.C	/^A::~A() {}$/
 ~B	cp-src/c.C	/^    ~B() {};$/
 ~MDiagArray2	cp-src/MDiagArray2.h	/^  ~MDiagArray2 (void) { }$/
diff --git a/test/manual/etags/CTAGS.good_update b/test/manual/etags/CTAGS.good_update
index c618b9582da..64f01f2c9e4 100644
--- a/test/manual/etags/CTAGS.good_update
+++ b/test/manual/etags/CTAGS.good_update
@@ -1,4 +1,6 @@
 
+"	tex-src/texinfo.tex	/^\\def\\turnoffactive{\\let"=\\normaldoublequote$/
+"	tex-src/texinfo.tex	/^\\let"=\\activedoublequote$/
 #a-defer-word	forth-src/test-forth.fth	/^defer #a-defer-word$/
 #some-storage	forth-src/test-forth.fth	/^2000 buffer: #some-storage$/
 $0x80	c-src/sysdep.h	32
@@ -33,14 +35,28 @@ $user_comment_lc	php-src/lce_functions.php	115
 ${CHECKOBJS}	make-src/Makefile	/^${CHECKOBJS}: CFLAGS=-g3 -DNULLFREECHECK=0$/
 %cdiff	make-src/Makefile	/^%cdiff: CTAGS% CTAGS ${infiles}$/
 %ediff	make-src/Makefile	/^%ediff: ETAGS% ETAGS ${infiles}$/
+&	tex-src/texinfo.tex	/^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/
+&	tex-src/texinfo.tex	/^\\gdef\\normalparens{\\boldbrax\\let&=\\ampnr}$/
+'	tex-src/texinfo.tex	/^\\def\\'{{'}}$/
+(	tex-src/texinfo.tex	/^\\gdef\\amprm#1 {{\\rm\\&#1}\\let(=\\oprm \\let)=\\clrm\\ }/
+(	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
+(	tex-src/texinfo.tex	/^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested /
+(	tex-src/texinfo.tex	/^\\ifnum \\parencount=1 {\\rm \\char `\\)}\\sl \\let(=\\opr/
 ($_,$flag,$opt,$f,$r,@temp	perl-src/yagrip.pl	8
 ($prog,$_,@list	perl-src/yagrip.pl	39
 ($string,$flag,@string,@temp,@last	perl-src/yagrip.pl	40
 (a-forth-constant	forth-src/test-forth.fth	/^constant (a-forth-constant$/
 (another-forth-word)	forth-src/test-forth.fth	/^: (another-forth-word) ( -- )$/
 (foo)	forth-src/test-forth.fth	/^: (foo) 1 ;$/
+)	tex-src/texinfo.tex	/^\\gdef\\amprm#1 {{\\rm\\&#1}\\let(=\\oprm \\let)=\\clrm\\ }/
+)	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
+*	tex-src/texinfo.tex	/^\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}$/
+*	tex-src/texinfo.tex	/^\\let\\*=\\ptexstar$/
 +	ruby-src/test.rb	/^        def +(y)$/
 +	tex-src/texinfo.tex	/^\\def+{{\\tt \\char 43}}$/
++	tex-src/texinfo.tex	/^\\let+=\\normalplus}$/
+.	tex-src/texinfo.tex	/^\\def\\.{.\\spacefactor=3000 }$/
+.	tex-src/texinfo.tex	/^\\let\\.=\\ptexdot$/
 .PRECIOUS	make-src/Makefile	/^.PRECIOUS: ETAGS CTAGS ETAGS16 CTAGS16 ETAGS17 CTA/
 /.notdef	ps-src/rfc1245.ps	/^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/
 /.notdef	ps-src/rfc1245.ps	/^\/.notdef \/.notdef \/.notdef \/.notdef \/space \/exclam/
@@ -172,35 +188,26 @@ ${CHECKOBJS}	make-src/Makefile	/^${CHECKOBJS}: CFLAGS=-g3 -DNULLFREECHECK=0$/
 2const	forth-src/test-forth.fth	/^3 4 2constant 2const$/
 2val	forth-src/test-forth.fth	/^2const 2value 2val$/
 2var	forth-src/test-forth.fth	/^2variable 2var$/
+:	tex-src/texinfo.tex	/^\\def\\:{\\spacefactor=1000 }$/
 :a-forth-dictionary-entry	forth-src/test-forth.fth	/^create :a-forth-dictionary-entry$/
 <	tex-src/texinfo.tex	/^\\def<{{\\tt \\less}}$/
+<	tex-src/texinfo.tex	/^\\let<=\\normalless$/
 <<	ruby-src/test.rb	/^        def <<(y)$/
 <=	ruby-src/test.rb	/^        def <=(y)$/
 <=>	ruby-src/test.rb	/^        def <=>(y)$/
 =	tex-src/texinfo.tex	/^\\global\\def={{\\tt \\char 61}}}$/
-=	tex-src/texinfo.tex	/^\\global\\let\\section = \\appendixsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\section = \\numberedsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\section = \\unnumberedsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\appendixsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\numberedsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\unnumberedsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\appendixsubsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\numberedsubsubsec$/
-=	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\unnumberedsubsubsec$/
 =/f	ada-src/etags-test-for.ada	/^   function "=" (L, R : System.Address) return Boo/
 ==	ruby-src/test.rb	/^        def ==(y)$/
 ===	ruby-src/test.rb	/^        def ===(y)$/
-=\indexdummyfont	tex-src/texinfo.tex	/^\\let\\cite=\\indexdummyfont$/
-=\relax	tex-src/texinfo.tex	/^\\let\\appendix=\\relax$/
-=\relax	tex-src/texinfo.tex	/^\\let\\chapter=\\relax$/
-=\relax	tex-src/texinfo.tex	/^\\let\\section=\\relax$/
-=\relax	tex-src/texinfo.tex	/^\\let\\subsection=\\relax$/
-=\relax	tex-src/texinfo.tex	/^\\let\\subsubsection=\\relax$/
-=\smartitalic	tex-src/texinfo.tex	/^\\let\\cite=\\smartitalic$/
 =starts-with-equals!	scm-src/test.scm	/^(define =starts-with-equals! #t)$/
 >	tex-src/texinfo.tex	/^\\def>{{\\tt \\gtr}}$/
+>	tex-src/texinfo.tex	/^\\let>=\\normalgreater$/
 >field1	forth-src/test-forth.fth	/^   9   field   >field1$/
 >field2	forth-src/test-forth.fth	/^   5   field   >field2$/
+@	tex-src/texinfo.tex	/^\\def\\@{@}%$/
+@	tex-src/texinfo.tex	/^\\def\\@{{\\tt \\char '100}}$/
+@sf	tex-src/texinfo.tex	/^\\ifhmode\\edef\\@sf{\\spacefactor\\the\\spacefactor}\\\/\\/
+@sf	tex-src/texinfo.tex	/^\\let\\@sf\\empty$/
 A	c.c	162
 A	cp-src/c.C	/^void A::A() {}$/
 A	cp-src/c.C	117
@@ -325,6 +332,11 @@ CATCHER	c-src/emacs/src/lisp.h	3021
 CDR	c-src/emacs/src/lisp.h	/^CDR (Lisp_Object c)$/
 CDR_SAFE	c-src/emacs/src/lisp.h	/^CDR_SAFE (Lisp_Object c)$/
 CFLAGS	make-src/Makefile	/^CFLAGS=${WARNINGS} -ansi -g3 # -pg -O$/
+CHAPFopen	tex-src/texinfo.tex	/^\\def\\CHAPFopen{$/
+CHAPFplain	tex-src/texinfo.tex	/^\\def\\CHAPFplain{$/
+CHAPPAGodd	tex-src/texinfo.tex	/^\\def\\CHAPPAGodd{$/
+CHAPPAGoff	tex-src/texinfo.tex	/^\\def\\CHAPPAGoff{$/
+CHAPPAGon	tex-src/texinfo.tex	/^\\def\\CHAPPAGon{$/
 CHAR	c-src/etags.c	/^#define CHAR(x)		((unsigned int)(x) & (CHARS - 1))/
 CHAR	y-src/cccp.c	7
 CHARACTERBITS	c-src/emacs/src/lisp.h	2457
@@ -530,6 +542,7 @@ EMACS_UINT	c-src/emacs/src/lisp.h	97
 ENTRY	c-src/sysdep.h	/^#define	ENTRY(name)							      \\$/
 ENUM_BF	c-src/emacs/src/lisp.h	/^#define ENUM_BF(TYPE) enum TYPE$/
 ENUM_BF	c-src/emacs/src/lisp.h	/^#define ENUM_BF(TYPE) unsigned int$/
+ENVcheck	tex-src/texinfo.tex	/^\\def\\ENVcheck{%$/
 EQ	c-src/emacs/src/lisp.h	/^# define EQ(x, y) lisp_h_EQ (x, y)$/
 EQUAL	y-src/cccp.c	12
 ERLSRC	make-src/Makefile	/^ERLSRC=gs_dialog.erl lines.erl lists.erl$/
@@ -543,13 +556,37 @@ EXFUN	c-src/emacs/src/lisp.h	/^#define EXFUN(fnname, maxargs) \\$/
 EXTAGS	make-src/Makefile	/^EXTAGS: extags ${infiles} Makefile$/
 EXTERNALLY_VISIBLE	c-src/emacs/src/keyboard.c	3497
 EXTERNALLY_VISIBLE	c-src/emacs/src/keyboard.c	4372
+Ealphaenumerate	tex-src/texinfo.tex	/^\\def\\Ealphaenumerate{\\Eenumerate}$/
+Ecapsenumerate	tex-src/texinfo.tex	/^\\def\\Ecapsenumerate{\\Eenumerate}$/
+Ecartouche	tex-src/texinfo.tex	/^\\def\\Ecartouche{%$/
+Edescription	tex-src/texinfo.tex	/^\\def\\Edescription{\\Etable}% Necessary kludge.$/
+Edisplay	tex-src/texinfo.tex	/^\\def\\Edisplay{\\endgroup\\afterenvbreak}%$/
+Eexample	tex-src/texinfo.tex	/^\\def\\Eexample{\\Elisp}$/
+Eflushleft	tex-src/texinfo.tex	/^\\def\\Eflushleft{\\endgroup\\afterenvbreak}%$/
+Eflushright	tex-src/texinfo.tex	/^\\def\\Eflushright{\\endgroup\\afterenvbreak}%$/
+Eformat	tex-src/texinfo.tex	/^\\def\\Eformat{\\endgroup\\afterenvbreak}$/
+Eftable	tex-src/texinfo.tex	/^\\def\\Eftable{\\endgraf\\endgroup\\afterenvbreak}%$/
+Egroup	tex-src/texinfo.tex	/^  \\def\\Egroup{\\egroup\\endgroup}%$/
+Eifclear	tex-src/texinfo.tex	/^\\def\\Eifclear{}$/
+Eifset	tex-src/texinfo.tex	/^\\def\\Eifset{}$/
+Eiftex	tex-src/texinfo.tex	/^\\def\\Eiftex{}$/
+Elisp	tex-src/texinfo.tex	/^\\def\\Elisp{\\endgroup\\afterenvbreak}%$/
 EmptyNmStr	pas-src/common.pas	/^function EmptyNmStr(* : NameString*);$/
 Environment	tex-src/gzip.texi	/^@node Environment, Tapes, Advanced usage, Top$/
+Equotation	tex-src/texinfo.tex	/^\\def\\Equotation{\\par\\endgroup\\afterenvbreak}%$/
 Erlang_functions	c-src/etags.c	/^Erlang_functions (FILE *inf)$/
 Erlang_help	c-src/etags.c	567
 Erlang_suffixes	c-src/etags.c	565
 ErrStrToNmStr	pas-src/common.pas	/^function ErrStrToNmStr;(*($/
 Error_Information/t	ada-src/2ataspri.ads	/^   type Error_Information is new Interfaces.C.POSI/
+Esmallexample	tex-src/texinfo.tex	/^\\def\\Esmallexample{\\Elisp}$/
+Esmallexample	tex-src/texinfo.tex	/^\\global\\def\\Esmallexample{\\Esmalllisp}$/
+Esmalllisp	tex-src/texinfo.tex	/^\\def\\Esmalllisp{\\endgroup\\afterenvbreak}%$/
+Etable	tex-src/texinfo.tex	/^\\def\\Etable{\\endgraf\\endgroup\\afterenvbreak}%$/
+Etable	tex-src/texinfo.tex	/^\\let\\Etable=\\relax}}$/
+Etex	tex-src/texinfo.tex	/^\\let\\Etex=\\endgroup}$/
+Etitlepage	tex-src/texinfo.tex	/^\\def\\Etitlepage{%$/
+Evtable	tex-src/texinfo.tex	/^\\def\\Evtable{\\endgraf\\endgroup\\afterenvbreak}%$/
 Exit_LL_Task/p	ada-src/2ataspri.adb	/^   procedure Exit_LL_Task is$/
 Exit_LL_Task/p	ada-src/2ataspri.ads	/^   procedure Exit_LL_Task;$/
 ExtractCommentInfo	pas-src/common.pas	/^procedure ExtractCommentInfo; (*($/
@@ -690,6 +727,20 @@ HASH_TABLE_P	c-src/emacs/src/lisp.h	/^HASH_TABLE_P (Lisp_Object a)$/
 HASH_TABLE_SIZE	c-src/emacs/src/lisp.h	/^HASH_TABLE_SIZE (struct Lisp_Hash_Table *h)$/
 HASH_VALUE	c-src/emacs/src/lisp.h	/^HASH_VALUE (struct Lisp_Hash_Table *h, ptrdiff_t i/
 HAVE_NTGUI	c-src/etags.c	116
+HEADINGSafter	tex-src/texinfo.tex	/^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/
+HEADINGSdouble	tex-src/texinfo.tex	/^\\def\\HEADINGSdouble{$/
+HEADINGSdoubleafter	tex-src/texinfo.tex	/^\\let\\HEADINGSdoubleafter=\\HEADINGSafter$/
+HEADINGSdoublex	tex-src/texinfo.tex	/^\\def\\HEADINGSdoublex{%$/
+HEADINGShook	tex-src/texinfo.tex	/^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/
+HEADINGShook	tex-src/texinfo.tex	/^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/
+HEADINGShook	tex-src/texinfo.tex	/^\\let\\HEADINGShook=\\relax$/
+HEADINGSoff	tex-src/texinfo.tex	/^\\def\\HEADINGSoff{$/
+HEADINGSon	tex-src/texinfo.tex	/^\\def\\HEADINGSon{\\HEADINGSdouble}$/
+HEADINGSon	tex-src/texinfo.tex	/^\\global\\def\\HEADINGSon{\\HEADINGSdouble}}$/
+HEADINGSon	tex-src/texinfo.tex	/^\\global\\def\\HEADINGSon{\\HEADINGSsingle}}$/
+HEADINGSsingle	tex-src/texinfo.tex	/^\\def\\HEADINGSsingle{$/
+HEADINGSsingleafter	tex-src/texinfo.tex	/^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/
+HEADINGSsinglex	tex-src/texinfo.tex	/^\\def\\HEADINGSsinglex{%$/
 HEAP	c-src/emacs/src/gmalloc.c	131
 HTMLSRC	make-src/Makefile	/^HTMLSRC=softwarelibero.html index.shtml algrthms.h/
 HTML_help	c-src/etags.c	584
@@ -751,6 +802,7 @@ JAVASRC	make-src/Makefile	/^JAVASRC=AWTEMul.java KeyEve.java SMan.java SysCol./
 KBD_BUFFER_SIZE	c-src/emacs/src/keyboard.c	82
 KBYTES	objc-src/PackInsp.m	58
 KEY_TO_CHAR	c-src/emacs/src/keyboard.c	/^#define KEY_TO_CHAR(k) (XINT (k) & ((1 << CHARACTE/
+L	tex-src/texinfo.tex	/^\\let\\L=\\ptexL$/
 LATEST	make-src/Makefile	/^LATEST=17$/
 LCE_COMMENT	php-src/lce_functions.php	13
 LCE_COMMENT_TOOL	php-src/lce_functions.php	17
@@ -1408,6 +1460,9 @@ Task_Type/b	ada-src/etags-test-for.ada	/^  task body Task_Type is$/
 Task_Type/b	ada-src/waroquiers.ada	/^  task body Task_Type is$/
 Task_Type/k	ada-src/etags-test-for.ada	/^  task type Task_Type is$/
 Task_Type/k	ada-src/waroquiers.ada	/^  task type Task_Type is$/
+TeX	tex-src/texinfo.tex	/^\\def\\TeX{\\realbackslash TeX}$/
+TeX	tex-src/texinfo.tex	/^\\def\\TeX{\\realbackslash TeX}%$/
+TeX	tex-src/texinfo.tex	/^\\let\\TeX=\\indexdummytex$/
 TeX_commands	c-src/etags.c	/^TeX_commands (FILE *inf)$/
 TeX_help	c-src/etags.c	674
 TeX_suffixes	c-src/etags.c	672
@@ -1667,551 +1722,22 @@ YY_DECL_VARIABLES	/usr/share/bison/bison.simple	391
 Yacc_entries	c-src/etags.c	/^Yacc_entries (FILE *inf)$/
 Yacc_help	c-src/etags.c	693
 Yacc_suffixes	c-src/etags.c	691
+Yappendixletterandtype	tex-src/texinfo.tex	/^\\def\\Yappendixletterandtype{%$/
+Ynothing	tex-src/texinfo.tex	/^\\def\\Ynothing{}$/
+Ypagenumber	tex-src/texinfo.tex	/^\\def\\Ypagenumber{\\folio}$/
+Ysectionnumberandtype	tex-src/texinfo.tex	/^\\def\\Ysectionnumberandtype{%$/
+Ytitle	tex-src/texinfo.tex	/^\\def\\Ytitle{\\thischapter}$/
 Z	c-src/h.h	100
+[	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
 []	ruby-src/test.rb	/^        def [](y)$/
 []=	ruby-src/test.rb	/^        def []=(y, val)$/
-\	tex-src/texinfo.tex	/^\\def\\ {{\\fontdimen2\\font=\\tclosesave{} }}%$/
-\	tex-src/texinfo.tex	/^\\gdef\\sepspaces{\\def {\\ }}}$/
-\'	tex-src/texinfo.tex	/^\\def\\'{{'}}$/
-\*	tex-src/texinfo.tex	/^\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}$/
-\.	tex-src/texinfo.tex	/^\\def\\.{.\\spacefactor=3000 }$/
-\:	tex-src/texinfo.tex	/^\\def\\:{\\spacefactor=1000 }$/
-\@	tex-src/texinfo.tex	/^\\def\\@{@}%$/
-\@	tex-src/texinfo.tex	/^\\def\\@{{\\tt \\char '100}}$/
-\CHAPFopen	tex-src/texinfo.tex	/^\\def\\CHAPFopen{$/
-\CHAPFplain	tex-src/texinfo.tex	/^\\def\\CHAPFplain{$/
-\CHAPPAGodd	tex-src/texinfo.tex	/^\\def\\CHAPPAGodd{$/
-\CHAPPAGoff	tex-src/texinfo.tex	/^\\def\\CHAPPAGoff{$/
-\CHAPPAGon	tex-src/texinfo.tex	/^\\def\\CHAPPAGon{$/
-\ENVcheck	tex-src/texinfo.tex	/^\\def\\ENVcheck{%$/
-\Ealphaenumerate	tex-src/texinfo.tex	/^\\def\\Ealphaenumerate{\\Eenumerate}$/
-\Ecapsenumerate	tex-src/texinfo.tex	/^\\def\\Ecapsenumerate{\\Eenumerate}$/
-\Ecartouche	tex-src/texinfo.tex	/^\\def\\Ecartouche{%$/
-\Edescription	tex-src/texinfo.tex	/^\\def\\Edescription{\\Etable}% Necessary kludge.$/
-\Edisplay	tex-src/texinfo.tex	/^\\def\\Edisplay{\\endgroup\\afterenvbreak}%$/
-\Eexample	tex-src/texinfo.tex	/^\\def\\Eexample{\\Elisp}$/
-\Eflushleft	tex-src/texinfo.tex	/^\\def\\Eflushleft{\\endgroup\\afterenvbreak}%$/
-\Eflushright	tex-src/texinfo.tex	/^\\def\\Eflushright{\\endgroup\\afterenvbreak}%$/
-\Eformat	tex-src/texinfo.tex	/^\\def\\Eformat{\\endgroup\\afterenvbreak}$/
-\Eftable	tex-src/texinfo.tex	/^\\def\\Eftable{\\endgraf\\endgroup\\afterenvbreak}%$/
-\Egroup	tex-src/texinfo.tex	/^  \\def\\Egroup{\\egroup\\endgroup}%$/
-\Eifclear	tex-src/texinfo.tex	/^\\def\\Eifclear{}$/
-\Eifset	tex-src/texinfo.tex	/^\\def\\Eifset{}$/
-\Eiftex	tex-src/texinfo.tex	/^\\def\\Eiftex{}$/
-\Elisp	tex-src/texinfo.tex	/^\\def\\Elisp{\\endgroup\\afterenvbreak}%$/
-\Equotation	tex-src/texinfo.tex	/^\\def\\Equotation{\\par\\endgroup\\afterenvbreak}%$/
-\Esmallexample	tex-src/texinfo.tex	/^\\def\\Esmallexample{\\Elisp}$/
-\Esmallexample	tex-src/texinfo.tex	/^\\global\\def\\Esmallexample{\\Esmalllisp}$/
-\Esmalllisp	tex-src/texinfo.tex	/^\\def\\Esmalllisp{\\endgroup\\afterenvbreak}%$/
-\Etable	tex-src/texinfo.tex	/^\\def\\Etable{\\endgraf\\endgroup\\afterenvbreak}%$/
-\Etitlepage	tex-src/texinfo.tex	/^\\def\\Etitlepage{%$/
-\Evtable	tex-src/texinfo.tex	/^\\def\\Evtable{\\endgraf\\endgroup\\afterenvbreak}%$/
-\HEADINGSafter	tex-src/texinfo.tex	/^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/
-\HEADINGSdouble	tex-src/texinfo.tex	/^\\def\\HEADINGSdouble{$/
-\HEADINGSdoublex	tex-src/texinfo.tex	/^\\def\\HEADINGSdoublex{%$/
-\HEADINGSoff	tex-src/texinfo.tex	/^\\def\\HEADINGSoff{$/
-\HEADINGSon	tex-src/texinfo.tex	/^\\def\\HEADINGSon{\\HEADINGSdouble}$/
-\HEADINGSon	tex-src/texinfo.tex	/^\\global\\def\\HEADINGSon{\\HEADINGSdouble}}$/
-\HEADINGSon	tex-src/texinfo.tex	/^\\global\\def\\HEADINGSon{\\HEADINGSsingle}}$/
-\HEADINGSsingle	tex-src/texinfo.tex	/^\\def\\HEADINGSsingle{$/
-\HEADINGSsingleafter	tex-src/texinfo.tex	/^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/
-\HEADINGSsinglex	tex-src/texinfo.tex	/^\\def\\HEADINGSsinglex{%$/
-\TeX	tex-src/texinfo.tex	/^\\def\\TeX{\\realbackslash TeX}$/
-\TeX	tex-src/texinfo.tex	/^\\def\\TeX{\\realbackslash TeX}%$/
-\Yappendixletterandtype	tex-src/texinfo.tex	/^\\def\\Yappendixletterandtype{%$/
-\Ynothing	tex-src/texinfo.tex	/^\\def\\Ynothing{}$/
-\Ypagenumber	tex-src/texinfo.tex	/^\\def\\Ypagenumber{\\folio}$/
-\Ysectionnumberandtype	tex-src/texinfo.tex	/^\\def\\Ysectionnumberandtype{%$/
-\Ytitle	tex-src/texinfo.tex	/^\\def\\Ytitle{\\thischapter}$/
-\_	tex-src/texinfo.tex	/^\\def\\_{\\lvvmode \\kern.06em \\vbox{\\hrule width.3em /
-\_	tex-src/texinfo.tex	/^\\def\\_{{\\realbackslash _}}%$/
-\`	tex-src/texinfo.tex	/^\\def\\`{{`}}$/
-\aboveenvbreak	tex-src/texinfo.tex	/^\\def\\aboveenvbreak{{\\advance\\aboveenvskipamount by/
-\activedoublequote	tex-src/texinfo.tex	/^\\def\\activedoublequote{{\\tt \\char '042}}$/
-\activeparens	tex-src/texinfo.tex	/^\\def\\activeparens{%$/
-\afourpaper	tex-src/texinfo.tex	/^\\def\\afourpaper{$/
-\afterenvbreak	tex-src/texinfo.tex	/^\\def\\afterenvbreak{\\endgraf \\ifdim\\lastskip<\\above/
-\alphaenumerate	tex-src/texinfo.tex	/^\\def\\alphaenumerate{\\enumerate{a}}$/
-\appendix	tex-src/texinfo.tex	/^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/
-\appendixletter	tex-src/texinfo.tex	/^\\def\\appendixletter{\\char\\the\\appendixno}$/
-\appendixnoderef	tex-src/texinfo.tex	/^\\def\\appendixnoderef{\\ifx\\lastnode\\relax\\else$/
-\appendixsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/
-\appendixsection	tex-src/texinfo.tex	/^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/
-\appendixsectionzzz	tex-src/texinfo.tex	/^\\def\\appendixsectionzzz #1{\\seccheck{appendixsecti/
-\appendixsetref	tex-src/texinfo.tex	/^\\def\\appendixsetref#1{%$/
-\appendixsubsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsec{\\parsearg\\appendixsubsec/
-\appendixsubseczzz	tex-src/texinfo.tex	/^\\def\\appendixsubseczzz #1{\\seccheck{appendixsubsec/
-\appendixsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/
-\appendixsubsubseczzz	tex-src/texinfo.tex	/^\\def\\appendixsubsubseczzz #1{\\seccheck{appendixsub/
-\appendixzzz	tex-src/texinfo.tex	/^\\def\\appendixzzz #1{\\seccheck{appendix}%$/
-\asis	tex-src/texinfo.tex	/^\\def\\asis#1{#1}$/
-\author	tex-src/texinfo.tex	/^   \\def\\author{\\parsearg\\authorzzz}%$/
-\authorfont	tex-src/texinfo.tex	/^   \\def\\authorfont{\\authorrm \\normalbaselineskip =/
-\authorzzz	tex-src/texinfo.tex	/^   \\def\\authorzzz##1{\\ifseenauthor\\else\\vskip 0pt /
-\b	tex-src/texinfo.tex	/^\\def\\b##1{\\realbackslash b {##1}}$/
-\b	tex-src/texinfo.tex	/^\\def\\b##1{\\realbackslash b {##1}}%$/
-\b	tex-src/texinfo.tex	/^\\def\\b#1{{\\bf #1}}$/
-\balancecolumns	tex-src/texinfo.tex	/^\\def\\balancecolumns{%$/
-\begin	tex-src/texinfo.tex	/^\\outer\\def\\begin{\\parsearg\\beginxxx}$/
-\begindoublecolumns	tex-src/texinfo.tex	/^\\def\\begindoublecolumns{\\begingroup$/
-\beginxxx	tex-src/texinfo.tex	/^\\def\\beginxxx #1{%$/
-\bf	tex-src/texinfo.tex	/^\\def\\bf{\\realbackslash bf }$/
-\bf	tex-src/texinfo.tex	/^\\def\\bf{\\realbackslash bf }%$/
-\bullet	tex-src/texinfo.tex	/^\\def\\bullet{$\\ptexbullet$}$/
-\bye	tex-src/texinfo.tex	/^\\outer\\def\\bye{\\pagealignmacro\\tracingstats=1\\ptex/
-\capsenumerate	tex-src/texinfo.tex	/^\\def\\capsenumerate{\\enumerate{A}}$/
-\cartbot	tex-src/texinfo.tex	/^\\def\\cartbot{\\hbox to \\cartouter{\\hskip\\lskip$/
-\cartouche	tex-src/texinfo.tex	/^\\long\\def\\cartouche{%$/
-\carttop	tex-src/texinfo.tex	/^\\def\\carttop{\\hbox to \\cartouter{\\hskip\\lskip$/
-\cbl	tex-src/texinfo.tex	/^\\def\\cbl{{\\circle\\char'012\\hskip -6pt}}$/
-\cbr	tex-src/texinfo.tex	/^\\def\\cbr{{\\hskip 6pt\\circle\\char'011}}$/
-\center	tex-src/texinfo.tex	/^\\def\\center{\\parsearg\\centerzzz}$/
-\centerzzz	tex-src/texinfo.tex	/^\\def\\centerzzz #1{{\\advance\\hsize by -\\leftskip$/
-\chapbreak	tex-src/texinfo.tex	/^\\def\\chapbreak{\\dobreak \\chapheadingskip {-4000}}$/
-\chapentry	tex-src/texinfo.tex	/^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/
-\chapentryfonts	tex-src/texinfo.tex	/^\\def\\chapentryfonts{\\secfonts \\rm}$/
-\chapfonts	tex-src/texinfo.tex	/^\\def\\chapfonts{%$/
-\chapheading	tex-src/texinfo.tex	/^\\def\\chapheading{\\parsearg\\chapheadingzzz}$/
-\chapheadingzzz	tex-src/texinfo.tex	/^\\def\\chapheadingzzz #1{\\chapbreak %$/
-\chapoddpage	tex-src/texinfo.tex	/^\\def\\chapoddpage{\\chappager \\ifodd\\pageno \\else \\h/
-\chappager	tex-src/texinfo.tex	/^\\def\\chappager{\\par\\vfill\\supereject}$/
-\chapter	tex-src/texinfo.tex	/^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/
-\chapternofonts	tex-src/texinfo.tex	/^\\def\\chapternofonts{%$/
-\chapterzzz	tex-src/texinfo.tex	/^\\def\\chapterzzz #1{\\seccheck{chapter}%$/
-\char	tex-src/texinfo.tex	/^\\def\\char{\\realbackslash char}$/
-\char	tex-src/texinfo.tex	/^\\def\\char{\\realbackslash char}%$/
-\chfopen	tex-src/texinfo.tex	/^\\def\\chfopen #1#2{\\chapoddpage {\\chapfonts$/
-\chfplain	tex-src/texinfo.tex	/^\\def\\chfplain #1#2{%$/
-\cindex	tex-src/texinfo.tex	/^\\def\\cindex {\\cpindex}$/
-\cindexsub	tex-src/texinfo.tex	/^\\def\\cindexsub {\\begingroup\\obeylines\\cindexsub}$/
-\cite	tex-src/texinfo.tex	/^\\def\\cite##1{\\realbackslash cite {##1}}$/
-\cite	tex-src/texinfo.tex	/^\\def\\cite##1{\\realbackslash cite {##1}}%$/
-\clear	tex-src/texinfo.tex	/^\\def\\clear{\\parsearg\\clearxxx}$/
-\clearxxx	tex-src/texinfo.tex	/^\\def\\clearxxx #1{$/
-\code	tex-src/texinfo.tex	/^\\def\\code##1{\\realbackslash code {##1}}$/
-\code	tex-src/texinfo.tex	/^\\def\\code##1{\\realbackslash code {##1}}%$/
-\comment	tex-src/texinfo.tex	/^\\def\\comment{\\catcode 64=\\other \\catcode 123=\\othe/
-\commentxxx	tex-src/texinfo.tex	/^\\def\\commentxxx #1{\\catcode 64=0 \\catcode 123=1 \\c/
-\contents	tex-src/texinfo.tex	/^\\outer\\def\\contents{%$/
-\copyright	tex-src/texinfo.tex	/^\\def\\copyright{\\realbackslash copyright }%$/
-\copyright	tex-src/texinfo.tex	/^\\def\\copyright{\\realbackslash copyright}$/
-\cropmarks	tex-src/texinfo.tex	/^\\def\\cropmarks{\\let\\onepageout=\\croppageout }$/
-\croppageout	tex-src/texinfo.tex	/^\\def\\croppageout#1{\\hoffset=0pt % make sure this d/
-\ctl	tex-src/texinfo.tex	/^\\def\\ctl{{\\circle\\char'013\\hskip -6pt}}% 6pt from /
-\ctr	tex-src/texinfo.tex	/^\\def\\ctr{{\\hskip 6pt\\circle\\char'010}}$/
-\ctrl	tex-src/texinfo.tex	/^\\def\\ctrl #1{{\\tt \\rawbackslash \\hat}#1}$/
-\defcodeindex	tex-src/texinfo.tex	/^\\def\\defcodeindex{\\parsearg\\newcodeindex}$/
-\defcv	tex-src/texinfo.tex	/^\\def\\defcv #1 {\\def\\defcvtype{#1}%$/
-\defcvarheader	tex-src/texinfo.tex	/^\\def\\defcvarheader #1#2#3{%$/
-\defcvx	tex-src/texinfo.tex	/^\\def\\defcvx #1 {\\errmessage{@defcvx in invalid con/
-\deffn	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
-\deffnheader	tex-src/texinfo.tex	/^\\def\\deffnheader #1#2#3{\\doind {fn}{\\code{#2}}%$/
-\deffnx	tex-src/texinfo.tex	/^\\def\\deffnx #1 {\\errmessage{@deffnx in invalid con/
-\defindex	tex-src/texinfo.tex	/^\\def\\defindex{\\parsearg\\newindex}$/
-\defivar	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
-\defivarheader	tex-src/texinfo.tex	/^\\def\\defivarheader #1#2#3{%$/
-\defivarx	tex-src/texinfo.tex	/^\\def\\defivarx #1 {\\errmessage{@defivarx in invalid/
-\defmac	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
-\defmacheader	tex-src/texinfo.tex	/^\\def\\defmacheader #1#2{\\doind {fn}{\\code{#1}}% Mak/
-\defmacx	tex-src/texinfo.tex	/^\\def\\defmacx #1 {\\errmessage{@defmacx in invalid c/
-\defmethod	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
-\defmethodheader	tex-src/texinfo.tex	/^\\def\\defmethodheader #1#2#3{%$/
-\defmethodx	tex-src/texinfo.tex	/^\\def\\defmethodx #1 {\\errmessage{@defmethodx in inv/
-\defmethparsebody	tex-src/texinfo.tex	/^\\def\\defmethparsebody #1#2#3#4 {\\begingroup\\inENV /
-\defname	tex-src/texinfo.tex	/^\\def\\defname #1#2{%$/
-\defop	tex-src/texinfo.tex	/^\\def\\defop #1 {\\def\\defoptype{#1}%$/
-\defopheader	tex-src/texinfo.tex	/^\\def\\defopheader #1#2#3{%$/
-\defopparsebody	tex-src/texinfo.tex	/^\\def\\defopparsebody #1#2#3#4#5 {\\begingroup\\inENV /
-\defopt	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
-\defoptheader	tex-src/texinfo.tex	/^\\def\\defoptheader #1#2{\\doind {vr}{\\code{#1}}% Mak/
-\defoptx	tex-src/texinfo.tex	/^\\def\\defoptx #1 {\\errmessage{@defoptx in invalid c/
-\defopvarparsebody	tex-src/texinfo.tex	/^\\def\\defopvarparsebody #1#2#3#4#5 {\\begingroup\\inE/
-\defopx	tex-src/texinfo.tex	/^\\def\\defopx #1 {\\errmessage{@defopx in invalid con/
-\defparsebody	tex-src/texinfo.tex	/^\\def\\defparsebody #1#2#3{\\begingroup\\inENV% Enviro/
-\defspec	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
-\defspecheader	tex-src/texinfo.tex	/^\\def\\defspecheader #1#2{\\doind {fn}{\\code{#1}}% Ma/
-\defspecx	tex-src/texinfo.tex	/^\\def\\defspecx #1 {\\errmessage{@defspecx in invalid/
-\deftp	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
-\deftpargs	tex-src/texinfo.tex	/^\\def\\deftpargs #1{\\bf \\defvarargs{#1}}$/
-\deftpheader	tex-src/texinfo.tex	/^\\def\\deftpheader #1#2#3{\\doind {tp}{\\code{#2}}%$/
-\deftpx	tex-src/texinfo.tex	/^\\def\\deftpx #1 {\\errmessage{@deftpx in invalid con/
-\deftypefn	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
-\deftypefnheader	tex-src/texinfo.tex	/^\\def\\deftypefnheader #1#2#3{\\deftypefnheaderx{#1}{/
-\deftypefnheaderx	tex-src/texinfo.tex	/^\\def\\deftypefnheaderx #1#2#3 #4\\relax{%$/
-\deftypefnx	tex-src/texinfo.tex	/^\\def\\deftypefnx #1 {\\errmessage{@deftypefnx in inv/
-\deftypefun	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
-\deftypefunargs	tex-src/texinfo.tex	/^\\def\\deftypefunargs #1{%$/
-\deftypefunheader	tex-src/texinfo.tex	/^\\def\\deftypefunheader #1#2{\\deftypefunheaderx{#1}#/
-\deftypefunheaderx	tex-src/texinfo.tex	/^\\def\\deftypefunheaderx #1#2 #3\\relax{%$/
-\deftypeunx	tex-src/texinfo.tex	/^\\def\\deftypeunx #1 {\\errmessage{@deftypeunx in inv/
-\deftypevar	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
-\deftypevarheader	tex-src/texinfo.tex	/^\\def\\deftypevarheader #1#2{%$/
-\deftypevarx	tex-src/texinfo.tex	/^\\def\\deftypevarx #1 {\\errmessage{@deftypevarx in i/
-\deftypevr	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
-\deftypevrheader	tex-src/texinfo.tex	/^\\def\\deftypevrheader #1#2#3{\\doind {vr}{\\code{#3}}/
-\deftypevrx	tex-src/texinfo.tex	/^\\def\\deftypevrx #1 {\\errmessage{@deftypevrx in inv/
-\defun	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
-\defunargs	tex-src/texinfo.tex	/^\\def\\defunargs #1{\\functionparens \\sl$/
-\defunheader	tex-src/texinfo.tex	/^\\def\\defunheader #1#2{\\doind {fn}{\\code{#1}}% Make/
-\defunx	tex-src/texinfo.tex	/^\\def\\defunx #1 {\\errmessage{@defunx in invalid con/
-\defvar	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
-\defvarargs	tex-src/texinfo.tex	/^\\def\\defvarargs #1{\\normalparens #1%$/
-\defvarheader	tex-src/texinfo.tex	/^\\def\\defvarheader #1#2{\\doind {vr}{\\code{#1}}% Mak/
-\defvarparsebody	tex-src/texinfo.tex	/^\\def\\defvarparsebody #1#2#3{\\begingroup\\inENV% Env/
-\defvarx	tex-src/texinfo.tex	/^\\def\\defvarx #1 {\\errmessage{@defvarx in invalid c/
-\defvr	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
-\defvrheader	tex-src/texinfo.tex	/^\\def\\defvrheader #1#2#3{\\doind {vr}{\\code{#2}}%$/
-\defvrparsebody	tex-src/texinfo.tex	/^\\def\\defvrparsebody #1#2#3#4 {\\begingroup\\inENV %$/
-\defvrx	tex-src/texinfo.tex	/^\\def\\defvrx #1 {\\errmessage{@defvrx in invalid con/
-\description	tex-src/texinfo.tex	/^\\def\\description{\\tablez{\\dontindex}{1}{}{}{}{}}$/
-\df	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
-\dfn	tex-src/texinfo.tex	/^\\def\\dfn##1{\\realbackslash dfn {##1}}$/
-\direntry	tex-src/texinfo.tex	/^\\def\\direntry{\\begingroup\\direntryxxx}$/
-\direntryxxx	tex-src/texinfo.tex	/^\\long\\def\\direntryxxx #1\\end direntry{\\endgroup\\ig/
-\display	tex-src/texinfo.tex	/^\\def\\display{\\begingroup\\inENV %This group ends at/
-\dmn	tex-src/texinfo.tex	/^\\def\\dmn#1{\\thinspace #1}$/
-\dobreak	tex-src/texinfo.tex	/^\\def\\dobreak#1#2{\\par\\ifdim\\lastskip<#1\\removelast/
-\dochapentry	tex-src/texinfo.tex	/^\\def\\dochapentry#1#2{%$/
-\docodeindex	tex-src/texinfo.tex	/^\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\si/
-\doind	tex-src/texinfo.tex	/^\\def\\doind #1#2{%$/
-\doindex	tex-src/texinfo.tex	/^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/
-\donoderef	tex-src/texinfo.tex	/^\\def\\donoderef{\\ifx\\lastnode\\relax\\else$/
-\dontindex	tex-src/texinfo.tex	/^\\def\\dontindex #1{}$/
-\dopageno	tex-src/texinfo.tex	/^\\def\\dopageno#1{{\\rm #1}}$/
-\doprintindex	tex-src/texinfo.tex	/^\\def\\doprintindex#1{%$/
-\dosecentry	tex-src/texinfo.tex	/^\\def\\dosecentry#1#2{%$/
-\dosetq	tex-src/texinfo.tex	/^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/
-\doshortpageno	tex-src/texinfo.tex	/^\\def\\doshortpageno#1{{\\rm #1}}$/
-\dosubind	tex-src/texinfo.tex	/^\\def\\dosubind #1#2#3{%$/
-\dosubsecentry	tex-src/texinfo.tex	/^\\def\\dosubsecentry#1#2{%$/
-\dosubsubsecentry	tex-src/texinfo.tex	/^\\def\\dosubsubsecentry#1#2{%$/
-\dots	tex-src/texinfo.tex	/^\\def\\dots{$\\ldots$}$/
-\dots	tex-src/texinfo.tex	/^\\def\\dots{\\realbackslash dots }%$/
-\dots	tex-src/texinfo.tex	/^\\def\\dots{\\realbackslash dots}$/
-\doublecolumnout	tex-src/texinfo.tex	/^\\def\\doublecolumnout{\\splittopskip=\\topskip \\split/
-\emph	tex-src/texinfo.tex	/^\\def\\emph##1{\\realbackslash emph {##1}}$/
-\end	tex-src/texinfo.tex	/^\\def\\end{\\parsearg\\endxxx}$/
-\enddoublecolumns	tex-src/texinfo.tex	/^\\def\\enddoublecolumns{\\output={\\balancecolumns}\\ej/
-\endxxx	tex-src/texinfo.tex	/^\\def\\endxxx #1{%$/
-\entry	tex-src/texinfo.tex	/^\\def\\entry #1#2{\\begingroup$/
-\enumerate	tex-src/texinfo.tex	/^\\def\\enumerate{\\parsearg\\enumeratezzz}$/
-\enumeratey	tex-src/texinfo.tex	/^\\def\\enumeratey #1 #2\\endenumeratey{%$/
-\enumeratezzz	tex-src/texinfo.tex	/^\\def\\enumeratezzz #1{\\enumeratey #1  \\endenumerate/
-\equiv	tex-src/texinfo.tex	/^\\def\\equiv{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/
-\equiv	tex-src/texinfo.tex	/^\\def\\equiv{\\realbackslash equiv}$/
-\error	tex-src/texinfo.tex	/^\\def\\error{\\leavevmode\\lower.7ex\\copy\\errorbox}$/
-\errorE	tex-src/texinfo.tex	/^\\def\\errorE#1{$/
-\evenfooting	tex-src/texinfo.tex	/^\\def\\evenfooting{\\parsearg\\evenfootingxxx}$/
-\evenheading	tex-src/texinfo.tex	/^\\def\\evenheading{\\parsearg\\evenheadingxxx}$/
-\everyfooting	tex-src/texinfo.tex	/^\\def\\everyfooting{\\parsearg\\everyfootingxxx}$/
-\everyheading	tex-src/texinfo.tex	/^\\def\\everyheading{\\parsearg\\everyheadingxxx}$/
-\ewbot	tex-src/texinfo.tex	/^\\def\\ewbot{\\vrule height0pt depth\\cornerthick widt/
-\ewtop	tex-src/texinfo.tex	/^\\def\\ewtop{\\vrule height\\cornerthick depth0pt widt/
-\exdent	tex-src/texinfo.tex	/^\\def\\exdent{\\parsearg\\exdentyyy}$/
-\exdentyyy	tex-src/texinfo.tex	/^\\def\\exdentyyy #1{{\\hfil\\break\\hbox{\\kern -\\exdent/
-\expansion	tex-src/texinfo.tex	/^\\def\\expansion{\\leavevmode\\raise.1ex\\hbox to 1em{\\/
-\expansion	tex-src/texinfo.tex	/^\\def\\expansion{\\realbackslash expansion}$/
-\file	tex-src/texinfo.tex	/^\\def\\file##1{\\realbackslash file {##1}}$/
-\file	tex-src/texinfo.tex	/^\\def\\file##1{\\realbackslash file {##1}}%$/
-\finalout	tex-src/texinfo.tex	/^\\def\\finalout{\\overfullrule=0pt}$/
-\findex	tex-src/texinfo.tex	/^\\def\\findex {\\fnindex}$/
-\finishtitlepage	tex-src/texinfo.tex	/^\\def\\finishtitlepage{%$/
-\flushcr	tex-src/texinfo.tex	/^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else /
-\flushleft	tex-src/texinfo.tex	/^\\def\\flushleft{%$/
-\flushright	tex-src/texinfo.tex	/^\\def\\flushright{%$/
-\fnitemindex	tex-src/texinfo.tex	/^\\def\\fnitemindex #1{\\doind {fn}{\\code{#1}}}%$/
-\format	tex-src/texinfo.tex	/^\\def\\format{\\begingroup\\inENV %This group ends at /
-\frenchspacing	tex-src/texinfo.tex	/^\\def\\frenchspacing{\\sfcode46=1000 \\sfcode63=1000 \\/
-\ftable	tex-src/texinfo.tex	/^\\def\\ftable{\\begingroup\\inENV\\obeylines\\obeyspaces/
-\gloggingall	tex-src/texinfo.tex	/^\\def\\gloggingall{\\begingroup \\globaldefs = 1 \\logg/
-\group	tex-src/texinfo.tex	/^\\def\\group{\\begingroup$/
-\gtr	tex-src/texinfo.tex	/^\\def\\gtr{\\realbackslash gtr}$/
-\gtr	tex-src/texinfo.tex	/^\\def\\gtr{\\realbackslash gtr}%$/
-\hat	tex-src/texinfo.tex	/^\\def\\hat{\\realbackslash hat}$/
-\hat	tex-src/texinfo.tex	/^\\def\\hat{\\realbackslash hat}%$/
-\heading	tex-src/texinfo.tex	/^\\def\\heading{\\parsearg\\secheadingi}$/
-\headings	tex-src/texinfo.tex	/^\\def\\headings #1 {\\csname HEADINGS#1\\endcsname}$/
-\i	tex-src/texinfo.tex	/^\\def\\i##1{\\realbackslash i {##1}}$/
-\i	tex-src/texinfo.tex	/^\\def\\i##1{\\realbackslash i {##1}}%$/
-\ifclear	tex-src/texinfo.tex	/^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/
-\ifclearfail	tex-src/texinfo.tex	/^\\def\\ifclearfail{\\begingroup\\ignoresections\\ifclea/
-\ifclearfailxxx	tex-src/texinfo.tex	/^\\long\\def\\ifclearfailxxx #1\\end ifclear{\\endgroup\\/
-\ifclearxxx	tex-src/texinfo.tex	/^\\def\\ifclearxxx #1{\\endgroup$/
-\ifinfo	tex-src/texinfo.tex	/^\\def\\ifinfo{\\begingroup\\ignoresections\\ifinfoxxx}$/
-\ifinfoxxx	tex-src/texinfo.tex	/^\\long\\def\\ifinfoxxx #1\\end ifinfo{\\endgroup\\ignore/
-\ifset	tex-src/texinfo.tex	/^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/
-\ifsetfail	tex-src/texinfo.tex	/^\\def\\ifsetfail{\\begingroup\\ignoresections\\ifsetfai/
-\ifsetfailxxx	tex-src/texinfo.tex	/^\\long\\def\\ifsetfailxxx #1\\end ifset{\\endgroup\\igno/
-\ifsetxxx	tex-src/texinfo.tex	/^\\def\\ifsetxxx #1{\\endgroup$/
-\iftex	tex-src/texinfo.tex	/^\\def\\iftex{}$/
-\ifusingtt	tex-src/texinfo.tex	/^\\def\\ifusingtt#1#2{\\ifdim \\fontdimen3\\the\\font=0pt/
-\ignore	tex-src/texinfo.tex	/^\\def\\ignore{\\begingroup\\ignoresections$/
-\ignoresections	tex-src/texinfo.tex	/^\\def\\ignoresections{%$/
-\ignorexxx	tex-src/texinfo.tex	/^\\long\\def\\ignorexxx #1\\end ignore{\\endgroup\\ignore/
-\ii	tex-src/texinfo.tex	/^\\def\\ii#1{{\\it #1}}		% italic font$/
-\inENV	tex-src/texinfo.tex	/^\\newif\\ifENV \\ENVfalse \\def\\inENV{\\ifENV\\relax\\els/
-\include	tex-src/texinfo.tex	/^\\def\\include{\\parsearg\\includezzz}$/
-\includezzz	tex-src/texinfo.tex	/^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/
-\indexbackslash	tex-src/texinfo.tex	/^  \\def\\indexbackslash{\\rawbackslashxx}$/
-\indexdotfill	tex-src/texinfo.tex	/^\\def\\indexdotfill{\\cleaders$/
-\indexdummies	tex-src/texinfo.tex	/^\\def\\indexdummies{%$/
-\indexdummydots	tex-src/texinfo.tex	/^\\def\\indexdummydots{...}$/
-\indexdummyfont	tex-src/texinfo.tex	/^\\def\\indexdummyfont#1{#1}$/
-\indexdummytex	tex-src/texinfo.tex	/^\\def\\indexdummytex{TeX}$/
-\indexfonts	tex-src/texinfo.tex	/^\\def\\indexfonts{%$/
-\indexnofonts	tex-src/texinfo.tex	/^\\def\\indexnofonts{%$/
-\infoappendix	tex-src/texinfo.tex	/^\\def\\infoappendix{\\parsearg\\appendixzzz}$/
-\infoappendixsec	tex-src/texinfo.tex	/^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/
-\infoappendixsubsec	tex-src/texinfo.tex	/^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/
-\infoappendixsubsubsec	tex-src/texinfo.tex	/^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/
-\infochapter	tex-src/texinfo.tex	/^\\def\\infochapter{\\parsearg\\chapterzzz}$/
-\inforef	tex-src/texinfo.tex	/^\\def\\inforef #1{\\inforefzzz #1,,,,**}$/
-\inforefzzz	tex-src/texinfo.tex	/^\\def\\inforefzzz #1,#2,#3,#4**{See Info file \\file{/
-\infosection	tex-src/texinfo.tex	/^\\def\\infosection{\\parsearg\\sectionzzz}$/
-\infosubsection	tex-src/texinfo.tex	/^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/
-\infosubsubsection	tex-src/texinfo.tex	/^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/
-\infotop	tex-src/texinfo.tex	/^\\def\\infotop{\\parsearg\\unnumberedzzz}$/
-\infounnumbered	tex-src/texinfo.tex	/^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/
-\infounnumberedsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsec{\\parsearg\\unnumberedseczzz}/
-\infounnumberedsubsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsubsec{\\parsearg\\unnumberedsubs/
-\infounnumberedsubsubsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsubsubsec{\\parsearg\\unnumbereds/
-\initial	tex-src/texinfo.tex	/^\\def\\initial #1{%$/
-\internalBitem	tex-src/texinfo.tex	/^\\def\\internalBitem{\\smallbreak \\parsearg\\itemzzz}$/
-\internalBitemx	tex-src/texinfo.tex	/^\\def\\internalBitemx{\\par \\parsearg\\itemzzz}$/
-\internalBkitem	tex-src/texinfo.tex	/^\\def\\internalBkitem{\\smallbreak \\parsearg\\kitemzzz/
-\internalBkitemx	tex-src/texinfo.tex	/^\\def\\internalBkitemx{\\par \\parsearg\\kitemzzz}$/
-\internalBxitem	tex-src/texinfo.tex	/^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/
-\internalBxitemx	tex-src/texinfo.tex	/^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/
-\internalsetq	tex-src/texinfo.tex	/^\\def\\internalsetq #1#2{'xrdef {#1}{\\csname #2\\endc/
-\item	tex-src/texinfo.tex	/^\\def\\item{\\errmessage{@item while not in a table}}/
-\itemcontents	tex-src/texinfo.tex	/^\\def\\itemcontents{#1}%$/
-\itemfont	tex-src/texinfo.tex	/^\\def\\itemfont{#2}%$/
-\itemize	tex-src/texinfo.tex	/^\\def\\itemize{\\parsearg\\itemizezzz}$/
-\itemizeitem	tex-src/texinfo.tex	/^\\def\\itemizeitem{%$/
-\itemizey	tex-src/texinfo.tex	/^\\def\\itemizey #1#2{%$/
-\itemizezzz	tex-src/texinfo.tex	/^\\def\\itemizezzz #1{%$/
-\itemx	tex-src/texinfo.tex	/^\\def\\itemx{\\errmessage{@itemx while not in a table/
-\itemzzz	tex-src/texinfo.tex	/^\\def\\itemzzz #1{\\begingroup %$/
-\kbd	tex-src/texinfo.tex	/^\\def\\kbd##1{\\realbackslash kbd {##1}}$/
-\kbd	tex-src/texinfo.tex	/^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/
-\kbd	tex-src/texinfo.tex	/^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/
-\kbdfoo	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
-\key	tex-src/texinfo.tex	/^\\def\\key #1{{\\tt \\exhyphenpenalty=10000\\uppercase{/
-\key	tex-src/texinfo.tex	/^\\def\\key##1{\\realbackslash key {##1}}$/
-\key	tex-src/texinfo.tex	/^\\def\\key##1{\\realbackslash key {##1}}%$/
-\kindex	tex-src/texinfo.tex	/^\\def\\kindex {\\kyindex}$/
-\kitem	tex-src/texinfo.tex	/^\\def\\kitem{\\errmessage{@kitem while not in a table/
-\kitemx	tex-src/texinfo.tex	/^\\def\\kitemx{\\errmessage{@kitemx while not in a tab/
-\kitemzzz	tex-src/texinfo.tex	/^\\def\\kitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/
-\l	tex-src/texinfo.tex	/^\\def\\l#1{{\\li #1}\\null}		% $/
-\labelspace	tex-src/texinfo.tex	/^\\def\\labelspace{\\hskip1em \\relax}$/
-\lbrb	tex-src/texinfo.tex	/^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/
-\less	tex-src/texinfo.tex	/^\\def\\less{\\realbackslash less}$/
-\less	tex-src/texinfo.tex	/^\\def\\less{\\realbackslash less}%$/
-\linenumber	tex-src/texinfo.tex	/^  \\def\\linenumber{\\the\\inputlineno:\\space}$/
-\lisp	tex-src/texinfo.tex	/^\\def\\lisp{\\aboveenvbreak$/
-\loggingall	tex-src/texinfo.tex	/^\\def\\loggingall{\\tracingcommands2 \\tracingstats2 $/
-\losespace	tex-src/texinfo.tex	/^\\def\\losespace #1{#1}$/
-\lowercaseenumerate	tex-src/texinfo.tex	/^\\def\\lowercaseenumerate{%$/
-\lvvmode	tex-src/texinfo.tex	/^\\def\\lvvmode{\\vbox to 0pt{}}$/
-\majorheading	tex-src/texinfo.tex	/^\\def\\majorheading{\\parsearg\\majorheadingzzz}$/
-\majorheadingzzz	tex-src/texinfo.tex	/^\\def\\majorheadingzzz #1{%$/
-\math	tex-src/texinfo.tex	/^\\def\\math#1{\\implicitmath #1\\implicitmath}$/
-\menu	tex-src/texinfo.tex	/^\\long\\def\\menu #1\\end menu{}$/
-\minus	tex-src/texinfo.tex	/^\\def\\minus{$-$}$/
-\mylbrace	tex-src/texinfo.tex	/^\\def\\mylbrace {{\\tt \\char '173}}$/
-\myrbrace	tex-src/texinfo.tex	/^\\def\\myrbrace {{\\tt \\char '175}}$/
-\need	tex-src/texinfo.tex	/^\\def\\need{\\parsearg\\needx}$/
-\needx	tex-src/texinfo.tex	/^\\def\\needx#1{%$/
-\newcodeindex	tex-src/texinfo.tex	/^\\def\\newcodeindex #1{$/
-\newindex	tex-src/texinfo.tex	/^\\def\\newindex #1{$/
-\next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
-\nm	tex-src/testenv.tex	/^\\newcommand{\\nm}[2]{\\nomenclature{#1}{#2}}$/
-\node	tex-src/texinfo.tex	/^\\def\\node{\\ENVcheck\\parsearg\\nodezzz}$/
-\nodexxx[	tex-src/texinfo.tex	/^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/
-\nodezzz	tex-src/texinfo.tex	/^\\def\\nodezzz#1{\\nodexxx [#1,]}$/
-\nofillexdent	tex-src/texinfo.tex	/^\\def\\nofillexdent{\\parsearg\\nofillexdentyyy}$/
-\nofillexdentyyy	tex-src/texinfo.tex	/^\\def\\nofillexdentyyy #1{{\\advance \\leftskip by -\\e/
-\normalbackslash	tex-src/texinfo.tex	/^\\def\\normalbackslash{{\\tt\\rawbackslashxx}}$/
-\normalcaret	tex-src/texinfo.tex	/^\\def\\normalcaret{^}$/
-\normaldoublequote	tex-src/texinfo.tex	/^\\def\\normaldoublequote{"}$/
-\normalgreater	tex-src/texinfo.tex	/^\\def\\normalgreater{>}$/
-\normalless	tex-src/texinfo.tex	/^\\def\\normalless{<}$/
-\normalplus	tex-src/texinfo.tex	/^\\def\\normalplus{+}$/
-\normaltilde	tex-src/texinfo.tex	/^\\def\\normaltilde{~}$/
-\normalunderscore	tex-src/texinfo.tex	/^\\def\\normalunderscore{_}$/
-\normalverticalbar	tex-src/texinfo.tex	/^\\def\\normalverticalbar{|}$/
-\nsbot	tex-src/texinfo.tex	/^\\def\\nsbot{\\vbox$/
-\nstop	tex-src/texinfo.tex	/^\\def\\nstop{\\vbox$/
-\numberedsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsec{\\parsearg\\seczzz}$/
-\numberedsubsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsubsec{\\parsearg\\numberedsubsec/
-\numberedsubseczzz	tex-src/texinfo.tex	/^\\def\\numberedsubseczzz #1{\\seccheck{subsection}%$/
-\numberedsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsubsubsec{\\parsearg\\numberedsub/
-\numberedsubsubseczzz	tex-src/texinfo.tex	/^\\def\\numberedsubsubseczzz #1{\\seccheck{subsubsecti/
-\numericenumerate	tex-src/texinfo.tex	/^\\def\\numericenumerate{%$/
-\oddfooting	tex-src/texinfo.tex	/^\\def\\oddfooting{\\parsearg\\oddfootingxxx}$/
-\oddheading	tex-src/texinfo.tex	/^\\def\\oddheading{\\parsearg\\oddheadingxxx}$/
-\onepageout	tex-src/texinfo.tex	/^\\def\\onepageout#1{\\hoffset=\\normaloffset$/
-\opencontents	tex-src/texinfo.tex	/^\\def\\opencontents{\\openout \\contentsfile = \\jobnam/
-\openindices	tex-src/texinfo.tex	/^\\def\\openindices{%$/
-\opnr	tex-src/texinfo.tex	/^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} /
-\page	tex-src/texinfo.tex	/^   \\def\\page{%$/
-\page	tex-src/texinfo.tex	/^\\def\\page{\\par\\vfill\\supereject}$/
-\pagebody	tex-src/texinfo.tex	/^\\def\\pagebody#1{\\vbox to\\pageheight{\\boxmaxdepth=\\/
-\pagesofar	tex-src/texinfo.tex	/^\\def\\pagesofar{\\unvbox\\partialpage %$/
-\parsearg	tex-src/texinfo.tex	/^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/
-\parseargline	tex-src/texinfo.tex	/^\\def\\parseargline{\\begingroup \\obeylines \\parsearg/
-\parseargx	tex-src/texinfo.tex	/^\\def\\parseargx{%$/
-\pindex	tex-src/texinfo.tex	/^\\def\\pindex {\\pgindex}$/
-\plainsecheading	tex-src/texinfo.tex	/^\\def\\plainsecheading #1{\\secheadingi {#1}}$/
-\point	tex-src/texinfo.tex	/^\\def\\point{$\\star$}$/
-\primary	tex-src/texinfo.tex	/^\\def\\primary #1{\\line{#1\\hfil}}$/
-\print	tex-src/texinfo.tex	/^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/
-\print	tex-src/texinfo.tex	/^\\def\\print{\\realbackslash print}$/
-\printedmanual	tex-src/texinfo.tex	/^\\def\\printedmanual{\\ignorespaces #5}%$/
-\printedmanual	tex-src/texinfo.tex	/^section ``\\printednodename'' in \\cite{\\printedmanu/
-\printednodename	tex-src/texinfo.tex	/^\\def\\printednodename{\\ignorespaces #1}%$/
-\printednodename	tex-src/texinfo.tex	/^\\def\\printednodename{\\ignorespaces #3}%$/
-\printindex	tex-src/texinfo.tex	/^\\def\\printindex{\\parsearg\\doprintindex}$/
-\pxref	tex-src/texinfo.tex	/^\\def\\pxref#1{see \\xrefX[#1,,,,,,,]}$/
-\quotation	tex-src/texinfo.tex	/^\\def\\quotation{%$/
-\r	tex-src/texinfo.tex	/^\\def\\r##1{\\realbackslash r {##1}}$/
-\r	tex-src/texinfo.tex	/^\\def\\r##1{\\realbackslash r {##1}}%$/
-\r	tex-src/texinfo.tex	/^\\def\\r#1{{\\rm #1}}		% roman font$/
-\rawbackslashxx	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/
-\rawbackslashxx	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}%$/
-\readauxfile	tex-src/texinfo.tex	/^\\def\\readauxfile{%$/
-\ref	tex-src/texinfo.tex	/^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/
-\refx	tex-src/texinfo.tex	/^\\def\\refx#1#2{%$/
-\resetmathfonts	tex-src/texinfo.tex	/^\\def\\resetmathfonts{%$/
-\result	tex-src/texinfo.tex	/^\\def\\result{\\leavevmode\\raise.15ex\\hbox to 1em{\\hf/
-\result	tex-src/texinfo.tex	/^\\def\\result{\\realbackslash result}$/
-\rm	tex-src/texinfo.tex	/^\\def\\rm{\\realbackslash rm }%$/
-\samp	tex-src/texinfo.tex	/^\\def\\samp #1{`\\tclose{#1}'\\null}$/
-\samp	tex-src/texinfo.tex	/^\\def\\samp##1{\\realbackslash samp {##1}}$/
-\samp	tex-src/texinfo.tex	/^\\def\\samp##1{\\realbackslash samp {##1}}%$/
-\sc	tex-src/texinfo.tex	/^\\def\\sc#1{{\\smallcaps#1}}	% smallcaps font$/
-\seccheck	tex-src/texinfo.tex	/^\\def\\seccheck#1{\\if \\pageno<0 %$/
-\secentry	tex-src/texinfo.tex	/^      \\def\\secentry ##1##2##3##4{}$/
-\secentry	tex-src/texinfo.tex	/^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/
-\secentryfonts	tex-src/texinfo.tex	/^\\def\\secentryfonts{\\textfonts}$/
-\secfonts	tex-src/texinfo.tex	/^\\def\\secfonts{%$/
-\secheading	tex-src/texinfo.tex	/^\\def\\secheading #1#2#3{\\secheadingi {#2.#3\\enspace/
-\secheadingbreak	tex-src/texinfo.tex	/^\\def\\secheadingbreak{\\dobreak \\secheadingskip {-10/
-\secheadingi	tex-src/texinfo.tex	/^\\def\\secheadingi #1{{\\advance \\secheadingskip by \\/
-\secondary	tex-src/texinfo.tex	/^\\def\\secondary #1#2{$/
-\seczzz	tex-src/texinfo.tex	/^\\def\\seczzz #1{\\seccheck{section}%$/
-\set	tex-src/texinfo.tex	/^\\def\\set{\\parsearg\\setxxx}$/
-\setchapternewpage	tex-src/texinfo.tex	/^\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcs/
-\setchapterstyle	tex-src/texinfo.tex	/^\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname/
-\setdeffont	tex-src/texinfo.tex	/^\\def\\setdeffont #1 {\\csname DEF#1\\endcsname}$/
-\setfilename	tex-src/texinfo.tex	/^\\def\\setfilename{%$/
-\setref	tex-src/texinfo.tex	/^\\def\\setref#1{%$/
-\settitle	tex-src/texinfo.tex	/^\\def\\settitle{\\parsearg\\settitlezzz}$/
-\settitlezzz	tex-src/texinfo.tex	/^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/
-\setxxx	tex-src/texinfo.tex	/^\\def\\setxxx #1{$/
-\sf	tex-src/texinfo.tex	/^\\def\\sf{\\fam=\\sffam \\tensf}$/
-\sf	tex-src/texinfo.tex	/^\\def\\sf{\\realbackslash sf}%$/
-\shortchapentry	tex-src/texinfo.tex	/^\\def\\shortchapentry#1#2#3{%$/
-\shortunnumberedentry	tex-src/texinfo.tex	/^\\def\\shortunnumberedentry#1#2{%$/
-\singlecodeindexer	tex-src/texinfo.tex	/^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/
-\singleindexer	tex-src/texinfo.tex	/^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/
-\singlespace	tex-src/texinfo.tex	/^\\def\\singlespace{%$/
-\sl	tex-src/texinfo.tex	/^\\def\\sl{\\realbackslash sl }%$/
-\smallbook	tex-src/texinfo.tex	/^\\def\\smallbook{$/
-\smalllispx	tex-src/texinfo.tex	/^\\def\\smalllispx{\\aboveenvbreak\\begingroup\\inENV$/
-\smartitalic	tex-src/texinfo.tex	/^\\def\\smartitalic#1{{\\sl #1}\\futurelet\\next\\smartit/
-\smartitalicx	tex-src/texinfo.tex	/^\\def\\smartitalicx{\\ifx\\next,\\else\\ifx\\next-\\else\\i/
-\sp	tex-src/texinfo.tex	/^\\def\\sp{\\parsearg\\spxxx}$/
-\splitoff	tex-src/texinfo.tex	/^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/
-\spxxx	tex-src/texinfo.tex	/^\\def\\spxxx #1{\\par \\vskip #1\\baselineskip}$/
-\startcontents	tex-src/texinfo.tex	/^\\def\\startcontents#1{%$/
-\startenumeration	tex-src/texinfo.tex	/^\\def\\startenumeration#1{%$/
-\subheading	tex-src/texinfo.tex	/^\\def\\subheading{\\parsearg\\subsecheadingi}$/
-\subsecentry	tex-src/texinfo.tex	/^      \\def\\subsecentry ##1##2##3##4##5{}$/
-\subsecentry	tex-src/texinfo.tex	/^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/
-\subsecfonts	tex-src/texinfo.tex	/^\\def\\subsecfonts{%$/
-\subsecheading	tex-src/texinfo.tex	/^\\def\\subsecheading #1#2#3#4{\\subsecheadingi {#2.#3/
-\subsecheadingbreak	tex-src/texinfo.tex	/^\\def\\subsecheadingbreak{\\dobreak \\subsecheadingski/
-\subsecheadingi	tex-src/texinfo.tex	/^\\def\\subsecheadingi #1{{\\advance \\subsecheadingski/
-\subsubheading	tex-src/texinfo.tex	/^\\def\\subsubheading{\\parsearg\\subsubsecheadingi}$/
-\subsubsecentry	tex-src/texinfo.tex	/^      \\def\\subsubsecentry ##1##2##3##4##5##6{}$/
-\subsubsecentry	tex-src/texinfo.tex	/^\\def\\subsubsecentry#1#2#3#4#5#6{%$/
-\subsubsecfonts	tex-src/texinfo.tex	/^\\def\\subsubsecfonts{\\subsecfonts} % Maybe this sho/
-\subsubsecheading	tex-src/texinfo.tex	/^\\def\\subsubsecheading #1#2#3#4#5{\\subsubsecheading/
-\subsubsecheadingi	tex-src/texinfo.tex	/^\\def\\subsubsecheadingi #1{{\\advance \\subsecheading/
-\subtitle	tex-src/texinfo.tex	/^   \\def\\subtitle{\\parsearg\\subtitlezzz}%$/
-\subtitlefont	tex-src/texinfo.tex	/^   \\def\\subtitlefont{\\subtitlerm \\normalbaselinesk/
-\subtitlezzz	tex-src/texinfo.tex	/^   \\def\\subtitlezzz##1{{\\subtitlefont \\rightline{#/
-\summarycontents	tex-src/texinfo.tex	/^\\outer\\def\\summarycontents{%$/
-\supereject	tex-src/texinfo.tex	/^\\def\\supereject{\\par\\penalty -20000\\footnoteno =0 /
-\syncodeindex	tex-src/texinfo.tex	/^\\def\\syncodeindex #1 #2 {%$/
-\synindex	tex-src/texinfo.tex	/^\\def\\synindex #1 #2 {%$/
-\t	tex-src/texinfo.tex	/^\\def\\t##1{\\realbackslash r {##1}}%$/
-\t	tex-src/texinfo.tex	/^\\def\\t#1{{\\tt \\exhyphenpenalty=10000\\rawbackslash /
-\table	tex-src/texinfo.tex	/^\\def\\table{\\begingroup\\inENV\\obeylines\\obeyspaces\\/
-\tablez	tex-src/texinfo.tex	/^\\def\\tablez #1#2#3#4#5#6{%$/
-\tclose	tex-src/texinfo.tex	/^\\def\\tclose##1{\\realbackslash tclose {##1}}$/
-\tclose	tex-src/texinfo.tex	/^\\def\\tclose##1{\\realbackslash tclose {##1}}%$/
-\tclose	tex-src/texinfo.tex	/^\\def\\tclose#1{{\\rm \\tcloserm=\\fontdimen2\\font \\tt /
-\tex	tex-src/texinfo.tex	/^\\def\\tex{\\begingroup$/
-\texinfoversion	tex-src/texinfo.tex	/^\\def\\texinfoversion{2.73}$/
-\textfonts	tex-src/texinfo.tex	/^\\def\\textfonts{%$/
-\thearg	tex-src/texinfo.tex	/^  \\def\\thearg{#1}%$/
-\thearg	tex-src/texinfo.tex	/^  \\ifx\\thearg\\empty \\def\\thearg{1}\\fi$/
-\thischapter	tex-src/texinfo.tex	/^   \\unnumbchapmacro{#1}\\def\\thischapter{}%$/
-\thischapter	tex-src/texinfo.tex	/^\\def\\thischapter{} \\def\\thissection{}$/
-\thischaptername	tex-src/texinfo.tex	/^\\def\\thischaptername{No Chapter Title}$/
-\thisfile	tex-src/texinfo.tex	/^\\def\\thisfile{}$/
-\thistitle	tex-src/texinfo.tex	/^\\def\\thistitle{No Title}$/
-\tie	tex-src/texinfo.tex	/^\\def\\tie{\\penalty 10000\\ }     % Save plain tex de/
-\tindex	tex-src/texinfo.tex	/^\\def\\tindex {\\tpindex}$/
-\title	tex-src/texinfo.tex	/^   \\def\\title{\\parsearg\\titlezzz}%$/
-\titlefont	tex-src/texinfo.tex	/^\\def\\titlefont#1{{\\titlerm #1}}$/
-\titlepage	tex-src/texinfo.tex	/^\\def\\titlepage{\\begingroup \\parindent=0pt \\textfon/
-\titlezzz	tex-src/texinfo.tex	/^   \\def\\titlezzz##1{\\leftline{\\titlefont{##1}}$/
-\today	tex-src/texinfo.tex	/^\\def\\today{\\number\\day\\space$/
-\top	tex-src/texinfo.tex	/^\\outer\\def\\top{\\parsearg\\unnumberedzzz}$/
-\tt	tex-src/texinfo.tex	/^\\def\\tt{\\realbackslash tt}$/
-\tt	tex-src/texinfo.tex	/^\\def\\tt{\\realbackslash tt}%$/
-\turnoffactive	tex-src/texinfo.tex	/^\\def\\turnoffactive{\\let"=\\normaldoublequote$/
-\unnchfopen	tex-src/texinfo.tex	/^\\def\\unnchfopen #1{%$/
-\unnchfplain	tex-src/texinfo.tex	/^\\def\\unnchfplain #1{%$/
-\unnumbchapentry	tex-src/texinfo.tex	/^\\def\\unnumbchapentry#1#2{\\dochapentry{#1}{#2}}$/
-\unnumbered	tex-src/texinfo.tex	/^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/
-\unnumberedsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsec{\\parsearg\\unnumberedseczz/
-\unnumberedseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedseczzz #1{\\seccheck{unnumberedsec}%/
-\unnumberedsubsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsubsec{\\parsearg\\unnumberedsu/
-\unnumberedsubseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedsubseczzz #1{\\seccheck{unnumberedsu/
-\unnumberedsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsubsubsec{\\parsearg\\unnumbere/
-\unnumberedsubsubseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedsubsubseczzz #1{\\seccheck{unnumbere/
-\unnumberedzzz	tex-src/texinfo.tex	/^\\def\\unnumberedzzz #1{\\seccheck{unnumbered}%$/
-\unnumbnoderef	tex-src/texinfo.tex	/^\\def\\unnumbnoderef{\\ifx\\lastnode\\relax\\else$/
-\unnumbsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsecentry ##1##2{}$/
-\unnumbsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsecentry#1#2{\\dosecentry{#1}{#2}}$/
-\unnumbsetref	tex-src/texinfo.tex	/^\\def\\unnumbsetref#1{%$/
-\unnumbsubsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsubsecentry ##1##2{}$/
-\unnumbsubsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsubsecentry#1#2{\\dosubsecentry{#1}{#2}}/
-\unnumbsubsubsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsubsubsecentry ##1##2{}$/
-\unnumbsubsubsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsubsubsecentry#1#2{\\dosubsubsecentry{#1/
-\uppercaseenumerate	tex-src/texinfo.tex	/^\\def\\uppercaseenumerate{%$/
-\var	tex-src/texinfo.tex	/^\\def\\var##1{\\realbackslash var {##1}}$/
-\var	tex-src/texinfo.tex	/^\\def\\var##1{\\realbackslash var {##1}}%$/
-\vindex	tex-src/texinfo.tex	/^\\def\\vindex {\\vrindex}$/
-\vritemindex	tex-src/texinfo.tex	/^\\def\\vritemindex #1{\\doind {vr}{\\code{#1}}}%$/
-\vtable	tex-src/texinfo.tex	/^\\def\\vtable{\\begingroup\\inENV\\obeylines\\obeyspaces/
-\w	tex-src/texinfo.tex	/^\\def\\w#1{\\leavevmode\\hbox{#1}}$/
-\w	tex-src/texinfo.tex	/^\\def\\w{\\realbackslash w }%$/
-\w	tex-src/texinfo.tex	/^\\def\\w{\\realbackslash w}$/
-\xitem	tex-src/texinfo.tex	/^\\def\\xitem{\\errmessage{@xitem while not in a table/
-\xitemx	tex-src/texinfo.tex	/^\\def\\xitemx{\\errmessage{@xitemx while not in a tab/
-\xitemzzz	tex-src/texinfo.tex	/^\\def\\xitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/
-\xkey	tex-src/texinfo.tex	/^\\def\\xkey{\\key}$/
-\xrdef	tex-src/texinfo.tex	/^\\def\\xrdef #1#2{$/
-\xref	tex-src/texinfo.tex	/^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/
-\xrefX[	tex-src/texinfo.tex	/^\\def\\xrefX[#1,#2,#3,#4,#5,#6]{\\begingroup%$/
+]	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
 ^	tex-src/texinfo.tex	/^\\def^{{\\tt \\hat}}$/
+^	tex-src/texinfo.tex	/^\\let^=\\normalcaret$/
+_	tex-src/texinfo.tex	/^\\def\\_{\\lvvmode \\kern.06em \\vbox{\\hrule width.3em /
+_	tex-src/texinfo.tex	/^\\def\\_{{\\realbackslash _}}%$/
 _	tex-src/texinfo.tex	/^\\def_{\\ifusingtt\\normalunderscore\\_}$/
+_	tex-src/texinfo.tex	/^\\let_=\\normalunderscore$/
 _GETOPT_H	c-src/getopt.h	19
 _GNU_SOURCE	c-src/etags.c	94
 _REGEX_H	c-src/emacs/src/regex.h	21
@@ -2264,6 +1790,7 @@ _realloc	c-src/emacs/src/gmalloc.c	/^_realloc (void *ptr, size_t size)$/
 _realloc_internal	c-src/emacs/src/gmalloc.c	/^_realloc_internal (void *ptr, size_t size)$/
 _realloc_internal_nolock	c-src/emacs/src/gmalloc.c	/^_realloc_internal_nolock (void *ptr, size_t size)$/
 `	ruby-src/test.rb	/^        def `(command)$/
+`	tex-src/texinfo.tex	/^\\def\\`{{`}}$/
 a	c-src/h.h	103
 a	c-src/h.h	40
 a	c.c	/^a ()$/
@@ -2299,6 +1826,7 @@ abbrevs_changed	c-src/abbrev.c	56
 abc	c-src/h.h	33
 abc	c-src/h.h	37
 abort-recursive-edit	c-src/emacs/src/keyboard.c	/^DEFUN ("abort-recursive-edit", Fabort_recursive_ed/
+aboveenvbreak	tex-src/texinfo.tex	/^\\def\\aboveenvbreak{{\\advance\\aboveenvskipamount by/
 abs/f	ada-src/etags-test-for.ada	/^   function "abs"   (Right : Complex) return Real'/
 absolute_dirname	c-src/etags.c	/^absolute_dirname (char *file, char *dir)$/
 absolute_filename	c-src/etags.c	/^absolute_filename (char *file, char *dir)$/
@@ -2347,6 +1875,8 @@ accu_warning	merc-src/accumulator.m	/^:- type accu_warning$/
 act	prol-src/natded.prolog	/^act(OutForm,OutSyn,Ws):-$/
 action	prol-src/natded.prolog	/^action(KeyVals):-$/
 active_maps	c-src/emacs/src/keyboard.c	/^active_maps (Lisp_Object first_event)$/
+activedoublequote	tex-src/texinfo.tex	/^\\def\\activedoublequote{{\\tt \\char '042}}$/
+activeparens	tex-src/texinfo.tex	/^\\def\\activeparens{%$/
 actout	prol-src/natded.prolog	/^actout('Text',Trees):-$/
 addArchs	objc-src/PackInsp.m	/^-(void)addArchs:(const char *)string$/
 addPOReader	php-src/lce_functions.php	/^      function addPOReader($d_name, &$por)$/
@@ -2359,6 +1889,8 @@ add_user_signal	c-src/emacs/src/keyboard.c	/^add_user_signal (int sig, const cha
 addnoise	html-src/algrthms.html	/^Adding Noise to the$/
 address	y-src/cccp.y	113
 adjust_point_for_property	c-src/emacs/src/keyboard.c	/^adjust_point_for_property (ptrdiff_t last_pt, bool/
+afourpaper	tex-src/texinfo.tex	/^\\def\\afourpaper{$/
+afterenvbreak	tex-src/texinfo.tex	/^\\def\\afterenvbreak{\\endgraf \\ifdim\\lastskip<\\above/
 agent	cp-src/clheir.hpp	75
 algorithms	html-src/algrthms.html	/^Description$/
 alias	c-src/emacs/src/lisp.h	688
@@ -2373,6 +1905,9 @@ alive	cp-src/conway.hpp	7
 all_kboards	c-src/emacs/src/keyboard.c	86
 allocate_kboard	c-src/emacs/src/keyboard.c	/^allocate_kboard (Lisp_Object type)$/
 allocated	c-src/emacs/src/regex.h	344
+alphaenumerate	tex-src/texinfo.tex	/^\\def\\alphaenumerate{\\enumerate{a}}$/
+ampnr	tex-src/texinfo.tex	/^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} /
+amprm	tex-src/texinfo.tex	/^\\gdef\\amprm#1 {{\\rm\\&#1}\\let(=\\oprm \\let)=\\clrm\\ }/
 an_extern_linkage	c-src/h.h	44
 an_extern_linkage	c-src/h.h	56
 an_extern_linkage_ptr	c-src/h.h	43
@@ -2389,8 +1924,27 @@ append_list	prol-src/natded.prolog	/^append_list([],[]).$/
 append_string	pas-src/common.pas	/^procedure append_string;(*($/
 append_tool_bar_item	c-src/emacs/src/keyboard.c	/^append_tool_bar_item (void)$/
 appendix	perl-src/htlmify-cystic	24
+appendix	tex-src/texinfo.tex	/^\\let\\appendix=\\relax$/
+appendix	tex-src/texinfo.tex	/^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/
 appendix_name	perl-src/htlmify-cystic	13
 appendix_toc	perl-src/htlmify-cystic	16
+appendixletter	tex-src/texinfo.tex	/^\\def\\appendixletter{\\char\\the\\appendixno}$/
+appendixnoderef	tex-src/texinfo.tex	/^\\def\\appendixnoderef{\\ifx\\lastnode\\relax\\else$/
+appendixsec	tex-src/texinfo.tex	/^\\let\\appendixsec=\\relax$/
+appendixsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/
+appendixsection	tex-src/texinfo.tex	/^\\let\\appendixsection=\\relax$/
+appendixsection	tex-src/texinfo.tex	/^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/
+appendixsectionzzz	tex-src/texinfo.tex	/^\\def\\appendixsectionzzz #1{\\seccheck{appendixsecti/
+appendixsetref	tex-src/texinfo.tex	/^\\def\\appendixsetref#1{%$/
+appendixsubsec	tex-src/texinfo.tex	/^\\let\\appendixsubsec=\\relax$/
+appendixsubsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsec{\\parsearg\\appendixsubsec/
+appendixsubsection	tex-src/texinfo.tex	/^\\let\\appendixsubsection=\\relax$/
+appendixsubseczzz	tex-src/texinfo.tex	/^\\def\\appendixsubseczzz #1{\\seccheck{appendixsubsec/
+appendixsubsubsec	tex-src/texinfo.tex	/^\\let\\appendixsubsubsec=\\relax$/
+appendixsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/
+appendixsubsubsection	tex-src/texinfo.tex	/^\\let\\appendixsubsubsection=\\relax$/
+appendixsubsubseczzz	tex-src/texinfo.tex	/^\\def\\appendixsubsubseczzz #1{\\seccheck{appendixsub/
+appendixzzz	tex-src/texinfo.tex	/^\\def\\appendixzzz #1{\\seccheck{appendix}%$/
 apply_modifiers	c-src/emacs/src/keyboard.c	/^apply_modifiers (int modifiers, Lisp_Object base)$/
 apply_modifiers_uncached	c-src/emacs/src/keyboard.c	/^apply_modifiers_uncached (int modifiers, char *bas/
 aref_addr	c-src/emacs/src/lisp.h	/^aref_addr (Lisp_Object array, ptrdiff_t idx)$/
@@ -2410,6 +1964,7 @@ argument	c-src/etags.c	253
 argvals	prol-src/natded.prolog	/^argvals([]) --> [].$/
 array	c.c	190
 ascii	c-src/emacs/src/lisp.h	1598
+asis	tex-src/texinfo.tex	/^\\def\\asis#1{#1}$/
 asort	cp-src/functions.cpp	/^void asort(int *a, int num){$/
 assemby-code-word	forth-src/test-forth.fth	/^code assemby-code-word ( dunno what it does )$/
 assert	c-src/etags.c	/^# define assert(x) ((void) 0)$/
@@ -2427,7 +1982,11 @@ atom	prol-src/natded.prolog	/^atom(X) --> [X], {atomic(X)}.$/
 atomval	prol-src/natded.prolog	/^atomval(X) --> atom(X).$/
 aultparindent	tex-src/texinfo.tex	/^\\newdimen\\defaultparindent \\defaultparindent = 15p/
 aultparindent	tex-src/texinfo.tex	/^\\parindent = \\defaultparindent$/
-aultparindent\hang\textindent	tex-src/texinfo.tex	/^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/
+aultparindent\hang	tex-src/texinfo.tex	/^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/
+author	tex-src/texinfo.tex	/^   \\def\\author{\\parsearg\\authorzzz}%$/
+authorfont	tex-src/texinfo.tex	/^   \\def\\authorfont{\\authorrm \\normalbaselineskip =/
+authorrm	tex-src/texinfo.tex	/^\\let\\authorrm = \\secrm$/
+authorzzz	tex-src/texinfo.tex	/^   \\def\\authorzzz##1{\\ifseenauthor\\else\\vskip 0pt /
 auto_help	c-src/etags.c	699
 b	c-src/h.h	103
 b	c-src/h.h	104
@@ -2439,7 +1998,14 @@ b	c.c	260
 b	c.c	262
 b	cp-src/c.C	132
 b	ruby-src/test1.ru	/^ def b()$/
-backslash=0	tex-src/texinfo.tex	/^\\let\\indexbackslash=0  %overridden during \\printin/
+b	tex-src/texinfo.tex	/^\\def\\b##1{\\realbackslash b {##1}}$/
+b	tex-src/texinfo.tex	/^\\def\\b##1{\\realbackslash b {##1}}%$/
+b	tex-src/texinfo.tex	/^\\def\\b#1{{\\bf #1}}$/
+b	tex-src/texinfo.tex	/^\\let\\b=\\indexdummyfont$/
+b	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
+backslash	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/
+backslash	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}%$/
+balancecolumns	tex-src/texinfo.tex	/^\\def\\balancecolumns{%$/
 bar	c-src/c.c	/^void bar() {while(0) {}}$/
 bar	c-src/h.h	19
 bar	c.c	143
@@ -2459,9 +2025,16 @@ bbbbbb	c-src/h.h	113
 been_warned	c-src/etags.c	222
 before_command_echo_length	c-src/emacs/src/keyboard.c	130
 before_command_key_count	c-src/emacs/src/keyboard.c	129
+begin	tex-src/texinfo.tex	/^\\outer\\def\\begin{\\parsearg\\beginxxx}$/
+begindoublecolumns	tex-src/texinfo.tex	/^\\def\\begindoublecolumns{\\begingroup$/
+beginxxx	tex-src/texinfo.tex	/^\\def\\beginxxx #1{%$/
 begtoken	c-src/etags.c	/^#define	begtoken(c)	(_btk[CHAR (c)]) \/* c can star/
 behaviour_info	erl-src/gs_dialog.erl	/^behaviour_info(callbacks) ->$/
-bf=cmbx10	tex-src/texinfo.tex	/^\\font\\defbf=cmbx10 scaled \\magstep1 %was 1314$/
+bf	tex-src/texinfo.tex	/^      \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/
+bf	tex-src/texinfo.tex	/^\\def\\bf{\\realbackslash bf }$/
+bf	tex-src/texinfo.tex	/^\\def\\bf{\\realbackslash bf }%$/
+bf	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
+bf	tex-src/texinfo.tex	/^\\font\\defbf=cmbx10 scaled \\magstep1 %was 1314$/
 bind	pyt-src/server.py	/^    def bind(self, key, action):$/
 bind_polling_period	c-src/emacs/src/keyboard.c	/^bind_polling_period (int n)$/
 bits_word	c-src/emacs/src/lisp.h	123
@@ -2477,6 +2050,7 @@ bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by -\\defbodyindent$/
 bodyindent	tex-src/texinfo.tex	/^\\advance\\leftskip by \\defbodyindent \\advance \\righ/
 bodyindent	tex-src/texinfo.tex	/^\\exdentamount=\\defbodyindent$/
 bodyindent	tex-src/texinfo.tex	/^\\newskip\\defbodyindent \\defbodyindent=.4in$/
+boldbrax	tex-src/texinfo.tex	/^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/
 bool	c.c	222
 bool	merc-src/accumulator.m	/^:- import_module bool.$/
 bool_header_size	c-src/emacs/src/lisp.h	1472
@@ -2489,6 +2063,7 @@ bool_vector_size	c-src/emacs/src/lisp.h	/^bool_vector_size (Lisp_Object a)$/
 bool_vector_uchar_data	c-src/emacs/src/lisp.h	/^bool_vector_uchar_data (Lisp_Object a)$/
 bool_vector_words	c-src/emacs/src/lisp.h	/^bool_vector_words (EMACS_INT size)$/
 boolvar	c-src/emacs/src/lisp.h	2287
+br	tex-src/texinfo.tex	/^\\let\\br = \\par$/
 bracelev	c-src/etags.c	2520
 bsp_DevId	c-src/h.h	25
 bt	c-src/emacs/src/lisp.h	2988
@@ -2502,10 +2077,13 @@ build_pure_c_string	c-src/emacs/src/lisp.h	/^build_pure_c_string (const char *st
 build_string	c-src/emacs/src/lisp.h	/^build_string (const char *str)$/
 buildact	prol-src/natded.prolog	/^buildact([SynIn],Right,RightPlus1):-$/
 builtin_lisp_symbol	c-src/emacs/src/lisp.h	/^builtin_lisp_symbol (int index)$/
+bullet	tex-src/texinfo.tex	/^\\def\\bullet{$\\ptexbullet$}$/
+bullet	tex-src/texinfo.tex	/^\\let\\bullet=\\ptexbullet$/
 burst	c-src/h.h	28
 busy	c-src/emacs/src/gmalloc.c	158
 button_down_location	c-src/emacs/src/keyboard.c	5210
 button_down_time	c-src/emacs/src/keyboard.c	5218
+bye	tex-src/texinfo.tex	/^\\outer\\def\\bye{\\pagealignmacro\\tracingstats=1\\ptex/
 byte_stack	c-src/emacs/src/lisp.h	3049
 bytecode_dest	c-src/emacs/src/lisp.h	3037
 bytecode_top	c-src/emacs/src/lisp.h	3036
@@ -2516,6 +2094,8 @@ bytes_used	c-src/emacs/src/gmalloc.c	312
 c	c-src/h.h	/^#define c() d$/
 c	c-src/h.h	106
 c	c.c	180
+c	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
+c	tex-src/texinfo.tex	/^\\let\\c=\\comment$/
 c_ext	c-src/etags.c	2271
 caccacacca	c.c	/^caccacacca (a,b,c,d,e,f,g)$/
 cacheLRUEntry_s	c.c	172
@@ -2528,21 +2108,47 @@ calloc	c-src/emacs/src/gmalloc.c	70
 can_be_null	c-src/emacs/src/regex.h	370
 cancel_echoing	c-src/emacs/src/keyboard.c	/^cancel_echoing (void)$/
 canonicalize_filename	c-src/etags.c	/^canonicalize_filename (register char *fn)$/
+capsenumerate	tex-src/texinfo.tex	/^\\def\\capsenumerate{\\enumerate{A}}$/
+cartbot	tex-src/texinfo.tex	/^\\def\\cartbot{\\hbox to \\cartouter{\\hskip\\lskip$/
+cartouche	tex-src/texinfo.tex	/^\\long\\def\\cartouche{%$/
+carttop	tex-src/texinfo.tex	/^\\def\\carttop{\\hbox to \\cartouter{\\hskip\\lskip$/
 case_Lisp_Int	c-src/emacs/src/lisp.h	438
 cat	c-src/h.h	81
 cat	cp-src/c.C	126
 cat	cp-src/c.C	130
 cat	prol-src/natded.prolog	/^cat(A, Alpha@Beta, Ass3, Qs3, tree(fe,A:Alpha@Beta/
 cat_atoms	prol-src/natded.prolog	/^cat_atoms(A1,A2,A3):-$/
+cbl	tex-src/texinfo.tex	/^\\def\\cbl{{\\circle\\char'012\\hskip -6pt}}$/
+cbr	tex-src/texinfo.tex	/^\\def\\cbr{{\\hskip 6pt\\circle\\char'011}}$/
 cccccccccc	c-src/h.h	115
 cdr	c-src/emacs/src/lisp.h	1159
 cell	y-src/parse.y	279
+center	tex-src/texinfo.tex	/^\\def\\center{\\parsearg\\centerzzz}$/
+centerzzz	tex-src/texinfo.tex	/^\\def\\centerzzz #1{{\\advance\\hsize by -\\leftskip$/
 cgrep	html-src/software.html	/^cgrep$/
 chain	c-src/emacs/src/lisp.h	1162
 chain	c-src/emacs/src/lisp.h	2206
 chain	c-src/emacs/src/lisp.h	2396
 chain_subst	merc-src/accumulator.m	/^:- func chain_subst(accu_subst, accu_subst) = accu/
 chain_subst_2	merc-src/accumulator.m	/^:- pred chain_subst_2(list(A)::in, map(A, B)::in, /
+chapbf	tex-src/texinfo.tex	/^\\let\\chapbf=\\chaprm$/
+chapbreak	tex-src/texinfo.tex	/^\\def\\chapbreak{\\dobreak \\chapheadingskip {-4000}}$/
+chapentry	tex-src/texinfo.tex	/^      \\let\\chapentry = \\shortchapentry$/
+chapentry	tex-src/texinfo.tex	/^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/
+chapentryfonts	tex-src/texinfo.tex	/^\\def\\chapentryfonts{\\secfonts \\rm}$/
+chapfonts	tex-src/texinfo.tex	/^\\def\\chapfonts{%$/
+chapheading	tex-src/texinfo.tex	/^\\def\\chapheading{\\parsearg\\chapheadingzzz}$/
+chapheadingzzz	tex-src/texinfo.tex	/^\\def\\chapheadingzzz #1{\\chapbreak %$/
+chapmacro	tex-src/texinfo.tex	/^\\global\\let\\chapmacro=\\chfopen$/
+chapmacro	tex-src/texinfo.tex	/^\\global\\let\\chapmacro=\\chfplain$/
+chapoddpage	tex-src/texinfo.tex	/^\\def\\chapoddpage{\\chappager \\ifodd\\pageno \\else \\h/
+chappager	tex-src/texinfo.tex	/^\\def\\chappager{\\par\\vfill\\supereject}$/
+chapter	tex-src/texinfo.tex	/^\\let\\chapter=\\relax$/
+chapter	tex-src/texinfo.tex	/^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/
+chapternofonts	tex-src/texinfo.tex	/^\\def\\chapternofonts{%$/
+chapterzzz	tex-src/texinfo.tex	/^\\def\\chapterzzz #1{\\seccheck{chapter}%$/
+char	tex-src/texinfo.tex	/^\\def\\char{\\realbackslash char}$/
+char	tex-src/texinfo.tex	/^\\def\\char{\\realbackslash char}%$/
 char_bits	c-src/emacs/src/lisp.h	2443
 char_table_specials	c-src/emacs/src/lisp.h	1692
 charpos	c-src/emacs/src/lisp.h	2011
@@ -2553,14 +2159,24 @@ check_cons_list	c-src/emacs/src/lisp.h	/^#  define check_cons_list() lisp_h_chec
 checker	make-src/Makefile	/^checker:$/
 checkhdr	c-src/emacs/src/gmalloc.c	/^checkhdr (const struct hdr *hdr)$/
 checkiso	html-src/software.html	/^checkiso$/
+chfopen	tex-src/texinfo.tex	/^\\def\\chfopen #1#2{\\chapoddpage {\\chapfonts$/
+chfplain	tex-src/texinfo.tex	/^\\def\\chfplain #1#2{%$/
 childDidExit	objc-src/Subprocess.m	/^- childDidExit$/
 chunks_free	c-src/emacs/src/gmalloc.c	313
 chunks_used	c-src/emacs/src/gmalloc.c	311
+cindex	tex-src/texinfo.tex	/^\\def\\cindex {\\cpindex}$/
+cindexsub	tex-src/texinfo.tex	/^\\def\\cindexsub {\\begingroup\\obeylines\\cindexsub}$/
+cindexsub	tex-src/texinfo.tex	/^\\gdef\\cindexsub "#1" #2^^M{\\endgroup %$/
+cite	tex-src/texinfo.tex	/^\\def\\cite##1{\\realbackslash cite {##1}}$/
+cite	tex-src/texinfo.tex	/^\\def\\cite##1{\\realbackslash cite {##1}}%$/
+cite	tex-src/texinfo.tex	/^\\let\\cite=\\indexdummyfont$/
+cite	tex-src/texinfo.tex	/^\\let\\cite=\\smartitalic$/
 cjava	c-src/etags.c	2936
 class_method	ruby-src/test.rb	/^        def ClassExample.class_method$/
 classifyLine	php-src/lce_functions.php	/^      function classifyLine($line)$/
 clean	make-src/Makefile	/^clean:$/
 clear	cp-src/conway.hpp	/^    void clear(void) { alive = 0; }$/
+clear	tex-src/texinfo.tex	/^\\def\\clear{\\parsearg\\clearxxx}$/
 clear-abbrev-table	c-src/abbrev.c	/^DEFUN ("clear-abbrev-table", Fclear_abbrev_table, /
 clear-this-command-keys	c-src/emacs/src/keyboard.c	/^DEFUN ("clear-this-command-keys", Fclear_this_comm/
 clearAllKey	objcpp-src/SimpleCalc.M	/^- clearAllKey:sender$/
@@ -2570,12 +2186,19 @@ clear_input_pending	c-src/emacs/src/keyboard.c	/^clear_input_pending (void)$/
 clear_neighbors	cp-src/clheir.cpp	/^void discrete_location::clear_neighbors(void)$/
 clear_screen	cp-src/screen.cpp	/^void clear_screen(void)$/
 clear_waiting_for_input	c-src/emacs/src/keyboard.c	/^clear_waiting_for_input (void)$/
+clearxxx	tex-src/texinfo.tex	/^\\def\\clearxxx #1{$/
+clnr	tex-src/texinfo.tex	/^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} /
+clrm	tex-src/texinfo.tex	/^\\gdef\\clrm{% Print a paren in roman if it is takin/
 cmd_error	c-src/emacs/src/keyboard.c	/^cmd_error (Lisp_Object data)$/
 cmd_error_internal	c-src/emacs/src/keyboard.c	/^cmd_error_internal (Lisp_Object data, const char */
 cmpfn	c-src/emacs/src/lisp.h	/^  bool (*cmpfn) (struct hash_table_test *t, Lisp_O/
 cmt	prol-src/natded.prolog	/^cmt:-$/
 cname	c-src/etags.c	2519
 cno	c-src/etags.c	224
+code	tex-src/texinfo.tex	/^\\def\\code##1{\\realbackslash code {##1}}$/
+code	tex-src/texinfo.tex	/^\\def\\code##1{\\realbackslash code {##1}}%$/
+code	tex-src/texinfo.tex	/^\\let\\code=\\indexdummyfont$/
+code	tex-src/texinfo.tex	/^\\let\\code=\\tclose$/
 colori	cp-src/c.C	40
 commaargvals	prol-src/natded.prolog	/^commaargvals(Args) -->$/
 command	c-src/etags.c	187
@@ -2585,6 +2208,8 @@ command_loop_1	c-src/emacs/src/keyboard.c	/^command_loop_1 (void)$/
 command_loop_2	c-src/emacs/src/keyboard.c	/^command_loop_2 (Lisp_Object ignore)$/
 command_loop_level	c-src/emacs/src/keyboard.c	195
 comment	php-src/lce_functions.php	/^      function comment($line, $class)$/
+comment	tex-src/texinfo.tex	/^\\def\\comment{\\catcode 64=\\other \\catcode 123=\\othe/
+commentxxx	tex-src/texinfo.tex	/^\\def\\commentxxx #1{\\catcode 64=0 \\catcode 123=1 \\c/
 commutativity_assertion	merc-src/accumulator.m	/^:- pred commutativity_assertion(module_info::in,li/
 compile_empty	prol-src/natded.prolog	/^compile_empty:-$/
 compile_lex	prol-src/natded.prolog	/^compile_lex(File):-$/
@@ -2607,6 +2232,10 @@ consult_lex	prol-src/natded.prolog	/^consult_lex:-$/
 contents	c-src/emacs/src/lisp.h	1372
 contents	c-src/emacs/src/lisp.h	1600
 contents	c-src/emacs/src/lisp.h	1624
+contents	tex-src/texinfo.tex	/^\\let\\contents=\\relax$/
+contents	tex-src/texinfo.tex	/^\\outer\\def\\contents{%$/
+copyright	tex-src/texinfo.tex	/^\\def\\copyright{\\realbackslash copyright }%$/
+copyright	tex-src/texinfo.tex	/^\\def\\copyright{\\realbackslash copyright}$/
 count	c-src/emacs/src/lisp.h	1863
 count_layers	lua-src/allegro.lua	/^local function count_layers (layer)$/
 count_words	c-src/tab.c	/^static int		count_words(char *str, char delim)$/
@@ -2626,10 +2255,20 @@ create_new_orig_recursive_goals	merc-src/accumulator.m	/^:- func create_new_orig
 create_new_recursive_goals	merc-src/accumulator.m	/^:- func create_new_recursive_goals(set(accu_goal_i/
 create_new_var	merc-src/accumulator.m	/^:- pred create_new_var(prog_var::in, string::in, p/
 create_orig_goal	merc-src/accumulator.m	/^:- pred create_orig_goal(hlds_goal::in, accu_subst/
+cropmarks	tex-src/texinfo.tex	/^\\def\\cropmarks{\\let\\onepageout=\\croppageout }$/
+croppageout	tex-src/texinfo.tex	/^\\def\\croppageout#1{\\hoffset=0pt % make sure this d/
 cscInitTime	cp-src/c.C	7
 cscSegmentationTime	cp-src/c.C	8
+csname	tex-src/texinfo.tex	/^\\expandafter\\let\\csname IF#1\\endcsname=\\relax}$/
+csname	tex-src/texinfo.tex	/^\\expandafter\\let\\csname IF#1\\endcsname=\\set}$/
+csname	tex-src/texinfo.tex	/^\\expandafter\\let\\csname#1indfile\\endcsname=\\synind/
+csname	tex-src/texinfo.tex	/^\\expandafter\\xdef\\csname#1index\\endcsname{%	% Defi/
+csname	tex-src/texinfo.tex	/^{\\catcode`\\'=\\other\\expandafter \\gdef \\csname X#1\\/
 cstack	c-src/etags.c	2523
 ctags	make-src/Makefile	/^ctags: etags.c ${OBJS}$/
+ctl	tex-src/texinfo.tex	/^\\def\\ctl{{\\circle\\char'013\\hskip -6pt}}% 6pt from /
+ctr	tex-src/texinfo.tex	/^\\def\\ctr{{\\hskip 6pt\\circle\\char'010}}$/
+ctrl	tex-src/texinfo.tex	/^\\def\\ctrl #1{{\\tt \\rawbackslash \\hat}#1}$/
 curlb	c-src/etags.c	2929
 curlinepos	c-src/etags.c	2931
 current-idle-time	c-src/emacs/src/keyboard.c	/^DEFUN ("current-idle-time", Fcurrent_idle_time, Sc/
@@ -2640,6 +2279,10 @@ curry-test	scm-src/test.scm	/^(define (((((curry-test a) b) c) d) e)$/
 cursor_position	cp-src/screen.cpp	/^void cursor_position(void)$/
 cursor_x	cp-src/screen.cpp	15
 cursor_y	cp-src/screen.cpp	15
+cvarheader\defcvtype	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
+cvtype	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{\\defcvtype{} of #1}%$/
+cvtype	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
+cvx\defcvarheader	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
 d	c-src/emacs/src/lisp.h	4673
 d	c-src/emacs/src/lisp.h	4679
 d	c.c	180
@@ -2661,6 +2304,15 @@ default_C_help	c-src/etags.c	515
 default_C_help	c-src/etags.c	523
 default_C_suffixes	c-src/etags.c	512
 defcell	c-src/emacs/src/lisp.h	2351
+defcodeindex	tex-src/texinfo.tex	/^\\def\\defcodeindex{\\parsearg\\newcodeindex}$/
+defcv	tex-src/texinfo.tex	/^\\def\\defcv #1 {\\def\\defcvtype{#1}%$/
+defcvarheader	tex-src/texinfo.tex	/^\\def\\defcvarheader #1#2#3{%$/
+defcvtype	tex-src/texinfo.tex	/^\\def\\defcv #1 {\\def\\defcvtype{#1}%$/
+defcvx	tex-src/texinfo.tex	/^\\def\\defcvx #1 {\\errmessage{@defcvx in invalid con/
+deffn	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
+deffnheader	tex-src/texinfo.tex	/^\\def\\deffnheader #1#2#3{\\doind {fn}{\\code{#2}}%$/
+deffnx	tex-src/texinfo.tex	/^\\def\\deffnx #1 {\\errmessage{@deffnx in invalid con/
+defindex	tex-src/texinfo.tex	/^\\def\\defindex{\\parsearg\\newindex}$/
 define-abbrev	c-src/abbrev.c	/^DEFUN ("define-abbrev", Fdefine_abbrev, Sdefine_ab/
 define-abbrev-table	c-src/abbrev.c	/^DEFUN ("define-abbrev-table", Fdefine_abbrev_table/
 define-global-abbrev	c-src/abbrev.c	/^DEFUN ("define-global-abbrev", Fdefine_global_abbr/
@@ -2668,7 +2320,63 @@ define-mode-abbrev	c-src/abbrev.c	/^DEFUN ("define-mode-abbrev", Fdefine_mode_ab
 defined_GC_CHECK_STRING_BYTES	c-src/emacs/src/lisp.h	4663
 defined_GC_CHECK_STRING_BYTES	c-src/emacs/src/lisp.h	4665
 definedef	c-src/etags.c	2464
+defivar	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
+defivarheader	tex-src/texinfo.tex	/^\\def\\defivarheader #1#2#3{%$/
+defivarx	tex-src/texinfo.tex	/^\\def\\defivarx #1 {\\errmessage{@defivarx in invalid/
+defmac	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
+defmacheader	tex-src/texinfo.tex	/^\\def\\defmacheader #1#2{\\doind {fn}{\\code{#1}}% Mak/
+defmacx	tex-src/texinfo.tex	/^\\def\\defmacx #1 {\\errmessage{@defmacx in invalid c/
+defmethod	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
+defmethodheader	tex-src/texinfo.tex	/^\\def\\defmethodheader #1#2#3{%$/
+defmethodx	tex-src/texinfo.tex	/^\\def\\defmethodx #1 {\\errmessage{@defmethodx in inv/
+defmethparsebody	tex-src/texinfo.tex	/^\\def\\defmethparsebody #1#2#3#4 {\\begingroup\\inENV /
+defname	tex-src/texinfo.tex	/^\\def\\defname #1#2{%$/
+defop	tex-src/texinfo.tex	/^\\def\\defop #1 {\\def\\defoptype{#1}%$/
+defopheader	tex-src/texinfo.tex	/^\\def\\defopheader #1#2#3{%$/
+defopparsebody	tex-src/texinfo.tex	/^\\def\\defopparsebody #1#2#3#4#5 {\\begingroup\\inENV /
+defopt	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
+defoptheader	tex-src/texinfo.tex	/^\\def\\defoptheader #1#2{\\doind {vr}{\\code{#1}}% Mak/
+defoptx	tex-src/texinfo.tex	/^\\def\\defoptx #1 {\\errmessage{@defoptx in invalid c/
+defoptype	tex-src/texinfo.tex	/^\\def\\defop #1 {\\def\\defoptype{#1}%$/
+defopvarparsebody	tex-src/texinfo.tex	/^\\def\\defopvarparsebody #1#2#3#4#5 {\\begingroup\\inE/
+defopx	tex-src/texinfo.tex	/^\\def\\defopx #1 {\\errmessage{@defopx in invalid con/
+defparsebody	tex-src/texinfo.tex	/^\\def\\defparsebody #1#2#3{\\begingroup\\inENV% Enviro/
+defspec	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
+defspecheader	tex-src/texinfo.tex	/^\\def\\defspecheader #1#2{\\doind {fn}{\\code{#1}}% Ma/
+defspecx	tex-src/texinfo.tex	/^\\def\\defspecx #1 {\\errmessage{@defspecx in invalid/
+deftp	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
+deftpargs	tex-src/texinfo.tex	/^\\def\\deftpargs #1{\\bf \\defvarargs{#1}}$/
+deftpheader	tex-src/texinfo.tex	/^\\def\\deftpheader #1#2#3{\\doind {tp}{\\code{#2}}%$/
+deftpx	tex-src/texinfo.tex	/^\\def\\deftpx #1 {\\errmessage{@deftpx in invalid con/
+deftypefn	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
+deftypefnheader	tex-src/texinfo.tex	/^\\def\\deftypefnheader #1#2#3{\\deftypefnheaderx{#1}{/
+deftypefnheaderx	tex-src/texinfo.tex	/^\\def\\deftypefnheaderx #1#2#3 #4\\relax{%$/
+deftypefnx	tex-src/texinfo.tex	/^\\def\\deftypefnx #1 {\\errmessage{@deftypefnx in inv/
+deftypefun	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
+deftypefunargs	tex-src/texinfo.tex	/^\\def\\deftypefunargs #1{%$/
+deftypefunheader	tex-src/texinfo.tex	/^\\def\\deftypefunheader #1#2{\\deftypefunheaderx{#1}#/
+deftypefunheaderx	tex-src/texinfo.tex	/^\\def\\deftypefunheaderx #1#2 #3\\relax{%$/
+deftypeunx	tex-src/texinfo.tex	/^\\def\\deftypeunx #1 {\\errmessage{@deftypeunx in inv/
+deftypevar	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
+deftypevarheader	tex-src/texinfo.tex	/^\\def\\deftypevarheader #1#2{%$/
+deftypevarx	tex-src/texinfo.tex	/^\\def\\deftypevarx #1 {\\errmessage{@deftypevarx in i/
+deftypevr	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
+deftypevrheader	tex-src/texinfo.tex	/^\\def\\deftypevrheader #1#2#3{\\doind {vr}{\\code{#3}}/
+deftypevrx	tex-src/texinfo.tex	/^\\def\\deftypevrx #1 {\\errmessage{@deftypevrx in inv/
+defun	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
 defun_func1	c.c	/^defun_func1()$/
+defunargs	tex-src/texinfo.tex	/^\\def\\defunargs #1{\\functionparens \\sl$/
+defunheader	tex-src/texinfo.tex	/^\\def\\defunheader #1#2{\\doind {fn}{\\code{#1}}% Make/
+defunx	tex-src/texinfo.tex	/^\\def\\defunx #1 {\\errmessage{@defunx in invalid con/
+defvar	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
+defvarargs	tex-src/texinfo.tex	/^\\def\\defvarargs #1{\\normalparens #1%$/
+defvarheader	tex-src/texinfo.tex	/^\\def\\defvarheader #1#2{\\doind {vr}{\\code{#1}}% Mak/
+defvarparsebody	tex-src/texinfo.tex	/^\\def\\defvarparsebody #1#2#3{\\begingroup\\inENV% Env/
+defvarx	tex-src/texinfo.tex	/^\\def\\defvarx #1 {\\errmessage{@defvarx in invalid c/
+defvr	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
+defvrheader	tex-src/texinfo.tex	/^\\def\\defvrheader #1#2#3{\\doind {vr}{\\code{#2}}%$/
+defvrparsebody	tex-src/texinfo.tex	/^\\def\\defvrparsebody #1#2#3#4 {\\begingroup\\inENV %$/
+defvrx	tex-src/texinfo.tex	/^\\def\\defvrx #1 {\\errmessage{@defvrx in invalid con/
 delegate	objc-src/Subprocess.m	/^- delegate$/
 deleteItem	pyt-src/server.py	/^    def deleteItem(self):$/
 delete_kboard	c-src/emacs/src/keyboard.c	/^delete_kboard (KBOARD *kb)$/
@@ -2678,25 +2386,54 @@ deliver_user_signal	c-src/emacs/src/keyboard.c	/^deliver_user_signal (int sig)$/
 depth	c-src/emacs/src/lisp.h	1618
 derived_analyses	prol-src/natded.prolog	/^derived_analyses([],[]).$/
 describe_abbrev	c-src/abbrev.c	/^describe_abbrev (sym, stream)$/
+description	tex-src/texinfo.tex	/^\\def\\description{\\tablez{\\dontindex}{1}{}{}{}{}}$/
 detect_input_pending	c-src/emacs/src/keyboard.c	/^detect_input_pending (void)$/
 detect_input_pending_ignore_squeezables	c-src/emacs/src/keyboard.c	/^detect_input_pending_ignore_squeezables (void)$/
 detect_input_pending_run_timers	c-src/emacs/src/keyboard.c	/^detect_input_pending_run_timers (bool do_display)$/
+df	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
+dfn	tex-src/texinfo.tex	/^\\def\\dfn##1{\\realbackslash dfn {##1}}$/
+dfn	tex-src/texinfo.tex	/^\\let\\dfn=\\smartitalic$/
 dialog_loop	erl-src/gs_dialog.erl	/^dialog_loop(Module, Window, Frame, Extra, Args) ->/
 dignorerest	c-src/etags.c	2463
+direntry	tex-src/texinfo.tex	/^\\def\\direntry{\\begingroup\\direntryxxx}$/
+direntryxxx	tex-src/texinfo.tex	/^\\long\\def\\direntryxxx #1\\end direntry{\\endgroup\\ig/
 discard-input	c-src/emacs/src/keyboard.c	/^DEFUN ("discard-input", Fdiscard_input, Sdiscard_i/
 discard_mouse_events	c-src/emacs/src/keyboard.c	/^discard_mouse_events (void)$/
 discrete_location	cp-src/clheir.hpp	/^    discrete_location(int xi, int yi, int zi):$/
 discrete_location	cp-src/clheir.hpp	56
 display	cp-src/conway.cpp	/^void display(void)$/
+display	tex-src/texinfo.tex	/^\\def\\display{\\begingroup\\inENV %This group ends at/
 disposetextstring	pas-src/common.pas	/^procedure disposetextstring;(*($/
+dmn	tex-src/texinfo.tex	/^\\def\\dmn#1{\\thinspace #1}$/
 dnone	c-src/etags.c	2460
+dobreak	tex-src/texinfo.tex	/^\\def\\dobreak#1#2{\\par\\ifdim\\lastskip<#1\\removelast/
 doc	c-src/emacs/src/lisp.h	1689
+dochapentry	tex-src/texinfo.tex	/^\\def\\dochapentry#1#2{%$/
+docodeindex	tex-src/texinfo.tex	/^\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\si/
 dog	c-src/h.h	81
 dog	cp-src/c.C	126
 dog	cp-src/c.C	130
+doind	tex-src/texinfo.tex	/^\\def\\doind #1#2{%$/
+doindex	tex-src/texinfo.tex	/^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/
+donoderef	tex-src/texinfo.tex	/^\\def\\donoderef{\\ifx\\lastnode\\relax\\else$/
+dontindex	tex-src/texinfo.tex	/^\\def\\dontindex #1{}$/
+dopageno	tex-src/texinfo.tex	/^\\def\\dopageno#1{{\\rm #1}}$/
+doprintindex	tex-src/texinfo.tex	/^\\def\\doprintindex#1{%$/
+dosecentry	tex-src/texinfo.tex	/^\\def\\dosecentry#1#2{%$/
+dosetq	tex-src/texinfo.tex	/^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/
+doshortpageno	tex-src/texinfo.tex	/^\\def\\doshortpageno#1{{\\rm #1}}$/
+dosubind	tex-src/texinfo.tex	/^\\def\\dosubind #1#2#3{%$/
+dosubsecentry	tex-src/texinfo.tex	/^\\def\\dosubsecentry#1#2{%$/
+dosubsubsecentry	tex-src/texinfo.tex	/^\\def\\dosubsubsecentry#1#2{%$/
 dotfill	tex-src/texinfo.tex	/^  \\null\\nobreak\\indexdotfill % Have leaders before/
 dotfill	tex-src/texinfo.tex	/^\\noindent\\hskip\\secondaryindent\\hbox{#1}\\indexdotf/
+dots	tex-src/texinfo.tex	/^\\def\\dots{$\\ldots$}$/
+dots	tex-src/texinfo.tex	/^\\def\\dots{\\realbackslash dots }%$/
+dots	tex-src/texinfo.tex	/^\\def\\dots{\\realbackslash dots}$/
+dots	tex-src/texinfo.tex	/^\\let\\dots=\\indexdummydots$/
+dots	tex-src/texinfo.tex	/^\\let\\dots=\\ptexdots$/
 double_click_count	c-src/emacs/src/keyboard.c	5222
+doublecolumnout	tex-src/texinfo.tex	/^\\def\\doublecolumnout{\\splittopskip=\\topskip \\split/
 drag_n_drop_syms	c-src/emacs/src/keyboard.c	4629
 dribble	c-src/emacs/src/keyboard.c	236
 dsharpseen	c-src/etags.c	2461
@@ -2706,6 +2443,7 @@ dummy2	cp-src/burton.cpp	/^::dummy::dummy test::dummy2(::CORBA::Long dummy)$/
 dummy3	cp-src/burton.cpp	/^::dummy::dummy test::dummy3(char* name, ::CORBA::L/
 dummydots	tex-src/texinfo.tex	/^\\let\\dots=\\indexdummydots$/
 dummyfont	tex-src/texinfo.tex	/^\\let\\b=\\indexdummyfont$/
+dummyfont	tex-src/texinfo.tex	/^\\let\\cite=\\indexdummyfont$/
 dummyfont	tex-src/texinfo.tex	/^\\let\\code=\\indexdummyfont$/
 dummyfont	tex-src/texinfo.tex	/^\\let\\emph=\\indexdummyfont$/
 dummyfont	tex-src/texinfo.tex	/^\\let\\file=\\indexdummyfont$/
@@ -2744,10 +2482,16 @@ editsite	pyt-src/server.py	/^    def editsite(self, site):$/
 edituser	pyt-src/server.py	/^    def edituser(self, user):$/
 egetenv	c-src/emacs/src/lisp.h	/^egetenv (const char *var)$/
 emacs_abort	c-src/emacs/src/lisp.h	/^extern _Noreturn void emacs_abort (void) NO_INLINE/
+emph	tex-src/texinfo.tex	/^\\def\\emph##1{\\realbackslash emph {##1}}$/
+emph	tex-src/texinfo.tex	/^\\let\\emph=\\indexdummyfont$/
+emph	tex-src/texinfo.tex	/^\\let\\emph=\\smartitalic$/
 end	c-src/emacs/src/keyboard.c	8753
 end	c-src/emacs/src/lisp.h	2039
 end	c-src/emacs/src/regex.h	432
+end	tex-src/texinfo.tex	/^\\def\\end{\\parsearg\\endxxx}$/
+enddoublecolumns	tex-src/texinfo.tex	/^\\def\\enddoublecolumns{\\output={\\balancecolumns}\\ej/
 endtoken	c-src/etags.c	/^#define	endtoken(c)	(_etk[CHAR (c)]) \/* c ends tok/
+endxxx	tex-src/texinfo.tex	/^\\def\\endxxx #1{%$/
 enter_critical_section	c-src/h.h	116
 entry	perl-src/htlmify-cystic	218
 entry	perl-src/htlmify-cystic	234
@@ -2757,14 +2501,22 @@ entry	perl-src/htlmify-cystic	268
 entry	perl-src/htlmify-cystic	276
 entry	perl-src/htlmify-cystic	281
 entry	perl-src/htlmify-cystic	296
+entry	tex-src/texinfo.tex	/^\\def\\entry #1#2{\\begingroup$/
+enumerate	tex-src/texinfo.tex	/^\\def\\enumerate{\\parsearg\\enumeratezzz}$/
+enumeratey	tex-src/texinfo.tex	/^\\def\\enumeratey #1 #2\\endenumeratey{%$/
+enumeratezzz	tex-src/texinfo.tex	/^\\def\\enumeratezzz #1{\\enumeratey #1  \\endenumerate/
 equalsKey	objcpp-src/SimpleCalc.M	/^- equalsKey:sender$/
+equiv	tex-src/texinfo.tex	/^\\def\\equiv{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/
+equiv	tex-src/texinfo.tex	/^\\def\\equiv{\\realbackslash equiv}$/
 erlang_atom	c-src/etags.c	/^erlang_atom (char *s)$/
 erlang_attribute	c-src/etags.c	/^erlang_attribute (char *s)$/
 erlang_func	c-src/etags.c	/^erlang_func (char *s, char *last)$/
 error	c-src/emacs/src/lisp.h	/^extern _Noreturn void error (const char *, ...) AT/
 error	c-src/etags.c	/^error (const char *format, ...)$/
 error	c-src/etags.c	/^static void error (const char *, ...) ATTRIBUTE_FO/
+error	tex-src/texinfo.tex	/^\\def\\error{\\leavevmode\\lower.7ex\\copy\\errorbox}$/
 error	y-src/cccp.y	/^error (msg)$/
+errorE	tex-src/texinfo.tex	/^\\def\\errorE#1{$/
 error_signaled	c-src/etags.c	264
 etags	el-src/emacs/lisp/progmodes/etags.el	/^(defgroup etags nil "Tags tables."$/
 etags	html-src/software.html	/^Etags$/
@@ -2787,11 +2539,29 @@ etags-xref-find-definitions-tag-order	el-src/emacs/lisp/progmodes/etags.el	/^(de
 etags.1.man	make-src/Makefile	/^etags.1.man: etags.1$/
 etags_getcwd	c-src/etags.c	/^etags_getcwd (void)$/
 eval_dyn	c-src/emacs/src/keyboard.c	/^eval_dyn (Lisp_Object form)$/
+evenfooting	tex-src/texinfo.tex	/^\\def\\evenfooting{\\parsearg\\evenfootingxxx}$/
+evenfootingxxx	tex-src/texinfo.tex	/^\\gdef\\evenfootingxxx #1{\\evenfootingyyy #1@|@|@|@|/
+evenfootingyyy	tex-src/texinfo.tex	/^\\gdef\\evenfootingyyy #1@|#2@|#3@|#4\\finish{%$/
+evenheading	tex-src/texinfo.tex	/^\\def\\evenheading{\\parsearg\\evenheadingxxx}$/
+evenheadingxxx	tex-src/texinfo.tex	/^\\gdef\\evenheadingxxx #1{\\evenheadingyyy #1@|@|@|@|/
+evenheadingyyy	tex-src/texinfo.tex	/^\\gdef\\evenheadingyyy #1@|#2@|#3@|#4\\finish{%$/
 event-convert-list	c-src/emacs/src/keyboard.c	/^DEFUN ("event-convert-list", Fevent_convert_list, /
 event-symbol-parse-modifiers	c-src/emacs/src/keyboard.c	/^DEFUN ("internal-event-symbol-parse-modifiers", Fe/
 event_head	c-src/emacs/src/keyboard.c	11021
 event_to_kboard	c-src/emacs/src/keyboard.c	/^event_to_kboard (struct input_event *event)$/
+everyfooting	tex-src/texinfo.tex	/^\\def\\everyfooting{\\parsearg\\everyfootingxxx}$/
+everyfootingxxx	tex-src/texinfo.tex	/^\\gdef\\everyfootingxxx #1{\\everyfootingyyy #1@|@|@|/
+everyfootingyyy	tex-src/texinfo.tex	/^\\gdef\\everyfootingyyy #1@|#2@|#3@|#4\\finish{%$/
+everyheading	tex-src/texinfo.tex	/^\\def\\everyheading{\\parsearg\\everyheadingxxx}$/
+everyheadingxxx	tex-src/texinfo.tex	/^\\gdef\\everyheadingxxx #1{\\everyheadingyyy #1@|@|@|/
+everyheadingyyy	tex-src/texinfo.tex	/^\\gdef\\everyheadingyyy #1@|#2@|#3@|#4\\finish{%$/
+ewbot	tex-src/texinfo.tex	/^\\def\\ewbot{\\vrule height0pt depth\\cornerthick widt/
+ewtop	tex-src/texinfo.tex	/^\\def\\ewtop{\\vrule height\\cornerthick depth0pt widt/
 exact	c-src/emacs/src/gmalloc.c	200
+example	tex-src/texinfo.tex	/^\\let\\example=\\lisp$/
+exdent	tex-src/texinfo.tex	/^\\def\\exdent{\\parsearg\\exdentyyy}$/
+exdent	tex-src/texinfo.tex	/^\\let\\exdent=\\nofillexdent$/
+exdentyyy	tex-src/texinfo.tex	/^\\def\\exdentyyy #1{{\\hfil\\break\\hbox{\\kern -\\exdent/
 execute	cp-src/c.C	/^        void execute(CPluginCSCState& p, int w, in/
 exit	c-src/exit.c	/^DEFUN(exit, (status), int status)$/
 exit	c-src/exit.strange_suffix	/^DEFUN(exit, (status), int status)$/
@@ -2804,10 +2574,13 @@ exp	y-src/parse.y	95
 exp1	y-src/cccp.y	148
 exp_list	y-src/parse.y	263
 expand-abbrev	c-src/abbrev.c	/^DEFUN ("expand-abbrev", Fexpand_abbrev, Sexpand_ab/
+expandafter	tex-src/texinfo.tex	/^\\expandafter\\let\\expandafter\\synindexfoo\\expandaft/
 expandmng	prol-src/natded.prolog	/^expandmng(var(V),var(V)).$/
 expandmng_tree	prol-src/natded.prolog	/^expandmng_tree(tree(Rule,Syn:Sem,Trees),$/
 expandmng_trees	prol-src/natded.prolog	/^expandmng_trees([],[]).$/
 expandsyn	prol-src/natded.prolog	/^expandsyn(Syn,Syn):-$/
+expansion	tex-src/texinfo.tex	/^\\def\\expansion{\\leavevmode\\raise.1ex\\hbox to 1em{\\/
+expansion	tex-src/texinfo.tex	/^\\def\\expansion{\\realbackslash expansion}$/
 explicitly-quoted-pending-delete-mode	el-src/TAGTEST.EL	/^(defalias (quote explicitly-quoted-pending-delete-/
 expression_value	y-src/cccp.y	68
 extras	c-src/emacs/src/lisp.h	1603
@@ -2854,6 +2627,10 @@ fdp	c-src/etags.c	217
 ff	cp-src/c.C	/^  int ff(){return 1;};$/
 field_of_play	cp-src/conway.cpp	18
 fignore	c-src/etags.c	2416
+file	tex-src/texinfo.tex	/^\\def\\file##1{\\realbackslash file {##1}}$/
+file	tex-src/texinfo.tex	/^\\def\\file##1{\\realbackslash file {##1}}%$/
+file	tex-src/texinfo.tex	/^\\let\\file=\\indexdummyfont$/
+file	tex-src/texinfo.tex	/^\\let\\file=\\samp$/
 file-of-tag	el-src/emacs/lisp/progmodes/etags.el	/^(defun file-of-tag (&optional relative)$/
 file-of-tag-function	el-src/emacs/lisp/progmodes/etags.el	/^(defvar file-of-tag-function nil$/
 fileJoin	php-src/lce_functions.php	/^  function fileJoin()$/
@@ -2862,6 +2639,7 @@ file_index	perl-src/htlmify-cystic	33
 file_tocs	perl-src/htlmify-cystic	30
 filename_is_absolute	c-src/etags.c	/^filename_is_absolute (char *fn)$/
 filenames	c-src/etags.c	196
+finalout	tex-src/texinfo.tex	/^\\def\\finalout{\\overfullrule=0pt}$/
 find-tag	el-src/emacs/lisp/progmodes/etags.el	/^(defun find-tag (tagname &optional next-p regexp-p/
 find-tag-default-function	el-src/emacs/lisp/progmodes/etags.el	/^(defcustom find-tag-default-function nil$/
 find-tag-history	el-src/emacs/lisp/progmodes/etags.el	/^(defvar find-tag-history nil) ; Doc string?$/
@@ -2884,21 +2662,33 @@ find-tag-tag-order	el-src/emacs/lisp/progmodes/etags.el	/^(defvar find-tag-tag-o
 find_entries	c-src/etags.c	/^find_entries (FILE *inf)$/
 find_user_signal_name	c-src/emacs/src/keyboard.c	/^find_user_signal_name (int sig)$/
 findcats	prol-src/natded.prolog	/^findcats([],Left,Left).$/
+findex	tex-src/texinfo.tex	/^\\def\\findex {\\fnindex}$/
 finish_appendices	perl-src/htlmify-cystic	/^sub finish_appendices ()$/
 finish_sections	perl-src/htlmify-cystic	/^sub finish_sections ()$/
 finish_subsections	perl-src/htlmify-cystic	/^sub finish_subsections ()$/
 finish_subsubsections	perl-src/htlmify-cystic	/^sub finish_subsubsections ()$/
+finishtitlepage	tex-src/texinfo.tex	/^\\def\\finishtitlepage{%$/
 finlist	c-src/etags.c	2414
 first	c-src/emacs/src/gmalloc.c	151
+first	tex-src/texinfo.tex	/^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/
 fitchtreelist	prol-src/natded.prolog	/^fitchtreelist([]).$/
 fixup_locale	c-src/emacs/src/lisp.h	/^INLINE void fixup_locale (void) {}$/
 flag	c-src/getopt.h	83
 flag2str	pyt-src/server.py	/^def flag2str(value, string):$/
 flistseen	c-src/etags.c	2415
+flushcr	tex-src/texinfo.tex	/^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else /
+flushleft	tex-src/texinfo.tex	/^\\def\\flushleft{%$/
+flushright	tex-src/texinfo.tex	/^\\def\\flushright{%$/
 fn	c-src/exit.c	/^    void EXFUN((*fn[1]), (NOARGS));$/
 fn	c-src/exit.strange_suffix	/^    void EXFUN((*fn[1]), (NOARGS));$/
+fnheader	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
 fnin	y-src/parse.y	68
+fnitemindex	tex-src/texinfo.tex	/^\\def\\fnitemindex #1{\\doind {fn}{\\code{#1}}}%$/
+fnx\deffnheader	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
 focus_set	pyt-src/server.py	/^    def focus_set(self):$/
+folio	tex-src/texinfo.tex	/^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/
+folio	tex-src/texinfo.tex	/^{\\let\\folio=0% Expand all macros now EXCEPT \\folio/
+folio	tex-src/texinfo.tex	/^{\\let\\folio=0%$/
 follow_key	c-src/emacs/src/keyboard.c	/^follow_key (Lisp_Object keymap, Lisp_Object key)$/
 fonts	tex-src/texinfo.tex	/^\\obeyspaces \\obeylines \\ninett \\indexfonts \\rawbac/
 fonts\rm	tex-src/texinfo.tex	/^  \\indexfonts\\rm \\tolerance=9500 \\advance\\baseline/
@@ -2926,11 +2716,15 @@ foobar	c-src/c.c	/^int foobar() {;}$/
 foobar	c.c	/^extern void foobar (void) __attribute__ ((section /
 foobar2	c-src/h.h	20
 foobar2_	c-src/h.h	16
+footnote	tex-src/texinfo.tex	/^\\long\\gdef\\footnote #1{\\global\\advance \\footnoteno/
+footnotestyle	tex-src/texinfo.tex	/^\\let\\footnotestyle=\\comment$/
+footnotezzz	tex-src/texinfo.tex	/^\\long\\gdef\\footnotezzz #1{\\insert\\footins{$/
 foperator	c-src/etags.c	2411
 force_auto_save_soon	c-src/emacs/src/keyboard.c	/^force_auto_save_soon (void)$/
 force_explicit_name	c-src/etags.c	265
 force_quit_count	c-src/emacs/src/keyboard.c	10387
 foreign_export	merc-src/accumulator.m	/^:- pragma foreign_export("C", unravel_univ(in, out/
+format	tex-src/texinfo.tex	/^\\def\\format{\\begingroup\\inENV %This group ends at /
 formatSize	objc-src/PackInsp.m	/^-(const char *)formatSize:(const char *)size inBuf/
 found	c-src/emacs/src/lisp.h	2344
 fracas	html-src/software.html	/^Fracas$/
@@ -2947,8 +2741,12 @@ free_regexps	c-src/etags.c	/^free_regexps (void)$/
 free_tree	c-src/etags.c	/^free_tree (register node *np)$/
 free_var	prol-src/natded.prolog	/^free_var(var(V),var(V)).$/
 freehook	c-src/emacs/src/gmalloc.c	/^freehook (void *ptr)$/
+frenchspacing	tex-src/texinfo.tex	/^\\def\\frenchspacing{\\sfcode46=1000 \\sfcode63=1000 \\/
+frenchspacing	tex-src/texinfo.tex	/^\\let\\frenchspacing=\\relax%$/
 fresh_vars	prol-src/natded.prolog	/^fresh_vars(var(V),var(V)).$/
 fstartlist	c-src/etags.c	2413
+ftable	tex-src/texinfo.tex	/^\\def\\ftable{\\begingroup\\inENV\\obeylines\\obeyspaces/
+ftablex	tex-src/texinfo.tex	/^\\gdef\\ftablex #1^^M{%$/
 func	c-src/emacs/src/lisp.h	/^      void (*func) (Lisp_Object);$/
 func	c-src/emacs/src/lisp.h	/^      void (*func) (int);$/
 func	c-src/emacs/src/lisp.h	/^      void (*func) (void *);$/
@@ -2965,6 +2763,7 @@ function	c-src/emacs/src/lisp.h	2985
 function	c-src/emacs/src/lisp.h	694
 function	c-src/etags.c	194
 functionp	c-src/emacs/src/lisp.h	/^functionp (Lisp_Object object)$/
+functionparens	tex-src/texinfo.tex	/^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/
 fval	forth-src/test-forth.fth	/^fconst fvalue fval$/
 fvar	forth-src/test-forth.fth	/^fvariable fvar$/
 fvdef	c-src/etags.c	2418
@@ -3020,10 +2819,14 @@ ghi1	c-src/h.h	36
 ghi2	c-src/h.h	39
 giallo	cp-src/c.C	40
 glider	cp-src/conway.cpp	/^void glider(int x, int y)$/
+gloggingall	tex-src/texinfo.tex	/^\\def\\gloggingall{\\begingroup \\globaldefs = 1 \\logg/
 gnu	html-src/software.html	/^Free software that I wrote for the GNU project or /
 gobble_input	c-src/emacs/src/keyboard.c	/^gobble_input (void)$/
 goto-tag-location-function	el-src/emacs/lisp/progmodes/etags.el	/^(defvar goto-tag-location-function nil$/
 goto_xy	cp-src/screen.cpp	/^void goto_xy(unsigned char x, unsigned char y)$/
+group	tex-src/texinfo.tex	/^\\def\\group{\\begingroup$/
+gtr	tex-src/texinfo.tex	/^\\def\\gtr{\\realbackslash gtr}$/
+gtr	tex-src/texinfo.tex	/^\\def\\gtr{\\realbackslash gtr}%$/
 handleList	pyt-src/server.py	/^    def handleList(self, event):$/
 handleNew	pyt-src/server.py	/^    def handleNew(self, event):$/
 handle_async_input	c-src/emacs/src/keyboard.c	/^handle_async_input (void)$/
@@ -3038,6 +2841,8 @@ hash	c-src/emacs/src/lisp.h	1843
 hash	c-src/etags.c	/^hash (const char *str, int len)$/
 hash_table_test	c-src/emacs/src/lisp.h	1805
 hashfn	c-src/emacs/src/lisp.h	/^  EMACS_UINT (*hashfn) (struct hash_table_test *t,/
+hat	tex-src/texinfo.tex	/^\\def\\hat{\\realbackslash hat}$/
+hat	tex-src/texinfo.tex	/^\\def\\hat{\\realbackslash hat}%$/
 hdr	c-src/emacs/src/gmalloc.c	1860
 head_table	c-src/emacs/src/keyboard.c	11027
 header	c-src/emacs/src/lisp.h	1371
@@ -3047,6 +2852,8 @@ header	c-src/emacs/src/lisp.h	1610
 header	c-src/emacs/src/lisp.h	1672
 header	c-src/emacs/src/lisp.h	1826
 header_size	c-src/emacs/src/lisp.h	1471
+heading	tex-src/texinfo.tex	/^\\def\\heading{\\parsearg\\secheadingi}$/
+headings	tex-src/texinfo.tex	/^\\def\\headings #1 {\\csname HEADINGS#1\\endcsname}$/
 heapsize	c-src/emacs/src/gmalloc.c	361
 hello	scm-src/test.scm	/^(define hello "Hello, Emacs!")$/
 hello	scm-src/test.scm	/^(set! hello "Hello, world!")$/
@@ -3058,6 +2865,10 @@ help_form_saved_window_configs	c-src/emacs/src/keyboard.c	2156
 helpwin	pyt-src/server.py	/^def helpwin(helpdict):$/
 hide_cursor	cp-src/screen.cpp	/^void hide_cursor(void)$/
 hlds	merc-src/accumulator.m	/^:- import_module hlds.$/
+hsize	tex-src/texinfo.tex	/^			{\\let\\hsize=\\pagewidth \\makefootline}}$/
+hsize	tex-src/texinfo.tex	/^			{\\let\\hsize=\\pagewidth \\makeheadline}$/
+hsize	tex-src/texinfo.tex	/^\\shipout\\vbox{{\\let\\hsize=\\pagewidth \\makeheadline/
+hsize	tex-src/texinfo.tex	/^{\\let\\hsize=\\pagewidth \\makefootline}}}%$/
 htmltreelist	prol-src/natded.prolog	/^htmltreelist([]).$/
 hybrid_aligned_alloc	c-src/emacs/src/gmalloc.c	/^hybrid_aligned_alloc (size_t alignment, size_t siz/
 hybrid_calloc	c-src/emacs/src/gmalloc.c	/^hybrid_calloc (size_t nmemb, size_t size)$/
@@ -3072,31 +2883,87 @@ i	c-src/emacs/src/lisp.h	4679
 i	c-src/emacs/src/lisp.h	567
 i	c.c	169
 i	cp-src/c.C	132
+i	tex-src/texinfo.tex	/^\\def\\i##1{\\realbackslash i {##1}}$/
+i	tex-src/texinfo.tex	/^\\def\\i##1{\\realbackslash i {##1}}%$/
+i	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
+i	tex-src/texinfo.tex	/^\\let\\i=\\indexdummyfont$/
+i	tex-src/texinfo.tex	/^\\let\\i=\\smartitalic$/
 ialpage	tex-src/texinfo.tex	/^     \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\pa/
 ialpage	tex-src/texinfo.tex	/^  \\availdimen@=\\pageheight \\advance\\availdimen@ by/
 ialpage	tex-src/texinfo.tex	/^  \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\parti/
+ialpage	tex-src/texinfo.tex	/^  \\output={\\global\\setbox\\partialpage=$/
+ialpage	tex-src/texinfo.tex	/^\\def\\pagesofar{\\unvbox\\partialpage %$/
 ialpage	tex-src/texinfo.tex	/^\\newbox\\partialpage$/
-ialpage=	tex-src/texinfo.tex	/^  \\output={\\global\\setbox\\partialpage=$/
 identify_goal_type	merc-src/accumulator.m	/^:- pred identify_goal_type(pred_id::in, proc_id::i/
 identify_out_and_out_prime	merc-src/accumulator.m	/^:- pred identify_out_and_out_prime(module_info::in/
 identify_recursive_calls	merc-src/accumulator.m	/^:- pred identify_recursive_calls(pred_id::in, proc/
 idx	c-src/emacs/src/lisp.h	3150
+ifclear	tex-src/texinfo.tex	/^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/
+ifclearfail	tex-src/texinfo.tex	/^\\def\\ifclearfail{\\begingroup\\ignoresections\\ifclea/
+ifclearfailxxx	tex-src/texinfo.tex	/^\\long\\def\\ifclearfailxxx #1\\end ifclear{\\endgroup\\/
+ifclearxxx	tex-src/texinfo.tex	/^\\def\\ifclearxxx #1{\\endgroup$/
+ifinfo	tex-src/texinfo.tex	/^\\def\\ifinfo{\\begingroup\\ignoresections\\ifinfoxxx}$/
+ifinfoxxx	tex-src/texinfo.tex	/^\\long\\def\\ifinfoxxx #1\\end ifinfo{\\endgroup\\ignore/
+ifset	tex-src/texinfo.tex	/^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/
+ifsetfail	tex-src/texinfo.tex	/^\\def\\ifsetfail{\\begingroup\\ignoresections\\ifsetfai/
+ifsetfailxxx	tex-src/texinfo.tex	/^\\long\\def\\ifsetfailxxx #1\\end ifset{\\endgroup\\igno/
+ifsetxxx	tex-src/texinfo.tex	/^\\def\\ifsetxxx #1{\\endgroup$/
+iftex	tex-src/texinfo.tex	/^\\def\\iftex{}$/
+ifusingtt	tex-src/texinfo.tex	/^\\def\\ifusingtt#1#2{\\ifdim \\fontdimen3\\the\\font=0pt/
+ignore	tex-src/texinfo.tex	/^\\def\\ignore{\\begingroup\\ignoresections$/
 ignore_case	c-src/etags.c	266
 ignore_mouse_drag_p	c-src/emacs/src/keyboard.c	1256
-ill=\relax	tex-src/texinfo.tex	/^\\let\\refill=\\relax$/
+ignoresections	tex-src/texinfo.tex	/^\\def\\ignoresections{%$/
+ignorexxx	tex-src/texinfo.tex	/^\\long\\def\\ignorexxx #1\\end ignore{\\endgroup\\ignore/
+ii	tex-src/texinfo.tex	/^\\def\\ii#1{{\\it #1}}		% italic font$/
 immediate_quit	c-src/emacs/src/keyboard.c	174
 impatto	html-src/softwarelibero.html	/^Impatto pratico del software libero$/
 implementation	merc-src/accumulator.m	/^:- implementation.$/
+implicitmath	tex-src/texinfo.tex	/^\\let\\implicitmath = $$/
+inENV	tex-src/texinfo.tex	/^\\newif\\ifENV \\ENVfalse \\def\\inENV{\\ifENV\\relax\\els/
 in_word_set	c-src/etags.c	/^in_word_set (register const char *str, register un/
 inattribute	c-src/etags.c	2400
 inc	cp-src/Range.h	/^  double inc (void) const { return rng_inc;   }$/
+include	tex-src/texinfo.tex	/^\\def\\include{\\parsearg\\includezzz}$/
+includezzz	tex-src/texinfo.tex	/^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/
+indbf	tex-src/texinfo.tex	/^\\let\\indbf=\\indrm$/
 index	c-src/emacs/src/lisp.h	1856
+indexbackslash	tex-src/texinfo.tex	/^  \\def\\indexbackslash{\\rawbackslashxx}$/
+indexbackslash	tex-src/texinfo.tex	/^\\let\\indexbackslash=0  %overridden during \\printin/
+indexdotfill	tex-src/texinfo.tex	/^\\def\\indexdotfill{\\cleaders$/
+indexdummies	tex-src/texinfo.tex	/^\\def\\indexdummies{%$/
+indexdummydots	tex-src/texinfo.tex	/^\\def\\indexdummydots{...}$/
+indexdummyfont	tex-src/texinfo.tex	/^\\def\\indexdummyfont#1{#1}$/
+indexdummytex	tex-src/texinfo.tex	/^\\def\\indexdummytex{TeX}$/
+indexfonts	tex-src/texinfo.tex	/^\\def\\indexfonts{%$/
+indexname	tex-src/texinfo.tex	/^\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\si/
+indexname	tex-src/texinfo.tex	/^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/
+indexnofonts	tex-src/texinfo.tex	/^\\def\\indexnofonts{%$/
+indsc	tex-src/texinfo.tex	/^\\let\\indsc=\\indrm$/
+indsf	tex-src/texinfo.tex	/^\\let\\indsf=\\indrm$/
+indsl	tex-src/texinfo.tex	/^\\let\\indsl=\\indit$/
+indtt	tex-src/texinfo.tex	/^\\let\\indtt=\\ninett$/
 infabsdir	c-src/etags.c	206
 infabsname	c-src/etags.c	205
 infiles	make-src/Makefile	/^infiles = $(filter-out ${NONSRCS},${SRCS}) srclist/
 infname	c-src/etags.c	204
 info	c-src/emacs/src/gmalloc.c	157
 infoPanel	objcpp-src/SimpleCalc.M	/^- infoPanel:sender$/
+infoappendix	tex-src/texinfo.tex	/^\\def\\infoappendix{\\parsearg\\appendixzzz}$/
+infoappendixsec	tex-src/texinfo.tex	/^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/
+infoappendixsubsec	tex-src/texinfo.tex	/^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/
+infoappendixsubsubsec	tex-src/texinfo.tex	/^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/
+infochapter	tex-src/texinfo.tex	/^\\def\\infochapter{\\parsearg\\chapterzzz}$/
+inforef	tex-src/texinfo.tex	/^\\def\\inforef #1{\\inforefzzz #1,,,,**}$/
+inforefzzz	tex-src/texinfo.tex	/^\\def\\inforefzzz #1,#2,#3,#4**{See Info file \\file{/
+infosection	tex-src/texinfo.tex	/^\\def\\infosection{\\parsearg\\sectionzzz}$/
+infosubsection	tex-src/texinfo.tex	/^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/
+infosubsubsection	tex-src/texinfo.tex	/^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/
+infotop	tex-src/texinfo.tex	/^\\def\\infotop{\\parsearg\\unnumberedzzz}$/
+infounnumbered	tex-src/texinfo.tex	/^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/
+infounnumberedsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsec{\\parsearg\\unnumberedseczzz}/
+infounnumberedsubsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsubsec{\\parsearg\\unnumberedsubs/
+infounnumberedsubsubsec	tex-src/texinfo.tex	/^\\def\\infounnumberedsubsubsec{\\parsearg\\unnumbereds/
 init	c-src/etags.c	/^init (void)$/
 init	objc-src/Subprocess.m	/^    andStdErr:(BOOL)wantsStdErr$/
 init	objc-src/Subprocess.m	/^- init:(const char *)subprocessString$/
@@ -3108,6 +2975,7 @@ init_registry	cp-src/clheir.cpp	/^void init_registry(void)$/
 init_tool_bar_items	c-src/emacs/src/keyboard.c	/^init_tool_bar_items (Lisp_Object reuse)$/
 inita	c.c	/^static void inita () {}$/
 initb	c.c	/^static void initb () {}$/
+initial	tex-src/texinfo.tex	/^\\def\\initial #1{%$/
 initial_kboard	c-src/emacs/src/keyboard.c	84
 initialize-new-tags-table	el-src/emacs/lisp/progmodes/etags.el	/^(defun initialize-new-tags-table ()$/
 initialize_goal_store	merc-src/accumulator.m	/^:- func initialize_goal_store(list(hlds_goal), ins/
@@ -3139,7 +3007,14 @@ interface	merc-src/accumulator.m	/^:- interface.$/
 interface_locate	c-src/c.c	/^interface_locate(void)$/
 intern	c-src/emacs/src/lisp.h	/^intern (const char *str)$/
 intern_c_string	c-src/emacs/src/lisp.h	/^intern_c_string (const char *str)$/
+internalBitem	tex-src/texinfo.tex	/^\\def\\internalBitem{\\smallbreak \\parsearg\\itemzzz}$/
+internalBitemx	tex-src/texinfo.tex	/^\\def\\internalBitemx{\\par \\parsearg\\itemzzz}$/
+internalBkitem	tex-src/texinfo.tex	/^\\def\\internalBkitem{\\smallbreak \\parsearg\\kitemzzz/
+internalBkitemx	tex-src/texinfo.tex	/^\\def\\internalBkitemx{\\par \\parsearg\\kitemzzz}$/
+internalBxitem	tex-src/texinfo.tex	/^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/
+internalBxitemx	tex-src/texinfo.tex	/^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/
 internal_last_event_frame	c-src/emacs/src/keyboard.c	228
+internalsetq	tex-src/texinfo.tex	/^\\def\\internalsetq #1#2{'xrdef {#1}{\\csname #2\\endc/
 interned	c-src/emacs/src/lisp.h	672
 interpreters	c-src/etags.c	197
 interrupt_input	c-src/emacs/src/keyboard.c	328
@@ -3174,9 +3049,28 @@ iso_lispy_function_keys	c-src/emacs/src/keyboard.c	5151
 isoperator	prol-src/natded.prolog	/^isoperator(Char):-$/
 isoptab	prol-src/natded.prolog	/^isoptab('%').$/
 iswhite	c-src/etags.c	/^#define	iswhite(c)	(_wht[CHAR (c)]) \/* c is white /
+item	tex-src/texinfo.tex	/^\\def\\item{\\errmessage{@item while not in a table}}/
+item	tex-src/texinfo.tex	/^\\let\\item = \\internalBitem %$/
+item	tex-src/texinfo.tex	/^\\let\\item=\\itemizeitem}$/
 item_properties	c-src/emacs/src/keyboard.c	7568
+itemcontents	tex-src/texinfo.tex	/^\\def\\itemcontents{#1}%$/
+itemfont	tex-src/texinfo.tex	/^\\def\\itemfont{#2}%$/
+itemindex	tex-src/texinfo.tex	/^\\let\\itemindex=#1%$/
+itemize	tex-src/texinfo.tex	/^\\def\\itemize{\\parsearg\\itemizezzz}$/
+itemizeitem	tex-src/texinfo.tex	/^\\def\\itemizeitem{%$/
+itemizey	tex-src/texinfo.tex	/^\\def\\itemizey #1#2{%$/
+itemizezzz	tex-src/texinfo.tex	/^\\def\\itemizezzz #1{%$/
+itemx	tex-src/texinfo.tex	/^\\def\\itemx{\\errmessage{@itemx while not in a table/
+itemx	tex-src/texinfo.tex	/^\\let\\itemx = \\internalBitemx %$/
+itemzzz	tex-src/texinfo.tex	/^\\def\\itemzzz #1{\\begingroup %$/
+ivarheader	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
+ivarx\defivarheader	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
 jmp	c-src/emacs/src/lisp.h	3044
 just_read_file	c-src/etags.c	/^just_read_file (FILE *inf)$/
+kbd	tex-src/texinfo.tex	/^\\def\\kbd##1{\\realbackslash kbd {##1}}$/
+kbd	tex-src/texinfo.tex	/^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/
+kbd	tex-src/texinfo.tex	/^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/
+kbd	tex-src/texinfo.tex	/^\\let\\kbd=\\indexdummyfont$/
 kbd_buffer	c-src/emacs/src/keyboard.c	291
 kbd_buffer_events_waiting	c-src/emacs/src/keyboard.c	/^kbd_buffer_events_waiting (void)$/
 kbd_buffer_get_event	c-src/emacs/src/keyboard.c	/^kbd_buffer_get_event (KBOARD **kbp,$/
@@ -3187,9 +3081,14 @@ kbd_buffer_store_help_event	c-src/emacs/src/keyboard.c	/^kbd_buffer_store_help_e
 kbd_buffer_unget_event	c-src/emacs/src/keyboard.c	/^kbd_buffer_unget_event (register struct input_even/
 kbd_fetch_ptr	c-src/emacs/src/keyboard.c	297
 kbd_store_ptr	c-src/emacs/src/keyboard.c	302
+kbdfoo	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
 kboard	c-src/emacs/src/keyboard.c	860
 kboard_stack	c-src/emacs/src/keyboard.c	858
 kboard_stack	c-src/emacs/src/keyboard.c	864
+key	tex-src/texinfo.tex	/^\\def\\key #1{{\\tt \\exhyphenpenalty=10000\\uppercase{/
+key	tex-src/texinfo.tex	/^\\def\\key##1{\\realbackslash key {##1}}$/
+key	tex-src/texinfo.tex	/^\\def\\key##1{\\realbackslash key {##1}}%$/
+key	tex-src/texinfo.tex	/^\\let\\key=\\indexdummyfont$/
 key_and_value	c-src/emacs/src/lisp.h	1868
 keyremap	c-src/emacs/src/keyboard.c	8742
 keyremap	c-src/emacs/src/keyboard.c	8754
@@ -3204,6 +3103,12 @@ keywords	y-src/cccp.y	114
 keywords	y-src/cccp.y	306
 kind	c-src/emacs/src/keyboard.c	11024
 kind	c-src/h.h	46
+kindex	tex-src/texinfo.tex	/^\\def\\kindex {\\kyindex}$/
+kitem	tex-src/texinfo.tex	/^\\def\\kitem{\\errmessage{@kitem while not in a table/
+kitem	tex-src/texinfo.tex	/^\\let\\kitem = \\internalBkitem %$/
+kitemx	tex-src/texinfo.tex	/^\\def\\kitemx{\\errmessage{@kitemx while not in a tab/
+kitemx	tex-src/texinfo.tex	/^\\let\\kitemx = \\internalBkitemx %$/
+kitemzzz	tex-src/texinfo.tex	/^\\def\\kitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/
 kset_echo_string	c-src/emacs/src/keyboard.c	/^kset_echo_string (struct kboard *kb, Lisp_Object v/
 kset_kbd_queue	c-src/emacs/src/keyboard.c	/^kset_kbd_queue (struct kboard *kb, Lisp_Object val/
 kset_keyboard_translate_table	c-src/emacs/src/keyboard.c	/^kset_keyboard_translate_table (struct kboard *kb, /
@@ -3213,6 +3118,9 @@ kset_local_function_key_map	c-src/emacs/src/keyboard.c	/^kset_local_function_key
 kset_overriding_terminal_local_map	c-src/emacs/src/keyboard.c	/^kset_overriding_terminal_local_map (struct kboard /
 kset_real_last_command	c-src/emacs/src/keyboard.c	/^kset_real_last_command (struct kboard *kb, Lisp_Ob/
 kset_system_key_syms	c-src/emacs/src/keyboard.c	/^kset_system_key_syms (struct kboard *kb, Lisp_Obje/
+l	tex-src/texinfo.tex	/^\\def\\l#1{{\\li #1}\\null}		% $/
+l	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
+labelspace	tex-src/texinfo.tex	/^\\def\\labelspace{\\hskip1em \\relax}$/
 lang	c-src/etags.c	208
 lang	c-src/etags.c	251
 lang	c-src/etags.c	259
@@ -3233,7 +3141,11 @@ lasta	c.c	272
 lastargmargin	tex-src/texinfo.tex	/^\\newskip\\deflastargmargin \\deflastargmargin=18pt$/
 lastargmargin	tex-src/texinfo.tex	/^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/
 lastb	c.c	278
+lastnode	tex-src/texinfo.tex	/^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/
+lastnode	tex-src/texinfo.tex	/^\\let\\lastnode=\\relax$/
+lastnode	tex-src/texinfo.tex	/^\\let\\lastnode=\\relax}$/
 lb	c-src/etags.c	2923
+lbrb	tex-src/texinfo.tex	/^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/
 lbs	c-src/etags.c	2924
 lce	php-src/lce_functions.php	/^      function lce()$/
 lce_bindtextdomain	php-src/lce_functions.php	/^      function lce_bindtextdomain($d_name, $d_path/
@@ -3249,12 +3161,15 @@ len	c-src/etags.c	237
 length	c-src/etags.c	2495
 length	y-src/cccp.y	113
 length	y-src/cccp.y	44
+less	tex-src/texinfo.tex	/^\\def\\less{\\realbackslash less}$/
+less	tex-src/texinfo.tex	/^\\def\\less{\\realbackslash less}%$/
 let	c-src/emacs/src/lisp.h	2981
 letter	tex-src/texinfo.tex	/^  {#1}{Appendix \\appendixletter}{\\noexpand\\folio}}/
 letter	tex-src/texinfo.tex	/^  {\\appendixletter}$/
 letter	tex-src/texinfo.tex	/^  {\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\th/
 letter	tex-src/texinfo.tex	/^\\chapmacro {#1}{Appendix \\appendixletter}%$/
 letter	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\secheading {#1}{\\appendixlet/
+letter	tex-src/texinfo.tex	/^\\global\\advance \\appendixno by 1 \\message{Appendix/
 letter	tex-src/texinfo.tex	/^\\subsecheading {#1}{\\appendixletter}{\\the\\secno}{\\/
 letter	tex-src/texinfo.tex	/^{#1}{\\appendixletter}{\\the\\secno}{\\noexpand\\folio}/
 letter	tex-src/texinfo.tex	/^{#1}{\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\/
@@ -3262,6 +3177,7 @@ letter:	tex-src/texinfo.tex	/^\\xdef\\thischapter{Appendix \\appendixletter: \\n
 level	c-src/emacs/src/lisp.h	3153
 lex	prol-src/natded.prolog	/^lex(W,SynOut,Sem):-$/
 lexptr	y-src/cccp.y	332
+li	tex-src/texinfo.tex	/^\\let\\li = \\sf % Sometimes we call it \\li, not \\sf./
 libs	merc-src/accumulator.m	/^:- import_module libs.$/
 licenze	html-src/softwarelibero.html	/^Licenze d'uso di un programma$/
 limit	cp-src/Range.h	/^  double limit (void) const { return rng_limit; }$/
@@ -3274,9 +3190,12 @@ linebuffer_init	c-src/etags.c	/^linebuffer_init (linebuffer *lbp)$/
 linebuffer_setlen	c-src/etags.c	/^linebuffer_setlen (linebuffer *lbp, int toksize)$/
 lineno	c-src/emacs/src/lisp.h	3147
 lineno	c-src/etags.c	2506
+linenumber	tex-src/texinfo.tex	/^  \\def\\linenumber{\\the\\inputlineno:\\space}$/
+linenumber	tex-src/texinfo.tex	/^  \\let\\linenumber = \\empty % Non-3.0.$/
 linepos	c-src/etags.c	2507
 linepos	c-src/etags.c	2922
 links	html-src/software.html	/^Links to interesting software$/
+lisp	tex-src/texinfo.tex	/^\\def\\lisp{\\aboveenvbreak$/
 lisp_eval_depth	c-src/emacs/src/lisp.h	3045
 lisp_h_CHECK_LIST_CONS	c-src/emacs/src/lisp.h	/^#define lisp_h_CHECK_LIST_CONS(x, y) CHECK_TYPE (C/
 lisp_h_CHECK_NUMBER	c-src/emacs/src/lisp.h	/^#define lisp_h_CHECK_NUMBER(x) CHECK_TYPE (INTEGER/
@@ -3310,6 +3229,7 @@ lisp_h_XTYPE	c-src/emacs/src/lisp.h	/^# define lisp_h_XTYPE(a) ((enum Lisp_Type)
 lisp_h_XUNTAG	c-src/emacs/src/lisp.h	/^# define lisp_h_XUNTAG(a, type) ((void *) (intptr_/
 lisp_h_check_cons_list	c-src/emacs/src/lisp.h	/^# define lisp_h_check_cons_list() ((void) 0)$/
 lisp_h_make_number	c-src/emacs/src/lisp.h	/^# define lisp_h_make_number(n) \\$/
+lisppar	tex-src/texinfo.tex	/^\\gdef\\lisppar{\\null\\endgraf}}$/
 lispy_accent_codes	c-src/emacs/src/keyboard.c	4634
 lispy_accent_keys	c-src/emacs/src/keyboard.c	4741
 lispy_drag_n_drop_names	c-src/emacs/src/keyboard.c	5181
@@ -3336,18 +3256,29 @@ loadPORManager	php-src/lce_functions.php	/^  function &loadPORManager()$/
 local_if_set	c-src/emacs/src/lisp.h	2338
 location	cp-src/clheir.hpp	/^    location() { }$/
 location	cp-src/clheir.hpp	33
+loggingall	tex-src/texinfo.tex	/^\\def\\loggingall{\\tracingcommands2 \\tracingstats2 $/
+look	tex-src/texinfo.tex	/^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/
 lookup	y-src/cccp.y	/^lookup (name, len, hash)$/
 lookup_call	merc-src/accumulator.m	/^:- pred lookup_call(accu_goal_store::in, accu_goal/
+losespace	tex-src/texinfo.tex	/^\\def\\losespace #1{#1}$/
 lowcase	c-src/etags.c	/^#define lowcase(c)	tolower (CHAR (c))$/
+lowercaseenumerate	tex-src/texinfo.tex	/^\\def\\lowercaseenumerate{%$/
 lucid_event_type_list_p	c-src/emacs/src/keyboard.c	/^lucid_event_type_list_p (Lisp_Object object)$/
+lvvmode	tex-src/texinfo.tex	/^\\def\\lvvmode{\\vbox to 0pt{}}$/
 mabort	c-src/emacs/src/gmalloc.c	/^mabort (enum mcheck_status status)$/
 mach_host_self	c-src/machsyscalls.h	/^SYSCALL (mach_host_self, -29,$/
 mach_msg_trap	c-src/machsyscalls.h	/^SYSCALL (mach_msg_trap, -25,$/
 mach_reply_port	c-src/machsyscalls.h	/^SYSCALL (mach_reply_port, -26,$/
 mach_task_self	c-src/machsyscalls.h	/^SYSCALL (mach_task_self, -28,$/
 mach_thread_self	c-src/machsyscalls.h	/^SYSCALL (mach_thread_self, -27,$/
+macheader	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
+macx\defmacheader	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
 magic	c-src/emacs/src/gmalloc.c	1863
+mainmagstep	tex-src/texinfo.tex	/^\\let\\mainmagstep=\\magstep1$/
+mainmagstep	tex-src/texinfo.tex	/^\\let\\mainmagstep=\\magstephalf$/
 maintaining.info	make-src/Makefile	/^maintaining.info: maintaining.texi$/
+majorheading	tex-src/texinfo.tex	/^\\def\\majorheading{\\parsearg\\majorheadingzzz}$/
+majorheadingzzz	tex-src/texinfo.tex	/^\\def\\majorheadingzzz #1{%$/
 make-abbrev-table	c-src/abbrev.c	/^DEFUN ("make-abbrev-table", Fmake_abbrev_table, Sm/
 make_C_tag	c-src/etags.c	/^make_C_tag (bool isfun)$/
 make_coor	prol-src/natded.prolog	/^make_coor(s(_),Alpha,Sem1,Sem2,Alpha@Sem1@Sem2).$/
@@ -3388,6 +3319,7 @@ map_word	prol-src/natded.prolog	/^map_word([[_]|Ws],Exp):-$/
 mapping	html-src/algrthms.html	/^Mapping the Channel Symbols$/
 mapsyn	prol-src/natded.prolog	/^mapsyn(A\/B,AM\/BM):-$/
 mark_kboards	c-src/emacs/src/keyboard.c	/^mark_kboards (void)$/
+math	tex-src/texinfo.tex	/^\\def\\math#1{\\implicitmath #1\\implicitmath}$/
 max	c-src/emacs/src/lisp.h	/^#define max(a, b) ((a) > (b) ? (a) : (b))$/
 max	c-src/emacs/src/lisp.h	58
 max	c.c	/^__attribute__ ((always_inline)) max (int a, int b)/
@@ -3410,6 +3342,7 @@ memalign	c-src/emacs/src/gmalloc.c	/^memalign (size_t alignment, size_t size)$/
 member	prol-src/natded.prolog	/^member(X,[X|_]).$/
 member_lessthan_goalid	merc-src/accumulator.m	/^:- pred member_lessthan_goalid(accu_goal_store::in/
 memclear	c-src/emacs/src/lisp.h	/^memclear (void *p, ptrdiff_t nbytes)$/
+menu	tex-src/texinfo.tex	/^\\long\\def\\menu #1\\end menu{}$/
 menu_bar_item	c-src/emacs/src/keyboard.c	/^menu_bar_item (Lisp_Object key, Lisp_Object item, /
 menu_bar_items	c-src/emacs/src/keyboard.c	/^menu_bar_items (Lisp_Object old)$/
 menu_bar_items_index	c-src/emacs/src/keyboard.c	7369
@@ -3419,6 +3352,11 @@ menu_item_eval_property	c-src/emacs/src/keyboard.c	/^menu_item_eval_property (Li
 menu_item_eval_property_1	c-src/emacs/src/keyboard.c	/^menu_item_eval_property_1 (Lisp_Object arg)$/
 menu_separator_name_p	c-src/emacs/src/keyboard.c	/^menu_separator_name_p (const char *label)$/
 metasource	c-src/etags.c	198
+methodheader	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
+methodx\defmethodheader	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
+methparsebody\Edeffn	tex-src/texinfo.tex	/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
+methparsebody\Edefmethod	tex-src/texinfo.tex	/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
+methparsebody\Edeftypefn	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
 min	c-src/emacs/src/gmalloc.c	/^#define min(a, b) ((a) < (b) ? (a) : (b))$/
 min	c-src/emacs/src/lisp.h	/^#define min(a, b) ((a) < (b) ? (a) : (b))$/
 min	c-src/emacs/src/lisp.h	57
@@ -3426,6 +3364,7 @@ min	cp-src/conway.cpp	/^#define min(x,y)  ((x > y) ? y : x)$/
 min_args	c-src/emacs/src/lisp.h	1686
 min_char	c-src/emacs/src/lisp.h	1621
 minus	cp-src/functions.cpp	/^void Date::minus ( int days , int month , int year/
+minus	tex-src/texinfo.tex	/^\\def\\minus{$-$}$/
 miti	html-src/softwarelibero.html	/^Sfatiamo alcuni miti$/
 modifier_names	c-src/emacs/src/keyboard.c	6319
 modifier_symbols	c-src/emacs/src/keyboard.c	6327
@@ -3451,7 +3390,9 @@ my_struct	c-src/h.h	91
 my_struct	c.c	226
 my_typedef	c-src/h.h	93
 my_typedef	c.c	228
+mylbrace	tex-src/texinfo.tex	/^\\def\\mylbrace {{\\tt \\char '173}}$/
 mypi	forth-src/test-forth.fth	/^synonym mypi fconst$/
+myrbrace	tex-src/texinfo.tex	/^\\def\\myrbrace {{\\tt \\char '175}}$/
 n	c-src/exit.c	28
 n	c-src/exit.strange_suffix	28
 name	c-src/emacs/src/keyboard.c	7241
@@ -3481,21 +3422,28 @@ name	tex-src/texinfo.tex	/^\\begingroup\\defname {\\code{#1} #2}{Function}%$/
 name	tex-src/texinfo.tex	/^\\begingroup\\defname {\\code{#1} #2}{Variable}%$/
 name	tex-src/texinfo.tex	/^\\begingroup\\defname {\\code{#2} #3}{#1}$/
 name	tex-src/texinfo.tex	/^\\begingroup\\defname {\\code{#2} #3}{#1}%$/
+name	tex-src/texinfo.tex	/^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/
+name	tex-src/texinfo.tex	/^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/
 name	y-src/cccp.y	113
 name	y-src/cccp.y	43
 named	c-src/etags.c	2505
 namestringequal	pas-src/common.pas	/^function namestringequal;(*(var Name1,Name2 : Name/
 nargs	c-src/emacs/src/lisp.h	2987
+need	tex-src/texinfo.tex	/^\\def\\need{\\parsearg\\needx}$/
 need_adjustment	c-src/emacs/src/lisp.h	1986
+needx	tex-src/texinfo.tex	/^\\def\\needx#1{%$/
 neighbors	cp-src/clheir.hpp	59
 nelem	cp-src/Range.h	/^  int nelem (void) const { return rng_nelem; }$/
 nestlev	c-src/etags.c	2525
 new	objc-src/PackInsp.m	/^+new$/
 new	perl-src/htlmify-cystic	163
 new_tag	perl-src/htlmify-cystic	18
+newcodeindex	tex-src/texinfo.tex	/^\\def\\newcodeindex #1{$/
+newindex	tex-src/texinfo.tex	/^\\def\\newindex #1{$/
 newlb	c-src/etags.c	2930
 newlinepos	c-src/etags.c	2932
 newtextstring	pas-src/common.pas	/^function newtextstring; (*: TextString;*)$/
+newwrite	tex-src/texinfo.tex	/^\\gdef\\newwrite{\\alloc@7\\write\\chardef\\sixt@@n}}$/
 next	c-src/emacs/src/gmalloc.c	164
 next	c-src/emacs/src/gmalloc.c	188
 next	c-src/emacs/src/gmalloc.c	198
@@ -3510,6 +3458,10 @@ next	c-src/emacs/src/lisp.h	3134
 next	c-src/emacs/src/lisp.h	700
 next	c-src/etags.c	203
 next	c.c	174
+next	tex-src/texinfo.tex	/^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else /
+next	tex-src/texinfo.tex	/^\\def\\next##1{}\\next}$/
+next	tex-src/texinfo.tex	/^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/
+next	tex-src/texinfo.tex	/^\\edef\\next{\\write\\auxfile{\\internalsetq {#1}{#2}}}/
 next	y-src/cccp.y	42
 next-file	el-src/emacs/lisp/progmodes/etags.el	/^(defun next-file (&optional initialize novisit)$/
 next-file-list	el-src/emacs/lisp/progmodes/etags.el	/^(defvar next-file-list nil$/
@@ -3520,26 +3472,44 @@ next_weak	c-src/emacs/src/lisp.h	1875
 nextfree	c-src/emacs/src/lisp.h	3029
 nfree	c-src/emacs/src/gmalloc.c	150
 nl	c-src/etags.c	2521
+nm	tex-src/testenv.tex	/^\\newcommand{\\nm}[2]{\\nomenclature{#1}{#2}}$/
+no	tex-src/texinfo.tex	/^\\def\\appendixletter{\\char\\the\\appendixno}$/
 no	tex-src/texinfo.tex	/^\\global\\advance \\appendixno by 1 \\message{Appendix/
 no	tex-src/texinfo.tex	/^\\ifnum\\secno=0 Appendix\\xreftie'char\\the\\appendixn/
 no	tex-src/texinfo.tex	/^\\newcount \\appendixno  \\appendixno = `\\@$/
-no.\the\secno	tex-src/texinfo.tex	/^\\else \\ifnum \\subsecno=0 Section\\xreftie'char\\the\\/
-no.\the\secno.\the\subsecno	tex-src/texinfo.tex	/^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/
-no.\the\secno.\the\subsecno.\the\subsubsecno	tex-src/texinfo.tex	/^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/
+no.\the	tex-src/texinfo.tex	/^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/
+no.\the	tex-src/texinfo.tex	/^\\else \\ifnum \\subsecno=0 Section\\xreftie'char\\the\\/
 no_argument	c-src/getopt.h	89
 no_lang_help	c-src/etags.c	707
 no_sub	c-src/emacs/src/regex.h	387
 nocase_tail	c-src/etags.c	/^nocase_tail (const char *cp)$/
 node	c-src/etags.c	225
+node	tex-src/texinfo.tex	/^\\def\\node{\\ENVcheck\\parsearg\\nodezzz}$/
 node_st	c-src/etags.c	214
 noderef	tex-src/texinfo.tex	/^\\appendixnoderef %$/
+nodexxx	tex-src/texinfo.tex	/^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/
+nodezzz	tex-src/texinfo.tex	/^\\def\\nodezzz#1{\\nodexxx [#1,]}$/
+nofillexdent	tex-src/texinfo.tex	/^\\def\\nofillexdent{\\parsearg\\nofillexdentyyy}$/
+nofillexdentyyy	tex-src/texinfo.tex	/^\\def\\nofillexdentyyy #1{{\\advance \\leftskip by -\\e/
+nofonts	tex-src/texinfo.tex	/^{\\chapternofonts%$/
 nofonts	tex-src/texinfo.tex	/^{\\indexnofonts$/
-nofonts%	tex-src/texinfo.tex	/^{\\chapternofonts%$/
+nonarrowing	tex-src/texinfo.tex	/^	\\let\\nonarrowing=\\comment$/
+nonarrowing	tex-src/texinfo.tex	/^\\let\\nonarrowing=\\relax$/
 none_help	c-src/etags.c	703
+normalbackslash	tex-src/texinfo.tex	/^\\def\\normalbackslash{{\\tt\\rawbackslashxx}}$/
+normalcaret	tex-src/texinfo.tex	/^\\def\\normalcaret{^}$/
+normaldoublequote	tex-src/texinfo.tex	/^\\def\\normaldoublequote{"}$/
+normalgreater	tex-src/texinfo.tex	/^\\def\\normalgreater{>}$/
 normalize	prol-src/natded.prolog	/^normalize(M,MNorm):-$/
 normalize_fresh	prol-src/natded.prolog	/^normalize_fresh(M,N):-$/
 normalize_tree	prol-src/natded.prolog	/^normalize_tree(tree(Rule,Syn:Sem,Trees),$/
 normalize_trees	prol-src/natded.prolog	/^normalize_trees([],[]).$/
+normalless	tex-src/texinfo.tex	/^\\def\\normalless{<}$/
+normalparens	tex-src/texinfo.tex	/^\\gdef\\normalparens{\\boldbrax\\let&=\\ampnr}$/
+normalplus	tex-src/texinfo.tex	/^\\def\\normalplus{+}$/
+normaltilde	tex-src/texinfo.tex	/^\\def\\normaltilde{~}$/
+normalunderscore	tex-src/texinfo.tex	/^\\def\\normalunderscore{_}$/
+normalverticalbar	tex-src/texinfo.tex	/^\\def\\normalverticalbar{|}$/
 nosave	pyt-src/server.py	/^    def nosave(self):$/
 not_bol	c-src/emacs/src/regex.h	391
 not_eol	c-src/emacs/src/regex.h	394
@@ -3550,6 +3520,8 @@ notag4	c-src/dostorture.c	45
 notag4	c-src/torture.c	45
 notinname	c-src/etags.c	/^#define notinname(c)	(_nin[CHAR (c)]) \/* c is not /
 npending	c-src/emacs/src/keyboard.c	7244
+nsbot	tex-src/texinfo.tex	/^\\def\\nsbot{\\vbox$/
+nstop	tex-src/texinfo.tex	/^\\def\\nstop{\\vbox$/
 ntool_bar_items	c-src/emacs/src/keyboard.c	7974
 numOfChannels	cp-src/c.C	1
 num_columns	cp-src/conway.cpp	16
@@ -3558,8 +3530,15 @@ num_regs	c-src/emacs/src/regex.h	430
 num_rows	cp-src/conway.cpp	15
 numberKeys	objcpp-src/SimpleCalc.M	/^- numberKeys:sender$/
 number_len	c-src/etags.c	/^static int number_len (long) ATTRIBUTE_CONST;$/
+numberedsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsec{\\parsearg\\seczzz}$/
+numberedsubsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsubsec{\\parsearg\\numberedsubsec/
+numberedsubseczzz	tex-src/texinfo.tex	/^\\def\\numberedsubseczzz #1{\\seccheck{subsection}%$/
+numberedsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\numberedsubsubsec{\\parsearg\\numberedsub/
+numberedsubsubseczzz	tex-src/texinfo.tex	/^\\def\\numberedsubsubseczzz #1{\\seccheck{subsubsecti/
 numbervars	prol-src/natded.prolog	/^numbervars(X):-$/
+numericenumerate	tex-src/texinfo.tex	/^\\def\\numericenumerate{%$/
 nvars	c-src/emacs/src/lisp.h	3140
+obeyedspace	tex-src/texinfo.tex	/^\\gdef\\obeyedspace{\\ }$/
 objdef	c-src/etags.c	2484
 object	c-src/emacs/src/lisp.h	2128
 object_registry	cp-src/clheir.cpp	10
@@ -3570,6 +3549,12 @@ obstack_chunk_free	y-src/parse.y	48
 ocatseen	c-src/etags.c	2477
 octave_MDiagArray2_h	cp-src/MDiagArray2.h	29
 octave_Range_h	cp-src/Range.h	24
+oddfooting	tex-src/texinfo.tex	/^\\def\\oddfooting{\\parsearg\\oddfootingxxx}$/
+oddfootingxxx	tex-src/texinfo.tex	/^\\gdef\\oddfootingxxx #1{\\oddfootingyyy #1@|@|@|@|\\f/
+oddfootingyyy	tex-src/texinfo.tex	/^\\gdef\\oddfootingyyy #1@|#2@|#3@|#4\\finish{%$/
+oddheading	tex-src/texinfo.tex	/^\\def\\oddheading{\\parsearg\\oddheadingxxx}$/
+oddheadingxxx	tex-src/texinfo.tex	/^\\gdef\\oddheadingxxx #1{\\oddheadingyyy #1@|@|@|@|\\f/
+oddheadingyyy	tex-src/texinfo.tex	/^\\gdef\\oddheadingyyy #1@|#2@|#3@|#4\\finish{%$/
 oediff	make-src/Makefile	/^oediff: OTAGS ETAGS ${infiles}$/
 offset	c-src/emacs/src/lisp.h	2305
 offset	c-src/emacs/src/lisp.h	2365
@@ -3580,15 +3565,21 @@ oinbody	c-src/etags.c	2478
 ok	objc-src/PackInsp.m	/^-ok:sender$/
 ok_to_echo_at_next_pause	c-src/emacs/src/keyboard.c	159
 old_value	c-src/emacs/src/lisp.h	2980
+oldpage	tex-src/texinfo.tex	/^   \\let\\oldpage = \\page$/
 omethodcolon	c-src/etags.c	2481
 omethodparm	c-src/etags.c	2482
 omethodsign	c-src/etags.c	2479
 omethodtag	c-src/etags.c	2480
+one	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
+onepageout	tex-src/texinfo.tex	/^\\def\\cropmarks{\\let\\onepageout=\\croppageout }$/
+onepageout	tex-src/texinfo.tex	/^\\def\\onepageout#1{\\hoffset=\\normaloffset$/
 onone	c-src/etags.c	2472
 oparenseen	c-src/etags.c	2476
 open	objc-src/PackInsp.m	/^-open:sender$/
 open-dribble-file	c-src/emacs/src/keyboard.c	/^DEFUN ("open-dribble-file", Fopen_dribble_file, So/
 openInWorkspace	objc-src/PackInsp.m	/^static void openInWorkspace(const char *filename)$/
+opencontents	tex-src/texinfo.tex	/^\\def\\opencontents{\\openout \\contentsfile = \\jobnam/
+openindices	tex-src/texinfo.tex	/^\\def\\openindices{%$/
 operationKeys	objcpp-src/SimpleCalc.M	/^- operationKeys:sender$/
 operator	y-src/cccp.y	438
 operator ++	cp-src/functions.cpp	/^Date & Date::operator ++ ( void ){$/
@@ -3610,11 +3601,20 @@ operator int	cp-src/fail.C	/^			   operator int() const {return x;}$/
 operator+	cp-src/c.C	/^  A operator+(A& a) {};$/
 operator+	cp-src/c.C	/^const A& A::operator+(const A&) { }$/
 operator+	cp-src/c.C	/^void operator+(int, int) {}$/
-opparsebody\Edefop\defopx\defopheader\defoptype	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
+opheader\defoptype	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
+opnested	tex-src/texinfo.tex	/^\\gdef\\opnested{\\char`\\(\\global\\advance\\parencount /
+opnr	tex-src/texinfo.tex	/^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} /
+opparsebody\Edefop	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
+oprm	tex-src/texinfo.tex	/^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested /
 oprotocol	c-src/etags.c	2473
+optheader	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
 option	c-src/getopt.h	73
 optional_argument	c-src/getopt.h	91
-opvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
+optx\defoptheader	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
+optype	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{\\defoptype{} on #1}%$/
+optype	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
+opvarparsebody\Edefcv	tex-src/texinfo.tex	/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
+opx\defopheader	tex-src/texinfo.tex	/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
 ord_add_element	prol-src/ordsets.prolog	/^ord_add_element([], Element, [Element]).$/
 ord_del_element	prol-src/ordsets.prolog	/^ord_del_element([], _, []).$/
 ord_disjoint	prol-src/ordsets.prolog	/^ord_disjoint(Set1, Set2) :-$/
@@ -3660,8 +3660,20 @@ pMd	c-src/emacs/src/lisp.h	155
 pMu	c-src/emacs/src/lisp.h	151
 pMu	c-src/emacs/src/lisp.h	156
 p_next	c-src/etags.c	258
+page	tex-src/texinfo.tex	/^      \\let\\page = \\oldpage$/
+page	tex-src/texinfo.tex	/^   \\def\\page{%$/
+page	tex-src/texinfo.tex	/^\\def\\page{\\par\\vfill\\supereject}$/
+pagealignmacro	tex-src/texinfo.tex	/^\\global\\let\\pagealignmacro=\\chapoddpage$/
+pagealignmacro	tex-src/texinfo.tex	/^\\global\\let\\pagealignmacro=\\chappager$/
+pagealignmacro	tex-src/texinfo.tex	/^\\global\\let\\pagealignmacro=\\chappager}$/
+pagebody	tex-src/texinfo.tex	/^\\def\\pagebody#1{\\vbox to\\pageheight{\\boxmaxdepth=\\/
+pagecontents	tex-src/texinfo.tex	/^\\gdef\\pagecontents#1{\\ifvoid\\topins\\else\\unvbox\\to/
 pagesize	c-src/emacs/src/gmalloc.c	1703
+pagesofar	tex-src/texinfo.tex	/^\\def\\pagesofar{\\unvbox\\partialpage %$/
 pair	merc-src/accumulator.m	/^:- import_module pair.$/
+par	tex-src/texinfo.tex	/^\\let\\par=\\lisppar$/
+par	tex-src/texinfo.tex	/^{\\let\\par=\\endgraf \\smallbreak}%$/
+paragraphindent	tex-src/texinfo.tex	/^\\let\\paragraphindent=\\comment$/
 parent	c-src/emacs/src/keyboard.c	8745
 parent	c-src/emacs/src/lisp.h	1590
 parse	prol-src/natded.prolog	/^parse(Ws,Cat):-$/
@@ -3680,8 +3692,20 @@ parse_return_error	y-src/cccp.y	70
 parse_solitary_modifier	c-src/emacs/src/keyboard.c	/^parse_solitary_modifier (Lisp_Object symbol)$/
 parse_tool_bar_item	c-src/emacs/src/keyboard.c	/^parse_tool_bar_item (Lisp_Object key, Lisp_Object /
 parse_tree	merc-src/accumulator.m	/^:- import_module parse_tree.$/
+parsearg	tex-src/texinfo.tex	/^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/
+parseargdiscardspace	tex-src/texinfo.tex	/^\\gdef\\parseargdiscardspace {\\begingroup\\obeylines\\/
+parseargline	tex-src/texinfo.tex	/^\\def\\parseargline{\\begingroup \\obeylines \\parsearg/
+parsearglinex	tex-src/texinfo.tex	/^\\gdef\\parsearglinex #1^^M{\\endgroup \\next {#1}}}$/
+parseargx	tex-src/texinfo.tex	/^\\def\\parseargx{%$/
+parsebody\Edefmac	tex-src/texinfo.tex	/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
+parsebody\Edefspec	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
+parsebody\Edeftypefun	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
+parsebody\Edefun	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
 pat	c-src/etags.c	262
 pattern	c-src/etags.c	260
+pchapsepmacro	tex-src/texinfo.tex	/^\\global\\let\\pchapsepmacro=\\chapbreak$/
+pchapsepmacro	tex-src/texinfo.tex	/^\\global\\let\\pchapsepmacro=\\chapoddpage$/
+pchapsepmacro	tex-src/texinfo.tex	/^\\global\\let\\pchapsepmacro=\\chappager$/
 pdlcount	c-src/emacs/src/lisp.h	3046
 pending-delete-mode	el-src/TAGTEST.EL	/^(defalias 'pending-delete-mode 'delete-selection-m/
 pending_funcalls	c-src/emacs/src/keyboard.c	4377
@@ -3689,16 +3713,19 @@ pending_signals	c-src/emacs/src/keyboard.c	80
 pfatal	c-src/etags.c	/^pfatal (const char *s1)$/
 pfdset	c-src/h.h	57
 pfnote	c-src/etags.c	/^pfnote (char *name, bool is_func, char *linestart,/
+pindex	tex-src/texinfo.tex	/^\\def\\pindex {\\pgindex}$/
 pinned	c-src/emacs/src/lisp.h	679
 plain_C_entries	c-src/etags.c	/^plain_C_entries (FILE *inf)$/
 plain_C_suffixes	c-src/etags.c	643
 plainc	c-src/etags.c	2934
+plainsecheading	tex-src/texinfo.tex	/^\\def\\plainsecheading #1{\\secheadingi {#1}}$/
 plist	c-src/emacs/src/lisp.h	2040
 plist	c-src/emacs/src/lisp.h	697
 plus	cp-src/functions.cpp	/^void Date::plus ( int days , int month , int year /
 plus	go-src/test1.go	5
 plusvalseq	prol-src/natded.prolog	/^plusvalseq([]) --> [].$/
 point	forth-src/test-forth.fth	/^BEGIN-STRUCTURE point \\ create the named structure/
+point	tex-src/texinfo.tex	/^\\def\\point{$\\star$}$/
 pointer	c-src/emacs/src/lisp.h	2125
 poll_for_input	c-src/emacs/src/keyboard.c	/^poll_for_input (struct atimer *timer)$/
 poll_for_input_1	c-src/emacs/src/keyboard.c	/^poll_for_input_1 (void)$/
@@ -3748,10 +3775,18 @@ prev	c-src/emacs/src/gmalloc.c	165
 prev	c-src/emacs/src/gmalloc.c	189
 prev	c-src/emacs/src/lisp.h	2191
 prev	c.c	175
+primary	tex-src/texinfo.tex	/^\\def\\primary #1{\\line{#1\\hfil}}$/
+print	tex-src/texinfo.tex	/^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/
+print	tex-src/texinfo.tex	/^\\def\\print{\\realbackslash print}$/
 printClassification	php-src/lce_functions.php	/^      function printClassification()$/
 print_help	c-src/etags.c	/^print_help (argument *argbuffer)$/
 print_language_names	c-src/etags.c	/^print_language_names (void)$/
 print_version	c-src/etags.c	/^print_version (void)$/
+printedmanual	tex-src/texinfo.tex	/^\\def\\printedmanual{\\ignorespaces #5}%$/
+printedmanual	tex-src/texinfo.tex	/^section ``\\printednodename'' in \\cite{\\printedmanu/
+printednodename	tex-src/texinfo.tex	/^\\def\\printednodename{\\ignorespaces #1}%$/
+printednodename	tex-src/texinfo.tex	/^\\def\\printednodename{\\ignorespaces #3}%$/
+printindex	tex-src/texinfo.tex	/^\\def\\printindex{\\parsearg\\doprintindex}$/
 printmax_t	c-src/emacs/src/lisp.h	148
 printmax_t	c-src/emacs/src/lisp.h	153
 proc	c-src/h.h	87
@@ -3766,6 +3801,21 @@ prolog_pr	c-src/etags.c	/^prolog_pr (char *s, char *last)$/
 prolog_skip_comment	c-src/etags.c	/^prolog_skip_comment (linebuffer *plb, FILE *inf)$/
 prop	c-src/etags.c	209
 protect_malloc_state	c-src/emacs/src/gmalloc.c	/^protect_malloc_state (int protect_p)$/
+ptexL	tex-src/texinfo.tex	/^\\let\\ptexL=\\L$/
+ptexb	tex-src/texinfo.tex	/^\\let\\ptexb=\\b$/
+ptexbullet	tex-src/texinfo.tex	/^\\let\\ptexbullet=\\bullet$/
+ptexc	tex-src/texinfo.tex	/^\\let\\ptexc=\\c$/
+ptexdot	tex-src/texinfo.tex	/^\\let\\ptexdot=\\.$/
+ptexdots	tex-src/texinfo.tex	/^\\let\\ptexdots=\\dots$/
+ptexend	tex-src/texinfo.tex	/^\\let\\ptexend=\\end$/
+ptexequiv	tex-src/texinfo.tex	/^\\let\\ptexequiv = \\equiv$/
+ptexfootnote	tex-src/texinfo.tex	/^\\let\\ptexfootnote=\\footnote$/
+ptexi	tex-src/texinfo.tex	/^\\let\\ptexi=\\i$/
+ptexl	tex-src/texinfo.tex	/^\\let\\ptexl=\\l$/
+ptexlbrace	tex-src/texinfo.tex	/^\\let\\ptexlbrace=\\{$/
+ptexrbrace	tex-src/texinfo.tex	/^\\let\\ptexrbrace=\\}$/
+ptexstar	tex-src/texinfo.tex	/^\\let\\ptexstar=\\*$/
+ptext	tex-src/texinfo.tex	/^\\let\\ptext=\\t$/
 pthread_mutexattr_setprio_ceiling/f	ada-src/2ataspri.adb	/^   function pthread_mutexattr_setprio_ceiling$/
 pthread_mutexattr_setprotocol/f	ada-src/2ataspri.adb	/^   function pthread_mutexattr_setprotocol$/
 purpose	c-src/emacs/src/lisp.h	1594
@@ -3773,14 +3823,20 @@ push_kboard	c-src/emacs/src/keyboard.c	/^push_kboard (struct kboard *k)$/
 pushclass_above	c-src/etags.c	/^pushclass_above (int bracelev, char *str, int len)/
 put_entries	c-src/etags.c	/^put_entries (register node *np)$/
 pvec_type	c-src/emacs/src/lisp.h	780
+pxref	tex-src/texinfo.tex	/^\\def\\pxref#1{see \\xrefX[#1,,,,,,,]}$/
 quantizing	html-src/algrthms.html	/^Quantizing the Received$/
 questo	../c/c.web	34
 quiettest	make-src/Makefile	/^quiettest:$/
 quit_char	c-src/emacs/src/keyboard.c	192
 quit_throw_to_read_char	c-src/emacs/src/keyboard.c	/^quit_throw_to_read_char (bool from_signal)$/
+quotation	tex-src/texinfo.tex	/^\\def\\quotation{%$/
 qux	ruby-src/test1.ru	/^    alias_method :qux, :tee, attr_accessor(:bogus)/
 qux1	ruby-src/test1.ru	/^                :qux1)$/
 qux=	ruby-src/test1.ru	/^      def qux=(tee)$/
+r	tex-src/texinfo.tex	/^\\def\\r##1{\\realbackslash r {##1}}$/
+r	tex-src/texinfo.tex	/^\\def\\r##1{\\realbackslash r {##1}}%$/
+r	tex-src/texinfo.tex	/^\\def\\r#1{{\\rm #1}}		% roman font$/
+r	tex-src/texinfo.tex	/^\\let\\r=\\indexdummyfont$/
 r0	c-src/sysdep.h	54
 r1	c-src/sysdep.h	55
 r_alloc	c-src/emacs/src/lisp.h	/^extern void *r_alloc (void **, size_t) ATTRIBUTE_A/
@@ -3788,6 +3844,10 @@ range_exp	y-src/parse.y	269
 range_exp_list	y-src/parse.y	273
 raw_keybuf	c-src/emacs/src/keyboard.c	116
 raw_keybuf_count	c-src/emacs/src/keyboard.c	117
+rawbackslash	tex-src/texinfo.tex	/^\\let\\rawbackslash=\\relax%$/
+rawbackslashxx	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/
+rawbackslashxx	tex-src/texinfo.tex	/^\\def\\rawbackslashxx{\\indexbackslash}%$/
+rbrb	tex-src/texinfo.tex	/^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/
 rbtp	c.c	240
 re_iswctype	c-src/emacs/src/regex.h	602
 re_nsub	c-src/emacs/src/regex.h	364
@@ -3819,6 +3879,7 @@ read_key_sequence_vs	c-src/emacs/src/keyboard.c	/^read_key_sequence_vs (Lisp_Obj
 read_menu_command	c-src/emacs/src/keyboard.c	/^read_menu_command (void)$/
 read_toc	perl-src/htlmify-cystic	/^sub read_toc ()$/
 readable_events	c-src/emacs/src/keyboard.c	/^readable_events (int flags)$/
+readauxfile	tex-src/texinfo.tex	/^\\def\\readauxfile{%$/
 readline	c-src/etags.c	/^readline (linebuffer *lbp, FILE *stream)$/
 readline_internal	c-src/etags.c	/^readline_internal (linebuffer *lbp, register FILE /
 realloc	c-src/emacs/src/gmalloc.c	/^realloc (void *ptr, size_t size)$/
@@ -3843,7 +3904,10 @@ recursive_edit_unwind	c-src/emacs/src/keyboard.c	/^recursive_edit_unwind (Lisp_O
 redirect	c-src/emacs/src/lisp.h	663
 reduce	prol-src/natded.prolog	/^reduce((X^M)@N,L):-     % beta reduction$/
 reduce_subterm	prol-src/natded.prolog	/^reduce_subterm(M,M2):-$/
+ref	tex-src/texinfo.tex	/^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/
+refill	tex-src/texinfo.tex	/^\\let\\refill=\\relax$/
 refreshPort	pyt-src/server.py	/^    def refreshPort(self):$/
+refx	tex-src/texinfo.tex	/^\\def\\refx#1#2{%$/
 reg_errcode_t	c-src/emacs/src/regex.h	323
 reg_errcode_t	c.c	279
 reg_syntax_t	c-src/emacs/src/regex.h	43
@@ -3874,8 +3938,12 @@ requeued_events_pending_p	c-src/emacs/src/keyboard.c	/^requeued_events_pending_p
 require	merc-src/accumulator.m	/^:- import_module require.$/
 required_argument	c-src/getopt.h	90
 reset-this-command-lengths	c-src/emacs/src/keyboard.c	/^DEFUN ("reset-this-command-lengths", Freset_this_c/
+resetmathfonts	tex-src/texinfo.tex	/^\\def\\resetmathfonts{%$/
+rest	tex-src/texinfo.tex	/^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/
 restore_getcjmp	c-src/emacs/src/keyboard.c	/^restore_getcjmp (sys_jmp_buf temp)$/
 restore_kboard_configuration	c-src/emacs/src/keyboard.c	/^restore_kboard_configuration (int was_locked)$/
+result	tex-src/texinfo.tex	/^\\def\\result{\\leavevmode\\raise.15ex\\hbox to 1em{\\hf/
+result	tex-src/texinfo.tex	/^\\def\\result{\\realbackslash result}$/
 return_to_command_loop	c-src/emacs/src/keyboard.c	135
 reverse	prol-src/natded.prolog	/^reverse([],Ws,Ws).$/
 revert	objc-src/PackInsp.m	/^-revert:sender$/
@@ -3883,6 +3951,8 @@ right	c-src/etags.c	216
 right_shift	y-src/cccp.y	/^right_shift (a, b)$/
 ring1	c.c	241
 ring2	c.c	242
+rm	tex-src/texinfo.tex	/^      \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/
+rm	tex-src/texinfo.tex	/^\\def\\rm{\\realbackslash rm }%$/
 rm_eo	c-src/emacs/src/regex.h	450
 rm_so	c-src/emacs/src/regex.h	449
 rng_base	cp-src/Range.h	79
@@ -3909,19 +3979,37 @@ safe_run_hook_funcall	c-src/emacs/src/keyboard.c	/^safe_run_hook_funcall (ptrdif
 safe_run_hooks	c-src/emacs/src/keyboard.c	/^safe_run_hooks (Lisp_Object hook)$/
 safe_run_hooks_1	c-src/emacs/src/keyboard.c	/^safe_run_hooks_1 (ptrdiff_t nargs, Lisp_Object *ar/
 safe_run_hooks_error	c-src/emacs/src/keyboard.c	/^safe_run_hooks_error (Lisp_Object error, ptrdiff_t/
+samp	tex-src/texinfo.tex	/^\\def\\samp #1{`\\tclose{#1}'\\null}$/
+samp	tex-src/texinfo.tex	/^\\def\\samp##1{\\realbackslash samp {##1}}$/
+samp	tex-src/texinfo.tex	/^\\def\\samp##1{\\realbackslash samp {##1}}%$/
+samp	tex-src/texinfo.tex	/^\\let\\samp=\\indexdummyfont$/
 save	pyt-src/server.py	/^    def save(self):$/
 save_getcjmp	c-src/emacs/src/keyboard.c	/^save_getcjmp (sys_jmp_buf temp)$/
 save_type	c-src/emacs/src/lisp.h	/^save_type (struct Lisp_Save_Value *v, int n)$/
 savenstr	c-src/etags.c	/^savenstr (const char *cp, int len)$/
 savestr	c-src/etags.c	/^savestr (const char *cp)$/
 say	go-src/test.go	/^func say(msg string) {$/
+sc	tex-src/texinfo.tex	/^\\def\\sc#1{{\\smallcaps#1}}	% smallcaps font$/
+sc	tex-src/texinfo.tex	/^\\let\\sc=\\indexdummyfont$/
 scan_separators	c-src/etags.c	/^scan_separators (char *name)$/
 scolonseen	c-src/etags.c	2447
 scratch	c-src/sysdep.h	56
 scroll_bar_parts	c-src/emacs/src/keyboard.c	5189
-sec=\relax	tex-src/texinfo.tex	/^\\let\\appendixsec=\\relax$/
+sec	tex-src/texinfo.tex	/^\\global\\let\\section = \\appendixsec$/
+seccheck	tex-src/texinfo.tex	/^\\def\\seccheck#1{\\if \\pageno<0 %$/
+secentry	tex-src/texinfo.tex	/^      \\def\\secentry ##1##2##3##4{}$/
+secentry	tex-src/texinfo.tex	/^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/
+secentryfonts	tex-src/texinfo.tex	/^\\def\\secentryfonts{\\textfonts}$/
+secfonts	tex-src/texinfo.tex	/^\\def\\secfonts{%$/
+secheading	tex-src/texinfo.tex	/^\\def\\secheading #1#2#3{\\secheadingi {#2.#3\\enspace/
+secheadingbreak	tex-src/texinfo.tex	/^\\def\\secheadingbreak{\\dobreak \\secheadingskip {-10/
+secheadingi	tex-src/texinfo.tex	/^\\def\\secheadingi #1{{\\advance \\secheadingskip by \\/
+secondary	tex-src/texinfo.tex	/^\\def\\secondary #1#2{$/
 section	perl-src/htlmify-cystic	25
-section=\relax	tex-src/texinfo.tex	/^\\let\\appendixsection=\\relax$/
+section	tex-src/texinfo.tex	/^\\global\\let\\section = \\appendixsec$/
+section	tex-src/texinfo.tex	/^\\global\\let\\section = \\numberedsec$/
+section	tex-src/texinfo.tex	/^\\global\\let\\section = \\unnumberedsec$/
+section	tex-src/texinfo.tex	/^\\let\\section=\\relax$/
 section_href	perl-src/htlmify-cystic	/^sub section_href ($)$/
 section_name	perl-src/htlmify-cystic	/^sub section_name ($)$/
 section_name	perl-src/htlmify-cystic	12
@@ -3929,6 +4017,10 @@ section_toc	perl-src/htlmify-cystic	15
 section_url	perl-src/htlmify-cystic	/^sub section_url ()$/
 section_url_base	perl-src/htlmify-cystic	/^sub section_url_base ()$/
 section_url_name	perl-src/htlmify-cystic	/^sub section_url_name ()$/
+sectionzzz	tex-src/texinfo.tex	/^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/
+sectionzzz	tex-src/texinfo.tex	/^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/
+seczzz	tex-src/texinfo.tex	/^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/
+seczzz	tex-src/texinfo.tex	/^\\def\\seczzz #1{\\seccheck{section}%$/
 select	prol-src/natded.prolog	/^select(X,[X|Xs],Xs).$/
 select-tags-table	el-src/emacs/lisp/progmodes/etags.el	/^(defun select-tags-table ()$/
 select-tags-table-mode	el-src/emacs/lisp/progmodes/etags.el	/^(define-derived-mode select-tags-table-mode specia/
@@ -3939,9 +4031,11 @@ select_last	prol-src/natded.prolog	/^select_last([X],X,[]).$/
 send	objc-src/Subprocess.m	/^- send:(const char *)string withNewline:(BOOL)want/
 send	objc-src/Subprocess.m	/^- send:(const char *)string$/
 separator_names	c-src/emacs/src/keyboard.c	7372
+sepspaces	tex-src/texinfo.tex	/^\\gdef\\sepspaces{\\def {\\ }}}$/
 serializeToVars	php-src/lce_functions.php	/^      function serializeToVars($prefix)$/
 set	cp-src/conway.hpp	/^    void set(void) { alive = 1; }$/
 set	merc-src/accumulator.m	/^:- import_module set.$/
+set	tex-src/texinfo.tex	/^\\def\\set{\\parsearg\\setxxx}$/
 set-input-interrupt-mode	c-src/emacs/src/keyboard.c	/^DEFUN ("set-input-interrupt-mode", Fset_input_inte/
 set-input-meta-mode	c-src/emacs/src/keyboard.c	/^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/
 set-input-mode	c-src/emacs/src/keyboard.c	/^DEFUN ("set-input-mode", Fset_input_mode, Sset_inp/
@@ -3971,9 +4065,24 @@ set_symbol_next	c-src/emacs/src/lisp.h	/^set_symbol_next (Lisp_Object sym, struc
 set_symbol_plist	c-src/emacs/src/lisp.h	/^set_symbol_plist (Lisp_Object sym, Lisp_Object pli/
 set_upto	merc-src/accumulator.m	/^:- func set_upto(accu_case, int) = set(accu_goal_i/
 set_waiting_for_input	c-src/emacs/src/keyboard.c	/^set_waiting_for_input (struct timespec *time_to_cl/
+setchapternewpage	tex-src/texinfo.tex	/^\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcs/
+setchapterstyle	tex-src/texinfo.tex	/^\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname/
+setdeffont	tex-src/texinfo.tex	/^\\def\\setdeffont #1 {\\csname DEF#1\\endcsname}$/
+setfilename	tex-src/texinfo.tex	/^   \\global\\let\\setfilename=\\comment % Ignore extra/
+setfilename	tex-src/texinfo.tex	/^\\def\\setfilename{%$/
+setref	tex-src/texinfo.tex	/^\\def\\setref#1{%$/
 setref	tex-src/texinfo.tex	/^\\expandafter\\expandafter\\expandafter\\appendixsetre/
+settitle	tex-src/texinfo.tex	/^\\def\\settitle{\\parsearg\\settitlezzz}$/
+settitlezzz	tex-src/texinfo.tex	/^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/
 setup	cp-src/c.C	5
+setxxx	tex-src/texinfo.tex	/^\\def\\setxxx #1{$/
+sf	tex-src/texinfo.tex	/^\\def\\sf{\\fam=\\sffam \\tensf}$/
+sf	tex-src/texinfo.tex	/^\\def\\sf{\\realbackslash sf}%$/
+sf	tex-src/texinfo.tex	/^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/
 shift	cp-src/functions.cpp	/^void Date::shift ( void ){\/\/Shift this date to pre/
+shortchapentry	tex-src/texinfo.tex	/^\\def\\shortchapentry#1#2#3{%$/
+shortcontents	tex-src/texinfo.tex	/^\\let\\shortcontents = \\summarycontents$/
+shortunnumberedentry	tex-src/texinfo.tex	/^\\def\\shortunnumberedentry#1#2{%$/
 shouldLoad	objc-src/PackInsp.m	/^-(BOOL)shouldLoad$/
 should_attempt_accu_transform	merc-src/accumulator.m	/^:- pred should_attempt_accu_transform(module_info:/
 should_attempt_accu_transform_2	merc-src/accumulator.m	/^:- pred should_attempt_accu_transform_2(module_inf/
@@ -3991,6 +4100,9 @@ signal_handler_t	c-src/h.h	94
 simulation	html-src/software.html	/^Software that I wrote for supporting my research a/
 single_kboard	c-src/emacs/src/keyboard.c	89
 single_kboard_state	c-src/emacs/src/keyboard.c	/^single_kboard_state ()$/
+singlecodeindexer	tex-src/texinfo.tex	/^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/
+singleindexer	tex-src/texinfo.tex	/^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/
+singlespace	tex-src/texinfo.tex	/^\\def\\singlespace{%$/
 site	cp-src/conway.hpp	/^    site(int xi, int yi): x(xi), y(yi), alive(0) {/
 site	cp-src/conway.hpp	5
 size	c-src/emacs/src/gmalloc.c	156
@@ -4004,20 +4116,45 @@ skeyseen	c-src/etags.c	2445
 skip_name	c-src/etags.c	/^skip_name (char *cp)$/
 skip_non_spaces	c-src/etags.c	/^skip_non_spaces (char *cp)$/
 skip_spaces	c-src/etags.c	/^skip_spaces (char *cp)$/
+sl	tex-src/texinfo.tex	/^      \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/
+sl	tex-src/texinfo.tex	/^\\def\\sl{\\realbackslash sl }%$/
+smallbook	tex-src/texinfo.tex	/^\\def\\smallbook{$/
+smallbook	tex-src/texinfo.tex	/^\\let\\smallbook=\\relax$/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/
+smallcaps	tex-src/texinfo.tex	/^  \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/
+smallexample	tex-src/texinfo.tex	/^\\global\\let\\smallexample=\\smalllispx$/
+smallexample	tex-src/texinfo.tex	/^\\let\\smallexample=\\lisp$/
+smalllisp	tex-src/texinfo.tex	/^\\global\\let\\smalllisp=\\smalllispx$/
+smalllispx	tex-src/texinfo.tex	/^\\def\\smalllispx{\\aboveenvbreak\\begingroup\\inENV$/
+smartitalic	tex-src/texinfo.tex	/^\\def\\smartitalic#1{{\\sl #1}\\futurelet\\next\\smartit/
+smartitalicx	tex-src/texinfo.tex	/^\\def\\smartitalicx{\\ifx\\next,\\else\\ifx\\next-\\else\\i/
 snarf-tag-function	el-src/emacs/lisp/progmodes/etags.el	/^(defvar snarf-tag-function nil$/
 snone	c-src/etags.c	2443
 solutions	merc-src/accumulator.m	/^:- import_module solutions.$/
 some_mouse_moved	c-src/emacs/src/keyboard.c	/^some_mouse_moved (void)$/
+sp	tex-src/texinfo.tex	/^\\def\\sp{\\parsearg\\spxxx}$/
 space	tex-src/texinfo.tex	/^    {#2\\labelspace #1}\\dotfill\\doshortpageno{#3}}%/
 space	tex-src/texinfo.tex	/^  \\dosubsubsecentry{#2.#3.#4.#5\\labelspace#1}{#6}}/
+space	tex-src/texinfo.tex	/^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/
+space	tex-src/texinfo.tex	/^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/
+space	tex-src/texinfo.tex	/^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/
 spacer	c-src/emacs/src/lisp.h	1975
 spacer	c-src/emacs/src/lisp.h	1982
 spacer	c-src/emacs/src/lisp.h	2036
 spacer	c-src/emacs/src/lisp.h	2205
+spacesplit	tex-src/texinfo.tex	/^\\gdef\\spacesplit#1#2^^M{\\endgroup\\spacesplitfoo{#1/
+spacesplitfoo	tex-src/texinfo.tex	/^\\long\\gdef\\spacesplitfoo#1#2 #3#4\\spacesplitfoo{%$/
 specbind_tag	c-src/emacs/src/lisp.h	2943
 specbinding	c-src/emacs/src/lisp.h	2955
+specheader	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
 specialsymbol	prol-src/natded.prolog	/^specialsymbol(C1,C2,S):-$/
+specx\defspecheader	tex-src/texinfo.tex	/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
 splitexp	prol-src/natded.prolog	/^splitexp(E,E,('NIL','NIL')):-!.$/
+splitoff	tex-src/texinfo.tex	/^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/
+spxxx	tex-src/texinfo.tex	/^\\def\\spxxx #1{\\par \\vskip #1\\baselineskip}$/
 srclist	make-src/Makefile	/^srclist: Makefile$/
 ss3	c.c	255
 sss1	c.c	252
@@ -4049,6 +4186,8 @@ start	php-src/lce_functions.php	/^      function start($line, $class)$/
 start	y-src/cccp.y	143
 start_polling	c-src/emacs/src/keyboard.c	/^start_polling (void)$/
 start_up	prol-src/natded.prolog	/^start_up:-$/
+startcontents	tex-src/texinfo.tex	/^\\def\\startcontents#1{%$/
+startenumeration	tex-src/texinfo.tex	/^\\def\\startenumeration#1{%$/
 state_protected_p	c-src/emacs/src/gmalloc.c	400
 statetable	html-src/algrthms.html	/^Next$/
 staticetags	make-src/Makefile	/^staticetags:$/
@@ -4068,24 +4207,59 @@ stripLine	php-src/lce_functions.php	/^      function stripLine($line, $class)$/
 stripname	pas-src/common.pas	/^function stripname; (* ($/
 strncaseeq	c-src/etags.c	/^#define strncaseeq(s,t,n) (assert ((s)!=NULL && (t/
 strneq	c-src/etags.c	/^#define strneq(s,t,n)	(assert ((s)!=NULL || (t)!=N/
+strong	tex-src/texinfo.tex	/^\\let\\strong=\\b$/
+strong	tex-src/texinfo.tex	/^\\let\\strong=\\indexdummyfont$/
 structdef	c-src/etags.c	2448
 stuff_buffered_input	c-src/emacs/src/keyboard.c	/^stuff_buffered_input (Lisp_Object stuffstring)$/
+subheading	tex-src/texinfo.tex	/^\\def\\subheading{\\parsearg\\subsecheadingi}$/
 subprocess	objc-src/PackInsp.m	/^-subprocess:(Subprocess *)sender output:(char *)bu/
 subprocessDone	objc-src/PackInsp.m	/^-subprocessDone:(Subprocess *)sender$/
-subsec=\relax	tex-src/texinfo.tex	/^\\let\\appendixsubsec=\\relax$/
+subsec	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\appendixsubsec$/
+subsec	tex-src/texinfo.tex	/^\\let\\subsec=\\relax$/
+subsecentry	tex-src/texinfo.tex	/^      \\def\\subsecentry ##1##2##3##4##5{}$/
+subsecentry	tex-src/texinfo.tex	/^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/
+subsecentryfonts	tex-src/texinfo.tex	/^\\let\\subsecentryfonts = \\textfonts$/
+subsecfonts	tex-src/texinfo.tex	/^\\def\\subsecfonts{%$/
+subsecheading	tex-src/texinfo.tex	/^\\def\\subsecheading #1#2#3#4{\\subsecheadingi {#2.#3/
+subsecheadingbreak	tex-src/texinfo.tex	/^\\def\\subsecheadingbreak{\\dobreak \\subsecheadingski/
+subsecheadingi	tex-src/texinfo.tex	/^\\def\\subsecheadingi #1{{\\advance \\subsecheadingski/
 subsection	perl-src/htlmify-cystic	26
-subsection=\relax	tex-src/texinfo.tex	/^\\let\\appendixsubsection=\\relax$/
+subsection	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\appendixsubsec$/
+subsection	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\numberedsubsec$/
+subsection	tex-src/texinfo.tex	/^\\global\\let\\subsection = \\unnumberedsubsec$/
+subsection	tex-src/texinfo.tex	/^\\let\\subsection=\\relax$/
 subsection_marker	perl-src/htlmify-cystic	161
+subseczzz	tex-src/texinfo.tex	/^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/
+subseczzz	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsec{\\parsearg\\appendixsubsec/
 subst	prol-src/natded.prolog	/^subst(var(Y),var(X),M,N):-$/
 substitute	c-src/etags.c	/^substitute (char *in, char *out, struct re_registe/
-subsubsec=\relax	tex-src/texinfo.tex	/^\\let\\appendixsubsubsec=\\relax$/
+subsubheading	tex-src/texinfo.tex	/^\\def\\subsubheading{\\parsearg\\subsubsecheadingi}$/
+subsubsec	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\appendixsubsubsec$/
+subsubsec	tex-src/texinfo.tex	/^\\let\\subsubsec=\\relax$/
+subsubsecentry	tex-src/texinfo.tex	/^      \\def\\subsubsecentry ##1##2##3##4##5##6{}$/
+subsubsecentry	tex-src/texinfo.tex	/^\\def\\subsubsecentry#1#2#3#4#5#6{%$/
+subsubsecentryfonts	tex-src/texinfo.tex	/^\\let\\subsubsecentryfonts = \\textfonts$/
+subsubsecfonts	tex-src/texinfo.tex	/^\\def\\subsubsecfonts{\\subsecfonts} % Maybe this sho/
+subsubsecheading	tex-src/texinfo.tex	/^\\def\\subsubsecheading #1#2#3#4#5{\\subsubsecheading/
+subsubsecheadingi	tex-src/texinfo.tex	/^\\def\\subsubsecheadingi #1{{\\advance \\subsecheading/
 subsubsection	perl-src/htlmify-cystic	27
-subsubsection=\relax	tex-src/texinfo.tex	/^\\let\\appendixsubsubsection=\\relax$/
+subsubsection	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\appendixsubsubsec$/
+subsubsection	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\numberedsubsubsec$/
+subsubsection	tex-src/texinfo.tex	/^\\global\\let\\subsubsection = \\unnumberedsubsubsec$/
+subsubsection	tex-src/texinfo.tex	/^\\let\\subsubsection=\\relax$/
+subsubseczzz	tex-src/texinfo.tex	/^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/
+subsubseczzz	tex-src/texinfo.tex	/^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/
+subtitle	tex-src/texinfo.tex	/^   \\def\\subtitle{\\parsearg\\subtitlezzz}%$/
+subtitlefont	tex-src/texinfo.tex	/^   \\def\\subtitlefont{\\subtitlerm \\normalbaselinesk/
+subtitlerm	tex-src/texinfo.tex	/^   \\let\\subtitlerm=\\tenrm$/
+subtitlezzz	tex-src/texinfo.tex	/^   \\def\\subtitlezzz##1{{\\subtitlefont \\rightline{#/
 subtle	ruby-src/test1.ru	/^                 :tee ; attr_reader :subtle$/
 subtree	prol-src/natded.prolog	/^subtree(T,T).$/
 suffix	c-src/etags.c	186
 suffixes	c-src/etags.c	195
 suggest_asking_for_help	c-src/etags.c	/^suggest_asking_for_help (void)$/
+summarycontents	tex-src/texinfo.tex	/^\\outer\\def\\summarycontents{%$/
+supereject	tex-src/texinfo.tex	/^\\def\\supereject{\\par\\penalty -20000\\footnoteno =0 /
 suspend-emacs	c-src/emacs/src/keyboard.c	/^DEFUN ("suspend-emacs", Fsuspend_emacs, Ssuspend_e/
 sval	y-src/cccp.y	116
 swallow_events	c-src/emacs/src/keyboard.c	/^swallow_events (bool do_display)$/
@@ -4100,6 +4274,8 @@ syms_of_abbrev	c-src/abbrev.c	/^syms_of_abbrev ()$/
 syms_of_keyboard	c-src/emacs/src/keyboard.c	/^syms_of_keyboard (void)$/
 synchronize_system_messages_locale	c-src/emacs/src/lisp.h	/^INLINE void synchronize_system_messages_locale (vo/
 synchronize_system_time_locale	c-src/emacs/src/lisp.h	/^INLINE void synchronize_system_time_locale (void) /
+syncodeindex	tex-src/texinfo.tex	/^\\def\\syncodeindex #1 #2 {%$/
+synindex	tex-src/texinfo.tex	/^\\def\\synindex #1 #2 {%$/
 syntax	c-src/emacs/src/regex.h	350
 sys_jmp_buf	c-src/emacs/src/lisp.h	2906
 sys_jmp_buf	c-src/emacs/src/lisp.h	2910
@@ -4112,12 +4288,20 @@ sys_setjmp	c-src/emacs/src/lisp.h	/^# define sys_setjmp(j) setjmp (j)$/
 sys_setjmp	c-src/emacs/src/lisp.h	/^# define sys_setjmp(j) sigsetjmp (j, 0)$/
 syscall_error	c-src/sysdep.h	34
 t	cp-src/c.C	52
+t	tex-src/texinfo.tex	/^\\def\\t##1{\\realbackslash r {##1}}%$/
+t	tex-src/texinfo.tex	/^\\def\\t#1{{\\tt \\exhyphenpenalty=10000\\rawbackslash /
+t	tex-src/texinfo.tex	/^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/
+t	tex-src/texinfo.tex	/^\\let\\t=\\indexdummyfont$/
 t1	cp-src/c.C	34
 t2	cp-src/c.C	38
 tab_count_words	c-src/tab.c	/^int			tab_count_words(char **tab)$/
 tab_delete_first	c-src/tab.c	/^int			tab_delete_first(char **tab)$/
 tab_fill	c-src/tab.c	/^char			**tab_fill(char *str, char delim)$/
 tab_free	c-src/tab.c	/^void			tab_free(char **tab)$/
+table	tex-src/texinfo.tex	/^\\def\\table{\\begingroup\\inENV\\obeylines\\obeyspaces\\/
+tablex	tex-src/texinfo.tex	/^\\gdef\\tablex #1^^M{%$/
+tabley	tex-src/texinfo.tex	/^\\gdef\\tabley#1#2 #3 #4 #5 #6 #7\\endtabley{\\endgrou/
+tablez	tex-src/texinfo.tex	/^\\def\\tablez #1#2#3#4#5#6{%$/
 tag-any-match-p	el-src/emacs/lisp/progmodes/etags.el	/^(defun tag-any-match-p (_tag)$/
 tag-exact-file-name-match-p	el-src/emacs/lisp/progmodes/etags.el	/^(defun tag-exact-file-name-match-p (tag)$/
 tag-exact-match-p	el-src/emacs/lisp/progmodes/etags.el	/^(defun tag-exact-match-p (tag)$/
@@ -4196,12 +4380,75 @@ tags-tag-face	el-src/emacs/lisp/progmodes/etags.el	/^(defcustom tags-tag-face 'd
 tags-verify-table	el-src/emacs/lisp/progmodes/etags.el	/^(defun tags-verify-table (file)$/
 tags-with-face	el-src/emacs/lisp/progmodes/etags.el	/^(defmacro tags-with-face (face &rest body)$/
 target_multibyte	c-src/emacs/src/regex.h	407
+tclose	tex-src/texinfo.tex	/^\\def\\tclose##1{\\realbackslash tclose {##1}}$/
+tclose	tex-src/texinfo.tex	/^\\def\\tclose##1{\\realbackslash tclose {##1}}%$/
+tclose	tex-src/texinfo.tex	/^\\def\\tclose#1{{\\rm \\tcloserm=\\fontdimen2\\font \\tt /
+tclose	tex-src/texinfo.tex	/^\\let\\tclose=\\indexdummyfont$/
 tcpdump	html-src/software.html	/^tcpdump$/
 teats	cp-src/c.C	127
 tee	ruby-src/test1.ru	/^    attr_accessor :tee$/
 tee=	ruby-src/test1.ru	/^    attr_accessor :tee$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{%$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash chapentry $/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash chapentry {#1}{\\the\\cha/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash secentry %$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash subsecentry %$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash subsubsecentry %$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash subsubsecentry{#1}%$/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash unnumbchapentry {#1}{\\n/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash unnumbsecentry{#1}{\\noe/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash unnumbsubsecentry{#1}{\\/
+temp	tex-src/texinfo.tex	/^\\edef\\temp{{\\realbackslash unnumbsubsubsecentry{#1/
+temp	tex-src/texinfo.tex	/^\\else \\let\\temp=\\ifclearfail \\fi$/
+temp	tex-src/texinfo.tex	/^\\else \\let\\temp=\\relax \\fi$/
+temp	tex-src/texinfo.tex	/^\\expandafter\\ifx\\csname IF#1\\endcsname\\relax \\let\\/
+temp1	tex-src/texinfo.tex	/^\\xdef\\temp1{#2 #3}%$/
+temp1	tex-src/texinfo.tex	/^\\xdef\\temp1{#2}%$/
 temporarily_switch_to_single_kboard	c-src/emacs/src/keyboard.c	/^temporarily_switch_to_single_kboard (struct frame /
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/
+tenbf	tex-src/texinfo.tex	/^  \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/
+tenbf	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
 tend	c-src/etags.c	2432
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\chapsf \\let\\teni=\\chapi \\let\\tensy=\\/
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\tensy=\\in/
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\secsf \\let\\teni=\\seci \\let\\tensy=\\se/
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\ssecsf \\let\\teni=\\sseci \\let\\tensy=\\/
+teni	tex-src/texinfo.tex	/^  \\let\\tensf=\\textsf \\let\\teni=\\texti \\let\\tensy=\\/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\chaprm \\let\\tenit=\\chapit \\let\\tensl/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\indrm \\let\\tenit=\\indit \\let\\tensl=\\/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\secrm \\let\\tenit=\\secit \\let\\tensl=\\/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\ssecrm \\let\\tenit=\\ssecit \\let\\tensl/
+tenit	tex-src/texinfo.tex	/^  \\let\\tenrm=\\textrm \\let\\tenit=\\textit \\let\\tensl/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\chaprm \\let\\tenit=\\chapit \\let\\tensl/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\indrm \\let\\tenit=\\indit \\let\\tensl=\\/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\secrm \\let\\tenit=\\secit \\let\\tensl=\\/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\ssecrm \\let\\tenit=\\ssecit \\let\\tensl/
+tenrm	tex-src/texinfo.tex	/^  \\let\\tenrm=\\textrm \\let\\tenit=\\textit \\let\\tensl/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\chapsf \\let\\teni=\\chapi \\let\\tensy=\\/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\tensy=\\in/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\secsf \\let\\teni=\\seci \\let\\tensy=\\se/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\ssecsf \\let\\teni=\\sseci \\let\\tensy=\\/
+tensf	tex-src/texinfo.tex	/^  \\let\\tensf=\\textsf \\let\\teni=\\texti \\let\\tensy=\\/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\chaprm \\let\\tenit=\\chapit \\let\\tensl/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\indrm \\let\\tenit=\\indit \\let\\tensl=\\/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\secrm \\let\\tenit=\\secit \\let\\tensl=\\/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\ssecrm \\let\\tenit=\\ssecit \\let\\tensl/
+tensl	tex-src/texinfo.tex	/^  \\let\\tenrm=\\textrm \\let\\tenit=\\textit \\let\\tensl/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\chapsf \\let\\teni=\\chapi \\let\\tensy=\\/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\tensy=\\in/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\secsf \\let\\teni=\\seci \\let\\tensy=\\se/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\ssecsf \\let\\teni=\\sseci \\let\\tensy=\\/
+tensy	tex-src/texinfo.tex	/^  \\let\\tensf=\\textsf \\let\\teni=\\texti \\let\\tensy=\\/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/
+tentt	tex-src/texinfo.tex	/^  \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/
+tentt	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
+tentt	tex-src/texinfo.tex	/^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/
 term	merc-src/accumulator.m	/^:- import_module term.$/
 terminate	objc-src/Subprocess.m	/^- terminate:sender$/
 terminateInput	objc-src/Subprocess.m	/^- terminateInput$/
@@ -4216,7 +4463,12 @@ test.me22b	lua-src/test.lua	/^   local function test.me22b (one)$/
 test.me_22a	lua-src/test.lua	/^   function test.me_22a(one, two)$/
 test1	rs-src/test.rs	/^fn test1() {$/
 test_undefined	c-src/emacs/src/keyboard.c	/^test_undefined (Lisp_Object binding)$/
+tex	tex-src/texinfo.tex	/^\\def\\tex{\\begingroup$/
+texinfoversion	tex-src/texinfo.tex	/^\\def\\texinfoversion{2.73}$/
+textfonts	tex-src/texinfo.tex	/^\\def\\textfonts{%$/
 texttreelist	prol-src/natded.prolog	/^texttreelist([]).$/
+thearg	tex-src/texinfo.tex	/^  \\def\\thearg{#1}%$/
+thearg	tex-src/texinfo.tex	/^  \\ifx\\thearg\\empty \\def\\thearg{1}\\fi$/
 there-is-a-=-in-the-middle!	scm-src/test.scm	/^(define (there-is-a-=-in-the-middle!) #t)$/
 this	c-src/a/b/b.c	1
 this-command-keys	c-src/emacs/src/keyboard.c	/^DEFUN ("this-command-keys", Fthis_command_keys, St/
@@ -4228,6 +4480,30 @@ this_command_key_count_reset	c-src/emacs/src/keyboard.c	112
 this_command_keys	c-src/emacs/src/keyboard.c	107
 this_file_toc	perl-src/htlmify-cystic	29
 this_single_command_key_start	c-src/emacs/src/keyboard.c	125
+thischapter	tex-src/texinfo.tex	/^   \\unnumbchapmacro{#1}\\def\\thischapter{}%$/
+thischapter	tex-src/texinfo.tex	/^\\def\\thischapter{} \\def\\thissection{}$/
+thischapter	tex-src/texinfo.tex	/^\\gdef\\thischapter{#1}\\gdef\\thissection{#1}%$/
+thischapter	tex-src/texinfo.tex	/^\\xdef\\thischapter{Appendix \\appendixletter: \\noexp/
+thischapter	tex-src/texinfo.tex	/^\\xdef\\thischapter{Chapter \\the\\chapno: \\noexpand\\t/
+thischaptername	tex-src/texinfo.tex	/^\\def\\thischaptername{No Chapter Title}$/
+thischaptername	tex-src/texinfo.tex	/^\\gdef\\thischaptername{#1}%$/
+thisfile	tex-src/texinfo.tex	/^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/
+thisfile	tex-src/texinfo.tex	/^\\def\\thisfile{}$/
+thisfootno	tex-src/texinfo.tex	/^\\edef\\thisfootno{$^{\\the\\footnoteno}$}%$/
+thispage	tex-src/texinfo.tex	/^\\let\\thispage=\\folio$/
+thissection	tex-src/texinfo.tex	/^\\def\\thischapter{} \\def\\thissection{}$/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thischapter{#1}\\gdef\\thissection{#1}%$/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}%$/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\global\\advance \\subsubsecno /
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\secheading {#1}{\\appendixlet/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\secheading {#1}{\\the\\chapno}/
+thissection	tex-src/texinfo.tex	/^\\gdef\\thissection{#1}\\subsubsecno=0 \\global\\advanc/
+thissection	tex-src/texinfo.tex	/^\\plainsecheading {#1}\\gdef\\thissection{#1}%$/
+thistitle	tex-src/texinfo.tex	/^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/
+thistitle	tex-src/texinfo.tex	/^\\def\\thistitle{No Title}$/
+three	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
+threex	tex-src/texinfo.tex	/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
+tie	tex-src/texinfo.tex	/^\\def\\tie{\\penalty 10000\\ }     % Save plain tex de/
 tignore	c-src/etags.c	2433
 timer_check	c-src/emacs/src/keyboard.c	/^timer_check (void)$/
 timer_check_2	c-src/emacs/src/keyboard.c	/^timer_check_2 (Lisp_Object timers, Lisp_Object idl/
@@ -4238,9 +4514,16 @@ timer_start_idle	c-src/emacs/src/keyboard.c	/^timer_start_idle (void)$/
 timer_stop_idle	c-src/emacs/src/keyboard.c	/^timer_stop_idle (void)$/
 timers_run	c-src/emacs/src/keyboard.c	320
 tinbody	c-src/etags.c	2431
+tindex	tex-src/texinfo.tex	/^\\def\\tindex {\\tpindex}$/
+title	tex-src/texinfo.tex	/^   \\def\\title{\\parsearg\\titlezzz}%$/
+titlefont	tex-src/texinfo.tex	/^\\def\\titlefont#1{{\\titlerm #1}}$/
+titlepage	tex-src/texinfo.tex	/^\\def\\titlepage{\\begingroup \\parindent=0pt \\textfon/
+titlepage	tex-src/texinfo.tex	/^\\let\\titlepage=\\relax$/
+titlezzz	tex-src/texinfo.tex	/^   \\def\\titlezzz##1{\\leftline{\\titlefont{##1}}$/
 tkeyseen	c-src/etags.c	2429
 tnone	c-src/etags.c	2428
 toc_line	perl-src/htlmify-cystic	/^sub toc_line ($)$/
+today	tex-src/texinfo.tex	/^\\def\\today{\\number\\day\\space$/
 toggleDescription	objc-src/PackInsp.m	/^-toggleDescription$/
 tok	c-src/etags.c	2491
 token	c-src/etags.c	2508
@@ -4253,6 +4536,8 @@ tool_bar_item_properties	c-src/emacs/src/keyboard.c	7970
 tool_bar_items	c-src/emacs/src/keyboard.c	/^tool_bar_items (Lisp_Object reuse, int *nitems)$/
 tool_bar_items_vector	c-src/emacs/src/keyboard.c	7965
 toolkit_menubar_in_use	c-src/emacs/src/keyboard.c	/^toolkit_menubar_in_use (struct frame *f)$/
+top	tex-src/texinfo.tex	/^\\let\\top=\\relax$/
+top	tex-src/texinfo.tex	/^\\outer\\def\\top{\\parsearg\\unnumberedzzz}$/
 top-level	c-src/emacs/src/keyboard.c	/^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, /
 top_level	merc-src/accumulator.m	/^:- type top_level$/
 top_level_1	c-src/emacs/src/keyboard.c	/^top_level_1 (Lisp_Object ignore)$/
@@ -4261,17 +4546,26 @@ total_keys	c-src/emacs/src/keyboard.c	97
 total_size_of_entries	c-src/etags.c	/^total_size_of_entries (register node *np)$/
 total_surrounding	cp-src/conway.cpp	/^int site::total_surrounding(void)$/
 totally_unblock_input	c-src/emacs/src/keyboard.c	/^totally_unblock_input (void)$/
+tpargs	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{#1}\\deftpargs{#3}\\endgrou/
 tpcmd	c-src/h.h	15
 tpcmd	c-src/h.h	8
+tpheader	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
+tpx\deftpheader	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
 track-mouse	c-src/emacs/src/keyboard.c	/^DEFUN ("internal--track-mouse", Ftrack_mouse, Stra/
 tracking_off	c-src/emacs/src/keyboard.c	/^tracking_off (Lisp_Object old_value)$/
 traffic_light	cp-src/conway.cpp	/^void traffic_light(int x, int y)$/
 translate	c-src/emacs/src/regex.h	361
 treats	cp-src/c.C	131
 tt	prol-src/natded.prolog	/^tt:-$/
-tt=cmtt10	tex-src/texinfo.tex	/^\\font\\deftt=cmtt10 scaled \\magstep1$/
+tt	tex-src/texinfo.tex	/^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/
+tt	tex-src/texinfo.tex	/^\\def\\tt{\\realbackslash tt}$/
+tt	tex-src/texinfo.tex	/^\\def\\tt{\\realbackslash tt}%$/
+tt	tex-src/texinfo.tex	/^\\font\\deftt=cmtt10 scaled \\magstep1$/
+tt	tex-src/texinfo.tex	/^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/
+ttfont	tex-src/texinfo.tex	/^\\let\\ttfont = \\t$/
 tty_read_avail_input	c-src/emacs/src/keyboard.c	/^tty_read_avail_input (struct terminal *terminal,$/
 ttypeseen	c-src/etags.c	2430
+turnoffactive	tex-src/texinfo.tex	/^\\def\\turnoffactive{\\let"=\\normaldoublequote$/
 typdef	c-src/etags.c	2434
 type	c-src/emacs/src/gmalloc.c	145
 type	c-src/emacs/src/lisp.h	1973
@@ -4286,10 +4580,21 @@ type	c-src/emacs/src/lisp.h	2304
 type	c-src/emacs/src/lisp.h	2364
 type	c-src/emacs/src/lisp.h	3025
 type	c-src/etags.c	2271
+typefnheader	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
+typefnheaderx	tex-src/texinfo.tex	/^\\def\\deftypefnheader #1#2#3{\\deftypefnheaderx{#1}{/
+typefnx\deftypefnheader	tex-src/texinfo.tex	/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
 typefunargs	tex-src/texinfo.tex	/^\\deftypefunargs {#3}\\endgroup %$/
 typefunargs	tex-src/texinfo.tex	/^\\deftypefunargs {#4}\\endgroup %$/
+typefunheader	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
+typefunheaderx	tex-src/texinfo.tex	/^\\def\\deftypefunheader #1#2{\\deftypefunheaderx{#1}#/
+typefunx\deftypefunheader	tex-src/texinfo.tex	/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
 typemargin	tex-src/texinfo.tex	/^\\newskip\\deftypemargin \\deftypemargin=12pt$/
 typemargin	tex-src/texinfo.tex	/^\\rlap{\\rightline{{\\rm #2}\\hskip \\deftypemargin}}}%/
+typemargin	tex-src/texinfo.tex	/^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/
+typevarheader	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
+typevarx\deftypevarheader	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
+typevrheader	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
+typevrx\deftypevrheader	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
 u	c-src/emacs/src/lisp.h	2397
 u_any	c-src/emacs/src/lisp.h	2214
 u_boolfwd	c-src/emacs/src/lisp.h	2371
@@ -4302,13 +4607,44 @@ u_marker	c-src/emacs/src/lisp.h	2216
 u_objfwd	c-src/emacs/src/lisp.h	2372
 u_overlay	c-src/emacs/src/lisp.h	2217
 u_save_value	c-src/emacs/src/lisp.h	2218
+unargs	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{#1}\\defunargs{#3}\\endgrou/
 unargs	tex-src/texinfo.tex	/^\\defunargs {#2}\\endgroup %$/
 unargs	tex-src/texinfo.tex	/^\\defunargs {#3}\\endgroup %$/
 unblock_input	c-src/emacs/src/keyboard.c	/^unblock_input (void)$/
 unblock_input_to	c-src/emacs/src/keyboard.c	/^unblock_input_to (int level)$/
 unchar	c-src/h.h	99
 unexpand-abbrev	c-src/abbrev.c	/^DEFUN ("unexpand-abbrev", Funexpand_abbrev, Sunexp/
+unheader	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
 univ	merc-src/accumulator.m	/^:- import_module univ.$/
+unnchfopen	tex-src/texinfo.tex	/^\\def\\unnchfopen #1{%$/
+unnchfplain	tex-src/texinfo.tex	/^\\def\\unnchfplain #1{%$/
+unnumbchapentry	tex-src/texinfo.tex	/^      \\let\\unnumbchapentry = \\shortunnumberedentry/
+unnumbchapentry	tex-src/texinfo.tex	/^\\def\\unnumbchapentry#1#2{\\dochapentry{#1}{#2}}$/
+unnumbchapmacro	tex-src/texinfo.tex	/^\\global\\let\\unnumbchapmacro=\\unnchfopen}$/
+unnumbchapmacro	tex-src/texinfo.tex	/^\\global\\let\\unnumbchapmacro=\\unnchfplain}$/
+unnumbered	tex-src/texinfo.tex	/^\\let\\unnumbered=\\relax$/
+unnumbered	tex-src/texinfo.tex	/^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/
+unnumberedsec	tex-src/texinfo.tex	/^\\let\\unnumberedsec=\\relax$/
+unnumberedsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsec{\\parsearg\\unnumberedseczz/
+unnumberedsection	tex-src/texinfo.tex	/^\\let\\unnumberedsection=\\relax$/
+unnumberedseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedseczzz #1{\\seccheck{unnumberedsec}%/
+unnumberedsubsec	tex-src/texinfo.tex	/^\\let\\unnumberedsubsec=\\relax$/
+unnumberedsubsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsubsec{\\parsearg\\unnumberedsu/
+unnumberedsubsection	tex-src/texinfo.tex	/^\\let\\unnumberedsubsection=\\relax$/
+unnumberedsubseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedsubseczzz #1{\\seccheck{unnumberedsu/
+unnumberedsubsubsec	tex-src/texinfo.tex	/^\\let\\unnumberedsubsubsec=\\relax$/
+unnumberedsubsubsec	tex-src/texinfo.tex	/^\\outer\\def\\unnumberedsubsubsec{\\parsearg\\unnumbere/
+unnumberedsubsubsection	tex-src/texinfo.tex	/^\\let\\unnumberedsubsubsection=\\relax$/
+unnumberedsubsubseczzz	tex-src/texinfo.tex	/^\\def\\unnumberedsubsubseczzz #1{\\seccheck{unnumbere/
+unnumberedzzz	tex-src/texinfo.tex	/^\\def\\unnumberedzzz #1{\\seccheck{unnumbered}%$/
+unnumbnoderef	tex-src/texinfo.tex	/^\\def\\unnumbnoderef{\\ifx\\lastnode\\relax\\else$/
+unnumbsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsecentry ##1##2{}$/
+unnumbsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsecentry#1#2{\\dosecentry{#1}{#2}}$/
+unnumbsetref	tex-src/texinfo.tex	/^\\def\\unnumbsetref#1{%$/
+unnumbsubsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsubsecentry ##1##2{}$/
+unnumbsubsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsubsecentry#1#2{\\dosubsecentry{#1}{#2}}/
+unnumbsubsubsecentry	tex-src/texinfo.tex	/^      \\def\\unnumbsubsubsecentry ##1##2{}$/
+unnumbsubsubsecentry	tex-src/texinfo.tex	/^\\def\\unnumbsubsubsecentry#1#2{\\dosubsubsecentry{#1/
 unravel_univ	merc-src/accumulator.m	/^:- some [T] pred unravel_univ(univ::in, T::out) is/
 unread_switch_frame	c-src/emacs/src/keyboard.c	204
 unsignedp	y-src/cccp.y	112
@@ -4316,7 +4652,9 @@ unwind	c-src/emacs/src/lisp.h	2962
 unwind_int	c-src/emacs/src/lisp.h	2972
 unwind_ptr	c-src/emacs/src/lisp.h	2967
 unwind_void	c-src/emacs/src/lisp.h	2976
+unx\defunheader	tex-src/texinfo.tex	/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
 update_accumulator_pred	merc-src/accumulator.m	/^:- pred update_accumulator_pred(pred_id::in, proc_/
+uppercaseenumerate	tex-src/texinfo.tex	/^\\def\\uppercaseenumerate{%$/
 uprintmax_t	c-src/emacs/src/lisp.h	149
 uprintmax_t	c-src/emacs/src/lisp.h	154
 usage	perl-src/yagrip.pl	/^sub usage {$/
@@ -4343,20 +4681,45 @@ value	c-src/emacs/src/lisp.h	687
 value	y-src/cccp.y	112
 var	c-src/emacs/src/keyboard.c	11023
 var	c-src/emacs/src/lisp.h	3137
+var	tex-src/texinfo.tex	/^\\def\\var##1{\\realbackslash var {##1}}$/
+var	tex-src/texinfo.tex	/^\\def\\var##1{\\realbackslash var {##1}}%$/
+var	tex-src/texinfo.tex	/^\\let\\var=\\indexdummyfont$/
+var	tex-src/texinfo.tex	/^\\let\\var=\\smartitalic$/
+varargs	tex-src/texinfo.tex	/^\\begingroup\\defname {#2}{#1}\\defvarargs{#3}\\endgro/
+varargs	tex-src/texinfo.tex	/^\\def\\deftpargs #1{\\bf \\defvarargs{#1}}$/
 varargs	tex-src/texinfo.tex	/^\\defvarargs {#2}\\endgroup %$/
 varargs	tex-src/texinfo.tex	/^\\defvarargs {#3}\\endgroup %$/
+varheader	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
+varparsebody\Edefopt	tex-src/texinfo.tex	/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
+varparsebody\Edeftypevar	tex-src/texinfo.tex	/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
+varparsebody\Edefvar	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
 varset	merc-src/accumulator.m	/^:- import_module varset.$/
+varx\defvarheader	tex-src/texinfo.tex	/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
 vcopy	c-src/emacs/src/lisp.h	/^vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Objec/
 vectorlike_header	c-src/emacs/src/lisp.h	1343
 verde	cp-src/c.C	40
 verify-tags-table-function	el-src/emacs/lisp/progmodes/etags.el	/^(defvar verify-tags-table-function nil$/
 verify_ascii	c-src/emacs/src/lisp.h	/^# define verify_ascii(str) (str)$/
 vignore	c-src/etags.c	2417
+vindex	tex-src/texinfo.tex	/^\\def\\vindex {\\vrindex}$/
 visit-tags-table	el-src/emacs/lisp/progmodes/etags.el	/^(defun visit-tags-table (file &optional local)$/
 visit-tags-table-buffer	el-src/emacs/lisp/progmodes/etags.el	/^(defun visit-tags-table-buffer (&optional cont)$/
 void	c-src/emacs/src/lisp.h	/^INLINE void (check_cons_list) (void) { lisp_h_chec/
 voidfuncptr	c-src/emacs/src/lisp.h	2108
 voidval	y-src/cccp.y	115
+vrheader	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
+vritemindex	tex-src/texinfo.tex	/^\\def\\vritemindex #1{\\doind {vr}{\\code{#1}}}%$/
+vrparsebody\Edefivar	tex-src/texinfo.tex	/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
+vrparsebody\Edeftp	tex-src/texinfo.tex	/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
+vrparsebody\Edeftypevr	tex-src/texinfo.tex	/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
+vrparsebody\Edefvr	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
+vrx\defvrheader	tex-src/texinfo.tex	/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
+vtable	tex-src/texinfo.tex	/^\\def\\vtable{\\begingroup\\inENV\\obeylines\\obeyspaces/
+vtablex	tex-src/texinfo.tex	/^\\gdef\\vtablex #1^^M{%$/
+w	tex-src/texinfo.tex	/^\\def\\w#1{\\leavevmode\\hbox{#1}}$/
+w	tex-src/texinfo.tex	/^\\def\\w{\\realbackslash w }%$/
+w	tex-src/texinfo.tex	/^\\def\\w{\\realbackslash w}$/
+w	tex-src/texinfo.tex	/^\\let\\w=\\indexdummyfont$/
 wait_status_ptr_t	c.c	161
 waiting_for_input	c-src/emacs/src/keyboard.c	150
 warning	y-src/cccp.y	/^warning (msg)$/
@@ -4409,13 +4772,25 @@ x-get-selection-internal	c.c	/^DEFUN ("x-get-selection-internal", Fx_get_selecti
 xcar_addr	c-src/emacs/src/lisp.h	/^xcar_addr (Lisp_Object c)$/
 xcdr_addr	c-src/emacs/src/lisp.h	/^xcdr_addr (Lisp_Object c)$/
 xdiff	make-src/Makefile	/^xdiff: ETAGS EXTAGS ${infiles}$/
+xitem	tex-src/texinfo.tex	/^\\def\\xitem{\\errmessage{@xitem while not in a table/
+xitem	tex-src/texinfo.tex	/^\\let\\xitem = \\internalBxitem %$/
+xitemsubtopix	tex-src/texinfo.tex	/^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/
+xitemsubtopix	tex-src/texinfo.tex	/^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/
+xitemx	tex-src/texinfo.tex	/^\\def\\xitemx{\\errmessage{@xitemx while not in a tab/
+xitemx	tex-src/texinfo.tex	/^\\let\\xitemx = \\internalBxitemx %$/
+xitemzzz	tex-src/texinfo.tex	/^\\def\\xitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/
+xkey	tex-src/texinfo.tex	/^\\def\\xkey{\\key}$/
 xmalloc	c-src/etags.c	/^xmalloc (size_t size)$/
 xnew	c-src/etags.c	/^#define xnew(n, Type)      ((Type *) xmalloc ((n) /
+xrdef	tex-src/texinfo.tex	/^\\def\\xrdef #1#2{$/
 xrealloc	c-src/etags.c	/^xrealloc (void *ptr, size_t size)$/
+xref	tex-src/texinfo.tex	/^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/
 xref-etags-location	el-src/emacs/lisp/progmodes/etags.el	/^(defclass xref-etags-location (xref-location)$/
 xref-location-line	el-src/emacs/lisp/progmodes/etags.el	/^(cl-defmethod xref-location-line ((l xref-etags-lo/
 xref-location-marker	el-src/emacs/lisp/progmodes/etags.el	/^(cl-defmethod xref-location-marker ((l xref-etags-/
 xref-make-etags-location	el-src/emacs/lisp/progmodes/etags.el	/^(defun xref-make-etags-location (tag-info file)$/
+xrefX	tex-src/texinfo.tex	/^\\def\\xrefX[#1,#2,#3,#4,#5,#6]{\\begingroup%$/
+xreftie	tex-src/texinfo.tex	/^\\gdef\\xreftie{'tie}$/
 xrnew	c-src/etags.c	/^#define xrnew(op, n, Type) ((op) = (Type *) xreall/
 xx	make-src/Makefile	/^xx="this line is here because of a fontlock bug$/
 xyz	ruby-src/test1.ru	/^    alias_method :xyz,$/
@@ -4475,8 +4850,22 @@ z	c.c	144
 z	c.c	164
 z	cp-src/clheir.hpp	49
 z	cp-src/clheir.hpp	58
+zzz	tex-src/texinfo.tex	/^\\def\\infoappendix{\\parsearg\\appendixzzz}$/
+zzz	tex-src/texinfo.tex	/^\\def\\infochapter{\\parsearg\\chapterzzz}$/
+zzz	tex-src/texinfo.tex	/^\\def\\infosection{\\parsearg\\sectionzzz}$/
+zzz	tex-src/texinfo.tex	/^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/
+zzz	tex-src/texinfo.tex	/^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/
+zzz	tex-src/texinfo.tex	/^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/
+zzz	tex-src/texinfo.tex	/^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/
+{	tex-src/texinfo.tex	/^\\let\\{=\\mylbrace$/
+{	tex-src/texinfo.tex	/^\\let\\{=\\ptexlbrace$/
 |	tex-src/texinfo.tex	/^\\def|{{\\tt \\char '174}}$/
+|	tex-src/texinfo.tex	/^\\let|=\\normalverticalbar$/
+}	tex-src/texinfo.tex	/^\\let\\}=\\myrbrace$/
+}	tex-src/texinfo.tex	/^\\let\\}=\\ptexrbrace$/
+~	tex-src/texinfo.tex	/^\\catcode `\\^=7 \\catcode `\\_=8 \\catcode `\\~=13 \\let/
 ~	tex-src/texinfo.tex	/^\\def~{{\\tt \\char '176}}$/
+~	tex-src/texinfo.tex	/^\\let~=\\normaltilde$/
 ~A	cp-src/c.C	/^A::~A() {}$/
 ~B	cp-src/c.C	/^    ~B() {};$/
 ~MDiagArray2	cp-src/MDiagArray2.h	/^  ~MDiagArray2 (void) { }$/
diff --git a/test/manual/etags/ETAGS.good_1 b/test/manual/etags/ETAGS.good_1
index 4baaff4c425..02641980455 100644
--- a/test/manual/etags/ETAGS.good_1
+++ b/test/manual/etags/ETAGS.good_1
@@ -3148,8 +3148,8 @@ scm-src/test.scm,260
 (define (((((curry-test \x7f14,205
 (define-syntax test-begin\x7f17,265
 \f
-tex-src/testenv.tex,52
-\newcommand{\nm}\x7f\nm\x014,77
+tex-src/testenv.tex,51
+\newcommand{\nm}\x7fnm\x014,77
 \section{blah}\x7fblah\x018,139
 \f
 tex-src/gzip.texi,303
@@ -3164,722 +3164,1142 @@ tex-src/gzip.texi,303
 @node Problems,\x7f460,16769
 @node Concept Index,\x7fConcept Index\x01473,17289
 \f
-tex-src/texinfo.tex,30627
-\def\texinfoversion{\x7f\texinfoversion\x0126,1035
-\def\tie{\x7f\tie\x0149,1526
-\def\gloggingall{\x7f\gloggingall\x0172,2276
-\def\loggingall{\x7f\loggingall\x0173,2345
-\def\onepageout#1{\x7f\onepageout\x0199,3282
-\def\croppageout#1{\x7f\croppageout\x01115,4032
-\def\cropmarks{\x7f\cropmarks\x01142,5092
-\def\pagebody#1{\x7f\pagebody\x01144,5139
-\def\ewtop{\x7f\ewtop\x01157,5594
-\def\nstop{\x7f\nstop\x01158,5658
-\def\ewbot{\x7f\ewbot\x01160,5741
-\def\nsbot{\x7f\nsbot\x01161,5805
-\def\parsearg #1{\x7f\parsearg\x01170,6104
-\def\parseargx{\x7f\parseargx\x01172,6182
-\def\parseargline{\x7f\parseargline\x01182,6422
-\def\flushcr{\x7f\flushcr\x01186,6543
-\newif\ifENV \ENVfalse \def\inENV{\x7f\inENV\x01190,6742
-\def\ENVcheck{\x7f\ENVcheck\x01191,6806
-\outer\def\begin{\x7f\begin\x01198,7053
-\def\beginxxx #1{\x7f\beginxxx\x01200,7091
-\def\end{\x7f\end\x01208,7346
-\def\endxxx #1{\x7f\endxxx\x01210,7374
-\def\errorE#1{\x7f\errorE\x01216,7563
-\def\singlespace{\x7f\singlespace\x01222,7757
-\def\@{\x7f\@\x01232,7980
-\def\`{\x7f\`\x01236,8080
-\def\'{\x7f\'\x01237,8092
-\def\mylbrace {\x7f\mylbrace\x01241,8140
-\def\myrbrace {\x7f\myrbrace\x01242,8173
-\def\:{\x7f\:\x01247,8287
-\def\*{\x7f\*\x01250,8341
-\def\.{\x7f\.\x01253,8417
-\def\w#1{\x7f\w\x01258,8648
-\def\group{\x7f\group\x01268,9131
-  \def\Egroup{\x7f\Egroup\x01273,9295
-\def\need{\x7f\need\x01289,9737
-\def\needx#1{\x7f\needx\x01300,10014
-\def\dots{\x7f\dots\x01339,11400
-\def\page{\x7f\page\x01343,11464
-\def\exdent{\x7f\exdent\x01353,11791
-\def\exdentyyy #1{\x7f\exdentyyy\x01354,11824
-\def\nofillexdent{\x7f\nofillexdent\x01357,11968
-\def\nofillexdentyyy #1{\x7f\nofillexdentyyy\x01358,12013
-\def\include{\x7f\include\x01365,12197
-\def\includezzz #1{\x7f\includezzz\x01366,12232
-\def\thisfile{\x7f\thisfile\x01369,12283
-\def\center{\x7f\center\x01373,12346
-\def\centerzzz #1{\x7f\centerzzz\x01374,12379
-\def\sp{\x7f\sp\x01380,12521
-\def\spxxx #1{\x7f\spxxx\x01381,12546
-\def\comment{\x7f\comment\x01387,12720
-\def\commentxxx #1{\x7f\commentxxx\x01390,12817
-\def\ignoresections{\x7f\ignoresections\x01396,12986
-\let\chapter=\relax\x7f=\relax\x01397,13008
-\let\section=\relax\x7f=\relax\x01406,13253
-\let\subsection=\relax\x7f=\relax\x01409,13314
-\let\subsubsection=\relax\x7f=\relax\x01410,13337
-\let\appendix=\relax\x7f=\relax\x01411,13363
-\let\appendixsec=\relax\x7fsec=\relax\x01412,13384
-\let\appendixsection=\relax\x7fsection=\relax\x01413,13408
-\let\appendixsubsec=\relax\x7fsubsec=\relax\x01414,13436
-\let\appendixsubsection=\relax\x7fsubsection=\relax\x01415,13463
-\let\appendixsubsubsec=\relax\x7fsubsubsec=\relax\x01416,13494
-\let\appendixsubsubsection=\relax\x7fsubsubsection=\relax\x01417,13524
-\def\ignore{\x7f\ignore\x01423,13626
-\long\def\ignorexxx #1\end ignore{\x7f\ignorexxx\x01427,13766
-\def\direntry{\x7f\direntry\x01429,13825
-\long\def\direntryxxx #1\end direntry{\x7f\direntryxxx\x01430,13864
-\def\ifset{\x7f\ifset\x01434,13974
-\def\ifsetxxx #1{\x7f\ifsetxxx\x01436,14032
-\def\Eifset{\x7f\Eifset\x01440,14159
-\def\ifsetfail{\x7f\ifsetfail\x01441,14173
-\long\def\ifsetfailxxx #1\end ifset{\x7f\ifsetfailxxx\x01442,14229
-\def\ifclear{\x7f\ifclear\x01444,14290
-\def\ifclearxxx #1{\x7f\ifclearxxx\x01446,14352
-\def\Eifclear{\x7f\Eifclear\x01450,14483
-\def\ifclearfail{\x7f\ifclearfail\x01451,14499
-\long\def\ifclearfailxxx #1\end ifclear{\x7f\ifclearfailxxx\x01452,14559
-\def\set{\x7f\set\x01456,14710
-\def\setxxx #1{\x7f\setxxx\x01457,14737
-\def\clear{\x7f\clear\x01460,14799
-\def\clearxxx #1{\x7f\clearxxx\x01461,14830
-\def\iftex{\x7f\iftex\x01466,14947
-\def\Eiftex{\x7f\Eiftex\x01467,14960
-\def\ifinfo{\x7f\ifinfo\x01468,14974
-\long\def\ifinfoxxx #1\end ifinfo{\x7f\ifinfoxxx\x01469,15024
-\long\def\menu #1\end menu{\x7f\menu\x01471,15083
-\def\asis#1{\x7f\asis\x01472,15112
-\def\math#1{\x7f\math\x01485,15655
-\def\node{\x7f\node\x01487,15699
-\def\nodezzz#1{\x7f\nodezzz\x01488,15737
-\def\nodexxx[#1,#2]{\x7f\nodexxx[\x01489,15768
-\def\donoderef{\x7f\donoderef\x01492,15830
-\def\unnumbnoderef{\x7f\unnumbnoderef\x01496,15951
-\def\appendixnoderef{\x7f\appendixnoderef\x01500,16082
+tex-src/texinfo.tex,55236
+\def\texinfoversion{\x7ftexinfoversion\x0126,1035
+\let\ptexlbrace=\{\x7fptexlbrace\x0135,1308
+\let\ptexrbrace=\}\x7fptexrbrace\x0136,1327
+\let\ptexdots=\dots\x7fptexdots\x0137,1346
+\let\ptexdot=\.\x7fptexdot\x0138,1366
+\let\ptexstar=\*\x7fptexstar\x0139,1382
+\let\ptexend=\end\x7fptexend\x0140,1399
+\let\ptexbullet=\bullet\x7fptexbullet\x0141,1417
+\let\ptexb=\b\x7fptexb\x0142,1441
+\let\ptexc=\c\x7fptexc\x0143,1455
+\let\ptexi=\i\x7fptexi\x0144,1469
+\let\ptext=\t\x7fptext\x0145,1483
+\let\ptexl=\l\x7fptexl\x0146,1497
+\let\ptexL=\L\x7fptexL\x0147,1511
+\def\tie{\x7ftie\x0149,1526
+\def\gloggingall{\x7fgloggingall\x0172,2276
+\def\loggingall{\x7floggingall\x0173,2345
+\def\onepageout#1{\x7fonepageout\x0199,3282
+\shipout\vbox{{\let\hsize=\pagewidth \makeheadline}\x7fhsize\x01103,3489
+{\let\hsize=\pagewidth \makefootline}\x7fhsize\x01104,3556
+\def\croppageout#1{\x7fcroppageout\x01115,4032
+			{\let\hsize=\pagewidth \makeheadline}\x7fhsize\x01126,4511
+			{\let\hsize=\pagewidth \makefootline}\x7fhsize\x01128,4569
+\def\cropmarks{\x7fcropmarks\x01142,5092
+\def\cropmarks{\let\onepageout=\croppageout }\x7fonepageout\x01142,5092
+\def\pagebody#1{\x7fpagebody\x01144,5139
+\gdef\pagecontents#1{\x7fpagecontents\x01146,5220
+\def\ewtop{\x7fewtop\x01157,5594
+\def\nstop{\x7fnstop\x01158,5658
+\def\ewbot{\x7fewbot\x01160,5741
+\def\nsbot{\x7fnsbot\x01161,5805
+\def\parsearg #1{\x7fparsearg\x01170,6104
+\def\parsearg #1{\let\next=#1\begingroup\obeylines\futurelet\temp\parseargx}\x7fnext\x01170,6104
+\def\parseargx{\x7fparseargx\x01172,6182
+\gdef\parseargdiscardspace {\x7fparseargdiscardspace\x01178,6321
+\gdef\obeyedspace{\x7fobeyedspace\x01180,6399
+\def\parseargline{\x7fparseargline\x01182,6422
+\gdef\parsearglinex #1^^M{\x7fparsearglinex\x01184,6493
+\def\flushcr{\x7fflushcr\x01186,6543
+\def\flushcr{\ifx\par\lisppar \def\next##1{\x7fnext\x01186,6543
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}\x7fnext\x01186,6543
+\newif\ifENV \ENVfalse \def\inENV{\x7finENV\x01190,6742
+\def\ENVcheck{\x7fENVcheck\x01191,6806
+\outer\def\begin{\x7fbegin\x01198,7053
+\def\beginxxx #1{\x7fbeginxxx\x01200,7091
+\def\end{\x7fend\x01208,7346
+\def\endxxx #1{\x7fendxxx\x01210,7374
+\def\errorE#1{\x7ferrorE\x01216,7563
+\def\singlespace{\x7fsinglespace\x01222,7757
+\def\@{\x7f@\x01232,7980
+\def\`{\x7f`\x01236,8080
+\def\'{\x7f'\x01237,8092
+\def\mylbrace {\x7fmylbrace\x01241,8140
+\def\myrbrace {\x7fmyrbrace\x01242,8173
+\let\{=\mylbrace\x7f{\x01243,8206
+\let\}=\myrbrace\x7f}\x01244,8223
+\def\:{\x7f:\x01247,8287
+\def\*{\x7f*\x01250,8341
+\def\.{\x7f.\x01253,8417
+\def\w#1{\x7fw\x01258,8648
+\def\group{\x7fgroup\x01268,9131
+  \def\Egroup{\x7fEgroup\x01273,9295
+\def\need{\x7fneed\x01289,9737
+\def\needx#1{\x7fneedx\x01300,10014
+\let\br = \par\x7fbr\x01335,11355
+\def\dots{\x7fdots\x01339,11400
+\def\page{\x7fpage\x01343,11464
+\def\exdent{\x7fexdent\x01353,11791
+\def\exdentyyy #1{\x7fexdentyyy\x01354,11824
+\def\nofillexdent{\x7fnofillexdent\x01357,11968
+\def\nofillexdentyyy #1{\x7fnofillexdentyyy\x01358,12013
+\def\include{\x7finclude\x01365,12197
+\def\includezzz #1{\x7fincludezzz\x01366,12232
+\def\includezzz #1{{\def\thisfile{\x7fthisfile\x01366,12232
+\def\thisfile{\x7fthisfile\x01369,12283
+\def\center{\x7fcenter\x01373,12346
+\def\centerzzz #1{\x7fcenterzzz\x01374,12379
+\def\sp{\x7fsp\x01380,12521
+\def\spxxx #1{\x7fspxxx\x01381,12546
+\def\comment{\x7fcomment\x01387,12720
+\def\commentxxx #1{\x7fcommentxxx\x01390,12817
+\let\c=\comment\x7fc\x01392,12883
+\def\ignoresections{\x7fignoresections\x01396,12986
+\let\chapter=\relax\x7fchapter\x01397,13008
+\let\unnumbered=\relax\x7funnumbered\x01398,13028
+\let\top=\relax\x7ftop\x01399,13051
+\let\unnumberedsec=\relax\x7funnumberedsec\x01400,13067
+\let\unnumberedsection=\relax\x7funnumberedsection\x01401,13093
+\let\unnumberedsubsec=\relax\x7funnumberedsubsec\x01402,13123
+\let\unnumberedsubsection=\relax\x7funnumberedsubsection\x01403,13152
+\let\unnumberedsubsubsec=\relax\x7funnumberedsubsubsec\x01404,13185
+\let\unnumberedsubsubsection=\relax\x7funnumberedsubsubsection\x01405,13217
+\let\section=\relax\x7fsection\x01406,13253
+\let\subsec=\relax\x7fsubsec\x01407,13273
+\let\subsubsec=\relax\x7fsubsubsec\x01408,13292
+\let\subsection=\relax\x7fsubsection\x01409,13314
+\let\subsubsection=\relax\x7fsubsubsection\x01410,13337
+\let\appendix=\relax\x7fappendix\x01411,13363
+\let\appendixsec=\relax\x7fappendixsec\x01412,13384
+\let\appendixsection=\relax\x7fappendixsection\x01413,13408
+\let\appendixsubsec=\relax\x7fappendixsubsec\x01414,13436
+\let\appendixsubsection=\relax\x7fappendixsubsection\x01415,13463
+\let\appendixsubsubsec=\relax\x7fappendixsubsubsec\x01416,13494
+\let\appendixsubsubsection=\relax\x7fappendixsubsubsection\x01417,13524
+\let\contents=\relax\x7fcontents\x01418,13558
+\let\smallbook=\relax\x7fsmallbook\x01419,13579
+\let\titlepage=\relax\x7ftitlepage\x01420,13601
+\def\ignore{\x7fignore\x01423,13626
+\long\def\ignorexxx #1\end ignore{\x7fignorexxx\x01427,13766
+\def\direntry{\x7fdirentry\x01429,13825
+\long\def\direntryxxx #1\end direntry{\x7fdirentryxxx\x01430,13864
+\def\ifset{\x7fifset\x01434,13974
+\def\ifsetxxx #1{\x7fifsetxxx\x01436,14032
+\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\ifsetfail\x7ftemp\x01437,14059
+\else \let\temp=\relax \fi\x7ftemp\x01438,14125
+\def\Eifset{\x7fEifset\x01440,14159
+\def\ifsetfail{\x7fifsetfail\x01441,14173
+\long\def\ifsetfailxxx #1\end ifset{\x7fifsetfailxxx\x01442,14229
+\def\ifclear{\x7fifclear\x01444,14290
+\def\ifclearxxx #1{\x7fifclearxxx\x01446,14352
+\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\relax\x7ftemp\x01447,14381
+\else \let\temp=\ifclearfail \fi\x7ftemp\x01448,14443
+\def\Eifclear{\x7fEifclear\x01450,14483
+\def\ifclearfail{\x7fifclearfail\x01451,14499
+\long\def\ifclearfailxxx #1\end ifclear{\x7fifclearfailxxx\x01452,14559
+\def\set{\x7fset\x01456,14710
+\def\setxxx #1{\x7fsetxxx\x01457,14737
+\expandafter\let\csname IF#1\endcsname=\set}\x7fcsname\x01458,14753
+\def\clear{\x7fclear\x01460,14799
+\def\clearxxx #1{\x7fclearxxx\x01461,14830
+\expandafter\let\csname IF#1\endcsname=\relax}\x7fcsname\x01462,14848
+\def\iftex{\x7fiftex\x01466,14947
+\def\Eiftex{\x7fEiftex\x01467,14960
+\def\ifinfo{\x7fifinfo\x01468,14974
+\long\def\ifinfoxxx #1\end ifinfo{\x7fifinfoxxx\x01469,15024
+\long\def\menu #1\end menu{\x7fmenu\x01471,15083
+\def\asis#1{\x7fasis\x01472,15112
+\let\implicitmath = $\x7fimplicitmath\x01484,15633
+\def\math#1{\x7fmath\x01485,15655
+\def\node{\x7fnode\x01487,15699
+\def\nodezzz#1{\x7fnodezzz\x01488,15737
+\def\nodexxx[#1,#2]{\x7fnodexxx\x01489,15768
+\def\nodexxx[#1,#2]{\gdef\lastnode{\x7flastnode\x01489,15768
+\let\lastnode=\relax\x7flastnode\x01490,15808
+\def\donoderef{\x7fdonoderef\x01492,15830
+\let\lastnode=\relax}\x7flastnode\x01494,15928
+\def\unnumbnoderef{\x7funnumbnoderef\x01496,15951
+\let\lastnode=\relax}\x7flastnode\x01498,16059
+\def\appendixnoderef{\x7fappendixnoderef\x01500,16082
 \expandafter\expandafter\expandafter\appendixsetref{\x7fsetref\x01501,16128
-\let\refill=\relax\x7fill=\relax\x01504,16217
-\def\setfilename{\x7f\setfilename\x01509,16431
-\outer\def\bye{\x7f\bye\x01518,16677
-\def\inforef #1{\x7f\inforef\x01520,16733
-\def\inforefzzz #1,#2,#3,#4**{\x7f\inforefzzz\x01521,16771
-\def\losespace #1{\x7f\losespace\x01523,16868
-\def\sf{\x7f\sf\x01532,17072
-\font\defbf=cmbx10 scaled \magstep1 %was 1314\x7fbf=cmbx10\x01558,17867
-\font\deftt=cmtt10 scaled \magstep1\x7ftt=cmtt10\x01559,17913
-\def\df{\x7f\df\x01560,17949
-\def\resetmathfonts{\x7f\resetmathfonts\x01635,20543
-\def\textfonts{\x7f\textfonts\x01648,21132
-\def\chapfonts{\x7f\chapfonts\x01653,21347
-\def\secfonts{\x7f\secfonts\x01658,21563
-\def\subsecfonts{\x7f\subsecfonts\x01663,21768
-\def\indexfonts{\x7f\indexfonts\x01668,21985
-\def\smartitalicx{\x7f\smartitalicx\x01691,22717
-\def\smartitalic#1{\x7f\smartitalic\x01692,22793
-\let\cite=\smartitalic\x7f=\smartitalic\x01698,22938
-\def\b#1{\x7f\b\x01700,22962
-\def\t#1{\x7f\t\x01703,22997
-\def\samp #1{\x7f\samp\x01706,23149
-\def\key #1{\x7f\key\x01707,23182
-\def\ctrl #1{\x7f\ctrl\x01708,23243
-\def\tclose#1{\x7f\tclose\x01716,23445
-\def\ {\x7f\\x01720,23611
-\def\xkey{\x7f\xkey\x01728,23880
-\def\kbdfoo#1#2#3\par{\x7f\kbdfoo\x01729,23896
-\def\dmn#1{\x7f\dmn\x01738,24197
-\def\kbd#1{\x7f\kbd\x01740,24224
-\def\l#1{\x7f\l\x01742,24281
-\def\r#1{\x7f\r\x01744,24310
-\def\sc#1{\x7f\sc\x01746,24378
-\def\ii#1{\x7f\ii\x01747,24421
-\def\titlefont#1{\x7f\titlefont\x01755,24654
-\def\titlepage{\x7f\titlepage\x01761,24757
-   \def\subtitlefont{\x7f\subtitlefont\x01766,24984
-   \def\authorfont{\x7f\authorfont\x01768,25068
-   \def\title{\x7f\title\x01774,25278
-   \def\titlezzz##1{\x7f\titlezzz\x01775,25313
-   \def\subtitle{\x7f\subtitle\x01783,25628
-   \def\subtitlezzz##1{\x7f\subtitlezzz\x01784,25669
-   \def\author{\x7f\author\x01787,25787
-   \def\authorzzz##1{\x7f\authorzzz\x01788,25824
-   \def\page{\x7f\page\x01794,26115
-\def\Etitlepage{\x7f\Etitlepage\x01804,26284
-\def\finishtitlepage{\x7f\finishtitlepage\x01817,26672
-\def\evenheading{\x7f\evenheading\x01846,27680
-\def\oddheading{\x7f\oddheading\x01847,27723
-\def\everyheading{\x7f\everyheading\x01848,27764
-\def\evenfooting{\x7f\evenfooting\x01850,27810
-\def\oddfooting{\x7f\oddfooting\x01851,27853
-\def\everyfooting{\x7f\everyfooting\x01852,27894
-\def\headings #1 {\x7f\headings\x01893,29586
-\def\HEADINGSoff{\x7f\HEADINGSoff\x01895,29635
-\def\HEADINGSdouble{\x7f\HEADINGSdouble\x01904,30062
-\def\HEADINGSsingle{\x7f\HEADINGSsingle\x01914,30382
-\def\HEADINGSon{\x7f\HEADINGSon\x01922,30603
-\def\HEADINGSafter{\x7f\HEADINGSafter\x01924,30637
-\def\HEADINGSdoublex{\x7f\HEADINGSdoublex\x01926,30732
-\def\HEADINGSsingleafter{\x7f\HEADINGSsingleafter\x01933,30920
-\def\HEADINGSsinglex{\x7f\HEADINGSsinglex\x01934,30981
-\def\today{\x7f\today\x01943,31256
-\def\thistitle{\x7f\thistitle\x01958,31801
-\def\settitle{\x7f\settitle\x01959,31826
-\def\settitlezzz #1{\x7f\settitlezzz\x01960,31863
-\def\internalBitem{\x7f\internalBitem\x01992,32793
-\def\internalBitemx{\x7f\internalBitemx\x01993,32843
-\def\internalBxitem "#1"{\x7f\internalBxitem\x01995,32888
-\def\internalBxitemx "#1"{\x7f\internalBxitemx\x01996,32968
-\def\internalBkitem{\x7f\internalBkitem\x01998,33043
-\def\internalBkitemx{\x7f\internalBkitemx\x01999,33095
-\def\kitemzzz #1{\x7f\kitemzzz\x011001,33142
-\def\xitemzzz #1{\x7f\xitemzzz\x011004,33244
-\def\itemzzz #1{\x7f\itemzzz\x011007,33347
-\def\item{\x7f\item\x011037,34418
-\def\itemx{\x7f\itemx\x011038,34469
-\def\kitem{\x7f\kitem\x011039,34522
-\def\kitemx{\x7f\kitemx\x011040,34575
-\def\xitem{\x7f\xitem\x011041,34630
-\def\xitemx{\x7f\xitemx\x011042,34683
-\def\description{\x7f\description\x011045,34793
-\def\table{\x7f\table\x011047,34843
-\def\ftable{\x7f\ftable\x011052,34987
-\def\Eftable{\x7f\Eftable\x011056,35133
-\def\vtable{\x7f\vtable\x011059,35202
-\def\Evtable{\x7f\Evtable\x011063,35348
-\def\dontindex #1{\x7f\dontindex\x011066,35417
-\def\fnitemindex #1{\x7f\fnitemindex\x011067,35437
-\def\vritemindex #1{\x7f\vritemindex\x011068,35482
-\def\tablez #1#2#3#4#5#6{\x7f\tablez\x011074,35631
-\def\Edescription{\x7f\Edescription\x011077,35689
-\def\itemfont{\x7f\itemfont\x011082,35890
-\def\Etable{\x7f\Etable\x011090,36116
-\def\itemize{\x7f\itemize\x011103,36440
-\def\itemizezzz #1{\x7f\itemizezzz\x011105,36476
-\def\itemizey #1#2{\x7f\itemizey\x011110,36571
-\def#2{\x7f1119,36817
-\def\itemcontents{\x7f\itemcontents\x011120,36858
-\def\bullet{\x7f\bullet\x011123,36906
-\def\minus{\x7f\minus\x011124,36933
-\def\frenchspacing{\x7f\frenchspacing\x011128,37041
-\def\splitoff#1#2\endmark{\x7f\splitoff\x011134,37266
-\def\enumerate{\x7f\enumerate\x011140,37496
-\def\enumeratezzz #1{\x7f\enumeratezzz\x011141,37535
-\def\enumeratey #1 #2\endenumeratey{\x7f\enumeratey\x011142,37588
-  \def\thearg{\x7f\thearg\x011146,37735
-  \ifx\thearg\empty \def\thearg{\x7f\thearg\x011147,37754
-\def\numericenumerate{\x7f\numericenumerate\x011184,39088
-\def\lowercaseenumerate{\x7f\lowercaseenumerate\x011190,39218
-\def\uppercaseenumerate{\x7f\uppercaseenumerate\x011203,39565
-\def\startenumeration#1{\x7f\startenumeration\x011219,40055
-\def\alphaenumerate{\x7f\alphaenumerate\x011227,40237
-\def\capsenumerate{\x7f\capsenumerate\x011228,40272
-\def\Ealphaenumerate{\x7f\Ealphaenumerate\x011229,40306
-\def\Ecapsenumerate{\x7f\Ecapsenumerate\x011230,40340
-\def\itemizeitem{\x7f\itemizeitem\x011234,40420
-\def\newindex #1{\x7f\newindex\x011259,41277
-\def\defindex{\x7f\defindex\x011268,41566
-\def\newcodeindex #1{\x7f\newcodeindex\x011272,41674
-\def\defcodeindex{\x7f\defcodeindex\x011279,41934
-\def\synindex #1 #2 {\x7f\synindex\x011283,42114
-\def\syncodeindex #1 #2 {\x7f\syncodeindex\x011292,42454
-\def\doindex#1{\x7f\doindex\x011309,43133
-\def\singleindexer #1{\x7f\singleindexer\x011310,43192
-\def\docodeindex#1{\x7f\docodeindex\x011313,43304
-\def\singlecodeindexer #1{\x7f\singlecodeindexer\x011314,43371
-\def\indexdummies{\x7f\indexdummies\x011316,43429
-\def\_{\x7f\_\x011317,43449
-\def\w{\x7f\w\x011318,43477
-\def\bf{\x7f\bf\x011319,43504
-\def\rm{\x7f\rm\x011320,43533
-\def\sl{\x7f\sl\x011321,43562
-\def\sf{\x7f\sf\x011322,43591
-\def\tt{\x7f\tt\x011323,43619
-\def\gtr{\x7f\gtr\x011324,43647
-\def\less{\x7f\less\x011325,43677
-\def\hat{\x7f\hat\x011326,43709
-\def\char{\x7f\char\x011327,43739
-\def\TeX{\x7f\TeX\x011328,43771
-\def\dots{\x7f\dots\x011329,43801
-\def\copyright{\x7f\copyright\x011330,43834
-\def\tclose##1{\x7f\tclose\x011331,43877
-\def\code##1{\x7f\code\x011332,43922
-\def\samp##1{\x7f\samp\x011333,43963
-\def\t##1{\x7f\t\x011334,44004
-\def\r##1{\x7f\r\x011335,44039
-\def\i##1{\x7f\i\x011336,44074
-\def\b##1{\x7f\b\x011337,44109
-\def\cite##1{\x7f\cite\x011338,44144
-\def\key##1{\x7f\key\x011339,44185
-\def\file##1{\x7f\file\x011340,44224
-\def\var##1{\x7f\var\x011341,44265
-\def\kbd##1{\x7f\kbd\x011342,44304
-\def\indexdummyfont#1{\x7f\indexdummyfont\x011347,44460
-\def\indexdummytex{\x7f\indexdummytex\x011348,44486
-\def\indexdummydots{\x7f\indexdummydots\x011349,44510
-\def\indexnofonts{\x7f\indexnofonts\x011351,44536
+\let\lastnode=\relax}\x7flastnode\x01502,16194
+\let\refill=\relax\x7frefill\x01504,16217
+\def\setfilename{\x7fsetfilename\x01509,16431
+   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.\x7fsetfilename\x01514,16562
+\outer\def\bye{\x7fbye\x01518,16677
+\def\inforef #1{\x7finforef\x01520,16733
+\def\inforefzzz #1,#2,#3,#4**{\x7finforefzzz\x01521,16771
+\def\losespace #1{\x7flosespace\x01523,16868
+\def\sf{\x7fsf\x01532,17072
+\let\li = \sf % Sometimes we call it \li, not \sf.\x7fli\x01533,17100
+\let\mainmagstep=\magstephalf\x7fmainmagstep\x01536,17201
+\let\mainmagstep=\magstep1\x7fmainmagstep\x01539,17250
+\font\defbf=cmbx10 scaled \magstep1 %was 1314\x7fbf\x01558,17867
+\font\deftt=cmtt10 scaled \magstep1\x7ftt\x01559,17913
+\def\df{\x7fdf\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftentt\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftt\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftenbf\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7fbf\x01560,17949
+\let\indsl=\indit\x7findsl\x01570,18310
+\let\indtt=\ninett\x7findtt\x01571,18328
+\let\indsf=\indrm\x7findsf\x01572,18347
+\let\indbf=\indrm\x7findbf\x01573,18365
+\let\indsc=\indrm\x7findsc\x01574,18383
+\let\chapbf=\chaprm\x7fchapbf\x01584,18643
+\let\authorrm = \secrm\x7fauthorrm\x01627,20193
+\def\resetmathfonts{\x7fresetmathfonts\x01635,20543
+\def\textfonts{\x7ftextfonts\x01648,21132
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftenrm\x01649,21149
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftenit\x01649,21149
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftensl\x01649,21149
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7ftenbf\x01650,21208
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7ftentt\x01650,21208
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7fsmallcaps\x01650,21208
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7ftensf\x01651,21271
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7fteni\x01651,21271
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7ftensy\x01651,21271
+\def\chapfonts{\x7fchapfonts\x01653,21347
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftenrm\x01654,21364
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftenit\x01654,21364
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftensl\x01654,21364
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7ftenbf\x01655,21424
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7ftentt\x01655,21424
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7fsmallcaps\x01655,21424
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7ftensf\x01656,21487
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7fteni\x01656,21487
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7ftensy\x01656,21487
+\def\secfonts{\x7fsecfonts\x01658,21563
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftenrm\x01659,21579
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftenit\x01659,21579
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftensl\x01659,21579
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7ftenbf\x01660,21635
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7ftentt\x01660,21635
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7fsmallcaps\x01660,21635
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7ftensf\x01661,21695
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7fteni\x01661,21695
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7ftensy\x01661,21695
+\def\subsecfonts{\x7fsubsecfonts\x01663,21768
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftenrm\x01664,21787
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftenit\x01664,21787
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftensl\x01664,21787
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7ftenbf\x01665,21846
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7ftentt\x01665,21846
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7fsmallcaps\x01665,21846
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7ftensf\x01666,21909
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7fteni\x01666,21909
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7ftensy\x01666,21909
+\def\indexfonts{\x7findexfonts\x01668,21985
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftenrm\x01669,22003
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftenit\x01669,22003
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftensl\x01669,22003
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7ftenbf\x01670,22059
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7ftentt\x01670,22059
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7fsmallcaps\x01670,22059
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7ftensf\x01671,22119
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7fteni\x01671,22119
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7ftensy\x01671,22119
+\def\smartitalicx{\x7fsmartitalicx\x01691,22717
+\def\smartitalic#1{\x7fsmartitalic\x01692,22793
+\let\i=\smartitalic\x7fi\x01694,22851
+\let\var=\smartitalic\x7fvar\x01695,22871
+\let\dfn=\smartitalic\x7fdfn\x01696,22893
+\let\emph=\smartitalic\x7femph\x01697,22915
+\let\cite=\smartitalic\x7fcite\x01698,22938
+\def\b#1{\x7fb\x01700,22962
+\let\strong=\b\x7fstrong\x01701,22981
+\def\t#1{\x7ft\x01703,22997
+\let\ttfont = \t\x7fttfont\x01704,23072
+\def\samp #1{\x7fsamp\x01706,23149
+\def\key #1{\x7fkey\x01707,23182
+\def\ctrl #1{\x7fctrl\x01708,23243
+\let\file=\samp\x7ffile\x01710,23285
+\def\tclose#1{\x7ftclose\x01716,23445
+\let\code=\tclose\x7fcode\x01722,23722
+\def\xkey{\x7fxkey\x01728,23880
+\def\kbdfoo#1#2#3\par{\x7fkbdfoo\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{\x7fone\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{\x7fthree\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{\x7fthreex\x01729,23896
+\def\dmn#1{\x7fdmn\x01738,24197
+\def\kbd#1{\x7fkbd\x01740,24224
+\def\kbd#1{\def\look{\x7flook\x01740,24224
+\def\l#1{\x7fl\x01742,24281
+\def\r#1{\x7fr\x01744,24310
+\def\sc#1{\x7fsc\x01746,24378
+\def\ii#1{\x7fii\x01747,24421
+\def\titlefont#1{\x7ftitlefont\x01755,24654
+\def\titlepage{\x7ftitlepage\x01761,24757
+   \let\subtitlerm=\tenrm\x7fsubtitlerm\x01762,24810
+   \def\subtitlefont{\x7fsubtitlefont\x01766,24984
+   \def\authorfont{\x7fauthorfont\x01768,25068
+   \def\title{\x7ftitle\x01774,25278
+   \def\titlezzz##1{\x7ftitlezzz\x01775,25313
+   \def\subtitle{\x7fsubtitle\x01783,25628
+   \def\subtitlezzz##1{\x7fsubtitlezzz\x01784,25669
+   \def\author{\x7fauthor\x01787,25787
+   \def\authorzzz##1{\x7fauthorzzz\x01788,25824
+   \let\oldpage = \page\x7foldpage\x01793,26091
+   \def\page{\x7fpage\x01794,26115
+      \let\page = \oldpage\x7fpage\x01799,26206
+\def\Etitlepage{\x7fEtitlepage\x01804,26284
+\def\finishtitlepage{\x7ffinishtitlepage\x01817,26672
+\let\thispage=\folio\x7fthispage\x01825,26825
+\let\HEADINGShook=\relax\x7fHEADINGShook\x01837,27420
+\def\evenheading{\x7fevenheading\x01846,27680
+\def\oddheading{\x7foddheading\x01847,27723
+\def\everyheading{\x7feveryheading\x01848,27764
+\def\evenfooting{\x7fevenfooting\x01850,27810
+\def\oddfooting{\x7foddfooting\x01851,27853
+\def\everyfooting{\x7feveryfooting\x01852,27894
+\gdef\evenheadingxxx #1{\x7fevenheadingxxx\x01856,27958
+\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{\x7fevenheadingyyy\x01857,28017
+\gdef\oddheadingxxx #1{\x7foddheadingxxx\x01860,28126
+\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{\x7foddheadingyyy\x01861,28183
+\gdef\everyheadingxxx #1{\x7feveryheadingxxx\x01864,28290
+\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{\x7feveryheadingyyy\x01865,28351
+\gdef\evenfootingxxx #1{\x7fevenfootingxxx\x01869,28522
+\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{\x7fevenfootingyyy\x01870,28581
+\gdef\oddfootingxxx #1{\x7foddfootingxxx\x01873,28690
+\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{\x7foddfootingyyy\x01874,28747
+\gdef\everyfootingxxx #1{\x7feveryfootingxxx\x01877,28854
+\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{\x7feveryfootingyyy\x01878,28915
+\def\headings #1 {\x7fheadings\x01893,29586
+\def\HEADINGSoff{\x7fHEADINGSoff\x01895,29635
+\def\HEADINGSdouble{\x7fHEADINGSdouble\x01904,30062
+\def\HEADINGSsingle{\x7fHEADINGSsingle\x01914,30382
+\def\HEADINGSon{\x7fHEADINGSon\x01922,30603
+\def\HEADINGSafter{\x7fHEADINGSafter\x01924,30637
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}\x7fHEADINGShook\x01924,30637
+\let\HEADINGSdoubleafter=\HEADINGSafter\x7fHEADINGSdoubleafter\x01925,30692
+\def\HEADINGSdoublex{\x7fHEADINGSdoublex\x01926,30732
+\def\HEADINGSsingleafter{\x7fHEADINGSsingleafter\x01933,30920
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}\x7fHEADINGShook\x01933,30920
+\def\HEADINGSsinglex{\x7fHEADINGSsinglex\x01934,30981
+\def\today{\x7ftoday\x01943,31256
+\def\thistitle{\x7fthistitle\x01958,31801
+\def\settitle{\x7fsettitle\x01959,31826
+\def\settitlezzz #1{\x7fsettitlezzz\x01960,31863
+\def\settitlezzz #1{\gdef\thistitle{\x7fthistitle\x01960,31863
+\def\internalBitem{\x7finternalBitem\x01992,32793
+\def\internalBitemx{\x7finternalBitemx\x01993,32843
+\def\internalBxitem "#1"{\x7finternalBxitem\x01995,32888
+\def\internalBxitem "#1"{\def\xitemsubtopix{\x7fxitemsubtopix\x01995,32888
+\def\internalBxitemx "#1"{\x7finternalBxitemx\x01996,32968
+\def\internalBxitemx "#1"{\def\xitemsubtopix{\x7fxitemsubtopix\x01996,32968
+\def\internalBkitem{\x7finternalBkitem\x01998,33043
+\def\internalBkitemx{\x7finternalBkitemx\x01999,33095
+\def\kitemzzz #1{\x7fkitemzzz\x011001,33142
+\def\xitemzzz #1{\x7fxitemzzz\x011004,33244
+\def\itemzzz #1{\x7fitemzzz\x011007,33347
+\def\item{\x7fitem\x011037,34418
+\def\itemx{\x7fitemx\x011038,34469
+\def\kitem{\x7fkitem\x011039,34522
+\def\kitemx{\x7fkitemx\x011040,34575
+\def\xitem{\x7fxitem\x011041,34630
+\def\xitemx{\x7fxitemx\x011042,34683
+\def\description{\x7fdescription\x011045,34793
+\def\table{\x7ftable\x011047,34843
+\gdef\tablex #1^^M{\x7ftablex\x011049,34925
+\def\ftable{\x7fftable\x011052,34987
+\gdef\ftablex #1^^M{\x7fftablex\x011054,35071
+\def\Eftable{\x7fEftable\x011056,35133
+\let\Etable=\relax}\x7fEtable\x011057,35180
+\def\vtable{\x7fvtable\x011059,35202
+\gdef\vtablex #1^^M{\x7fvtablex\x011061,35286
+\def\Evtable{\x7fEvtable\x011063,35348
+\let\Etable=\relax}\x7fEtable\x011064,35395
+\def\dontindex #1{\x7fdontindex\x011066,35417
+\def\fnitemindex #1{\x7ffnitemindex\x011067,35437
+\def\vritemindex #1{\x7fvritemindex\x011068,35482
+\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\x7ftabley\x011071,35543
+\def\tablez #1#2#3#4#5#6{\x7ftablez\x011074,35631
+\def\Edescription{\x7fEdescription\x011077,35689
+\let\itemindex=#1%\x7fitemindex\x011078,35735
+\def\itemfont{\x7fitemfont\x011082,35890
+\def\Etable{\x7fEtable\x011090,36116
+\let\item = \internalBitem %\x7fitem\x011091,36162
+\let\itemx = \internalBitemx %\x7fitemx\x011092,36191
+\let\kitem = \internalBkitem %\x7fkitem\x011093,36222
+\let\kitemx = \internalBkitemx %\x7fkitemx\x011094,36253
+\let\xitem = \internalBxitem %\x7fxitem\x011095,36286
+\let\xitemx = \internalBxitemx %\x7fxitemx\x011096,36317
+\def\itemize{\x7fitemize\x011103,36440
+\def\itemizezzz #1{\x7fitemizezzz\x011105,36476
+\def\itemizey #1#2{\x7fitemizey\x011110,36571
+\def\itemcontents{\x7fitemcontents\x011120,36858
+\let\item=\itemizeitem}\x7fitem\x011121,36881
+\def\bullet{\x7fbullet\x011123,36906
+\def\minus{\x7fminus\x011124,36933
+\def\frenchspacing{\x7ffrenchspacing\x011128,37041
+\def\splitoff#1#2\endmark{\x7fsplitoff\x011134,37266
+\def\splitoff#1#2\endmark{\def\first{\x7ffirst\x011134,37266
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{\x7frest\x011134,37266
+\def\enumerate{\x7fenumerate\x011140,37496
+\def\enumeratezzz #1{\x7fenumeratezzz\x011141,37535
+\def\enumeratey #1 #2\endenumeratey{\x7fenumeratey\x011142,37588
+  \def\thearg{\x7fthearg\x011146,37735
+  \ifx\thearg\empty \def\thearg{\x7fthearg\x011147,37754
+\def\numericenumerate{\x7fnumericenumerate\x011184,39088
+\def\lowercaseenumerate{\x7flowercaseenumerate\x011190,39218
+\def\uppercaseenumerate{\x7fuppercaseenumerate\x011203,39565
+\def\startenumeration#1{\x7fstartenumeration\x011219,40055
+\def\alphaenumerate{\x7falphaenumerate\x011227,40237
+\def\capsenumerate{\x7fcapsenumerate\x011228,40272
+\def\Ealphaenumerate{\x7fEalphaenumerate\x011229,40306
+\def\Ecapsenumerate{\x7fEcapsenumerate\x011230,40340
+\def\itemizeitem{\x7fitemizeitem\x011234,40420
+{\let\par=\endgraf \smallbreak}\x7fpar\x011236,40460
+\gdef\newwrite{\x7fnewwrite\x011249,40841
+\def\newindex #1{\x7fnewindex\x011259,41277
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011262,41439
+\def\defindex{\x7fdefindex\x011268,41566
+\def\newcodeindex #1{\x7fnewcodeindex\x011272,41674
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011275,41840
+\def\defcodeindex{\x7fdefcodeindex\x011279,41934
+\def\synindex #1 #2 {\x7fsynindex\x011283,42114
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname\x7fexpandafter\x011284,42137
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo\x7fcsname\x011285,42217
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011286,42273
+\def\syncodeindex #1 #2 {\x7fsyncodeindex\x011292,42454
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname\x7fexpandafter\x011293,42481
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo\x7fcsname\x011294,42561
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011295,42617
+\def\doindex#1{\x7fdoindex\x011309,43133
+\def\doindex#1{\edef\indexname{\x7findexname\x011309,43133
+\def\singleindexer #1{\x7fsingleindexer\x011310,43192
+\def\singleindexer #1{\doind{\indexname}\x7fname\x011310,43192
+\def\docodeindex#1{\x7fdocodeindex\x011313,43304
+\def\docodeindex#1{\edef\indexname{\x7findexname\x011313,43304
+\def\singlecodeindexer #1{\x7fsinglecodeindexer\x011314,43371
+\def\singlecodeindexer #1{\doind{\indexname}\x7fname\x011314,43371
+\def\indexdummies{\x7findexdummies\x011316,43429
+\def\_{\x7f_\x011317,43449
+\def\w{\x7fw\x011318,43477
+\def\bf{\x7fbf\x011319,43504
+\def\rm{\x7frm\x011320,43533
+\def\sl{\x7fsl\x011321,43562
+\def\sf{\x7fsf\x011322,43591
+\def\tt{\x7ftt\x011323,43619
+\def\gtr{\x7fgtr\x011324,43647
+\def\less{\x7fless\x011325,43677
+\def\hat{\x7fhat\x011326,43709
+\def\char{\x7fchar\x011327,43739
+\def\TeX{\x7fTeX\x011328,43771
+\def\dots{\x7fdots\x011329,43801
+\def\copyright{\x7fcopyright\x011330,43834
+\def\tclose##1{\x7ftclose\x011331,43877
+\def\code##1{\x7fcode\x011332,43922
+\def\samp##1{\x7fsamp\x011333,43963
+\def\t##1{\x7ft\x011334,44004
+\def\r##1{\x7fr\x011335,44039
+\def\i##1{\x7fi\x011336,44074
+\def\b##1{\x7fb\x011337,44109
+\def\cite##1{\x7fcite\x011338,44144
+\def\key##1{\x7fkey\x011339,44185
+\def\file##1{\x7ffile\x011340,44224
+\def\var##1{\x7fvar\x011341,44265
+\def\kbd##1{\x7fkbd\x011342,44304
+\def\indexdummyfont#1{\x7findexdummyfont\x011347,44460
+\def\indexdummytex{\x7findexdummytex\x011348,44486
+\def\indexdummydots{\x7findexdummydots\x011349,44510
+\def\indexnofonts{\x7findexnofonts\x011351,44536
+\let\w=\indexdummyfont\x7fw\x011352,44556
 \let\w=\indexdummyfont\x7fdummyfont\x011352,44556
+\let\t=\indexdummyfont\x7ft\x011353,44579
 \let\t=\indexdummyfont\x7fdummyfont\x011353,44579
+\let\r=\indexdummyfont\x7fr\x011354,44602
 \let\r=\indexdummyfont\x7fdummyfont\x011354,44602
+\let\i=\indexdummyfont\x7fi\x011355,44625
 \let\i=\indexdummyfont\x7fdummyfont\x011355,44625
+\let\b=\indexdummyfont\x7fb\x011356,44648
 \let\b=\indexdummyfont\x7fdummyfont\x011356,44648
+\let\emph=\indexdummyfont\x7femph\x011357,44671
 \let\emph=\indexdummyfont\x7fdummyfont\x011357,44671
+\let\strong=\indexdummyfont\x7fstrong\x011358,44697
 \let\strong=\indexdummyfont\x7fdummyfont\x011358,44697
-\let\cite=\indexdummyfont\x7f=\indexdummyfont\x011359,44725
+\let\cite=\indexdummyfont\x7fcite\x011359,44725
+\let\cite=\indexdummyfont\x7fdummyfont\x011359,44725
+\let\sc=\indexdummyfont\x7fsc\x011360,44751
 \let\sc=\indexdummyfont\x7fdummyfont\x011360,44751
+\let\tclose=\indexdummyfont\x7ftclose\x011364,44923
 \let\tclose=\indexdummyfont\x7fdummyfont\x011364,44923
+\let\code=\indexdummyfont\x7fcode\x011365,44951
 \let\code=\indexdummyfont\x7fdummyfont\x011365,44951
+\let\file=\indexdummyfont\x7ffile\x011366,44977
 \let\file=\indexdummyfont\x7fdummyfont\x011366,44977
+\let\samp=\indexdummyfont\x7fsamp\x011367,45003
 \let\samp=\indexdummyfont\x7fdummyfont\x011367,45003
+\let\kbd=\indexdummyfont\x7fkbd\x011368,45029
 \let\kbd=\indexdummyfont\x7fdummyfont\x011368,45029
+\let\key=\indexdummyfont\x7fkey\x011369,45054
 \let\key=\indexdummyfont\x7fdummyfont\x011369,45054
+\let\var=\indexdummyfont\x7fvar\x011370,45079
 \let\var=\indexdummyfont\x7fdummyfont\x011370,45079
+\let\TeX=\indexdummytex\x7fTeX\x011371,45104
 \let\TeX=\indexdummytex\x7fdummytex\x011371,45104
+\let\dots=\indexdummydots\x7fdots\x011372,45128
 \let\dots=\indexdummydots\x7fdummydots\x011372,45128
-\let\indexbackslash=0  %overridden during \printindex.\x7fbackslash=0\x011382,45380
-\def\doind #1#2{\x7f\doind\x011384,45436
+\let\indexbackslash=0  %overridden during \printindex.\x7findexbackslash\x011382,45380
+\def\doind #1#2{\x7fdoind\x011384,45436
 {\indexdummies % Must do this here, since \bf, etc expand at this stage\x7fdummies\x011386,45479
-\def\rawbackslashxx{\x7f\rawbackslashxx\x011389,45619
+{\let\folio=0% Expand all macros now EXCEPT \folio\x7ffolio\x011388,45568
+\def\rawbackslashxx{\x7frawbackslashxx\x011389,45619
+\def\rawbackslashxx{\indexbackslash}\x7fbackslash\x011389,45619
 {\indexnofonts\x7fnofonts\x011394,45881
-\def\dosubind #1#2#3{\x7f\dosubind\x011405,46192
+\xdef\temp1{\x7ftemp1\x011395,45896
+\edef\temp{\x7ftemp\x011399,46068
+\def\dosubind #1#2#3{\x7fdosubind\x011405,46192
 {\indexdummies % Must do this here, since \bf, etc expand at this stage\x7fdummies\x011407,46240
-\def\rawbackslashxx{\x7f\rawbackslashxx\x011410,46344
+{\let\folio=0%\x7ffolio\x011409,46329
+\def\rawbackslashxx{\x7frawbackslashxx\x011410,46344
+\def\rawbackslashxx{\indexbackslash}\x7fbackslash\x011410,46344
 {\indexnofonts\x7fnofonts\x011414,46498
-\def\findex {\x7f\findex\x011443,47429
-\def\kindex {\x7f\kindex\x011444,47452
-\def\cindex {\x7f\cindex\x011445,47475
-\def\vindex {\x7f\vindex\x011446,47498
-\def\tindex {\x7f\tindex\x011447,47521
-\def\pindex {\x7f\pindex\x011448,47544
-\def\cindexsub {\x7f\cindexsub\x011450,47568
-\def\printindex{\x7f\printindex\x011462,47895
-\def\doprintindex#1{\x7f\doprintindex\x011464,47936
-  \def\indexbackslash{\x7f\indexbackslash\x011481,48421
+\xdef\temp1{\x7ftemp1\x011415,46513
+\edef\temp{\x7ftemp\x011419,46688
+\def\findex {\x7ffindex\x011443,47429
+\def\kindex {\x7fkindex\x011444,47452
+\def\cindex {\x7fcindex\x011445,47475
+\def\vindex {\x7fvindex\x011446,47498
+\def\tindex {\x7ftindex\x011447,47521
+\def\pindex {\x7fpindex\x011448,47544
+\def\cindexsub {\x7fcindexsub\x011450,47568
+\gdef\cindexsub "#1" #2^^M{\x7fcindexsub\x011452,47631
+\def\printindex{\x7fprintindex\x011462,47895
+\def\doprintindex#1{\x7fdoprintindex\x011464,47936
+  \def\indexbackslash{\x7findexbackslash\x011481,48421
   \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt\x7ffonts\rm\x011482,48460
-\def\initial #1{\x7f\initial\x011517,49532
-\def\entry #1#2{\x7f\entry\x011523,49739
+\def\initial #1{\x7finitial\x011517,49532
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7ftentt\x011518,49550
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7ftt\x011518,49550
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7fsf\x011518,49550
+\def\entry #1#2{\x7fentry\x011523,49739
   \null\nobreak\indexdotfill % Have leaders before the page number.\x7fdotfill\x011540,50386
-\def\indexdotfill{\x7f\indexdotfill\x011549,50714
-\def\primary #1{\x7f\primary\x011552,50820
-\def\secondary #1#2{\x7f\secondary\x011556,50902
+\def\indexdotfill{\x7findexdotfill\x011549,50714
+\def\primary #1{\x7fprimary\x011552,50820
+\def\secondary #1#2{\x7fsecondary\x011556,50902
 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par\x7fdotfill\x011559,50984
 \newbox\partialpage\x7fialpage\x011566,51157
-\def\begindoublecolumns{\x7f\begindoublecolumns\x011572,51315
-  \output={\global\setbox\partialpage=\x7fialpage=\x011573,51351
-\def\enddoublecolumns{\x7f\enddoublecolumns\x011577,51539
-\def\doublecolumnout{\x7f\doublecolumnout\x011580,51624
+\def\begindoublecolumns{\x7fbegindoublecolumns\x011572,51315
+  \output={\global\setbox\partialpage=\x7fialpage\x011573,51351
+\def\enddoublecolumns{\x7fenddoublecolumns\x011577,51539
+\def\doublecolumnout{\x7fdoublecolumnout\x011580,51624
   \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage\x7fialpage\x011581,51693
-\def\pagesofar{\x7f\pagesofar\x011584,51871
-\def\balancecolumns{\x7f\balancecolumns\x011588,52108
+\def\pagesofar{\x7fpagesofar\x011584,51871
+\def\pagesofar{\unvbox\partialpage %\x7fialpage\x011584,51871
+\def\balancecolumns{\x7fbalancecolumns\x011588,52108
   \availdimen@=\pageheight \advance\availdimen@ by-\ht\partialpage\x7fialpage\x011594,52279
      \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage\x7fialpage\x011600,52540
 \newcount \appendixno  \appendixno = `\@\x7fno\x011627,53445
-\def\appendixletter{\x7f\appendixletter\x011628,53486
-\def\opencontents{\x7f\opencontents\x011632,53589
-\def\thischapter{\x7f\thischapter\x011637,53770
-\def\seccheck#1{\x7f\seccheck\x011638,53808
-\def\chapternofonts{\x7f\chapternofonts\x011643,53912
-\def\result{\x7f\result\x011646,53987
-\def\equiv{\x7f\equiv\x011647,54022
-\def\expansion{\x7f\expansion\x011648,54055
-\def\print{\x7f\print\x011649,54096
-\def\TeX{\x7f\TeX\x011650,54129
-\def\dots{\x7f\dots\x011651,54158
-\def\copyright{\x7f\copyright\x011652,54189
-\def\tt{\x7f\tt\x011653,54230
-\def\bf{\x7f\bf\x011654,54257
-\def\w{\x7f\w\x011655,54285
-\def\less{\x7f\less\x011656,54310
-\def\gtr{\x7f\gtr\x011657,54341
-\def\hat{\x7f\hat\x011658,54370
-\def\char{\x7f\char\x011659,54399
-\def\tclose##1{\x7f\tclose\x011660,54430
-\def\code##1{\x7f\code\x011661,54474
-\def\samp##1{\x7f\samp\x011662,54514
-\def\r##1{\x7f\r\x011663,54554
-\def\b##1{\x7f\b\x011664,54588
-\def\key##1{\x7f\key\x011665,54622
-\def\file##1{\x7f\file\x011666,54660
-\def\kbd##1{\x7f\kbd\x011667,54700
-\def\i##1{\x7f\i\x011669,54808
-\def\cite##1{\x7f\cite\x011670,54842
-\def\var##1{\x7f\var\x011671,54882
-\def\emph##1{\x7f\emph\x011672,54920
-\def\dfn##1{\x7f\dfn\x011673,54960
-\def\thischaptername{\x7f\thischaptername\x011676,55001
-\outer\def\chapter{\x7f\chapter\x011677,55040
-\def\chapterzzz #1{\x7f\chapterzzz\x011678,55081
-{\chapternofonts%\x7fnofonts%\x011687,55477
-\global\let\section = \numberedsec\x7f=\x011692,55630
-\global\let\subsection = \numberedsubsec\x7f=\x011693,55665
-\global\let\subsubsection = \numberedsubsubsec\x7f=\x011694,55706
-\outer\def\appendix{\x7f\appendix\x011697,55757
-\def\appendixzzz #1{\x7f\appendixzzz\x011698,55800
+\newcount \appendixno  \appendixno = `\@\x7fno\x011627,53445
+\def\appendixletter{\x7fappendixletter\x011628,53486
+\def\appendixletter{\char\the\appendixno}\x7fno\x011628,53486
+\def\opencontents{\x7fopencontents\x011632,53589
+\def\thischapter{\x7fthischapter\x011637,53770
+\def\thischapter{} \def\thissection{\x7fthissection\x011637,53770
+\def\seccheck#1{\x7fseccheck\x011638,53808
+\def\chapternofonts{\x7fchapternofonts\x011643,53912
+\let\rawbackslash=\relax%\x7frawbackslash\x011644,53934
+\let\frenchspacing=\relax%\x7ffrenchspacing\x011645,53960
+\def\result{\x7fresult\x011646,53987
+\def\equiv{\x7fequiv\x011647,54022
+\def\expansion{\x7fexpansion\x011648,54055
+\def\print{\x7fprint\x011649,54096
+\def\TeX{\x7fTeX\x011650,54129
+\def\dots{\x7fdots\x011651,54158
+\def\copyright{\x7fcopyright\x011652,54189
+\def\tt{\x7ftt\x011653,54230
+\def\bf{\x7fbf\x011654,54257
+\def\w{\x7fw\x011655,54285
+\def\less{\x7fless\x011656,54310
+\def\gtr{\x7fgtr\x011657,54341
+\def\hat{\x7fhat\x011658,54370
+\def\char{\x7fchar\x011659,54399
+\def\tclose##1{\x7ftclose\x011660,54430
+\def\code##1{\x7fcode\x011661,54474
+\def\samp##1{\x7fsamp\x011662,54514
+\def\r##1{\x7fr\x011663,54554
+\def\b##1{\x7fb\x011664,54588
+\def\key##1{\x7fkey\x011665,54622
+\def\file##1{\x7ffile\x011666,54660
+\def\kbd##1{\x7fkbd\x011667,54700
+\def\i##1{\x7fi\x011669,54808
+\def\cite##1{\x7fcite\x011670,54842
+\def\var##1{\x7fvar\x011671,54882
+\def\emph##1{\x7femph\x011672,54920
+\def\dfn##1{\x7fdfn\x011673,54960
+\def\thischaptername{\x7fthischaptername\x011676,55001
+\outer\def\chapter{\x7fchapter\x011677,55040
+\outer\def\chapter{\parsearg\chapterzzz}\x7fzzz\x011677,55040
+\def\chapterzzz #1{\x7fchapterzzz\x011678,55081
+\gdef\thissection{\x7fthissection\x011682,55246
+\gdef\thischaptername{\x7fthischaptername\x011683,55269
+\xdef\thischapter{\x7fthischapter\x011686,55410
+{\chapternofonts%\x7fnofonts\x011687,55477
+\edef\temp{\x7ftemp\x011688,55495
+\global\let\section = \numberedsec\x7fsection\x011692,55630
+\global\let\subsection = \numberedsubsec\x7fsubsection\x011693,55665
+\global\let\subsubsection = \numberedsubsubsec\x7fsubsubsection\x011694,55706
+\outer\def\appendix{\x7fappendix\x011697,55757
+\outer\def\appendix{\parsearg\appendixzzz}\x7fzzz\x011697,55757
+\def\appendixzzz #1{\x7fappendixzzz\x011698,55800
 \global\advance \appendixno by 1 \message{\x7fno\x011700,55877
+\global\advance \appendixno by 1 \message{Appendix \appendixletter}\x7fletter\x011700,55877
 \chapmacro {#1}{Appendix \appendixletter}\x7fletter\x011701,55946
+\gdef\thissection{\x7fthissection\x011702,55989
+\gdef\thischaptername{\x7fthischaptername\x011703,56012
+\xdef\thischapter{\x7fthischapter\x011704,56039
 \xdef\thischapter{Appendix \appendixletter: \noexpand\thischaptername}\x7fletter:\x011704,56039
-{\chapternofonts%\x7fnofonts%\x011705,56111
+{\chapternofonts%\x7fnofonts\x011705,56111
+\edef\temp{\x7ftemp\x011706,56129
   {#1}{Appendix \appendixletter}\x7fletter\x011707,56167
 \appendixnoderef %\x7fnoderef\x011710,56267
-\global\let\section = \appendixsec\x7f=\x011711,56286
-\global\let\subsection = \appendixsubsec\x7f=\x011712,56321
-\global\let\subsubsection = \appendixsubsubsec\x7f=\x011713,56362
-\outer\def\top{\x7f\top\x011716,56413
-\outer\def\unnumbered{\x7f\unnumbered\x011717,56453
-\def\unnumberedzzz #1{\x7f\unnumberedzzz\x011718,56500
-{\chapternofonts%\x7fnofonts%\x011722,56663
-\global\let\section = \unnumberedsec\x7f=\x011727,56813
-\global\let\subsection = \unnumberedsubsec\x7f=\x011728,56850
-\global\let\subsubsection = \unnumberedsubsubsec\x7f=\x011729,56893
-\outer\def\numberedsec{\x7f\numberedsec\x011732,56946
-\def\seczzz #1{\x7f\seczzz\x011733,56987
-{\chapternofonts%\x7fnofonts%\x011736,57143
-\outer\def\appendixsection{\x7f\appendixsection\x011745,57329
-\outer\def\appendixsec{\x7f\appendixsec\x011746,57386
-\def\appendixsectionzzz #1{\x7f\appendixsectionzzz\x011747,57439
+\global\let\section = \appendixsec\x7fsection\x011711,56286
+\global\let\section = \appendixsec\x7fsec\x011711,56286
+\global\let\subsection = \appendixsubsec\x7fsubsection\x011712,56321
+\global\let\subsection = \appendixsubsec\x7fsubsec\x011712,56321
+\global\let\subsubsection = \appendixsubsubsec\x7fsubsubsection\x011713,56362
+\global\let\subsubsection = \appendixsubsubsec\x7fsubsubsec\x011713,56362
+\outer\def\top{\x7ftop\x011716,56413
+\outer\def\unnumbered{\x7funnumbered\x011717,56453
+\def\unnumberedzzz #1{\x7funnumberedzzz\x011718,56500
+\gdef\thischapter{\x7fthischapter\x011721,56619
+\gdef\thischapter{#1}\gdef\thissection{\x7fthissection\x011721,56619
+{\chapternofonts%\x7fnofonts\x011722,56663
+\edef\temp{\x7ftemp\x011723,56681
+\global\let\section = \unnumberedsec\x7fsection\x011727,56813
+\global\let\subsection = \unnumberedsubsec\x7fsubsection\x011728,56850
+\global\let\subsubsection = \unnumberedsubsubsec\x7fsubsubsection\x011729,56893
+\outer\def\numberedsec{\x7fnumberedsec\x011732,56946
+\def\seczzz #1{\x7fseczzz\x011733,56987
+\gdef\thissection{\x7fthissection\x011735,57079
+{\chapternofonts%\x7fnofonts\x011736,57143
+\edef\temp{\x7ftemp\x011737,57161
+\outer\def\appendixsection{\x7fappendixsection\x011745,57329
+\outer\def\appendixsection{\parsearg\appendixsectionzzz}\x7fsectionzzz\x011745,57329
+\outer\def\appendixsec{\x7fappendixsec\x011746,57386
+\outer\def\appendixsec{\parsearg\appendixsectionzzz}\x7fsectionzzz\x011746,57386
+\def\appendixsectionzzz #1{\x7fappendixsectionzzz\x011747,57439
+\gdef\thissection{\x7fthissection\x011749,57551
 \gdef\thissection{#1}\secheading {#1}{\appendixletter}\x7fletter\x011749,57551
-{\chapternofonts%\x7fnofonts%\x011750,57619
+{\chapternofonts%\x7fnofonts\x011750,57619
+\edef\temp{\x7ftemp\x011751,57637
 {#1}{\appendixletter}\x7fletter\x011752,57675
 \appendixnoderef %\x7fnoderef\x011755,57775
-\outer\def\unnumberedsec{\x7f\unnumberedsec\x011759,57815
-\def\unnumberedseczzz #1{\x7f\unnumberedseczzz\x011760,57868
-{\chapternofonts%\x7fnofonts%\x011762,57963
-\outer\def\numberedsubsec{\x7f\numberedsubsec\x011770,58131
-\def\numberedsubseczzz #1{\x7f\numberedsubseczzz\x011771,58186
-{\chapternofonts%\x7fnofonts%\x011774,58365
-\outer\def\appendixsubsec{\x7f\appendixsubsec\x011783,58569
-\def\appendixsubseczzz #1{\x7f\appendixsubseczzz\x011784,58624
+\outer\def\unnumberedsec{\x7funnumberedsec\x011759,57815
+\def\unnumberedseczzz #1{\x7funnumberedseczzz\x011760,57868
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011761,57919
+{\chapternofonts%\x7fnofonts\x011762,57963
+\edef\temp{\x7ftemp\x011763,57981
+\outer\def\numberedsubsec{\x7fnumberedsubsec\x011770,58131
+\def\numberedsubseczzz #1{\x7fnumberedsubseczzz\x011771,58186
+\gdef\thissection{\x7fthissection\x011772,58235
+{\chapternofonts%\x7fnofonts\x011774,58365
+\edef\temp{\x7ftemp\x011775,58383
+\outer\def\appendixsubsec{\x7fappendixsubsec\x011783,58569
+\outer\def\appendixsubsec{\parsearg\appendixsubseczzz}\x7fsubseczzz\x011783,58569
+\def\appendixsubseczzz #1{\x7fappendixsubseczzz\x011784,58624
+\gdef\thissection{\x7fthissection\x011785,58677
 \subsecheading {#1}{\appendixletter}\x7fletter\x011786,58746
-{\chapternofonts%\x7fnofonts%\x011787,58811
+{\chapternofonts%\x7fnofonts\x011787,58811
+\edef\temp{\x7ftemp\x011788,58829
 {#1}{\appendixletter}\x7fletter\x011789,58870
 \appendixnoderef %\x7fnoderef\x011792,58985
-\outer\def\unnumberedsubsec{\x7f\unnumberedsubsec\x011796,59025
-\def\unnumberedsubseczzz #1{\x7f\unnumberedsubseczzz\x011797,59084
-{\chapternofonts%\x7fnofonts%\x011799,59185
-\outer\def\numberedsubsubsec{\x7f\numberedsubsubsec\x011807,59356
-\def\numberedsubsubseczzz #1{\x7f\numberedsubsubseczzz\x011808,59417
-{\chapternofonts%\x7fnofonts%\x011812,59614
-\outer\def\appendixsubsubsec{\x7f\appendixsubsubsec\x011823,59847
-\def\appendixsubsubseczzz #1{\x7f\appendixsubsubseczzz\x011824,59908
+\outer\def\unnumberedsubsec{\x7funnumberedsubsec\x011796,59025
+\def\unnumberedsubseczzz #1{\x7funnumberedsubseczzz\x011797,59084
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011798,59141
+{\chapternofonts%\x7fnofonts\x011799,59185
+\edef\temp{\x7ftemp\x011800,59203
+\outer\def\numberedsubsubsec{\x7fnumberedsubsubsec\x011807,59356
+\def\numberedsubsubseczzz #1{\x7fnumberedsubsubseczzz\x011808,59417
+\gdef\thissection{\x7fthissection\x011809,59472
+{\chapternofonts%\x7fnofonts\x011812,59614
+\edef\temp{\x7ftemp\x011813,59632
+\outer\def\appendixsubsubsec{\x7fappendixsubsubsec\x011823,59847
+\outer\def\appendixsubsubsec{\parsearg\appendixsubsubseczzz}\x7fsubsubseczzz\x011823,59847
+\def\appendixsubsubseczzz #1{\x7fappendixsubsubseczzz\x011824,59908
+\gdef\thissection{\x7fthissection\x011825,59967
   {\appendixletter}\x7fletter\x011827,60047
-{\chapternofonts%\x7fnofonts%\x011828,60113
+{\chapternofonts%\x7fnofonts\x011828,60113
+\edef\temp{\x7ftemp\x011829,60131
   {\appendixletter}\x7fletter\x011830,60178
 \appendixnoderef %\x7fnoderef\x011834,60312
-\outer\def\unnumberedsubsubsec{\x7f\unnumberedsubsubsec\x011838,60352
-\def\unnumberedsubsubseczzz #1{\x7f\unnumberedsubsubseczzz\x011839,60417
-{\chapternofonts%\x7fnofonts%\x011841,60524
-\def\infotop{\x7f\infotop\x011851,60853
-\def\infounnumbered{\x7f\infounnumbered\x011852,60891
-\def\infounnumberedsec{\x7f\infounnumberedsec\x011853,60936
-\def\infounnumberedsubsec{\x7f\infounnumberedsubsec\x011854,60987
-\def\infounnumberedsubsubsec{\x7f\infounnumberedsubsubsec\x011855,61044
-\def\infoappendix{\x7f\infoappendix\x011857,61108
-\def\infoappendixsec{\x7f\infoappendixsec\x011858,61149
-\def\infoappendixsubsec{\x7f\infoappendixsubsec\x011859,61196
-\def\infoappendixsubsubsec{\x7f\infoappendixsubsubsec\x011860,61249
-\def\infochapter{\x7f\infochapter\x011862,61309
-\def\infosection{\x7f\infosection\x011863,61348
-\def\infosubsection{\x7f\infosubsection\x011864,61387
-\def\infosubsubsection{\x7f\infosubsubsection\x011865,61432
-\global\let\section = \numberedsec\x7f=\x011870,61669
-\global\let\subsection = \numberedsubsec\x7f=\x011871,61704
-\global\let\subsubsection = \numberedsubsubsec\x7f=\x011872,61745
-\def\majorheading{\x7f\majorheading\x011886,62252
-\def\majorheadingzzz #1{\x7f\majorheadingzzz\x011887,62297
-\def\chapheading{\x7f\chapheading\x011893,62530
-\def\chapheadingzzz #1{\x7f\chapheadingzzz\x011894,62573
-\def\heading{\x7f\heading\x011899,62768
-\def\subheading{\x7f\subheading\x011901,62805
-\def\subsubheading{\x7f\subsubheading\x011903,62848
-\def\dobreak#1#2{\x7f\dobreak\x011910,63125
-\def\setchapterstyle #1 {\x7f\setchapterstyle\x011912,63203
-\def\chapbreak{\x7f\chapbreak\x011919,63458
-\def\chappager{\x7f\chappager\x011920,63508
-\def\chapoddpage{\x7f\chapoddpage\x011921,63546
-\def\setchapternewpage #1 {\x7f\setchapternewpage\x011923,63625
-\def\CHAPPAGoff{\x7f\CHAPPAGoff\x011925,63682
-\def\CHAPPAGon{\x7f\CHAPPAGon\x011929,63776
-\global\def\HEADINGSon{\x7f\HEADINGSon\x011932,63867
-\def\CHAPPAGodd{\x7f\CHAPPAGodd\x011934,63909
-\global\def\HEADINGSon{\x7f\HEADINGSon\x011937,64005
-\def\CHAPFplain{\x7f\CHAPFplain\x011941,64059
-\def\chfplain #1#2{\x7f\chfplain\x011945,64151
-\def\unnchfplain #1{\x7f\unnchfplain\x011956,64374
-\def\unnchfopen #1{\x7f\unnchfopen\x011964,64603
-\def\chfopen #1#2{\x7f\chfopen\x011970,64811
-\def\CHAPFopen{\x7f\CHAPFopen\x011975,64955
-\def\subsecheadingbreak{\x7f\subsecheadingbreak\x011982,65173
-\def\secheadingbreak{\x7f\secheadingbreak\x011985,65302
-\def\secheading #1#2#3{\x7f\secheading\x011993,65584
-\def\plainsecheading #1{\x7f\plainsecheading\x011994,65640
-\def\secheadingi #1{\x7f\secheadingi\x011995,65683
-\def\subsecheading #1#2#3#4{\x7f\subsecheading\x012006,66051
-\def\subsecheadingi #1{\x7f\subsecheadingi\x012007,66118
-\def\subsubsecfonts{\x7f\subsubsecfonts\x012014,66415
-\def\subsubsecheading #1#2#3#4#5{\x7f\subsubsecheading\x012017,66538
-\def\subsubsecheadingi #1{\x7f\subsubsecheadingi\x012018,66616
-\def\startcontents#1{\x7f\startcontents\x012032,67088
-   \unnumbchapmacro{#1}\def\thischapter{\x7f\thischapter\x012040,67361
-\outer\def\contents{\x7f\contents\x012049,67720
-\outer\def\summarycontents{\x7f\summarycontents\x012057,67864
-      \def\secentry ##1##2##3##4{\x7f\secentry\x012067,68235
-      \def\unnumbsecentry ##1##2{\x7f\unnumbsecentry\x012068,68270
-      \def\subsecentry ##1##2##3##4##5{\x7f\subsecentry\x012069,68305
-      \def\unnumbsubsecentry ##1##2{\x7f\unnumbsubsecentry\x012070,68346
-      \def\subsubsecentry ##1##2##3##4##5##6{\x7f\subsubsecentry\x012071,68384
-      \def\unnumbsubsubsecentry ##1##2{\x7f\unnumbsubsubsecentry\x012072,68431
-\def\chapentry#1#2#3{\x7f\chapentry\x012085,68865
-\def\shortchapentry#1#2#3{\x7f\shortchapentry\x012088,68982
+\outer\def\unnumberedsubsubsec{\x7funnumberedsubsubsec\x011838,60352
+\def\unnumberedsubsubseczzz #1{\x7funnumberedsubsubseczzz\x011839,60417
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011840,60480
+{\chapternofonts%\x7fnofonts\x011841,60524
+\edef\temp{\x7ftemp\x011842,60542
+\def\infotop{\x7finfotop\x011851,60853
+\def\infounnumbered{\x7finfounnumbered\x011852,60891
+\def\infounnumberedsec{\x7finfounnumberedsec\x011853,60936
+\def\infounnumberedsubsec{\x7finfounnumberedsubsec\x011854,60987
+\def\infounnumberedsubsubsec{\x7finfounnumberedsubsubsec\x011855,61044
+\def\infoappendix{\x7finfoappendix\x011857,61108
+\def\infoappendix{\parsearg\appendixzzz}\x7fzzz\x011857,61108
+\def\infoappendixsec{\x7finfoappendixsec\x011858,61149
+\def\infoappendixsec{\parsearg\appendixseczzz}\x7fseczzz\x011858,61149
+\def\infoappendixsubsec{\x7finfoappendixsubsec\x011859,61196
+\def\infoappendixsubsec{\parsearg\appendixsubseczzz}\x7fsubseczzz\x011859,61196
+\def\infoappendixsubsubsec{\x7finfoappendixsubsubsec\x011860,61249
+\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}\x7fsubsubseczzz\x011860,61249
+\def\infochapter{\x7finfochapter\x011862,61309
+\def\infochapter{\parsearg\chapterzzz}\x7fzzz\x011862,61309
+\def\infosection{\x7finfosection\x011863,61348
+\def\infosection{\parsearg\sectionzzz}\x7fzzz\x011863,61348
+\def\infosubsection{\x7finfosubsection\x011864,61387
+\def\infosubsection{\parsearg\subsectionzzz}\x7fzzz\x011864,61387
+\def\infosubsubsection{\x7finfosubsubsection\x011865,61432
+\def\infosubsubsection{\parsearg\subsubsectionzzz}\x7fzzz\x011865,61432
+\global\let\section = \numberedsec\x7fsection\x011870,61669
+\global\let\subsection = \numberedsubsec\x7fsubsection\x011871,61704
+\global\let\subsubsection = \numberedsubsubsec\x7fsubsubsection\x011872,61745
+\def\majorheading{\x7fmajorheading\x011886,62252
+\def\majorheadingzzz #1{\x7fmajorheadingzzz\x011887,62297
+\def\chapheading{\x7fchapheading\x011893,62530
+\def\chapheadingzzz #1{\x7fchapheadingzzz\x011894,62573
+\def\heading{\x7fheading\x011899,62768
+\def\subheading{\x7fsubheading\x011901,62805
+\def\subsubheading{\x7fsubsubheading\x011903,62848
+\def\dobreak#1#2{\x7fdobreak\x011910,63125
+\def\setchapterstyle #1 {\x7fsetchapterstyle\x011912,63203
+\def\chapbreak{\x7fchapbreak\x011919,63458
+\def\chappager{\x7fchappager\x011920,63508
+\def\chapoddpage{\x7fchapoddpage\x011921,63546
+\def\setchapternewpage #1 {\x7fsetchapternewpage\x011923,63625
+\def\CHAPPAGoff{\x7fCHAPPAGoff\x011925,63682
+\global\let\pchapsepmacro=\chapbreak\x7fpchapsepmacro\x011926,63699
+\global\let\pagealignmacro=\chappager}\x7fpagealignmacro\x011927,63736
+\def\CHAPPAGon{\x7fCHAPPAGon\x011929,63776
+\global\let\pchapsepmacro=\chappager\x7fpchapsepmacro\x011930,63792
+\global\let\pagealignmacro=\chappager\x7fpagealignmacro\x011931,63829
+\global\def\HEADINGSon{\x7fHEADINGSon\x011932,63867
+\def\CHAPPAGodd{\x7fCHAPPAGodd\x011934,63909
+\global\let\pchapsepmacro=\chapoddpage\x7fpchapsepmacro\x011935,63926
+\global\let\pagealignmacro=\chapoddpage\x7fpagealignmacro\x011936,63965
+\global\def\HEADINGSon{\x7fHEADINGSon\x011937,64005
+\def\CHAPFplain{\x7fCHAPFplain\x011941,64059
+\global\let\chapmacro=\chfplain\x7fchapmacro\x011942,64076
+\global\let\unnumbchapmacro=\unnchfplain}\x7funnumbchapmacro\x011943,64108
+\def\chfplain #1#2{\x7fchfplain\x011945,64151
+\def\unnchfplain #1{\x7funnchfplain\x011956,64374
+\def\unnchfopen #1{\x7funnchfopen\x011964,64603
+\def\chfopen #1#2{\x7fchfopen\x011970,64811
+\def\CHAPFopen{\x7fCHAPFopen\x011975,64955
+\global\let\chapmacro=\chfopen\x7fchapmacro\x011976,64971
+\global\let\unnumbchapmacro=\unnchfopen}\x7funnumbchapmacro\x011977,65002
+\def\subsecheadingbreak{\x7fsubsecheadingbreak\x011982,65173
+\def\secheadingbreak{\x7fsecheadingbreak\x011985,65302
+\let\paragraphindent=\comment\x7fparagraphindent\x011988,65428
+\def\secheading #1#2#3{\x7fsecheading\x011993,65584
+\def\plainsecheading #1{\x7fplainsecheading\x011994,65640
+\def\secheadingi #1{\x7fsecheadingi\x011995,65683
+\def\subsecheading #1#2#3#4{\x7fsubsecheading\x012006,66051
+\def\subsecheadingi #1{\x7fsubsecheadingi\x012007,66118
+\def\subsubsecfonts{\x7fsubsubsecfonts\x012014,66415
+\def\subsubsecheading #1#2#3#4#5{\x7fsubsubsecheading\x012017,66538
+\def\subsubsecheadingi #1{\x7fsubsubsecheadingi\x012018,66616
+\def\startcontents#1{\x7fstartcontents\x012032,67088
+   \unnumbchapmacro{#1}\def\thischapter{\x7fthischapter\x012040,67361
+\outer\def\contents{\x7fcontents\x012049,67720
+\outer\def\summarycontents{\x7fsummarycontents\x012057,67864
+      \let\chapentry = \shortchapentry\x7fchapentry\x012060,67936
+      \let\unnumbchapentry = \shortunnumberedentry\x7funnumbchapentry\x012061,67975
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7frm\x012064,68098
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7fbf\x012064,68098
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7fsl\x012064,68098
+      \def\secentry ##1##2##3##4{\x7fsecentry\x012067,68235
+      \def\unnumbsecentry ##1##2{\x7funnumbsecentry\x012068,68270
+      \def\subsecentry ##1##2##3##4##5{\x7fsubsecentry\x012069,68305
+      \def\unnumbsubsecentry ##1##2{\x7funnumbsubsecentry\x012070,68346
+      \def\subsubsecentry ##1##2##3##4##5##6{\x7fsubsubsecentry\x012071,68384
+      \def\unnumbsubsubsecentry ##1##2{\x7funnumbsubsubsecentry\x012072,68431
+\let\shortcontents = \summarycontents\x7fshortcontents\x012077,68530
+\def\chapentry#1#2#3{\x7fchapentry\x012085,68865
+\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}\x7fspace\x012085,68865
+\def\shortchapentry#1#2#3{\x7fshortchapentry\x012088,68982
     {#2\labelspace #1}\x7fspace\x012091,69092
-\def\unnumbchapentry#1#2{\x7f\unnumbchapentry\x012094,69146
-\def\shortunnumberedentry#1#2{\x7f\shortunnumberedentry\x012095,69193
-\def\secentry#1#2#3#4{\x7f\secentry\x012102,69357
-\def\unnumbsecentry#1#2{\x7f\unnumbsecentry\x012103,69416
-\def\subsecentry#1#2#3#4#5{\x7f\subsecentry\x012106,69477
-\def\unnumbsubsecentry#1#2{\x7f\unnumbsubsecentry\x012107,69547
-\def\subsubsecentry#1#2#3#4#5#6{\x7f\subsubsecentry\x012110,69621
+\def\unnumbchapentry#1#2{\x7funnumbchapentry\x012094,69146
+\def\shortunnumberedentry#1#2{\x7fshortunnumberedentry\x012095,69193
+\def\secentry#1#2#3#4{\x7fsecentry\x012102,69357
+\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}\x7fspace\x012102,69357
+\def\unnumbsecentry#1#2{\x7funnumbsecentry\x012103,69416
+\def\subsecentry#1#2#3#4#5{\x7fsubsecentry\x012106,69477
+\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}\x7fspace\x012106,69477
+\def\unnumbsubsecentry#1#2{\x7funnumbsubsecentry\x012107,69547
+\def\subsubsecentry#1#2#3#4#5#6{\x7fsubsubsecentry\x012110,69621
   \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}\x7fspace\x012111,69655
-\def\unnumbsubsubsecentry#1#2{\x7f\unnumbsubsubsecentry\x012112,69706
-\def\dochapentry#1#2{\x7f\dochapentry\x012123,70080
-\def\dosecentry#1#2{\x7f\dosecentry\x012138,70685
-\def\dosubsecentry#1#2{\x7f\dosubsecentry\x012145,70863
-\def\dosubsubsecentry#1#2{\x7f\dosubsubsecentry\x012152,71048
-\def\labelspace{\x7f\labelspace\x012160,71299
-\def\dopageno#1{\x7f\dopageno\x012162,71334
-\def\doshortpageno#1{\x7f\doshortpageno\x012163,71360
-\def\chapentryfonts{\x7f\chapentryfonts\x012165,71392
-\def\secentryfonts{\x7f\secentryfonts\x012166,71427
-\def\point{\x7f\point\x012192,72386
-\def\result{\x7f\result\x012194,72407
-\def\expansion{\x7f\expansion\x012195,72480
-\def\print{\x7f\print\x012196,72551
-\def\equiv{\x7f\equiv\x012198,72618
-\def\error{\x7f\error\x012218,73391
-\def\tex{\x7f\tex\x012224,73620
-\def\@{\x7f\@\x012242,74003
-\gdef\sepspaces{\def {\ }}}\x7f\\x012265,74735
-\def\aboveenvbreak{\x7f\aboveenvbreak\x012268,74817
-\def\afterenvbreak{\x7f\afterenvbreak\x012272,74983
-\def\ctl{\x7f\ctl\x012286,75494
-\def\ctr{\x7f\ctr\x012287,75566
-\def\cbl{\x7f\cbl\x012288,75605
-\def\cbr{\x7f\cbr\x012289,75645
-\def\carttop{\x7f\carttop\x012290,75684
-\def\cartbot{\x7f\cartbot\x012293,75792
-\long\def\cartouche{\x7f\cartouche\x012299,75932
-\def\Ecartouche{\x7f\Ecartouche\x012326,76720
-\def\lisp{\x7f\lisp\x012338,76855
-\def\Elisp{\x7f\Elisp\x012348,77202
-\def\next##1{\x7f\next\x012360,77528
-\def\Eexample{\x7f\Eexample\x012364,77570
-\def\Esmallexample{\x7f\Esmallexample\x012367,77617
-\def\smalllispx{\x7f\smalllispx\x012373,77795
-\def\Esmalllisp{\x7f\Esmalllisp\x012383,78149
+\def\unnumbsubsubsecentry#1#2{\x7funnumbsubsubsecentry\x012112,69706
+\def\dochapentry#1#2{\x7fdochapentry\x012123,70080
+\def\dosecentry#1#2{\x7fdosecentry\x012138,70685
+\def\dosubsecentry#1#2{\x7fdosubsecentry\x012145,70863
+\def\dosubsubsecentry#1#2{\x7fdosubsubsecentry\x012152,71048
+\def\labelspace{\x7flabelspace\x012160,71299
+\def\dopageno#1{\x7fdopageno\x012162,71334
+\def\doshortpageno#1{\x7fdoshortpageno\x012163,71360
+\def\chapentryfonts{\x7fchapentryfonts\x012165,71392
+\def\secentryfonts{\x7fsecentryfonts\x012166,71427
+\let\subsecentryfonts = \textfonts\x7fsubsecentryfonts\x012167,71458
+\let\subsubsecentryfonts = \textfonts\x7fsubsubsecentryfonts\x012168,71493
+\let\ptexequiv = \equiv\x7fptexequiv\x012180,71896
+\def\point{\x7fpoint\x012192,72386
+\def\result{\x7fresult\x012194,72407
+\def\expansion{\x7fexpansion\x012195,72480
+\def\print{\x7fprint\x012196,72551
+\def\equiv{\x7fequiv\x012198,72618
+\def\error{\x7ferror\x012218,73391
+\def\tex{\x7ftex\x012224,73620
+\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie\x7f~\x012227,73731
+\let\{=\ptexlbrace\x7f{\x012237,73912
+\let\}=\ptexrbrace\x7f}\x012238,73931
+\let\.=\ptexdot\x7f.\x012239,73950
+\let\*=\ptexstar\x7f*\x012240,73966
+\let\dots=\ptexdots\x7fdots\x012241,73983
+\def\@{\x7f@\x012242,74003
+\let\bullet=\ptexbullet\x7fbullet\x012243,74014
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fb\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fc\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fi\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7ft\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fl\x012244,74038
+\let\L=\ptexL\x7fL\x012245,74108
+\let\Etex=\endgroup}\x7fEtex\x012247,74124
+\gdef\lisppar{\x7flisppar\x012259,74517
+\gdef\sepspaces{\x7fsepspaces\x012265,74735
+\def\aboveenvbreak{\x7faboveenvbreak\x012268,74817
+\def\afterenvbreak{\x7fafterenvbreak\x012272,74983
+\let\nonarrowing=\relax\x7fnonarrowing\x012276,75176
+\def\ctl{\x7fctl\x012286,75494
+\def\ctr{\x7fctr\x012287,75566
+\def\cbl{\x7fcbl\x012288,75605
+\def\cbr{\x7fcbr\x012289,75645
+\def\carttop{\x7fcarttop\x012290,75684
+\def\cartbot{\x7fcartbot\x012293,75792
+\long\def\cartouche{\x7fcartouche\x012299,75932
+	\let\nonarrowing=\comment\x7fnonarrowing\x012311,76404
+\def\Ecartouche{\x7fEcartouche\x012326,76720
+\def\lisp{\x7flisp\x012338,76855
+\let\par=\lisppar\x7fpar\x012347,77184
+\def\Elisp{\x7fElisp\x012348,77202
+\let\exdent=\nofillexdent\x7fexdent\x012355,77418
+\let\nonarrowing=\relax\x7fnonarrowing\x012356,77444
+\def\next##1{\x7fnext\x012360,77528
+\let\example=\lisp\x7fexample\x012363,77551
+\def\Eexample{\x7fEexample\x012364,77570
+\let\smallexample=\lisp\x7fsmallexample\x012366,77593
+\def\Esmallexample{\x7fEsmallexample\x012367,77617
+\def\smalllispx{\x7fsmalllispx\x012373,77795
+\let\par=\lisppar\x7fpar\x012382,78131
+\def\Esmalllisp{\x7fEsmalllisp\x012383,78149
+\let\exdent=\nofillexdent\x7fexdent\x012392,78436
+\let\nonarrowing=\relax\x7fnonarrowing\x012393,78462
 \obeyspaces \obeylines \ninett \indexfonts \rawbackslash\x7ffonts\x012396,78505
-\def\next##1{\x7f\next\x012397,78562
-\def\display{\x7f\display\x012401,78642
-\def\Edisplay{\x7f\Edisplay\x012410,78961
-\def\next##1{\x7f\next\x012422,79272
-\def\format{\x7f\format\x012426,79375
-\def\Eformat{\x7f\Eformat\x012434,79671
-\def\next##1{\x7f\next\x012437,79760
-\def\flushleft{\x7f\flushleft\x012441,79812
-\def\Eflushleft{\x7f\Eflushleft\x012451,80183
-\def\next##1{\x7f\next\x012454,80276
-\def\flushright{\x7f\flushright\x012456,80298
-\def\Eflushright{\x7f\Eflushright\x012466,80670
-\def\next##1{\x7f\next\x012470,80801
-\def\quotation{\x7f\quotation\x012474,80859
-\def\Equotation{\x7f\Equotation\x012480,81051
-\def\setdeffont #1 {\x7f\setdeffont\x012493,81449
+\def\next##1{\x7fnext\x012397,78562
+\def\display{\x7fdisplay\x012401,78642
+\let\par=\lisppar\x7fpar\x012409,78943
+\def\Edisplay{\x7fEdisplay\x012410,78961
+\let\exdent=\nofillexdent\x7fexdent\x012417,79180
+\let\nonarrowing=\relax\x7fnonarrowing\x012418,79206
+\def\next##1{\x7fnext\x012422,79272
+\def\format{\x7fformat\x012426,79375
+\let\par=\lisppar\x7fpar\x012433,79653
+\def\Eformat{\x7fEformat\x012434,79671
+\def\next##1{\x7fnext\x012437,79760
+\def\flushleft{\x7fflushleft\x012441,79812
+\let\par=\lisppar\x7fpar\x012450,80165
+\def\Eflushleft{\x7fEflushleft\x012451,80183
+\def\next##1{\x7fnext\x012454,80276
+\def\flushright{\x7fflushright\x012456,80298
+\let\par=\lisppar\x7fpar\x012465,80652
+\def\Eflushright{\x7fEflushright\x012466,80670
+\def\next##1{\x7fnext\x012470,80801
+\def\quotation{\x7fquotation\x012474,80859
+\def\Equotation{\x7fEquotation\x012480,81051
+\let\nonarrowing=\relax\x7fnonarrowing\x012487,81301
+\def\setdeffont #1 {\x7fsetdeffont\x012493,81449
+\newskip\defbodyindent \defbodyindent=.4in\x7fbodyindent\x012495,81495
 \newskip\defbodyindent \defbodyindent=.4in\x7fbodyindent\x012495,81495
 \newskip\defargsindent \defargsindent=50pt\x7fargsindent\x012496,81538
+\newskip\defargsindent \defargsindent=50pt\x7fargsindent\x012496,81538
 \newskip\deftypemargin \deftypemargin=12pt\x7ftypemargin\x012497,81581
+\newskip\deftypemargin \deftypemargin=12pt\x7ftypemargin\x012497,81581
+\newskip\deflastargmargin \deflastargmargin=18pt\x7flastargmargin\x012498,81624
 \newskip\deflastargmargin \deflastargmargin=18pt\x7flastargmargin\x012498,81624
-\def\activeparens{\x7f\activeparens\x012503,81822
-\def\opnr{\x7f\opnr\x012529,83034
-\def\lbrb{\x7f\lbrb\x012530,83099
-\def\defname #1#2{\x7f\defname\x012536,83300
+\def\activeparens{\x7factiveparens\x012503,81822
+\gdef\functionparens{\x7ffunctionparens\x012507,82016
+\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }\x7f&\x012507,82016
+\gdef\boldbrax{\x7fboldbrax\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f(\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f)\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f[\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f]\x012508,82074
+\gdef\oprm#1 {\x7foprm\x012512,82250
+\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %\x7f(\x012512,82250
+\gdef\opnested{\x7fopnested\x012516,82407
+\gdef\clrm{\x7fclrm\x012518,82466
+\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi\x7f(\x012520,82602
+\gdef\amprm#1 {\x7famprm\x012523,82769
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }\x7f(\x012523,82769
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }\x7f)\x012523,82769
+\gdef\normalparens{\x7fnormalparens\x012525,82822
+\gdef\normalparens{\boldbrax\let&=\ampnr}\x7f&\x012525,82822
+\def\opnr{\x7fopnr\x012529,83034
+\def\opnr{{\sf\char`\(}} \def\clnr{\x7fclnr\x012529,83034
+\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\x7fampnr\x012529,83034
+\def\lbrb{\x7flbrb\x012530,83099
+\def\lbrb{{\bf\char`\[}} \def\rbrb{\x7frbrb\x012530,83099
+\def\defname #1#2{\x7fdefname\x012536,83300
 \advance\dimen2 by -\defbodyindent\x7fbodyindent\x012540,83418
 \advance\dimen3 by -\defbodyindent\x7fbodyindent\x012542,83472
 \setbox0=\hbox{\hskip \deflastargmargin{\x7flastargmargin\x012544,83526
+\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}\x7ftypemargin\x012544,83526
 \dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations\x7fargsindent\x012546,83668
 \parshape 2 0in \dimen0 \defargsindent \dimen1     %\x7fargsindent\x012547,83743
 \rlap{\rightline{{\rm #2}\hskip \deftypemargin}\x7ftypemargin\x012554,84112
 \advance\leftskip by -\defbodyindent\x7fbodyindent\x012557,84246
 \exdentamount=\defbodyindent\x7fbodyindent\x012558,84283
-\def\defparsebody #1#2#3{\x7f\defparsebody\x012568,84642
-\def#1{\x7f2572,84826
-\def#2{\x7f2573,84862
+\def\defparsebody #1#2#3{\x7fdefparsebody\x012568,84642
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012575,84934
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012575,84934
 \exdentamount=\defbodyindent\x7fbodyindent\x012576,85008
-\def\defmethparsebody #1#2#3#4 {\x7f\defmethparsebody\x012581,85112
-\def#1{\x7f2585,85273
-\def#2##1 {\x7f2586,85309
+\def\defmethparsebody #1#2#3#4 {\x7fdefmethparsebody\x012581,85112
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012588,85392
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012588,85392
 \exdentamount=\defbodyindent\x7fbodyindent\x012589,85466
-\def\defopparsebody #1#2#3#4#5 {\x7f\defopparsebody\x012592,85551
-\def#1{\x7f2596,85712
-\def#2##1 ##2 {\x7f2597,85748
+\def\defopparsebody #1#2#3#4#5 {\x7fdefopparsebody\x012592,85551
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012600,85848
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012600,85848
 \exdentamount=\defbodyindent\x7fbodyindent\x012601,85922
-\def\defvarparsebody #1#2#3{\x7f\defvarparsebody\x012608,86193
-\def#1{\x7f2612,86380
-\def#2{\x7f2613,86416
+\def\defvarparsebody #1#2#3{\x7fdefvarparsebody\x012608,86193
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012615,86475
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012615,86475
 \exdentamount=\defbodyindent\x7fbodyindent\x012616,86549
-\def\defvrparsebody #1#2#3#4 {\x7f\defvrparsebody\x012621,86640
-\def#1{\x7f2625,86799
-\def#2##1 {\x7f2626,86835
+\def\defvrparsebody #1#2#3#4 {\x7fdefvrparsebody\x012621,86640
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012628,86905
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012628,86905
 \exdentamount=\defbodyindent\x7fbodyindent\x012629,86979
-\def\defopvarparsebody #1#2#3#4#5 {\x7f\defopvarparsebody\x012632,87051
-\def#1{\x7f2636,87215
-\def#2##1 ##2 {\x7f2637,87251
+\def\defopvarparsebody #1#2#3#4#5 {\x7fdefopvarparsebody\x012632,87051
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012640,87338
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012640,87338
 \exdentamount=\defbodyindent\x7fbodyindent\x012641,87412
-\def\defunargs #1{\x7f\defunargs\x012664,88172
-\def\deftypefunargs #1{\x7f\deftypefunargs\x012676,88554
-\def\deffn{\x7f\deffn\x012690,88936
-\def\deffnheader #1#2#3{\x7f\deffnheader\x012692,88993
+\gdef\spacesplit#1#2^^M{\x7fspacesplit\x012652,87775
+\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{\x7fspacesplitfoo\x012653,87852
+\def\defunargs #1{\x7fdefunargs\x012664,88172
+\def\deftypefunargs #1{\x7fdeftypefunargs\x012676,88554
+\def\deffn{\x7fdeffn\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7fmethparsebody\Edeffn\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7ffnx\deffnheader\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7ffnheader\x012690,88936
+\def\deffnheader #1#2#3{\x7fdeffnheader\x012692,88993
 \begingroup\defname {\x7fname\x012693,89041
-\def\defun{\x7f\defun\x012699,89186
-\def\defunheader #1#2{\x7f\defunheader\x012701,89239
+\begingroup\defname {#2}{#1}\defunargs{\x7funargs\x012693,89041
+\def\defun{\x7fdefun\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7fparsebody\Edefun\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7funx\defunheader\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7funheader\x012699,89186
+\def\defunheader #1#2{\x7fdefunheader\x012701,89239
 \begingroup\defname {\x7fname\x012702,89314
 \defunargs {\x7funargs\x012703,89350
-\def\deftypefun{\x7f\deftypefun\x012709,89498
-\def\deftypefunheader #1#2{\x7f\deftypefunheader\x012712,89620
-\def\deftypefunheaderx #1#2 #3\relax{\x7f\deftypefunheaderx\x012714,89729
+\def\deftypefun{\x7fdeftypefun\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7fparsebody\Edeftypefun\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7ftypefunx\deftypefunheader\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7ftypefunheader\x012709,89498
+\def\deftypefunheader #1#2{\x7fdeftypefunheader\x012712,89620
+\def\deftypefunheader #1#2{\deftypefunheaderx{\x7ftypefunheaderx\x012712,89620
+\def\deftypefunheaderx #1#2 #3\relax{\x7fdeftypefunheaderx\x012714,89729
 \begingroup\defname {\x7fname\x012716,89821
 \deftypefunargs {\x7ftypefunargs\x012717,89867
-\def\deftypefn{\x7f\deftypefn\x012723,90038
-\def\deftypefnheader #1#2#3{\x7f\deftypefnheader\x012726,90187
-\def\deftypefnheaderx #1#2#3 #4\relax{\x7f\deftypefnheaderx\x012728,90323
+\def\deftypefn{\x7fdeftypefn\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7fmethparsebody\Edeftypefn\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7ftypefnx\deftypefnheader\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7ftypefnheader\x012723,90038
+\def\deftypefnheader #1#2#3{\x7fdeftypefnheader\x012726,90187
+\def\deftypefnheader #1#2#3{\deftypefnheaderx{\x7ftypefnheaderx\x012726,90187
+\def\deftypefnheaderx #1#2#3 #4\relax{\x7fdeftypefnheaderx\x012728,90323
 \begingroup\defname {\x7fname\x012730,90416
 \deftypefunargs {\x7ftypefunargs\x012731,90456
-\def\defmac{\x7f\defmac\x012737,90577
-\def\defmacheader #1#2{\x7f\defmacheader\x012739,90634
+\def\defmac{\x7fdefmac\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fparsebody\Edefmac\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fmacx\defmacheader\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fmacheader\x012737,90577
+\def\defmacheader #1#2{\x7fdefmacheader\x012739,90634
 \begingroup\defname {\x7fname\x012740,90710
 \defunargs {\x7funargs\x012741,90743
-\def\defspec{\x7f\defspec\x012747,90867
-\def\defspecheader #1#2{\x7f\defspecheader\x012749,90928
+\def\defspec{\x7fdefspec\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fparsebody\Edefspec\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fspecx\defspecheader\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fspecheader\x012747,90867
+\def\defspecheader #1#2{\x7fdefspecheader\x012749,90928
 \begingroup\defname {\x7fname\x012750,91005
 \defunargs {\x7funargs\x012751,91045
-\def\deffnx #1 {\x7f\deffnx\x012758,91240
-\def\defunx #1 {\x7f\defunx\x012759,91297
-\def\defmacx #1 {\x7f\defmacx\x012760,91354
-\def\defspecx #1 {\x7f\defspecx\x012761,91413
-\def\deftypefnx #1 {\x7f\deftypefnx\x012762,91474
-\def\deftypeunx #1 {\x7f\deftypeunx\x012763,91539
-\def\defop #1 {\x7f\defop\x012769,91685
-\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopparsebody\Edefop\defopx\defopheader\defoptype\x012770,91720
-\def\defopheader #1#2#3{\x7f\defopheader\x012772,91774
+\def\deffnx #1 {\x7fdeffnx\x012758,91240
+\def\defunx #1 {\x7fdefunx\x012759,91297
+\def\defmacx #1 {\x7fdefmacx\x012760,91354
+\def\defspecx #1 {\x7fdefspecx\x012761,91413
+\def\deftypefnx #1 {\x7fdeftypefnx\x012762,91474
+\def\deftypeunx #1 {\x7fdeftypeunx\x012763,91539
+\def\defop #1 {\x7fdefop\x012769,91685
+\def\defop #1 {\def\defoptype{\x7fdefoptype\x012769,91685
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopparsebody\Edefop\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopx\defopheader\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopheader\defoptype\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7foptype\x012770,91720
+\def\defopheader #1#2#3{\x7fdefopheader\x012772,91774
 \begingroup\defname {\x7fname\x012774,91863
+\begingroup\defname {#2}{\defoptype{\x7foptype\x012774,91863
 \defunargs {\x7funargs\x012775,91909
-\def\defmethod{\x7f\defmethod\x012780,91970
-\def\defmethodheader #1#2#3{\x7f\defmethodheader\x012782,92043
+\def\defmethod{\x7fdefmethod\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethparsebody\Edefmethod\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethodx\defmethodheader\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethodheader\x012780,91970
+\def\defmethodheader #1#2#3{\x7fdefmethodheader\x012782,92043
 \begingroup\defname {\x7fname\x012784,92131
 \defunargs {\x7funargs\x012785,92171
-\def\defcv #1 {\x7f\defcv\x012790,92245
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype\x012791,92280
-\def\defcvarheader #1#2#3{\x7f\defcvarheader\x012793,92339
+\def\defcv #1 {\x7fdefcv\x012790,92245
+\def\defcv #1 {\def\defcvtype{\x7fdefcvtype\x012790,92245
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fopvarparsebody\Edefcv\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvx\defcvarheader\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvarheader\defcvtype\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvtype\x012791,92280
+\def\defcvarheader #1#2#3{\x7fdefcvarheader\x012793,92339
 \begingroup\defname {\x7fname\x012795,92425
+\begingroup\defname {#2}{\defcvtype{\x7fcvtype\x012795,92425
 \defvarargs {\x7fvarargs\x012796,92471
-\def\defivar{\x7f\defivar\x012801,92544
-\def\defivarheader #1#2#3{\x7f\defivarheader\x012803,92607
+\def\defivar{\x7fdefivar\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fvrparsebody\Edefivar\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fivarx\defivarheader\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fivarheader\x012801,92544
+\def\defivarheader #1#2#3{\x7fdefivarheader\x012803,92607
 \begingroup\defname {\x7fname\x012805,92693
 \defvarargs {\x7fvarargs\x012806,92744
-\def\defopx #1 {\x7f\defopx\x012812,92893
-\def\defmethodx #1 {\x7f\defmethodx\x012813,92950
-\def\defcvx #1 {\x7f\defcvx\x012814,93015
-\def\defivarx #1 {\x7f\defivarx\x012815,93072
-\def\defvarargs #1{\x7f\defvarargs\x012822,93343
-\def\defvr{\x7f\defvr\x012828,93487
-\def\defvrheader #1#2#3{\x7f\defvrheader\x012830,93542
+\def\defopx #1 {\x7fdefopx\x012812,92893
+\def\defmethodx #1 {\x7fdefmethodx\x012813,92950
+\def\defcvx #1 {\x7fdefcvx\x012814,93015
+\def\defivarx #1 {\x7fdefivarx\x012815,93072
+\def\defvarargs #1{\x7fdefvarargs\x012822,93343
+\def\defvr{\x7fdefvr\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrparsebody\Edefvr\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrx\defvrheader\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrheader\x012828,93487
+\def\defvrheader #1#2#3{\x7fdefvrheader\x012830,93542
 \begingroup\defname {\x7fname\x012831,93590
-\def\defvar{\x7f\defvar\x012835,93675
-\def\defvarheader #1#2{\x7f\defvarheader\x012837,93735
+\begingroup\defname {#2}{#1}\defvarargs{\x7fvarargs\x012831,93590
+\def\defvar{\x7fdefvar\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarparsebody\Edefvar\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarx\defvarheader\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarheader\x012835,93675
+\def\defvarheader #1#2{\x7fdefvarheader\x012837,93735
 \begingroup\defname {\x7fname\x012838,93806
 \defvarargs {\x7fvarargs\x012839,93842
-\def\defopt{\x7f\defopt\x012844,93908
-\def\defoptheader #1#2{\x7f\defoptheader\x012846,93968
+\def\defopt{\x7fdefopt\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7fvarparsebody\Edefopt\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7foptx\defoptheader\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7foptheader\x012844,93908
+\def\defoptheader #1#2{\x7fdefoptheader\x012846,93968
 \begingroup\defname {\x7fname\x012847,94039
 \defvarargs {\x7fvarargs\x012848,94078
-\def\deftypevar{\x7f\deftypevar\x012853,94135
-\def\deftypevarheader #1#2{\x7f\deftypevarheader\x012856,94251
+\def\deftypevar{\x7fdeftypevar\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7fvarparsebody\Edeftypevar\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7ftypevarx\deftypevarheader\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7ftypevarheader\x012853,94135
+\def\deftypevarheader #1#2{\x7fdeftypevarheader\x012856,94251
 \begingroup\defname {\x7fname\x012858,94334
-\def\deftypevr{\x7f\deftypevr\x012865,94508
-\def\deftypevrheader #1#2#3{\x7f\deftypevrheader\x012867,94579
+\def\deftypevr{\x7fdeftypevr\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7fvrparsebody\Edeftypevr\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7ftypevrx\deftypevrheader\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7ftypevrheader\x012865,94508
+\def\deftypevrheader #1#2#3{\x7fdeftypevrheader\x012867,94579
 \begingroup\defname {\x7fname\x012868,94631
-\def\defvrx #1 {\x7f\defvrx\x012876,94868
-\def\defvarx #1 {\x7f\defvarx\x012877,94925
-\def\defoptx #1 {\x7f\defoptx\x012878,94984
-\def\deftypevarx #1 {\x7f\deftypevarx\x012879,95043
-\def\deftypevrx #1 {\x7f\deftypevrx\x012880,95110
-\def\deftpargs #1{\x7f\deftpargs\x012885,95259
-\def\deftp{\x7f\deftp\x012889,95339
-\def\deftpheader #1#2#3{\x7f\deftpheader\x012891,95394
+\def\defvrx #1 {\x7fdefvrx\x012876,94868
+\def\defvarx #1 {\x7fdefvarx\x012877,94925
+\def\defoptx #1 {\x7fdefoptx\x012878,94984
+\def\deftypevarx #1 {\x7fdeftypevarx\x012879,95043
+\def\deftypevrx #1 {\x7fdeftypevrx\x012880,95110
+\def\deftpargs #1{\x7fdeftpargs\x012885,95259
+\def\deftpargs #1{\bf \defvarargs{\x7fvarargs\x012885,95259
+\def\deftp{\x7fdeftp\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7fvrparsebody\Edeftp\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7ftpx\deftpheader\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7ftpheader\x012889,95339
+\def\deftpheader #1#2#3{\x7fdeftpheader\x012891,95394
 \begingroup\defname {\x7fname\x012892,95442
-\def\deftpx #1 {\x7f\deftpx\x012897,95601
-\def\setref#1{\x7f\setref\x012908,95922
-\def\unnumbsetref#1{\x7f\unnumbsetref\x012913,96036
-\def\appendixsetref#1{\x7f\appendixsetref\x012918,96143
-\def\pxref#1{\x7f\pxref\x012929,96554
-\def\xref#1{\x7f\xref\x012930,96590
-\def\ref#1{\x7f\ref\x012931,96625
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\x7f\xrefX[\x012932,96655
-\def\printedmanual{\x7f\printedmanual\x012933,96698
-\def\printednodename{\x7f\printednodename\x012934,96736
-\def\printednodename{\x7f\printednodename\x012939,96861
-section ``\printednodename'' in \cite{\printedmanual}\x7f\printedmanual\x012954,97493
+\begingroup\defname {#2}{#1}\deftpargs{\x7ftpargs\x012892,95442
+\def\deftpx #1 {\x7fdeftpx\x012897,95601
+\def\setref#1{\x7fsetref\x012908,95922
+\def\unnumbsetref#1{\x7funnumbsetref\x012913,96036
+\def\appendixsetref#1{\x7fappendixsetref\x012918,96143
+\def\pxref#1{\x7fpxref\x012929,96554
+\def\xref#1{\x7fxref\x012930,96590
+\def\ref#1{\x7fref\x012931,96625
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\x7fxrefX\x012932,96655
+\def\printedmanual{\x7fprintedmanual\x012933,96698
+\def\printednodename{\x7fprintednodename\x012934,96736
+\def\printednodename{\x7fprintednodename\x012939,96861
+section ``\printednodename'' in \cite{\printedmanual}\x7fprintedmanual\x012954,97493
 \refx{\x7fx\x012957,97571
-\def\dosetq #1#2{\x7f\dosetq\x012965,97791
-\def\internalsetq #1#2{\x7f\internalsetq\x012973,98049
-\def\Ypagenumber{\x7f\Ypagenumber\x012977,98150
-\def\Ytitle{\x7f\Ytitle\x012979,98176
-\def\Ynothing{\x7f\Ynothing\x012981,98203
-\def\Ysectionnumberandtype{\x7f\Ysectionnumberandtype\x012983,98220
-\def\Yappendixletterandtype{\x7f\Yappendixletterandtype\x012992,98536
+\refx{#1-snt}{} [\printednodename], page\tie\refx{\x7fx\x012957,97571
+\def\dosetq #1#2{\x7fdosetq\x012965,97791
+\def\dosetq #1#2{{\let\folio=0 \turnoffactive%\x7ffolio\x012965,97791
+\edef\next{\x7fnext\x012966,97838
+\def\internalsetq #1#2{\x7finternalsetq\x012973,98049
+\def\Ypagenumber{\x7fYpagenumber\x012977,98150
+\def\Ytitle{\x7fYtitle\x012979,98176
+\def\Ynothing{\x7fYnothing\x012981,98203
+\def\Ysectionnumberandtype{\x7fYsectionnumberandtype\x012983,98220
+\def\Yappendixletterandtype{\x7fYappendixletterandtype\x012992,98536
 \ifnum\secno=0 Appendix\xreftie'char\the\appendixno{\x7fno\x012993,98566
-\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno %\x7fno.\the\secno\x012994,98621
-Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno %\x7fno.\the\secno.\the\subsecno\x012996,98725
-Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\x7fno.\the\secno.\the\subsecno.\the\subsubsecno\x012998,98796
-  \def\linenumber{\x7f\linenumber\x013009,99135
-\def\refx#1#2{\x7f\refx\x013015,99319
-\def\xrdef #1#2{\x7f\xrdef\x013037,99945
-\def\readauxfile{\x7f\readauxfile\x013040,100030
-\def\supereject{\x7f\supereject\x013110,101811
-\footstrut\parindent=\defaultparindent\hang\textindent{\x7faultparindent\hang\textindent\x013131,102496
-\def\openindices{\x7f\openindices\x013139,102682
+\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno %\x7fno.\the\x012994,98621
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno %\x7fno.\the\x012996,98725
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\x7fno.\the\x012998,98796
+\gdef\xreftie{\x7fxreftie\x013001,98891
+  \let\linenumber = \empty % Non-3.0.\x7flinenumber\x013007,99091
+  \def\linenumber{\x7flinenumber\x013009,99135
+\def\refx#1#2{\x7frefx\x013015,99319
+\def\xrdef #1#2{\x7fxrdef\x013037,99945
+{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {\x7fcsname\x013038,99962
+\def\readauxfile{\x7freadauxfile\x013040,100030
+\def\supereject{\x7fsupereject\x013110,101811
+\let\footnotestyle=\comment\x7ffootnotestyle\x013113,101918
+\let\ptexfootnote=\footnote\x7fptexfootnote\x013115,101947
+\long\gdef\footnote #1{\x7ffootnote\x013118,101993
+\edef\thisfootno{\x7fthisfootno\x013120,102060
+\let\@sf\empty\x7f@sf\x013121,102100
+\ifhmode\edef\@sf{\x7f@sf\x013122,102115
+\long\gdef\footnotezzz #1{\x7ffootnotezzz\x013126,102228
+\footstrut\parindent=\defaultparindent\hang\textindent{\x7faultparindent\hang\x013131,102496
+\def\openindices{\x7fopenindices\x013139,102682
+\newdimen\defaultparindent \defaultparindent = 15pt\x7faultparindent\x013151,102907
 \newdimen\defaultparindent \defaultparindent = 15pt\x7faultparindent\x013151,102907
 \parindent = \defaultparindent\x7faultparindent\x013152,102959
-\def\smallbook{\x7f\smallbook\x013175,103683
-\global\def\Esmallexample{\x7f\Esmallexample\x013192,104110
-\def\afourpaper{\x7f\afourpaper\x013196,104201
-\def\finalout{\x7f\finalout\x013224,105009
-\def\normaldoublequote{\x7f\normaldoublequote\x013235,105270
-\def\normaltilde{\x7f\normaltilde\x013236,105296
-\def\normalcaret{\x7f\normalcaret\x013237,105316
-\def\normalunderscore{\x7f\normalunderscore\x013238,105336
-\def\normalverticalbar{\x7f\normalverticalbar\x013239,105361
-\def\normalless{\x7f\normalless\x013240,105387
-\def\normalgreater{\x7f\normalgreater\x013241,105406
-\def\normalplus{\x7f\normalplus\x013242,105428
-\def\ifusingtt#1#2{\x7f\ifusingtt\x013253,105920
-\def\activedoublequote{\x7f\activedoublequote\x013261,106248
+\def\smallbook{\x7fsmallbook\x013175,103683
+\global\let\smalllisp=\smalllispx\x7fsmalllisp\x013190,104039
+\global\let\smallexample=\smalllispx\x7fsmallexample\x013191,104073
+\global\def\Esmallexample{\x7fEsmallexample\x013192,104110
+\def\afourpaper{\x7fafourpaper\x013196,104201
+\def\finalout{\x7ffinalout\x013224,105009
+\def\normaldoublequote{\x7fnormaldoublequote\x013235,105270
+\def\normaltilde{\x7fnormaltilde\x013236,105296
+\def\normalcaret{\x7fnormalcaret\x013237,105316
+\def\normalunderscore{\x7fnormalunderscore\x013238,105336
+\def\normalverticalbar{\x7fnormalverticalbar\x013239,105361
+\def\normalless{\x7fnormalless\x013240,105387
+\def\normalgreater{\x7fnormalgreater\x013241,105406
+\def\normalplus{\x7fnormalplus\x013242,105428
+\def\ifusingtt#1#2{\x7fifusingtt\x013253,105920
+\def\activedoublequote{\x7factivedoublequote\x013261,106248
+\let"=\activedoublequote\x7f"\x013262,106289
 \def~{\x7f~\x013264,106334
 \def^{\x7f^\x013267,106395
 \def_{\x7f_\x013270,106434
-\def\_{\x7f\_\x013272,106508
-\def\lvvmode{\x7f\lvvmode\x013279,106845
+\def\_{\x7f_\x013272,106508
+\def\lvvmode{\x7flvvmode\x013279,106845
 \def|{\x7f|\x013282,106895
 \def<{\x7f<\x013285,106958
 \def>{\x7f>\x013288,107015
 \def+{\x7f+\x013290,107053
-\def\turnoffactive{\x7f\turnoffactive\x013296,107214
+\def\turnoffactive{\x7fturnoffactive\x013296,107214
+\def\turnoffactive{\let"=\normaldoublequote\x7f"\x013296,107214
+\let~=\normaltilde\x7f~\x013297,107258
+\let^=\normalcaret\x7f^\x013298,107277
+\let_=\normalunderscore\x7f_\x013299,107296
+\let|=\normalverticalbar\x7f|\x013300,107320
+\let<=\normalless\x7f<\x013301,107345
+\let>=\normalgreater\x7f>\x013302,107363
+\let+=\normalplus}\x7f+\x013303,107384
 \global\def={\x7f=\x013307,107500
-\def\normalbackslash{\x7f\normalbackslash\x013321,107882
+\def\normalbackslash{\x7fnormalbackslash\x013321,107882
 \f
 merc-src/accumulator.m,3228
 :- interface\x7f146,5371
diff --git a/test/manual/etags/ETAGS.good_2 b/test/manual/etags/ETAGS.good_2
index 6e90f1e8e05..3b4d04f9a3f 100644
--- a/test/manual/etags/ETAGS.good_2
+++ b/test/manual/etags/ETAGS.good_2
@@ -3721,8 +3721,8 @@ scm-src/test.scm,260
 (define (((((curry-test \x7f14,205
 (define-syntax test-begin\x7f17,265
 \f
-tex-src/testenv.tex,52
-\newcommand{\nm}\x7f\nm\x014,77
+tex-src/testenv.tex,51
+\newcommand{\nm}\x7fnm\x014,77
 \section{blah}\x7fblah\x018,139
 \f
 tex-src/gzip.texi,303
@@ -3737,722 +3737,1142 @@ tex-src/gzip.texi,303
 @node Problems,\x7f460,16769
 @node Concept Index,\x7fConcept Index\x01473,17289
 \f
-tex-src/texinfo.tex,30627
-\def\texinfoversion{\x7f\texinfoversion\x0126,1035
-\def\tie{\x7f\tie\x0149,1526
-\def\gloggingall{\x7f\gloggingall\x0172,2276
-\def\loggingall{\x7f\loggingall\x0173,2345
-\def\onepageout#1{\x7f\onepageout\x0199,3282
-\def\croppageout#1{\x7f\croppageout\x01115,4032
-\def\cropmarks{\x7f\cropmarks\x01142,5092
-\def\pagebody#1{\x7f\pagebody\x01144,5139
-\def\ewtop{\x7f\ewtop\x01157,5594
-\def\nstop{\x7f\nstop\x01158,5658
-\def\ewbot{\x7f\ewbot\x01160,5741
-\def\nsbot{\x7f\nsbot\x01161,5805
-\def\parsearg #1{\x7f\parsearg\x01170,6104
-\def\parseargx{\x7f\parseargx\x01172,6182
-\def\parseargline{\x7f\parseargline\x01182,6422
-\def\flushcr{\x7f\flushcr\x01186,6543
-\newif\ifENV \ENVfalse \def\inENV{\x7f\inENV\x01190,6742
-\def\ENVcheck{\x7f\ENVcheck\x01191,6806
-\outer\def\begin{\x7f\begin\x01198,7053
-\def\beginxxx #1{\x7f\beginxxx\x01200,7091
-\def\end{\x7f\end\x01208,7346
-\def\endxxx #1{\x7f\endxxx\x01210,7374
-\def\errorE#1{\x7f\errorE\x01216,7563
-\def\singlespace{\x7f\singlespace\x01222,7757
-\def\@{\x7f\@\x01232,7980
-\def\`{\x7f\`\x01236,8080
-\def\'{\x7f\'\x01237,8092
-\def\mylbrace {\x7f\mylbrace\x01241,8140
-\def\myrbrace {\x7f\myrbrace\x01242,8173
-\def\:{\x7f\:\x01247,8287
-\def\*{\x7f\*\x01250,8341
-\def\.{\x7f\.\x01253,8417
-\def\w#1{\x7f\w\x01258,8648
-\def\group{\x7f\group\x01268,9131
-  \def\Egroup{\x7f\Egroup\x01273,9295
-\def\need{\x7f\need\x01289,9737
-\def\needx#1{\x7f\needx\x01300,10014
-\def\dots{\x7f\dots\x01339,11400
-\def\page{\x7f\page\x01343,11464
-\def\exdent{\x7f\exdent\x01353,11791
-\def\exdentyyy #1{\x7f\exdentyyy\x01354,11824
-\def\nofillexdent{\x7f\nofillexdent\x01357,11968
-\def\nofillexdentyyy #1{\x7f\nofillexdentyyy\x01358,12013
-\def\include{\x7f\include\x01365,12197
-\def\includezzz #1{\x7f\includezzz\x01366,12232
-\def\thisfile{\x7f\thisfile\x01369,12283
-\def\center{\x7f\center\x01373,12346
-\def\centerzzz #1{\x7f\centerzzz\x01374,12379
-\def\sp{\x7f\sp\x01380,12521
-\def\spxxx #1{\x7f\spxxx\x01381,12546
-\def\comment{\x7f\comment\x01387,12720
-\def\commentxxx #1{\x7f\commentxxx\x01390,12817
-\def\ignoresections{\x7f\ignoresections\x01396,12986
-\let\chapter=\relax\x7f=\relax\x01397,13008
-\let\section=\relax\x7f=\relax\x01406,13253
-\let\subsection=\relax\x7f=\relax\x01409,13314
-\let\subsubsection=\relax\x7f=\relax\x01410,13337
-\let\appendix=\relax\x7f=\relax\x01411,13363
-\let\appendixsec=\relax\x7fsec=\relax\x01412,13384
-\let\appendixsection=\relax\x7fsection=\relax\x01413,13408
-\let\appendixsubsec=\relax\x7fsubsec=\relax\x01414,13436
-\let\appendixsubsection=\relax\x7fsubsection=\relax\x01415,13463
-\let\appendixsubsubsec=\relax\x7fsubsubsec=\relax\x01416,13494
-\let\appendixsubsubsection=\relax\x7fsubsubsection=\relax\x01417,13524
-\def\ignore{\x7f\ignore\x01423,13626
-\long\def\ignorexxx #1\end ignore{\x7f\ignorexxx\x01427,13766
-\def\direntry{\x7f\direntry\x01429,13825
-\long\def\direntryxxx #1\end direntry{\x7f\direntryxxx\x01430,13864
-\def\ifset{\x7f\ifset\x01434,13974
-\def\ifsetxxx #1{\x7f\ifsetxxx\x01436,14032
-\def\Eifset{\x7f\Eifset\x01440,14159
-\def\ifsetfail{\x7f\ifsetfail\x01441,14173
-\long\def\ifsetfailxxx #1\end ifset{\x7f\ifsetfailxxx\x01442,14229
-\def\ifclear{\x7f\ifclear\x01444,14290
-\def\ifclearxxx #1{\x7f\ifclearxxx\x01446,14352
-\def\Eifclear{\x7f\Eifclear\x01450,14483
-\def\ifclearfail{\x7f\ifclearfail\x01451,14499
-\long\def\ifclearfailxxx #1\end ifclear{\x7f\ifclearfailxxx\x01452,14559
-\def\set{\x7f\set\x01456,14710
-\def\setxxx #1{\x7f\setxxx\x01457,14737
-\def\clear{\x7f\clear\x01460,14799
-\def\clearxxx #1{\x7f\clearxxx\x01461,14830
-\def\iftex{\x7f\iftex\x01466,14947
-\def\Eiftex{\x7f\Eiftex\x01467,14960
-\def\ifinfo{\x7f\ifinfo\x01468,14974
-\long\def\ifinfoxxx #1\end ifinfo{\x7f\ifinfoxxx\x01469,15024
-\long\def\menu #1\end menu{\x7f\menu\x01471,15083
-\def\asis#1{\x7f\asis\x01472,15112
-\def\math#1{\x7f\math\x01485,15655
-\def\node{\x7f\node\x01487,15699
-\def\nodezzz#1{\x7f\nodezzz\x01488,15737
-\def\nodexxx[#1,#2]{\x7f\nodexxx[\x01489,15768
-\def\donoderef{\x7f\donoderef\x01492,15830
-\def\unnumbnoderef{\x7f\unnumbnoderef\x01496,15951
-\def\appendixnoderef{\x7f\appendixnoderef\x01500,16082
+tex-src/texinfo.tex,55236
+\def\texinfoversion{\x7ftexinfoversion\x0126,1035
+\let\ptexlbrace=\{\x7fptexlbrace\x0135,1308
+\let\ptexrbrace=\}\x7fptexrbrace\x0136,1327
+\let\ptexdots=\dots\x7fptexdots\x0137,1346
+\let\ptexdot=\.\x7fptexdot\x0138,1366
+\let\ptexstar=\*\x7fptexstar\x0139,1382
+\let\ptexend=\end\x7fptexend\x0140,1399
+\let\ptexbullet=\bullet\x7fptexbullet\x0141,1417
+\let\ptexb=\b\x7fptexb\x0142,1441
+\let\ptexc=\c\x7fptexc\x0143,1455
+\let\ptexi=\i\x7fptexi\x0144,1469
+\let\ptext=\t\x7fptext\x0145,1483
+\let\ptexl=\l\x7fptexl\x0146,1497
+\let\ptexL=\L\x7fptexL\x0147,1511
+\def\tie{\x7ftie\x0149,1526
+\def\gloggingall{\x7fgloggingall\x0172,2276
+\def\loggingall{\x7floggingall\x0173,2345
+\def\onepageout#1{\x7fonepageout\x0199,3282
+\shipout\vbox{{\let\hsize=\pagewidth \makeheadline}\x7fhsize\x01103,3489
+{\let\hsize=\pagewidth \makefootline}\x7fhsize\x01104,3556
+\def\croppageout#1{\x7fcroppageout\x01115,4032
+			{\let\hsize=\pagewidth \makeheadline}\x7fhsize\x01126,4511
+			{\let\hsize=\pagewidth \makefootline}\x7fhsize\x01128,4569
+\def\cropmarks{\x7fcropmarks\x01142,5092
+\def\cropmarks{\let\onepageout=\croppageout }\x7fonepageout\x01142,5092
+\def\pagebody#1{\x7fpagebody\x01144,5139
+\gdef\pagecontents#1{\x7fpagecontents\x01146,5220
+\def\ewtop{\x7fewtop\x01157,5594
+\def\nstop{\x7fnstop\x01158,5658
+\def\ewbot{\x7fewbot\x01160,5741
+\def\nsbot{\x7fnsbot\x01161,5805
+\def\parsearg #1{\x7fparsearg\x01170,6104
+\def\parsearg #1{\let\next=#1\begingroup\obeylines\futurelet\temp\parseargx}\x7fnext\x01170,6104
+\def\parseargx{\x7fparseargx\x01172,6182
+\gdef\parseargdiscardspace {\x7fparseargdiscardspace\x01178,6321
+\gdef\obeyedspace{\x7fobeyedspace\x01180,6399
+\def\parseargline{\x7fparseargline\x01182,6422
+\gdef\parsearglinex #1^^M{\x7fparsearglinex\x01184,6493
+\def\flushcr{\x7fflushcr\x01186,6543
+\def\flushcr{\ifx\par\lisppar \def\next##1{\x7fnext\x01186,6543
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}\x7fnext\x01186,6543
+\newif\ifENV \ENVfalse \def\inENV{\x7finENV\x01190,6742
+\def\ENVcheck{\x7fENVcheck\x01191,6806
+\outer\def\begin{\x7fbegin\x01198,7053
+\def\beginxxx #1{\x7fbeginxxx\x01200,7091
+\def\end{\x7fend\x01208,7346
+\def\endxxx #1{\x7fendxxx\x01210,7374
+\def\errorE#1{\x7ferrorE\x01216,7563
+\def\singlespace{\x7fsinglespace\x01222,7757
+\def\@{\x7f@\x01232,7980
+\def\`{\x7f`\x01236,8080
+\def\'{\x7f'\x01237,8092
+\def\mylbrace {\x7fmylbrace\x01241,8140
+\def\myrbrace {\x7fmyrbrace\x01242,8173
+\let\{=\mylbrace\x7f{\x01243,8206
+\let\}=\myrbrace\x7f}\x01244,8223
+\def\:{\x7f:\x01247,8287
+\def\*{\x7f*\x01250,8341
+\def\.{\x7f.\x01253,8417
+\def\w#1{\x7fw\x01258,8648
+\def\group{\x7fgroup\x01268,9131
+  \def\Egroup{\x7fEgroup\x01273,9295
+\def\need{\x7fneed\x01289,9737
+\def\needx#1{\x7fneedx\x01300,10014
+\let\br = \par\x7fbr\x01335,11355
+\def\dots{\x7fdots\x01339,11400
+\def\page{\x7fpage\x01343,11464
+\def\exdent{\x7fexdent\x01353,11791
+\def\exdentyyy #1{\x7fexdentyyy\x01354,11824
+\def\nofillexdent{\x7fnofillexdent\x01357,11968
+\def\nofillexdentyyy #1{\x7fnofillexdentyyy\x01358,12013
+\def\include{\x7finclude\x01365,12197
+\def\includezzz #1{\x7fincludezzz\x01366,12232
+\def\includezzz #1{{\def\thisfile{\x7fthisfile\x01366,12232
+\def\thisfile{\x7fthisfile\x01369,12283
+\def\center{\x7fcenter\x01373,12346
+\def\centerzzz #1{\x7fcenterzzz\x01374,12379
+\def\sp{\x7fsp\x01380,12521
+\def\spxxx #1{\x7fspxxx\x01381,12546
+\def\comment{\x7fcomment\x01387,12720
+\def\commentxxx #1{\x7fcommentxxx\x01390,12817
+\let\c=\comment\x7fc\x01392,12883
+\def\ignoresections{\x7fignoresections\x01396,12986
+\let\chapter=\relax\x7fchapter\x01397,13008
+\let\unnumbered=\relax\x7funnumbered\x01398,13028
+\let\top=\relax\x7ftop\x01399,13051
+\let\unnumberedsec=\relax\x7funnumberedsec\x01400,13067
+\let\unnumberedsection=\relax\x7funnumberedsection\x01401,13093
+\let\unnumberedsubsec=\relax\x7funnumberedsubsec\x01402,13123
+\let\unnumberedsubsection=\relax\x7funnumberedsubsection\x01403,13152
+\let\unnumberedsubsubsec=\relax\x7funnumberedsubsubsec\x01404,13185
+\let\unnumberedsubsubsection=\relax\x7funnumberedsubsubsection\x01405,13217
+\let\section=\relax\x7fsection\x01406,13253
+\let\subsec=\relax\x7fsubsec\x01407,13273
+\let\subsubsec=\relax\x7fsubsubsec\x01408,13292
+\let\subsection=\relax\x7fsubsection\x01409,13314
+\let\subsubsection=\relax\x7fsubsubsection\x01410,13337
+\let\appendix=\relax\x7fappendix\x01411,13363
+\let\appendixsec=\relax\x7fappendixsec\x01412,13384
+\let\appendixsection=\relax\x7fappendixsection\x01413,13408
+\let\appendixsubsec=\relax\x7fappendixsubsec\x01414,13436
+\let\appendixsubsection=\relax\x7fappendixsubsection\x01415,13463
+\let\appendixsubsubsec=\relax\x7fappendixsubsubsec\x01416,13494
+\let\appendixsubsubsection=\relax\x7fappendixsubsubsection\x01417,13524
+\let\contents=\relax\x7fcontents\x01418,13558
+\let\smallbook=\relax\x7fsmallbook\x01419,13579
+\let\titlepage=\relax\x7ftitlepage\x01420,13601
+\def\ignore{\x7fignore\x01423,13626
+\long\def\ignorexxx #1\end ignore{\x7fignorexxx\x01427,13766
+\def\direntry{\x7fdirentry\x01429,13825
+\long\def\direntryxxx #1\end direntry{\x7fdirentryxxx\x01430,13864
+\def\ifset{\x7fifset\x01434,13974
+\def\ifsetxxx #1{\x7fifsetxxx\x01436,14032
+\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\ifsetfail\x7ftemp\x01437,14059
+\else \let\temp=\relax \fi\x7ftemp\x01438,14125
+\def\Eifset{\x7fEifset\x01440,14159
+\def\ifsetfail{\x7fifsetfail\x01441,14173
+\long\def\ifsetfailxxx #1\end ifset{\x7fifsetfailxxx\x01442,14229
+\def\ifclear{\x7fifclear\x01444,14290
+\def\ifclearxxx #1{\x7fifclearxxx\x01446,14352
+\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\relax\x7ftemp\x01447,14381
+\else \let\temp=\ifclearfail \fi\x7ftemp\x01448,14443
+\def\Eifclear{\x7fEifclear\x01450,14483
+\def\ifclearfail{\x7fifclearfail\x01451,14499
+\long\def\ifclearfailxxx #1\end ifclear{\x7fifclearfailxxx\x01452,14559
+\def\set{\x7fset\x01456,14710
+\def\setxxx #1{\x7fsetxxx\x01457,14737
+\expandafter\let\csname IF#1\endcsname=\set}\x7fcsname\x01458,14753
+\def\clear{\x7fclear\x01460,14799
+\def\clearxxx #1{\x7fclearxxx\x01461,14830
+\expandafter\let\csname IF#1\endcsname=\relax}\x7fcsname\x01462,14848
+\def\iftex{\x7fiftex\x01466,14947
+\def\Eiftex{\x7fEiftex\x01467,14960
+\def\ifinfo{\x7fifinfo\x01468,14974
+\long\def\ifinfoxxx #1\end ifinfo{\x7fifinfoxxx\x01469,15024
+\long\def\menu #1\end menu{\x7fmenu\x01471,15083
+\def\asis#1{\x7fasis\x01472,15112
+\let\implicitmath = $\x7fimplicitmath\x01484,15633
+\def\math#1{\x7fmath\x01485,15655
+\def\node{\x7fnode\x01487,15699
+\def\nodezzz#1{\x7fnodezzz\x01488,15737
+\def\nodexxx[#1,#2]{\x7fnodexxx\x01489,15768
+\def\nodexxx[#1,#2]{\gdef\lastnode{\x7flastnode\x01489,15768
+\let\lastnode=\relax\x7flastnode\x01490,15808
+\def\donoderef{\x7fdonoderef\x01492,15830
+\let\lastnode=\relax}\x7flastnode\x01494,15928
+\def\unnumbnoderef{\x7funnumbnoderef\x01496,15951
+\let\lastnode=\relax}\x7flastnode\x01498,16059
+\def\appendixnoderef{\x7fappendixnoderef\x01500,16082
 \expandafter\expandafter\expandafter\appendixsetref{\x7fsetref\x01501,16128
-\let\refill=\relax\x7fill=\relax\x01504,16217
-\def\setfilename{\x7f\setfilename\x01509,16431
-\outer\def\bye{\x7f\bye\x01518,16677
-\def\inforef #1{\x7f\inforef\x01520,16733
-\def\inforefzzz #1,#2,#3,#4**{\x7f\inforefzzz\x01521,16771
-\def\losespace #1{\x7f\losespace\x01523,16868
-\def\sf{\x7f\sf\x01532,17072
-\font\defbf=cmbx10 scaled \magstep1 %was 1314\x7fbf=cmbx10\x01558,17867
-\font\deftt=cmtt10 scaled \magstep1\x7ftt=cmtt10\x01559,17913
-\def\df{\x7f\df\x01560,17949
-\def\resetmathfonts{\x7f\resetmathfonts\x01635,20543
-\def\textfonts{\x7f\textfonts\x01648,21132
-\def\chapfonts{\x7f\chapfonts\x01653,21347
-\def\secfonts{\x7f\secfonts\x01658,21563
-\def\subsecfonts{\x7f\subsecfonts\x01663,21768
-\def\indexfonts{\x7f\indexfonts\x01668,21985
-\def\smartitalicx{\x7f\smartitalicx\x01691,22717
-\def\smartitalic#1{\x7f\smartitalic\x01692,22793
-\let\cite=\smartitalic\x7f=\smartitalic\x01698,22938
-\def\b#1{\x7f\b\x01700,22962
-\def\t#1{\x7f\t\x01703,22997
-\def\samp #1{\x7f\samp\x01706,23149
-\def\key #1{\x7f\key\x01707,23182
-\def\ctrl #1{\x7f\ctrl\x01708,23243
-\def\tclose#1{\x7f\tclose\x01716,23445
-\def\ {\x7f\\x01720,23611
-\def\xkey{\x7f\xkey\x01728,23880
-\def\kbdfoo#1#2#3\par{\x7f\kbdfoo\x01729,23896
-\def\dmn#1{\x7f\dmn\x01738,24197
-\def\kbd#1{\x7f\kbd\x01740,24224
-\def\l#1{\x7f\l\x01742,24281
-\def\r#1{\x7f\r\x01744,24310
-\def\sc#1{\x7f\sc\x01746,24378
-\def\ii#1{\x7f\ii\x01747,24421
-\def\titlefont#1{\x7f\titlefont\x01755,24654
-\def\titlepage{\x7f\titlepage\x01761,24757
-   \def\subtitlefont{\x7f\subtitlefont\x01766,24984
-   \def\authorfont{\x7f\authorfont\x01768,25068
-   \def\title{\x7f\title\x01774,25278
-   \def\titlezzz##1{\x7f\titlezzz\x01775,25313
-   \def\subtitle{\x7f\subtitle\x01783,25628
-   \def\subtitlezzz##1{\x7f\subtitlezzz\x01784,25669
-   \def\author{\x7f\author\x01787,25787
-   \def\authorzzz##1{\x7f\authorzzz\x01788,25824
-   \def\page{\x7f\page\x01794,26115
-\def\Etitlepage{\x7f\Etitlepage\x01804,26284
-\def\finishtitlepage{\x7f\finishtitlepage\x01817,26672
-\def\evenheading{\x7f\evenheading\x01846,27680
-\def\oddheading{\x7f\oddheading\x01847,27723
-\def\everyheading{\x7f\everyheading\x01848,27764
-\def\evenfooting{\x7f\evenfooting\x01850,27810
-\def\oddfooting{\x7f\oddfooting\x01851,27853
-\def\everyfooting{\x7f\everyfooting\x01852,27894
-\def\headings #1 {\x7f\headings\x01893,29586
-\def\HEADINGSoff{\x7f\HEADINGSoff\x01895,29635
-\def\HEADINGSdouble{\x7f\HEADINGSdouble\x01904,30062
-\def\HEADINGSsingle{\x7f\HEADINGSsingle\x01914,30382
-\def\HEADINGSon{\x7f\HEADINGSon\x01922,30603
-\def\HEADINGSafter{\x7f\HEADINGSafter\x01924,30637
-\def\HEADINGSdoublex{\x7f\HEADINGSdoublex\x01926,30732
-\def\HEADINGSsingleafter{\x7f\HEADINGSsingleafter\x01933,30920
-\def\HEADINGSsinglex{\x7f\HEADINGSsinglex\x01934,30981
-\def\today{\x7f\today\x01943,31256
-\def\thistitle{\x7f\thistitle\x01958,31801
-\def\settitle{\x7f\settitle\x01959,31826
-\def\settitlezzz #1{\x7f\settitlezzz\x01960,31863
-\def\internalBitem{\x7f\internalBitem\x01992,32793
-\def\internalBitemx{\x7f\internalBitemx\x01993,32843
-\def\internalBxitem "#1"{\x7f\internalBxitem\x01995,32888
-\def\internalBxitemx "#1"{\x7f\internalBxitemx\x01996,32968
-\def\internalBkitem{\x7f\internalBkitem\x01998,33043
-\def\internalBkitemx{\x7f\internalBkitemx\x01999,33095
-\def\kitemzzz #1{\x7f\kitemzzz\x011001,33142
-\def\xitemzzz #1{\x7f\xitemzzz\x011004,33244
-\def\itemzzz #1{\x7f\itemzzz\x011007,33347
-\def\item{\x7f\item\x011037,34418
-\def\itemx{\x7f\itemx\x011038,34469
-\def\kitem{\x7f\kitem\x011039,34522
-\def\kitemx{\x7f\kitemx\x011040,34575
-\def\xitem{\x7f\xitem\x011041,34630
-\def\xitemx{\x7f\xitemx\x011042,34683
-\def\description{\x7f\description\x011045,34793
-\def\table{\x7f\table\x011047,34843
-\def\ftable{\x7f\ftable\x011052,34987
-\def\Eftable{\x7f\Eftable\x011056,35133
-\def\vtable{\x7f\vtable\x011059,35202
-\def\Evtable{\x7f\Evtable\x011063,35348
-\def\dontindex #1{\x7f\dontindex\x011066,35417
-\def\fnitemindex #1{\x7f\fnitemindex\x011067,35437
-\def\vritemindex #1{\x7f\vritemindex\x011068,35482
-\def\tablez #1#2#3#4#5#6{\x7f\tablez\x011074,35631
-\def\Edescription{\x7f\Edescription\x011077,35689
-\def\itemfont{\x7f\itemfont\x011082,35890
-\def\Etable{\x7f\Etable\x011090,36116
-\def\itemize{\x7f\itemize\x011103,36440
-\def\itemizezzz #1{\x7f\itemizezzz\x011105,36476
-\def\itemizey #1#2{\x7f\itemizey\x011110,36571
-\def#2{\x7f1119,36817
-\def\itemcontents{\x7f\itemcontents\x011120,36858
-\def\bullet{\x7f\bullet\x011123,36906
-\def\minus{\x7f\minus\x011124,36933
-\def\frenchspacing{\x7f\frenchspacing\x011128,37041
-\def\splitoff#1#2\endmark{\x7f\splitoff\x011134,37266
-\def\enumerate{\x7f\enumerate\x011140,37496
-\def\enumeratezzz #1{\x7f\enumeratezzz\x011141,37535
-\def\enumeratey #1 #2\endenumeratey{\x7f\enumeratey\x011142,37588
-  \def\thearg{\x7f\thearg\x011146,37735
-  \ifx\thearg\empty \def\thearg{\x7f\thearg\x011147,37754
-\def\numericenumerate{\x7f\numericenumerate\x011184,39088
-\def\lowercaseenumerate{\x7f\lowercaseenumerate\x011190,39218
-\def\uppercaseenumerate{\x7f\uppercaseenumerate\x011203,39565
-\def\startenumeration#1{\x7f\startenumeration\x011219,40055
-\def\alphaenumerate{\x7f\alphaenumerate\x011227,40237
-\def\capsenumerate{\x7f\capsenumerate\x011228,40272
-\def\Ealphaenumerate{\x7f\Ealphaenumerate\x011229,40306
-\def\Ecapsenumerate{\x7f\Ecapsenumerate\x011230,40340
-\def\itemizeitem{\x7f\itemizeitem\x011234,40420
-\def\newindex #1{\x7f\newindex\x011259,41277
-\def\defindex{\x7f\defindex\x011268,41566
-\def\newcodeindex #1{\x7f\newcodeindex\x011272,41674
-\def\defcodeindex{\x7f\defcodeindex\x011279,41934
-\def\synindex #1 #2 {\x7f\synindex\x011283,42114
-\def\syncodeindex #1 #2 {\x7f\syncodeindex\x011292,42454
-\def\doindex#1{\x7f\doindex\x011309,43133
-\def\singleindexer #1{\x7f\singleindexer\x011310,43192
-\def\docodeindex#1{\x7f\docodeindex\x011313,43304
-\def\singlecodeindexer #1{\x7f\singlecodeindexer\x011314,43371
-\def\indexdummies{\x7f\indexdummies\x011316,43429
-\def\_{\x7f\_\x011317,43449
-\def\w{\x7f\w\x011318,43477
-\def\bf{\x7f\bf\x011319,43504
-\def\rm{\x7f\rm\x011320,43533
-\def\sl{\x7f\sl\x011321,43562
-\def\sf{\x7f\sf\x011322,43591
-\def\tt{\x7f\tt\x011323,43619
-\def\gtr{\x7f\gtr\x011324,43647
-\def\less{\x7f\less\x011325,43677
-\def\hat{\x7f\hat\x011326,43709
-\def\char{\x7f\char\x011327,43739
-\def\TeX{\x7f\TeX\x011328,43771
-\def\dots{\x7f\dots\x011329,43801
-\def\copyright{\x7f\copyright\x011330,43834
-\def\tclose##1{\x7f\tclose\x011331,43877
-\def\code##1{\x7f\code\x011332,43922
-\def\samp##1{\x7f\samp\x011333,43963
-\def\t##1{\x7f\t\x011334,44004
-\def\r##1{\x7f\r\x011335,44039
-\def\i##1{\x7f\i\x011336,44074
-\def\b##1{\x7f\b\x011337,44109
-\def\cite##1{\x7f\cite\x011338,44144
-\def\key##1{\x7f\key\x011339,44185
-\def\file##1{\x7f\file\x011340,44224
-\def\var##1{\x7f\var\x011341,44265
-\def\kbd##1{\x7f\kbd\x011342,44304
-\def\indexdummyfont#1{\x7f\indexdummyfont\x011347,44460
-\def\indexdummytex{\x7f\indexdummytex\x011348,44486
-\def\indexdummydots{\x7f\indexdummydots\x011349,44510
-\def\indexnofonts{\x7f\indexnofonts\x011351,44536
+\let\lastnode=\relax}\x7flastnode\x01502,16194
+\let\refill=\relax\x7frefill\x01504,16217
+\def\setfilename{\x7fsetfilename\x01509,16431
+   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.\x7fsetfilename\x01514,16562
+\outer\def\bye{\x7fbye\x01518,16677
+\def\inforef #1{\x7finforef\x01520,16733
+\def\inforefzzz #1,#2,#3,#4**{\x7finforefzzz\x01521,16771
+\def\losespace #1{\x7flosespace\x01523,16868
+\def\sf{\x7fsf\x01532,17072
+\let\li = \sf % Sometimes we call it \li, not \sf.\x7fli\x01533,17100
+\let\mainmagstep=\magstephalf\x7fmainmagstep\x01536,17201
+\let\mainmagstep=\magstep1\x7fmainmagstep\x01539,17250
+\font\defbf=cmbx10 scaled \magstep1 %was 1314\x7fbf\x01558,17867
+\font\deftt=cmtt10 scaled \magstep1\x7ftt\x01559,17913
+\def\df{\x7fdf\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftentt\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftt\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftenbf\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7fbf\x01560,17949
+\let\indsl=\indit\x7findsl\x01570,18310
+\let\indtt=\ninett\x7findtt\x01571,18328
+\let\indsf=\indrm\x7findsf\x01572,18347
+\let\indbf=\indrm\x7findbf\x01573,18365
+\let\indsc=\indrm\x7findsc\x01574,18383
+\let\chapbf=\chaprm\x7fchapbf\x01584,18643
+\let\authorrm = \secrm\x7fauthorrm\x01627,20193
+\def\resetmathfonts{\x7fresetmathfonts\x01635,20543
+\def\textfonts{\x7ftextfonts\x01648,21132
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftenrm\x01649,21149
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftenit\x01649,21149
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftensl\x01649,21149
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7ftenbf\x01650,21208
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7ftentt\x01650,21208
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7fsmallcaps\x01650,21208
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7ftensf\x01651,21271
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7fteni\x01651,21271
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7ftensy\x01651,21271
+\def\chapfonts{\x7fchapfonts\x01653,21347
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftenrm\x01654,21364
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftenit\x01654,21364
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftensl\x01654,21364
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7ftenbf\x01655,21424
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7ftentt\x01655,21424
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7fsmallcaps\x01655,21424
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7ftensf\x01656,21487
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7fteni\x01656,21487
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7ftensy\x01656,21487
+\def\secfonts{\x7fsecfonts\x01658,21563
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftenrm\x01659,21579
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftenit\x01659,21579
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftensl\x01659,21579
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7ftenbf\x01660,21635
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7ftentt\x01660,21635
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7fsmallcaps\x01660,21635
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7ftensf\x01661,21695
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7fteni\x01661,21695
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7ftensy\x01661,21695
+\def\subsecfonts{\x7fsubsecfonts\x01663,21768
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftenrm\x01664,21787
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftenit\x01664,21787
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftensl\x01664,21787
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7ftenbf\x01665,21846
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7ftentt\x01665,21846
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7fsmallcaps\x01665,21846
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7ftensf\x01666,21909
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7fteni\x01666,21909
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7ftensy\x01666,21909
+\def\indexfonts{\x7findexfonts\x01668,21985
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftenrm\x01669,22003
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftenit\x01669,22003
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftensl\x01669,22003
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7ftenbf\x01670,22059
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7ftentt\x01670,22059
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7fsmallcaps\x01670,22059
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7ftensf\x01671,22119
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7fteni\x01671,22119
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7ftensy\x01671,22119
+\def\smartitalicx{\x7fsmartitalicx\x01691,22717
+\def\smartitalic#1{\x7fsmartitalic\x01692,22793
+\let\i=\smartitalic\x7fi\x01694,22851
+\let\var=\smartitalic\x7fvar\x01695,22871
+\let\dfn=\smartitalic\x7fdfn\x01696,22893
+\let\emph=\smartitalic\x7femph\x01697,22915
+\let\cite=\smartitalic\x7fcite\x01698,22938
+\def\b#1{\x7fb\x01700,22962
+\let\strong=\b\x7fstrong\x01701,22981
+\def\t#1{\x7ft\x01703,22997
+\let\ttfont = \t\x7fttfont\x01704,23072
+\def\samp #1{\x7fsamp\x01706,23149
+\def\key #1{\x7fkey\x01707,23182
+\def\ctrl #1{\x7fctrl\x01708,23243
+\let\file=\samp\x7ffile\x01710,23285
+\def\tclose#1{\x7ftclose\x01716,23445
+\let\code=\tclose\x7fcode\x01722,23722
+\def\xkey{\x7fxkey\x01728,23880
+\def\kbdfoo#1#2#3\par{\x7fkbdfoo\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{\x7fone\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{\x7fthree\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{\x7fthreex\x01729,23896
+\def\dmn#1{\x7fdmn\x01738,24197
+\def\kbd#1{\x7fkbd\x01740,24224
+\def\kbd#1{\def\look{\x7flook\x01740,24224
+\def\l#1{\x7fl\x01742,24281
+\def\r#1{\x7fr\x01744,24310
+\def\sc#1{\x7fsc\x01746,24378
+\def\ii#1{\x7fii\x01747,24421
+\def\titlefont#1{\x7ftitlefont\x01755,24654
+\def\titlepage{\x7ftitlepage\x01761,24757
+   \let\subtitlerm=\tenrm\x7fsubtitlerm\x01762,24810
+   \def\subtitlefont{\x7fsubtitlefont\x01766,24984
+   \def\authorfont{\x7fauthorfont\x01768,25068
+   \def\title{\x7ftitle\x01774,25278
+   \def\titlezzz##1{\x7ftitlezzz\x01775,25313
+   \def\subtitle{\x7fsubtitle\x01783,25628
+   \def\subtitlezzz##1{\x7fsubtitlezzz\x01784,25669
+   \def\author{\x7fauthor\x01787,25787
+   \def\authorzzz##1{\x7fauthorzzz\x01788,25824
+   \let\oldpage = \page\x7foldpage\x01793,26091
+   \def\page{\x7fpage\x01794,26115
+      \let\page = \oldpage\x7fpage\x01799,26206
+\def\Etitlepage{\x7fEtitlepage\x01804,26284
+\def\finishtitlepage{\x7ffinishtitlepage\x01817,26672
+\let\thispage=\folio\x7fthispage\x01825,26825
+\let\HEADINGShook=\relax\x7fHEADINGShook\x01837,27420
+\def\evenheading{\x7fevenheading\x01846,27680
+\def\oddheading{\x7foddheading\x01847,27723
+\def\everyheading{\x7feveryheading\x01848,27764
+\def\evenfooting{\x7fevenfooting\x01850,27810
+\def\oddfooting{\x7foddfooting\x01851,27853
+\def\everyfooting{\x7feveryfooting\x01852,27894
+\gdef\evenheadingxxx #1{\x7fevenheadingxxx\x01856,27958
+\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{\x7fevenheadingyyy\x01857,28017
+\gdef\oddheadingxxx #1{\x7foddheadingxxx\x01860,28126
+\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{\x7foddheadingyyy\x01861,28183
+\gdef\everyheadingxxx #1{\x7feveryheadingxxx\x01864,28290
+\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{\x7feveryheadingyyy\x01865,28351
+\gdef\evenfootingxxx #1{\x7fevenfootingxxx\x01869,28522
+\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{\x7fevenfootingyyy\x01870,28581
+\gdef\oddfootingxxx #1{\x7foddfootingxxx\x01873,28690
+\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{\x7foddfootingyyy\x01874,28747
+\gdef\everyfootingxxx #1{\x7feveryfootingxxx\x01877,28854
+\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{\x7feveryfootingyyy\x01878,28915
+\def\headings #1 {\x7fheadings\x01893,29586
+\def\HEADINGSoff{\x7fHEADINGSoff\x01895,29635
+\def\HEADINGSdouble{\x7fHEADINGSdouble\x01904,30062
+\def\HEADINGSsingle{\x7fHEADINGSsingle\x01914,30382
+\def\HEADINGSon{\x7fHEADINGSon\x01922,30603
+\def\HEADINGSafter{\x7fHEADINGSafter\x01924,30637
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}\x7fHEADINGShook\x01924,30637
+\let\HEADINGSdoubleafter=\HEADINGSafter\x7fHEADINGSdoubleafter\x01925,30692
+\def\HEADINGSdoublex{\x7fHEADINGSdoublex\x01926,30732
+\def\HEADINGSsingleafter{\x7fHEADINGSsingleafter\x01933,30920
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}\x7fHEADINGShook\x01933,30920
+\def\HEADINGSsinglex{\x7fHEADINGSsinglex\x01934,30981
+\def\today{\x7ftoday\x01943,31256
+\def\thistitle{\x7fthistitle\x01958,31801
+\def\settitle{\x7fsettitle\x01959,31826
+\def\settitlezzz #1{\x7fsettitlezzz\x01960,31863
+\def\settitlezzz #1{\gdef\thistitle{\x7fthistitle\x01960,31863
+\def\internalBitem{\x7finternalBitem\x01992,32793
+\def\internalBitemx{\x7finternalBitemx\x01993,32843
+\def\internalBxitem "#1"{\x7finternalBxitem\x01995,32888
+\def\internalBxitem "#1"{\def\xitemsubtopix{\x7fxitemsubtopix\x01995,32888
+\def\internalBxitemx "#1"{\x7finternalBxitemx\x01996,32968
+\def\internalBxitemx "#1"{\def\xitemsubtopix{\x7fxitemsubtopix\x01996,32968
+\def\internalBkitem{\x7finternalBkitem\x01998,33043
+\def\internalBkitemx{\x7finternalBkitemx\x01999,33095
+\def\kitemzzz #1{\x7fkitemzzz\x011001,33142
+\def\xitemzzz #1{\x7fxitemzzz\x011004,33244
+\def\itemzzz #1{\x7fitemzzz\x011007,33347
+\def\item{\x7fitem\x011037,34418
+\def\itemx{\x7fitemx\x011038,34469
+\def\kitem{\x7fkitem\x011039,34522
+\def\kitemx{\x7fkitemx\x011040,34575
+\def\xitem{\x7fxitem\x011041,34630
+\def\xitemx{\x7fxitemx\x011042,34683
+\def\description{\x7fdescription\x011045,34793
+\def\table{\x7ftable\x011047,34843
+\gdef\tablex #1^^M{\x7ftablex\x011049,34925
+\def\ftable{\x7fftable\x011052,34987
+\gdef\ftablex #1^^M{\x7fftablex\x011054,35071
+\def\Eftable{\x7fEftable\x011056,35133
+\let\Etable=\relax}\x7fEtable\x011057,35180
+\def\vtable{\x7fvtable\x011059,35202
+\gdef\vtablex #1^^M{\x7fvtablex\x011061,35286
+\def\Evtable{\x7fEvtable\x011063,35348
+\let\Etable=\relax}\x7fEtable\x011064,35395
+\def\dontindex #1{\x7fdontindex\x011066,35417
+\def\fnitemindex #1{\x7ffnitemindex\x011067,35437
+\def\vritemindex #1{\x7fvritemindex\x011068,35482
+\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\x7ftabley\x011071,35543
+\def\tablez #1#2#3#4#5#6{\x7ftablez\x011074,35631
+\def\Edescription{\x7fEdescription\x011077,35689
+\let\itemindex=#1%\x7fitemindex\x011078,35735
+\def\itemfont{\x7fitemfont\x011082,35890
+\def\Etable{\x7fEtable\x011090,36116
+\let\item = \internalBitem %\x7fitem\x011091,36162
+\let\itemx = \internalBitemx %\x7fitemx\x011092,36191
+\let\kitem = \internalBkitem %\x7fkitem\x011093,36222
+\let\kitemx = \internalBkitemx %\x7fkitemx\x011094,36253
+\let\xitem = \internalBxitem %\x7fxitem\x011095,36286
+\let\xitemx = \internalBxitemx %\x7fxitemx\x011096,36317
+\def\itemize{\x7fitemize\x011103,36440
+\def\itemizezzz #1{\x7fitemizezzz\x011105,36476
+\def\itemizey #1#2{\x7fitemizey\x011110,36571
+\def\itemcontents{\x7fitemcontents\x011120,36858
+\let\item=\itemizeitem}\x7fitem\x011121,36881
+\def\bullet{\x7fbullet\x011123,36906
+\def\minus{\x7fminus\x011124,36933
+\def\frenchspacing{\x7ffrenchspacing\x011128,37041
+\def\splitoff#1#2\endmark{\x7fsplitoff\x011134,37266
+\def\splitoff#1#2\endmark{\def\first{\x7ffirst\x011134,37266
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{\x7frest\x011134,37266
+\def\enumerate{\x7fenumerate\x011140,37496
+\def\enumeratezzz #1{\x7fenumeratezzz\x011141,37535
+\def\enumeratey #1 #2\endenumeratey{\x7fenumeratey\x011142,37588
+  \def\thearg{\x7fthearg\x011146,37735
+  \ifx\thearg\empty \def\thearg{\x7fthearg\x011147,37754
+\def\numericenumerate{\x7fnumericenumerate\x011184,39088
+\def\lowercaseenumerate{\x7flowercaseenumerate\x011190,39218
+\def\uppercaseenumerate{\x7fuppercaseenumerate\x011203,39565
+\def\startenumeration#1{\x7fstartenumeration\x011219,40055
+\def\alphaenumerate{\x7falphaenumerate\x011227,40237
+\def\capsenumerate{\x7fcapsenumerate\x011228,40272
+\def\Ealphaenumerate{\x7fEalphaenumerate\x011229,40306
+\def\Ecapsenumerate{\x7fEcapsenumerate\x011230,40340
+\def\itemizeitem{\x7fitemizeitem\x011234,40420
+{\let\par=\endgraf \smallbreak}\x7fpar\x011236,40460
+\gdef\newwrite{\x7fnewwrite\x011249,40841
+\def\newindex #1{\x7fnewindex\x011259,41277
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011262,41439
+\def\defindex{\x7fdefindex\x011268,41566
+\def\newcodeindex #1{\x7fnewcodeindex\x011272,41674
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011275,41840
+\def\defcodeindex{\x7fdefcodeindex\x011279,41934
+\def\synindex #1 #2 {\x7fsynindex\x011283,42114
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname\x7fexpandafter\x011284,42137
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo\x7fcsname\x011285,42217
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011286,42273
+\def\syncodeindex #1 #2 {\x7fsyncodeindex\x011292,42454
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname\x7fexpandafter\x011293,42481
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo\x7fcsname\x011294,42561
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011295,42617
+\def\doindex#1{\x7fdoindex\x011309,43133
+\def\doindex#1{\edef\indexname{\x7findexname\x011309,43133
+\def\singleindexer #1{\x7fsingleindexer\x011310,43192
+\def\singleindexer #1{\doind{\indexname}\x7fname\x011310,43192
+\def\docodeindex#1{\x7fdocodeindex\x011313,43304
+\def\docodeindex#1{\edef\indexname{\x7findexname\x011313,43304
+\def\singlecodeindexer #1{\x7fsinglecodeindexer\x011314,43371
+\def\singlecodeindexer #1{\doind{\indexname}\x7fname\x011314,43371
+\def\indexdummies{\x7findexdummies\x011316,43429
+\def\_{\x7f_\x011317,43449
+\def\w{\x7fw\x011318,43477
+\def\bf{\x7fbf\x011319,43504
+\def\rm{\x7frm\x011320,43533
+\def\sl{\x7fsl\x011321,43562
+\def\sf{\x7fsf\x011322,43591
+\def\tt{\x7ftt\x011323,43619
+\def\gtr{\x7fgtr\x011324,43647
+\def\less{\x7fless\x011325,43677
+\def\hat{\x7fhat\x011326,43709
+\def\char{\x7fchar\x011327,43739
+\def\TeX{\x7fTeX\x011328,43771
+\def\dots{\x7fdots\x011329,43801
+\def\copyright{\x7fcopyright\x011330,43834
+\def\tclose##1{\x7ftclose\x011331,43877
+\def\code##1{\x7fcode\x011332,43922
+\def\samp##1{\x7fsamp\x011333,43963
+\def\t##1{\x7ft\x011334,44004
+\def\r##1{\x7fr\x011335,44039
+\def\i##1{\x7fi\x011336,44074
+\def\b##1{\x7fb\x011337,44109
+\def\cite##1{\x7fcite\x011338,44144
+\def\key##1{\x7fkey\x011339,44185
+\def\file##1{\x7ffile\x011340,44224
+\def\var##1{\x7fvar\x011341,44265
+\def\kbd##1{\x7fkbd\x011342,44304
+\def\indexdummyfont#1{\x7findexdummyfont\x011347,44460
+\def\indexdummytex{\x7findexdummytex\x011348,44486
+\def\indexdummydots{\x7findexdummydots\x011349,44510
+\def\indexnofonts{\x7findexnofonts\x011351,44536
+\let\w=\indexdummyfont\x7fw\x011352,44556
 \let\w=\indexdummyfont\x7fdummyfont\x011352,44556
+\let\t=\indexdummyfont\x7ft\x011353,44579
 \let\t=\indexdummyfont\x7fdummyfont\x011353,44579
+\let\r=\indexdummyfont\x7fr\x011354,44602
 \let\r=\indexdummyfont\x7fdummyfont\x011354,44602
+\let\i=\indexdummyfont\x7fi\x011355,44625
 \let\i=\indexdummyfont\x7fdummyfont\x011355,44625
+\let\b=\indexdummyfont\x7fb\x011356,44648
 \let\b=\indexdummyfont\x7fdummyfont\x011356,44648
+\let\emph=\indexdummyfont\x7femph\x011357,44671
 \let\emph=\indexdummyfont\x7fdummyfont\x011357,44671
+\let\strong=\indexdummyfont\x7fstrong\x011358,44697
 \let\strong=\indexdummyfont\x7fdummyfont\x011358,44697
-\let\cite=\indexdummyfont\x7f=\indexdummyfont\x011359,44725
+\let\cite=\indexdummyfont\x7fcite\x011359,44725
+\let\cite=\indexdummyfont\x7fdummyfont\x011359,44725
+\let\sc=\indexdummyfont\x7fsc\x011360,44751
 \let\sc=\indexdummyfont\x7fdummyfont\x011360,44751
+\let\tclose=\indexdummyfont\x7ftclose\x011364,44923
 \let\tclose=\indexdummyfont\x7fdummyfont\x011364,44923
+\let\code=\indexdummyfont\x7fcode\x011365,44951
 \let\code=\indexdummyfont\x7fdummyfont\x011365,44951
+\let\file=\indexdummyfont\x7ffile\x011366,44977
 \let\file=\indexdummyfont\x7fdummyfont\x011366,44977
+\let\samp=\indexdummyfont\x7fsamp\x011367,45003
 \let\samp=\indexdummyfont\x7fdummyfont\x011367,45003
+\let\kbd=\indexdummyfont\x7fkbd\x011368,45029
 \let\kbd=\indexdummyfont\x7fdummyfont\x011368,45029
+\let\key=\indexdummyfont\x7fkey\x011369,45054
 \let\key=\indexdummyfont\x7fdummyfont\x011369,45054
+\let\var=\indexdummyfont\x7fvar\x011370,45079
 \let\var=\indexdummyfont\x7fdummyfont\x011370,45079
+\let\TeX=\indexdummytex\x7fTeX\x011371,45104
 \let\TeX=\indexdummytex\x7fdummytex\x011371,45104
+\let\dots=\indexdummydots\x7fdots\x011372,45128
 \let\dots=\indexdummydots\x7fdummydots\x011372,45128
-\let\indexbackslash=0  %overridden during \printindex.\x7fbackslash=0\x011382,45380
-\def\doind #1#2{\x7f\doind\x011384,45436
+\let\indexbackslash=0  %overridden during \printindex.\x7findexbackslash\x011382,45380
+\def\doind #1#2{\x7fdoind\x011384,45436
 {\indexdummies % Must do this here, since \bf, etc expand at this stage\x7fdummies\x011386,45479
-\def\rawbackslashxx{\x7f\rawbackslashxx\x011389,45619
+{\let\folio=0% Expand all macros now EXCEPT \folio\x7ffolio\x011388,45568
+\def\rawbackslashxx{\x7frawbackslashxx\x011389,45619
+\def\rawbackslashxx{\indexbackslash}\x7fbackslash\x011389,45619
 {\indexnofonts\x7fnofonts\x011394,45881
-\def\dosubind #1#2#3{\x7f\dosubind\x011405,46192
+\xdef\temp1{\x7ftemp1\x011395,45896
+\edef\temp{\x7ftemp\x011399,46068
+\def\dosubind #1#2#3{\x7fdosubind\x011405,46192
 {\indexdummies % Must do this here, since \bf, etc expand at this stage\x7fdummies\x011407,46240
-\def\rawbackslashxx{\x7f\rawbackslashxx\x011410,46344
+{\let\folio=0%\x7ffolio\x011409,46329
+\def\rawbackslashxx{\x7frawbackslashxx\x011410,46344
+\def\rawbackslashxx{\indexbackslash}\x7fbackslash\x011410,46344
 {\indexnofonts\x7fnofonts\x011414,46498
-\def\findex {\x7f\findex\x011443,47429
-\def\kindex {\x7f\kindex\x011444,47452
-\def\cindex {\x7f\cindex\x011445,47475
-\def\vindex {\x7f\vindex\x011446,47498
-\def\tindex {\x7f\tindex\x011447,47521
-\def\pindex {\x7f\pindex\x011448,47544
-\def\cindexsub {\x7f\cindexsub\x011450,47568
-\def\printindex{\x7f\printindex\x011462,47895
-\def\doprintindex#1{\x7f\doprintindex\x011464,47936
-  \def\indexbackslash{\x7f\indexbackslash\x011481,48421
+\xdef\temp1{\x7ftemp1\x011415,46513
+\edef\temp{\x7ftemp\x011419,46688
+\def\findex {\x7ffindex\x011443,47429
+\def\kindex {\x7fkindex\x011444,47452
+\def\cindex {\x7fcindex\x011445,47475
+\def\vindex {\x7fvindex\x011446,47498
+\def\tindex {\x7ftindex\x011447,47521
+\def\pindex {\x7fpindex\x011448,47544
+\def\cindexsub {\x7fcindexsub\x011450,47568
+\gdef\cindexsub "#1" #2^^M{\x7fcindexsub\x011452,47631
+\def\printindex{\x7fprintindex\x011462,47895
+\def\doprintindex#1{\x7fdoprintindex\x011464,47936
+  \def\indexbackslash{\x7findexbackslash\x011481,48421
   \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt\x7ffonts\rm\x011482,48460
-\def\initial #1{\x7f\initial\x011517,49532
-\def\entry #1#2{\x7f\entry\x011523,49739
+\def\initial #1{\x7finitial\x011517,49532
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7ftentt\x011518,49550
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7ftt\x011518,49550
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7fsf\x011518,49550
+\def\entry #1#2{\x7fentry\x011523,49739
   \null\nobreak\indexdotfill % Have leaders before the page number.\x7fdotfill\x011540,50386
-\def\indexdotfill{\x7f\indexdotfill\x011549,50714
-\def\primary #1{\x7f\primary\x011552,50820
-\def\secondary #1#2{\x7f\secondary\x011556,50902
+\def\indexdotfill{\x7findexdotfill\x011549,50714
+\def\primary #1{\x7fprimary\x011552,50820
+\def\secondary #1#2{\x7fsecondary\x011556,50902
 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par\x7fdotfill\x011559,50984
 \newbox\partialpage\x7fialpage\x011566,51157
-\def\begindoublecolumns{\x7f\begindoublecolumns\x011572,51315
-  \output={\global\setbox\partialpage=\x7fialpage=\x011573,51351
-\def\enddoublecolumns{\x7f\enddoublecolumns\x011577,51539
-\def\doublecolumnout{\x7f\doublecolumnout\x011580,51624
+\def\begindoublecolumns{\x7fbegindoublecolumns\x011572,51315
+  \output={\global\setbox\partialpage=\x7fialpage\x011573,51351
+\def\enddoublecolumns{\x7fenddoublecolumns\x011577,51539
+\def\doublecolumnout{\x7fdoublecolumnout\x011580,51624
   \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage\x7fialpage\x011581,51693
-\def\pagesofar{\x7f\pagesofar\x011584,51871
-\def\balancecolumns{\x7f\balancecolumns\x011588,52108
+\def\pagesofar{\x7fpagesofar\x011584,51871
+\def\pagesofar{\unvbox\partialpage %\x7fialpage\x011584,51871
+\def\balancecolumns{\x7fbalancecolumns\x011588,52108
   \availdimen@=\pageheight \advance\availdimen@ by-\ht\partialpage\x7fialpage\x011594,52279
      \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage\x7fialpage\x011600,52540
 \newcount \appendixno  \appendixno = `\@\x7fno\x011627,53445
-\def\appendixletter{\x7f\appendixletter\x011628,53486
-\def\opencontents{\x7f\opencontents\x011632,53589
-\def\thischapter{\x7f\thischapter\x011637,53770
-\def\seccheck#1{\x7f\seccheck\x011638,53808
-\def\chapternofonts{\x7f\chapternofonts\x011643,53912
-\def\result{\x7f\result\x011646,53987
-\def\equiv{\x7f\equiv\x011647,54022
-\def\expansion{\x7f\expansion\x011648,54055
-\def\print{\x7f\print\x011649,54096
-\def\TeX{\x7f\TeX\x011650,54129
-\def\dots{\x7f\dots\x011651,54158
-\def\copyright{\x7f\copyright\x011652,54189
-\def\tt{\x7f\tt\x011653,54230
-\def\bf{\x7f\bf\x011654,54257
-\def\w{\x7f\w\x011655,54285
-\def\less{\x7f\less\x011656,54310
-\def\gtr{\x7f\gtr\x011657,54341
-\def\hat{\x7f\hat\x011658,54370
-\def\char{\x7f\char\x011659,54399
-\def\tclose##1{\x7f\tclose\x011660,54430
-\def\code##1{\x7f\code\x011661,54474
-\def\samp##1{\x7f\samp\x011662,54514
-\def\r##1{\x7f\r\x011663,54554
-\def\b##1{\x7f\b\x011664,54588
-\def\key##1{\x7f\key\x011665,54622
-\def\file##1{\x7f\file\x011666,54660
-\def\kbd##1{\x7f\kbd\x011667,54700
-\def\i##1{\x7f\i\x011669,54808
-\def\cite##1{\x7f\cite\x011670,54842
-\def\var##1{\x7f\var\x011671,54882
-\def\emph##1{\x7f\emph\x011672,54920
-\def\dfn##1{\x7f\dfn\x011673,54960
-\def\thischaptername{\x7f\thischaptername\x011676,55001
-\outer\def\chapter{\x7f\chapter\x011677,55040
-\def\chapterzzz #1{\x7f\chapterzzz\x011678,55081
-{\chapternofonts%\x7fnofonts%\x011687,55477
-\global\let\section = \numberedsec\x7f=\x011692,55630
-\global\let\subsection = \numberedsubsec\x7f=\x011693,55665
-\global\let\subsubsection = \numberedsubsubsec\x7f=\x011694,55706
-\outer\def\appendix{\x7f\appendix\x011697,55757
-\def\appendixzzz #1{\x7f\appendixzzz\x011698,55800
+\newcount \appendixno  \appendixno = `\@\x7fno\x011627,53445
+\def\appendixletter{\x7fappendixletter\x011628,53486
+\def\appendixletter{\char\the\appendixno}\x7fno\x011628,53486
+\def\opencontents{\x7fopencontents\x011632,53589
+\def\thischapter{\x7fthischapter\x011637,53770
+\def\thischapter{} \def\thissection{\x7fthissection\x011637,53770
+\def\seccheck#1{\x7fseccheck\x011638,53808
+\def\chapternofonts{\x7fchapternofonts\x011643,53912
+\let\rawbackslash=\relax%\x7frawbackslash\x011644,53934
+\let\frenchspacing=\relax%\x7ffrenchspacing\x011645,53960
+\def\result{\x7fresult\x011646,53987
+\def\equiv{\x7fequiv\x011647,54022
+\def\expansion{\x7fexpansion\x011648,54055
+\def\print{\x7fprint\x011649,54096
+\def\TeX{\x7fTeX\x011650,54129
+\def\dots{\x7fdots\x011651,54158
+\def\copyright{\x7fcopyright\x011652,54189
+\def\tt{\x7ftt\x011653,54230
+\def\bf{\x7fbf\x011654,54257
+\def\w{\x7fw\x011655,54285
+\def\less{\x7fless\x011656,54310
+\def\gtr{\x7fgtr\x011657,54341
+\def\hat{\x7fhat\x011658,54370
+\def\char{\x7fchar\x011659,54399
+\def\tclose##1{\x7ftclose\x011660,54430
+\def\code##1{\x7fcode\x011661,54474
+\def\samp##1{\x7fsamp\x011662,54514
+\def\r##1{\x7fr\x011663,54554
+\def\b##1{\x7fb\x011664,54588
+\def\key##1{\x7fkey\x011665,54622
+\def\file##1{\x7ffile\x011666,54660
+\def\kbd##1{\x7fkbd\x011667,54700
+\def\i##1{\x7fi\x011669,54808
+\def\cite##1{\x7fcite\x011670,54842
+\def\var##1{\x7fvar\x011671,54882
+\def\emph##1{\x7femph\x011672,54920
+\def\dfn##1{\x7fdfn\x011673,54960
+\def\thischaptername{\x7fthischaptername\x011676,55001
+\outer\def\chapter{\x7fchapter\x011677,55040
+\outer\def\chapter{\parsearg\chapterzzz}\x7fzzz\x011677,55040
+\def\chapterzzz #1{\x7fchapterzzz\x011678,55081
+\gdef\thissection{\x7fthissection\x011682,55246
+\gdef\thischaptername{\x7fthischaptername\x011683,55269
+\xdef\thischapter{\x7fthischapter\x011686,55410
+{\chapternofonts%\x7fnofonts\x011687,55477
+\edef\temp{\x7ftemp\x011688,55495
+\global\let\section = \numberedsec\x7fsection\x011692,55630
+\global\let\subsection = \numberedsubsec\x7fsubsection\x011693,55665
+\global\let\subsubsection = \numberedsubsubsec\x7fsubsubsection\x011694,55706
+\outer\def\appendix{\x7fappendix\x011697,55757
+\outer\def\appendix{\parsearg\appendixzzz}\x7fzzz\x011697,55757
+\def\appendixzzz #1{\x7fappendixzzz\x011698,55800
 \global\advance \appendixno by 1 \message{\x7fno\x011700,55877
+\global\advance \appendixno by 1 \message{Appendix \appendixletter}\x7fletter\x011700,55877
 \chapmacro {#1}{Appendix \appendixletter}\x7fletter\x011701,55946
+\gdef\thissection{\x7fthissection\x011702,55989
+\gdef\thischaptername{\x7fthischaptername\x011703,56012
+\xdef\thischapter{\x7fthischapter\x011704,56039
 \xdef\thischapter{Appendix \appendixletter: \noexpand\thischaptername}\x7fletter:\x011704,56039
-{\chapternofonts%\x7fnofonts%\x011705,56111
+{\chapternofonts%\x7fnofonts\x011705,56111
+\edef\temp{\x7ftemp\x011706,56129
   {#1}{Appendix \appendixletter}\x7fletter\x011707,56167
 \appendixnoderef %\x7fnoderef\x011710,56267
-\global\let\section = \appendixsec\x7f=\x011711,56286
-\global\let\subsection = \appendixsubsec\x7f=\x011712,56321
-\global\let\subsubsection = \appendixsubsubsec\x7f=\x011713,56362
-\outer\def\top{\x7f\top\x011716,56413
-\outer\def\unnumbered{\x7f\unnumbered\x011717,56453
-\def\unnumberedzzz #1{\x7f\unnumberedzzz\x011718,56500
-{\chapternofonts%\x7fnofonts%\x011722,56663
-\global\let\section = \unnumberedsec\x7f=\x011727,56813
-\global\let\subsection = \unnumberedsubsec\x7f=\x011728,56850
-\global\let\subsubsection = \unnumberedsubsubsec\x7f=\x011729,56893
-\outer\def\numberedsec{\x7f\numberedsec\x011732,56946
-\def\seczzz #1{\x7f\seczzz\x011733,56987
-{\chapternofonts%\x7fnofonts%\x011736,57143
-\outer\def\appendixsection{\x7f\appendixsection\x011745,57329
-\outer\def\appendixsec{\x7f\appendixsec\x011746,57386
-\def\appendixsectionzzz #1{\x7f\appendixsectionzzz\x011747,57439
+\global\let\section = \appendixsec\x7fsection\x011711,56286
+\global\let\section = \appendixsec\x7fsec\x011711,56286
+\global\let\subsection = \appendixsubsec\x7fsubsection\x011712,56321
+\global\let\subsection = \appendixsubsec\x7fsubsec\x011712,56321
+\global\let\subsubsection = \appendixsubsubsec\x7fsubsubsection\x011713,56362
+\global\let\subsubsection = \appendixsubsubsec\x7fsubsubsec\x011713,56362
+\outer\def\top{\x7ftop\x011716,56413
+\outer\def\unnumbered{\x7funnumbered\x011717,56453
+\def\unnumberedzzz #1{\x7funnumberedzzz\x011718,56500
+\gdef\thischapter{\x7fthischapter\x011721,56619
+\gdef\thischapter{#1}\gdef\thissection{\x7fthissection\x011721,56619
+{\chapternofonts%\x7fnofonts\x011722,56663
+\edef\temp{\x7ftemp\x011723,56681
+\global\let\section = \unnumberedsec\x7fsection\x011727,56813
+\global\let\subsection = \unnumberedsubsec\x7fsubsection\x011728,56850
+\global\let\subsubsection = \unnumberedsubsubsec\x7fsubsubsection\x011729,56893
+\outer\def\numberedsec{\x7fnumberedsec\x011732,56946
+\def\seczzz #1{\x7fseczzz\x011733,56987
+\gdef\thissection{\x7fthissection\x011735,57079
+{\chapternofonts%\x7fnofonts\x011736,57143
+\edef\temp{\x7ftemp\x011737,57161
+\outer\def\appendixsection{\x7fappendixsection\x011745,57329
+\outer\def\appendixsection{\parsearg\appendixsectionzzz}\x7fsectionzzz\x011745,57329
+\outer\def\appendixsec{\x7fappendixsec\x011746,57386
+\outer\def\appendixsec{\parsearg\appendixsectionzzz}\x7fsectionzzz\x011746,57386
+\def\appendixsectionzzz #1{\x7fappendixsectionzzz\x011747,57439
+\gdef\thissection{\x7fthissection\x011749,57551
 \gdef\thissection{#1}\secheading {#1}{\appendixletter}\x7fletter\x011749,57551
-{\chapternofonts%\x7fnofonts%\x011750,57619
+{\chapternofonts%\x7fnofonts\x011750,57619
+\edef\temp{\x7ftemp\x011751,57637
 {#1}{\appendixletter}\x7fletter\x011752,57675
 \appendixnoderef %\x7fnoderef\x011755,57775
-\outer\def\unnumberedsec{\x7f\unnumberedsec\x011759,57815
-\def\unnumberedseczzz #1{\x7f\unnumberedseczzz\x011760,57868
-{\chapternofonts%\x7fnofonts%\x011762,57963
-\outer\def\numberedsubsec{\x7f\numberedsubsec\x011770,58131
-\def\numberedsubseczzz #1{\x7f\numberedsubseczzz\x011771,58186
-{\chapternofonts%\x7fnofonts%\x011774,58365
-\outer\def\appendixsubsec{\x7f\appendixsubsec\x011783,58569
-\def\appendixsubseczzz #1{\x7f\appendixsubseczzz\x011784,58624
+\outer\def\unnumberedsec{\x7funnumberedsec\x011759,57815
+\def\unnumberedseczzz #1{\x7funnumberedseczzz\x011760,57868
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011761,57919
+{\chapternofonts%\x7fnofonts\x011762,57963
+\edef\temp{\x7ftemp\x011763,57981
+\outer\def\numberedsubsec{\x7fnumberedsubsec\x011770,58131
+\def\numberedsubseczzz #1{\x7fnumberedsubseczzz\x011771,58186
+\gdef\thissection{\x7fthissection\x011772,58235
+{\chapternofonts%\x7fnofonts\x011774,58365
+\edef\temp{\x7ftemp\x011775,58383
+\outer\def\appendixsubsec{\x7fappendixsubsec\x011783,58569
+\outer\def\appendixsubsec{\parsearg\appendixsubseczzz}\x7fsubseczzz\x011783,58569
+\def\appendixsubseczzz #1{\x7fappendixsubseczzz\x011784,58624
+\gdef\thissection{\x7fthissection\x011785,58677
 \subsecheading {#1}{\appendixletter}\x7fletter\x011786,58746
-{\chapternofonts%\x7fnofonts%\x011787,58811
+{\chapternofonts%\x7fnofonts\x011787,58811
+\edef\temp{\x7ftemp\x011788,58829
 {#1}{\appendixletter}\x7fletter\x011789,58870
 \appendixnoderef %\x7fnoderef\x011792,58985
-\outer\def\unnumberedsubsec{\x7f\unnumberedsubsec\x011796,59025
-\def\unnumberedsubseczzz #1{\x7f\unnumberedsubseczzz\x011797,59084
-{\chapternofonts%\x7fnofonts%\x011799,59185
-\outer\def\numberedsubsubsec{\x7f\numberedsubsubsec\x011807,59356
-\def\numberedsubsubseczzz #1{\x7f\numberedsubsubseczzz\x011808,59417
-{\chapternofonts%\x7fnofonts%\x011812,59614
-\outer\def\appendixsubsubsec{\x7f\appendixsubsubsec\x011823,59847
-\def\appendixsubsubseczzz #1{\x7f\appendixsubsubseczzz\x011824,59908
+\outer\def\unnumberedsubsec{\x7funnumberedsubsec\x011796,59025
+\def\unnumberedsubseczzz #1{\x7funnumberedsubseczzz\x011797,59084
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011798,59141
+{\chapternofonts%\x7fnofonts\x011799,59185
+\edef\temp{\x7ftemp\x011800,59203
+\outer\def\numberedsubsubsec{\x7fnumberedsubsubsec\x011807,59356
+\def\numberedsubsubseczzz #1{\x7fnumberedsubsubseczzz\x011808,59417
+\gdef\thissection{\x7fthissection\x011809,59472
+{\chapternofonts%\x7fnofonts\x011812,59614
+\edef\temp{\x7ftemp\x011813,59632
+\outer\def\appendixsubsubsec{\x7fappendixsubsubsec\x011823,59847
+\outer\def\appendixsubsubsec{\parsearg\appendixsubsubseczzz}\x7fsubsubseczzz\x011823,59847
+\def\appendixsubsubseczzz #1{\x7fappendixsubsubseczzz\x011824,59908
+\gdef\thissection{\x7fthissection\x011825,59967
   {\appendixletter}\x7fletter\x011827,60047
-{\chapternofonts%\x7fnofonts%\x011828,60113
+{\chapternofonts%\x7fnofonts\x011828,60113
+\edef\temp{\x7ftemp\x011829,60131
   {\appendixletter}\x7fletter\x011830,60178
 \appendixnoderef %\x7fnoderef\x011834,60312
-\outer\def\unnumberedsubsubsec{\x7f\unnumberedsubsubsec\x011838,60352
-\def\unnumberedsubsubseczzz #1{\x7f\unnumberedsubsubseczzz\x011839,60417
-{\chapternofonts%\x7fnofonts%\x011841,60524
-\def\infotop{\x7f\infotop\x011851,60853
-\def\infounnumbered{\x7f\infounnumbered\x011852,60891
-\def\infounnumberedsec{\x7f\infounnumberedsec\x011853,60936
-\def\infounnumberedsubsec{\x7f\infounnumberedsubsec\x011854,60987
-\def\infounnumberedsubsubsec{\x7f\infounnumberedsubsubsec\x011855,61044
-\def\infoappendix{\x7f\infoappendix\x011857,61108
-\def\infoappendixsec{\x7f\infoappendixsec\x011858,61149
-\def\infoappendixsubsec{\x7f\infoappendixsubsec\x011859,61196
-\def\infoappendixsubsubsec{\x7f\infoappendixsubsubsec\x011860,61249
-\def\infochapter{\x7f\infochapter\x011862,61309
-\def\infosection{\x7f\infosection\x011863,61348
-\def\infosubsection{\x7f\infosubsection\x011864,61387
-\def\infosubsubsection{\x7f\infosubsubsection\x011865,61432
-\global\let\section = \numberedsec\x7f=\x011870,61669
-\global\let\subsection = \numberedsubsec\x7f=\x011871,61704
-\global\let\subsubsection = \numberedsubsubsec\x7f=\x011872,61745
-\def\majorheading{\x7f\majorheading\x011886,62252
-\def\majorheadingzzz #1{\x7f\majorheadingzzz\x011887,62297
-\def\chapheading{\x7f\chapheading\x011893,62530
-\def\chapheadingzzz #1{\x7f\chapheadingzzz\x011894,62573
-\def\heading{\x7f\heading\x011899,62768
-\def\subheading{\x7f\subheading\x011901,62805
-\def\subsubheading{\x7f\subsubheading\x011903,62848
-\def\dobreak#1#2{\x7f\dobreak\x011910,63125
-\def\setchapterstyle #1 {\x7f\setchapterstyle\x011912,63203
-\def\chapbreak{\x7f\chapbreak\x011919,63458
-\def\chappager{\x7f\chappager\x011920,63508
-\def\chapoddpage{\x7f\chapoddpage\x011921,63546
-\def\setchapternewpage #1 {\x7f\setchapternewpage\x011923,63625
-\def\CHAPPAGoff{\x7f\CHAPPAGoff\x011925,63682
-\def\CHAPPAGon{\x7f\CHAPPAGon\x011929,63776
-\global\def\HEADINGSon{\x7f\HEADINGSon\x011932,63867
-\def\CHAPPAGodd{\x7f\CHAPPAGodd\x011934,63909
-\global\def\HEADINGSon{\x7f\HEADINGSon\x011937,64005
-\def\CHAPFplain{\x7f\CHAPFplain\x011941,64059
-\def\chfplain #1#2{\x7f\chfplain\x011945,64151
-\def\unnchfplain #1{\x7f\unnchfplain\x011956,64374
-\def\unnchfopen #1{\x7f\unnchfopen\x011964,64603
-\def\chfopen #1#2{\x7f\chfopen\x011970,64811
-\def\CHAPFopen{\x7f\CHAPFopen\x011975,64955
-\def\subsecheadingbreak{\x7f\subsecheadingbreak\x011982,65173
-\def\secheadingbreak{\x7f\secheadingbreak\x011985,65302
-\def\secheading #1#2#3{\x7f\secheading\x011993,65584
-\def\plainsecheading #1{\x7f\plainsecheading\x011994,65640
-\def\secheadingi #1{\x7f\secheadingi\x011995,65683
-\def\subsecheading #1#2#3#4{\x7f\subsecheading\x012006,66051
-\def\subsecheadingi #1{\x7f\subsecheadingi\x012007,66118
-\def\subsubsecfonts{\x7f\subsubsecfonts\x012014,66415
-\def\subsubsecheading #1#2#3#4#5{\x7f\subsubsecheading\x012017,66538
-\def\subsubsecheadingi #1{\x7f\subsubsecheadingi\x012018,66616
-\def\startcontents#1{\x7f\startcontents\x012032,67088
-   \unnumbchapmacro{#1}\def\thischapter{\x7f\thischapter\x012040,67361
-\outer\def\contents{\x7f\contents\x012049,67720
-\outer\def\summarycontents{\x7f\summarycontents\x012057,67864
-      \def\secentry ##1##2##3##4{\x7f\secentry\x012067,68235
-      \def\unnumbsecentry ##1##2{\x7f\unnumbsecentry\x012068,68270
-      \def\subsecentry ##1##2##3##4##5{\x7f\subsecentry\x012069,68305
-      \def\unnumbsubsecentry ##1##2{\x7f\unnumbsubsecentry\x012070,68346
-      \def\subsubsecentry ##1##2##3##4##5##6{\x7f\subsubsecentry\x012071,68384
-      \def\unnumbsubsubsecentry ##1##2{\x7f\unnumbsubsubsecentry\x012072,68431
-\def\chapentry#1#2#3{\x7f\chapentry\x012085,68865
-\def\shortchapentry#1#2#3{\x7f\shortchapentry\x012088,68982
+\outer\def\unnumberedsubsubsec{\x7funnumberedsubsubsec\x011838,60352
+\def\unnumberedsubsubseczzz #1{\x7funnumberedsubsubseczzz\x011839,60417
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011840,60480
+{\chapternofonts%\x7fnofonts\x011841,60524
+\edef\temp{\x7ftemp\x011842,60542
+\def\infotop{\x7finfotop\x011851,60853
+\def\infounnumbered{\x7finfounnumbered\x011852,60891
+\def\infounnumberedsec{\x7finfounnumberedsec\x011853,60936
+\def\infounnumberedsubsec{\x7finfounnumberedsubsec\x011854,60987
+\def\infounnumberedsubsubsec{\x7finfounnumberedsubsubsec\x011855,61044
+\def\infoappendix{\x7finfoappendix\x011857,61108
+\def\infoappendix{\parsearg\appendixzzz}\x7fzzz\x011857,61108
+\def\infoappendixsec{\x7finfoappendixsec\x011858,61149
+\def\infoappendixsec{\parsearg\appendixseczzz}\x7fseczzz\x011858,61149
+\def\infoappendixsubsec{\x7finfoappendixsubsec\x011859,61196
+\def\infoappendixsubsec{\parsearg\appendixsubseczzz}\x7fsubseczzz\x011859,61196
+\def\infoappendixsubsubsec{\x7finfoappendixsubsubsec\x011860,61249
+\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}\x7fsubsubseczzz\x011860,61249
+\def\infochapter{\x7finfochapter\x011862,61309
+\def\infochapter{\parsearg\chapterzzz}\x7fzzz\x011862,61309
+\def\infosection{\x7finfosection\x011863,61348
+\def\infosection{\parsearg\sectionzzz}\x7fzzz\x011863,61348
+\def\infosubsection{\x7finfosubsection\x011864,61387
+\def\infosubsection{\parsearg\subsectionzzz}\x7fzzz\x011864,61387
+\def\infosubsubsection{\x7finfosubsubsection\x011865,61432
+\def\infosubsubsection{\parsearg\subsubsectionzzz}\x7fzzz\x011865,61432
+\global\let\section = \numberedsec\x7fsection\x011870,61669
+\global\let\subsection = \numberedsubsec\x7fsubsection\x011871,61704
+\global\let\subsubsection = \numberedsubsubsec\x7fsubsubsection\x011872,61745
+\def\majorheading{\x7fmajorheading\x011886,62252
+\def\majorheadingzzz #1{\x7fmajorheadingzzz\x011887,62297
+\def\chapheading{\x7fchapheading\x011893,62530
+\def\chapheadingzzz #1{\x7fchapheadingzzz\x011894,62573
+\def\heading{\x7fheading\x011899,62768
+\def\subheading{\x7fsubheading\x011901,62805
+\def\subsubheading{\x7fsubsubheading\x011903,62848
+\def\dobreak#1#2{\x7fdobreak\x011910,63125
+\def\setchapterstyle #1 {\x7fsetchapterstyle\x011912,63203
+\def\chapbreak{\x7fchapbreak\x011919,63458
+\def\chappager{\x7fchappager\x011920,63508
+\def\chapoddpage{\x7fchapoddpage\x011921,63546
+\def\setchapternewpage #1 {\x7fsetchapternewpage\x011923,63625
+\def\CHAPPAGoff{\x7fCHAPPAGoff\x011925,63682
+\global\let\pchapsepmacro=\chapbreak\x7fpchapsepmacro\x011926,63699
+\global\let\pagealignmacro=\chappager}\x7fpagealignmacro\x011927,63736
+\def\CHAPPAGon{\x7fCHAPPAGon\x011929,63776
+\global\let\pchapsepmacro=\chappager\x7fpchapsepmacro\x011930,63792
+\global\let\pagealignmacro=\chappager\x7fpagealignmacro\x011931,63829
+\global\def\HEADINGSon{\x7fHEADINGSon\x011932,63867
+\def\CHAPPAGodd{\x7fCHAPPAGodd\x011934,63909
+\global\let\pchapsepmacro=\chapoddpage\x7fpchapsepmacro\x011935,63926
+\global\let\pagealignmacro=\chapoddpage\x7fpagealignmacro\x011936,63965
+\global\def\HEADINGSon{\x7fHEADINGSon\x011937,64005
+\def\CHAPFplain{\x7fCHAPFplain\x011941,64059
+\global\let\chapmacro=\chfplain\x7fchapmacro\x011942,64076
+\global\let\unnumbchapmacro=\unnchfplain}\x7funnumbchapmacro\x011943,64108
+\def\chfplain #1#2{\x7fchfplain\x011945,64151
+\def\unnchfplain #1{\x7funnchfplain\x011956,64374
+\def\unnchfopen #1{\x7funnchfopen\x011964,64603
+\def\chfopen #1#2{\x7fchfopen\x011970,64811
+\def\CHAPFopen{\x7fCHAPFopen\x011975,64955
+\global\let\chapmacro=\chfopen\x7fchapmacro\x011976,64971
+\global\let\unnumbchapmacro=\unnchfopen}\x7funnumbchapmacro\x011977,65002
+\def\subsecheadingbreak{\x7fsubsecheadingbreak\x011982,65173
+\def\secheadingbreak{\x7fsecheadingbreak\x011985,65302
+\let\paragraphindent=\comment\x7fparagraphindent\x011988,65428
+\def\secheading #1#2#3{\x7fsecheading\x011993,65584
+\def\plainsecheading #1{\x7fplainsecheading\x011994,65640
+\def\secheadingi #1{\x7fsecheadingi\x011995,65683
+\def\subsecheading #1#2#3#4{\x7fsubsecheading\x012006,66051
+\def\subsecheadingi #1{\x7fsubsecheadingi\x012007,66118
+\def\subsubsecfonts{\x7fsubsubsecfonts\x012014,66415
+\def\subsubsecheading #1#2#3#4#5{\x7fsubsubsecheading\x012017,66538
+\def\subsubsecheadingi #1{\x7fsubsubsecheadingi\x012018,66616
+\def\startcontents#1{\x7fstartcontents\x012032,67088
+   \unnumbchapmacro{#1}\def\thischapter{\x7fthischapter\x012040,67361
+\outer\def\contents{\x7fcontents\x012049,67720
+\outer\def\summarycontents{\x7fsummarycontents\x012057,67864
+      \let\chapentry = \shortchapentry\x7fchapentry\x012060,67936
+      \let\unnumbchapentry = \shortunnumberedentry\x7funnumbchapentry\x012061,67975
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7frm\x012064,68098
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7fbf\x012064,68098
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7fsl\x012064,68098
+      \def\secentry ##1##2##3##4{\x7fsecentry\x012067,68235
+      \def\unnumbsecentry ##1##2{\x7funnumbsecentry\x012068,68270
+      \def\subsecentry ##1##2##3##4##5{\x7fsubsecentry\x012069,68305
+      \def\unnumbsubsecentry ##1##2{\x7funnumbsubsecentry\x012070,68346
+      \def\subsubsecentry ##1##2##3##4##5##6{\x7fsubsubsecentry\x012071,68384
+      \def\unnumbsubsubsecentry ##1##2{\x7funnumbsubsubsecentry\x012072,68431
+\let\shortcontents = \summarycontents\x7fshortcontents\x012077,68530
+\def\chapentry#1#2#3{\x7fchapentry\x012085,68865
+\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}\x7fspace\x012085,68865
+\def\shortchapentry#1#2#3{\x7fshortchapentry\x012088,68982
     {#2\labelspace #1}\x7fspace\x012091,69092
-\def\unnumbchapentry#1#2{\x7f\unnumbchapentry\x012094,69146
-\def\shortunnumberedentry#1#2{\x7f\shortunnumberedentry\x012095,69193
-\def\secentry#1#2#3#4{\x7f\secentry\x012102,69357
-\def\unnumbsecentry#1#2{\x7f\unnumbsecentry\x012103,69416
-\def\subsecentry#1#2#3#4#5{\x7f\subsecentry\x012106,69477
-\def\unnumbsubsecentry#1#2{\x7f\unnumbsubsecentry\x012107,69547
-\def\subsubsecentry#1#2#3#4#5#6{\x7f\subsubsecentry\x012110,69621
+\def\unnumbchapentry#1#2{\x7funnumbchapentry\x012094,69146
+\def\shortunnumberedentry#1#2{\x7fshortunnumberedentry\x012095,69193
+\def\secentry#1#2#3#4{\x7fsecentry\x012102,69357
+\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}\x7fspace\x012102,69357
+\def\unnumbsecentry#1#2{\x7funnumbsecentry\x012103,69416
+\def\subsecentry#1#2#3#4#5{\x7fsubsecentry\x012106,69477
+\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}\x7fspace\x012106,69477
+\def\unnumbsubsecentry#1#2{\x7funnumbsubsecentry\x012107,69547
+\def\subsubsecentry#1#2#3#4#5#6{\x7fsubsubsecentry\x012110,69621
   \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}\x7fspace\x012111,69655
-\def\unnumbsubsubsecentry#1#2{\x7f\unnumbsubsubsecentry\x012112,69706
-\def\dochapentry#1#2{\x7f\dochapentry\x012123,70080
-\def\dosecentry#1#2{\x7f\dosecentry\x012138,70685
-\def\dosubsecentry#1#2{\x7f\dosubsecentry\x012145,70863
-\def\dosubsubsecentry#1#2{\x7f\dosubsubsecentry\x012152,71048
-\def\labelspace{\x7f\labelspace\x012160,71299
-\def\dopageno#1{\x7f\dopageno\x012162,71334
-\def\doshortpageno#1{\x7f\doshortpageno\x012163,71360
-\def\chapentryfonts{\x7f\chapentryfonts\x012165,71392
-\def\secentryfonts{\x7f\secentryfonts\x012166,71427
-\def\point{\x7f\point\x012192,72386
-\def\result{\x7f\result\x012194,72407
-\def\expansion{\x7f\expansion\x012195,72480
-\def\print{\x7f\print\x012196,72551
-\def\equiv{\x7f\equiv\x012198,72618
-\def\error{\x7f\error\x012218,73391
-\def\tex{\x7f\tex\x012224,73620
-\def\@{\x7f\@\x012242,74003
-\gdef\sepspaces{\def {\ }}}\x7f\\x012265,74735
-\def\aboveenvbreak{\x7f\aboveenvbreak\x012268,74817
-\def\afterenvbreak{\x7f\afterenvbreak\x012272,74983
-\def\ctl{\x7f\ctl\x012286,75494
-\def\ctr{\x7f\ctr\x012287,75566
-\def\cbl{\x7f\cbl\x012288,75605
-\def\cbr{\x7f\cbr\x012289,75645
-\def\carttop{\x7f\carttop\x012290,75684
-\def\cartbot{\x7f\cartbot\x012293,75792
-\long\def\cartouche{\x7f\cartouche\x012299,75932
-\def\Ecartouche{\x7f\Ecartouche\x012326,76720
-\def\lisp{\x7f\lisp\x012338,76855
-\def\Elisp{\x7f\Elisp\x012348,77202
-\def\next##1{\x7f\next\x012360,77528
-\def\Eexample{\x7f\Eexample\x012364,77570
-\def\Esmallexample{\x7f\Esmallexample\x012367,77617
-\def\smalllispx{\x7f\smalllispx\x012373,77795
-\def\Esmalllisp{\x7f\Esmalllisp\x012383,78149
+\def\unnumbsubsubsecentry#1#2{\x7funnumbsubsubsecentry\x012112,69706
+\def\dochapentry#1#2{\x7fdochapentry\x012123,70080
+\def\dosecentry#1#2{\x7fdosecentry\x012138,70685
+\def\dosubsecentry#1#2{\x7fdosubsecentry\x012145,70863
+\def\dosubsubsecentry#1#2{\x7fdosubsubsecentry\x012152,71048
+\def\labelspace{\x7flabelspace\x012160,71299
+\def\dopageno#1{\x7fdopageno\x012162,71334
+\def\doshortpageno#1{\x7fdoshortpageno\x012163,71360
+\def\chapentryfonts{\x7fchapentryfonts\x012165,71392
+\def\secentryfonts{\x7fsecentryfonts\x012166,71427
+\let\subsecentryfonts = \textfonts\x7fsubsecentryfonts\x012167,71458
+\let\subsubsecentryfonts = \textfonts\x7fsubsubsecentryfonts\x012168,71493
+\let\ptexequiv = \equiv\x7fptexequiv\x012180,71896
+\def\point{\x7fpoint\x012192,72386
+\def\result{\x7fresult\x012194,72407
+\def\expansion{\x7fexpansion\x012195,72480
+\def\print{\x7fprint\x012196,72551
+\def\equiv{\x7fequiv\x012198,72618
+\def\error{\x7ferror\x012218,73391
+\def\tex{\x7ftex\x012224,73620
+\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie\x7f~\x012227,73731
+\let\{=\ptexlbrace\x7f{\x012237,73912
+\let\}=\ptexrbrace\x7f}\x012238,73931
+\let\.=\ptexdot\x7f.\x012239,73950
+\let\*=\ptexstar\x7f*\x012240,73966
+\let\dots=\ptexdots\x7fdots\x012241,73983
+\def\@{\x7f@\x012242,74003
+\let\bullet=\ptexbullet\x7fbullet\x012243,74014
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fb\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fc\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fi\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7ft\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fl\x012244,74038
+\let\L=\ptexL\x7fL\x012245,74108
+\let\Etex=\endgroup}\x7fEtex\x012247,74124
+\gdef\lisppar{\x7flisppar\x012259,74517
+\gdef\sepspaces{\x7fsepspaces\x012265,74735
+\def\aboveenvbreak{\x7faboveenvbreak\x012268,74817
+\def\afterenvbreak{\x7fafterenvbreak\x012272,74983
+\let\nonarrowing=\relax\x7fnonarrowing\x012276,75176
+\def\ctl{\x7fctl\x012286,75494
+\def\ctr{\x7fctr\x012287,75566
+\def\cbl{\x7fcbl\x012288,75605
+\def\cbr{\x7fcbr\x012289,75645
+\def\carttop{\x7fcarttop\x012290,75684
+\def\cartbot{\x7fcartbot\x012293,75792
+\long\def\cartouche{\x7fcartouche\x012299,75932
+	\let\nonarrowing=\comment\x7fnonarrowing\x012311,76404
+\def\Ecartouche{\x7fEcartouche\x012326,76720
+\def\lisp{\x7flisp\x012338,76855
+\let\par=\lisppar\x7fpar\x012347,77184
+\def\Elisp{\x7fElisp\x012348,77202
+\let\exdent=\nofillexdent\x7fexdent\x012355,77418
+\let\nonarrowing=\relax\x7fnonarrowing\x012356,77444
+\def\next##1{\x7fnext\x012360,77528
+\let\example=\lisp\x7fexample\x012363,77551
+\def\Eexample{\x7fEexample\x012364,77570
+\let\smallexample=\lisp\x7fsmallexample\x012366,77593
+\def\Esmallexample{\x7fEsmallexample\x012367,77617
+\def\smalllispx{\x7fsmalllispx\x012373,77795
+\let\par=\lisppar\x7fpar\x012382,78131
+\def\Esmalllisp{\x7fEsmalllisp\x012383,78149
+\let\exdent=\nofillexdent\x7fexdent\x012392,78436
+\let\nonarrowing=\relax\x7fnonarrowing\x012393,78462
 \obeyspaces \obeylines \ninett \indexfonts \rawbackslash\x7ffonts\x012396,78505
-\def\next##1{\x7f\next\x012397,78562
-\def\display{\x7f\display\x012401,78642
-\def\Edisplay{\x7f\Edisplay\x012410,78961
-\def\next##1{\x7f\next\x012422,79272
-\def\format{\x7f\format\x012426,79375
-\def\Eformat{\x7f\Eformat\x012434,79671
-\def\next##1{\x7f\next\x012437,79760
-\def\flushleft{\x7f\flushleft\x012441,79812
-\def\Eflushleft{\x7f\Eflushleft\x012451,80183
-\def\next##1{\x7f\next\x012454,80276
-\def\flushright{\x7f\flushright\x012456,80298
-\def\Eflushright{\x7f\Eflushright\x012466,80670
-\def\next##1{\x7f\next\x012470,80801
-\def\quotation{\x7f\quotation\x012474,80859
-\def\Equotation{\x7f\Equotation\x012480,81051
-\def\setdeffont #1 {\x7f\setdeffont\x012493,81449
+\def\next##1{\x7fnext\x012397,78562
+\def\display{\x7fdisplay\x012401,78642
+\let\par=\lisppar\x7fpar\x012409,78943
+\def\Edisplay{\x7fEdisplay\x012410,78961
+\let\exdent=\nofillexdent\x7fexdent\x012417,79180
+\let\nonarrowing=\relax\x7fnonarrowing\x012418,79206
+\def\next##1{\x7fnext\x012422,79272
+\def\format{\x7fformat\x012426,79375
+\let\par=\lisppar\x7fpar\x012433,79653
+\def\Eformat{\x7fEformat\x012434,79671
+\def\next##1{\x7fnext\x012437,79760
+\def\flushleft{\x7fflushleft\x012441,79812
+\let\par=\lisppar\x7fpar\x012450,80165
+\def\Eflushleft{\x7fEflushleft\x012451,80183
+\def\next##1{\x7fnext\x012454,80276
+\def\flushright{\x7fflushright\x012456,80298
+\let\par=\lisppar\x7fpar\x012465,80652
+\def\Eflushright{\x7fEflushright\x012466,80670
+\def\next##1{\x7fnext\x012470,80801
+\def\quotation{\x7fquotation\x012474,80859
+\def\Equotation{\x7fEquotation\x012480,81051
+\let\nonarrowing=\relax\x7fnonarrowing\x012487,81301
+\def\setdeffont #1 {\x7fsetdeffont\x012493,81449
+\newskip\defbodyindent \defbodyindent=.4in\x7fbodyindent\x012495,81495
 \newskip\defbodyindent \defbodyindent=.4in\x7fbodyindent\x012495,81495
 \newskip\defargsindent \defargsindent=50pt\x7fargsindent\x012496,81538
+\newskip\defargsindent \defargsindent=50pt\x7fargsindent\x012496,81538
 \newskip\deftypemargin \deftypemargin=12pt\x7ftypemargin\x012497,81581
+\newskip\deftypemargin \deftypemargin=12pt\x7ftypemargin\x012497,81581
+\newskip\deflastargmargin \deflastargmargin=18pt\x7flastargmargin\x012498,81624
 \newskip\deflastargmargin \deflastargmargin=18pt\x7flastargmargin\x012498,81624
-\def\activeparens{\x7f\activeparens\x012503,81822
-\def\opnr{\x7f\opnr\x012529,83034
-\def\lbrb{\x7f\lbrb\x012530,83099
-\def\defname #1#2{\x7f\defname\x012536,83300
+\def\activeparens{\x7factiveparens\x012503,81822
+\gdef\functionparens{\x7ffunctionparens\x012507,82016
+\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }\x7f&\x012507,82016
+\gdef\boldbrax{\x7fboldbrax\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f(\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f)\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f[\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f]\x012508,82074
+\gdef\oprm#1 {\x7foprm\x012512,82250
+\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %\x7f(\x012512,82250
+\gdef\opnested{\x7fopnested\x012516,82407
+\gdef\clrm{\x7fclrm\x012518,82466
+\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi\x7f(\x012520,82602
+\gdef\amprm#1 {\x7famprm\x012523,82769
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }\x7f(\x012523,82769
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }\x7f)\x012523,82769
+\gdef\normalparens{\x7fnormalparens\x012525,82822
+\gdef\normalparens{\boldbrax\let&=\ampnr}\x7f&\x012525,82822
+\def\opnr{\x7fopnr\x012529,83034
+\def\opnr{{\sf\char`\(}} \def\clnr{\x7fclnr\x012529,83034
+\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\x7fampnr\x012529,83034
+\def\lbrb{\x7flbrb\x012530,83099
+\def\lbrb{{\bf\char`\[}} \def\rbrb{\x7frbrb\x012530,83099
+\def\defname #1#2{\x7fdefname\x012536,83300
 \advance\dimen2 by -\defbodyindent\x7fbodyindent\x012540,83418
 \advance\dimen3 by -\defbodyindent\x7fbodyindent\x012542,83472
 \setbox0=\hbox{\hskip \deflastargmargin{\x7flastargmargin\x012544,83526
+\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}\x7ftypemargin\x012544,83526
 \dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations\x7fargsindent\x012546,83668
 \parshape 2 0in \dimen0 \defargsindent \dimen1     %\x7fargsindent\x012547,83743
 \rlap{\rightline{{\rm #2}\hskip \deftypemargin}\x7ftypemargin\x012554,84112
 \advance\leftskip by -\defbodyindent\x7fbodyindent\x012557,84246
 \exdentamount=\defbodyindent\x7fbodyindent\x012558,84283
-\def\defparsebody #1#2#3{\x7f\defparsebody\x012568,84642
-\def#1{\x7f2572,84826
-\def#2{\x7f2573,84862
+\def\defparsebody #1#2#3{\x7fdefparsebody\x012568,84642
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012575,84934
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012575,84934
 \exdentamount=\defbodyindent\x7fbodyindent\x012576,85008
-\def\defmethparsebody #1#2#3#4 {\x7f\defmethparsebody\x012581,85112
-\def#1{\x7f2585,85273
-\def#2##1 {\x7f2586,85309
+\def\defmethparsebody #1#2#3#4 {\x7fdefmethparsebody\x012581,85112
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012588,85392
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012588,85392
 \exdentamount=\defbodyindent\x7fbodyindent\x012589,85466
-\def\defopparsebody #1#2#3#4#5 {\x7f\defopparsebody\x012592,85551
-\def#1{\x7f2596,85712
-\def#2##1 ##2 {\x7f2597,85748
+\def\defopparsebody #1#2#3#4#5 {\x7fdefopparsebody\x012592,85551
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012600,85848
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012600,85848
 \exdentamount=\defbodyindent\x7fbodyindent\x012601,85922
-\def\defvarparsebody #1#2#3{\x7f\defvarparsebody\x012608,86193
-\def#1{\x7f2612,86380
-\def#2{\x7f2613,86416
+\def\defvarparsebody #1#2#3{\x7fdefvarparsebody\x012608,86193
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012615,86475
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012615,86475
 \exdentamount=\defbodyindent\x7fbodyindent\x012616,86549
-\def\defvrparsebody #1#2#3#4 {\x7f\defvrparsebody\x012621,86640
-\def#1{\x7f2625,86799
-\def#2##1 {\x7f2626,86835
+\def\defvrparsebody #1#2#3#4 {\x7fdefvrparsebody\x012621,86640
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012628,86905
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012628,86905
 \exdentamount=\defbodyindent\x7fbodyindent\x012629,86979
-\def\defopvarparsebody #1#2#3#4#5 {\x7f\defopvarparsebody\x012632,87051
-\def#1{\x7f2636,87215
-\def#2##1 ##2 {\x7f2637,87251
+\def\defopvarparsebody #1#2#3#4#5 {\x7fdefopvarparsebody\x012632,87051
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012640,87338
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012640,87338
 \exdentamount=\defbodyindent\x7fbodyindent\x012641,87412
-\def\defunargs #1{\x7f\defunargs\x012664,88172
-\def\deftypefunargs #1{\x7f\deftypefunargs\x012676,88554
-\def\deffn{\x7f\deffn\x012690,88936
-\def\deffnheader #1#2#3{\x7f\deffnheader\x012692,88993
+\gdef\spacesplit#1#2^^M{\x7fspacesplit\x012652,87775
+\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{\x7fspacesplitfoo\x012653,87852
+\def\defunargs #1{\x7fdefunargs\x012664,88172
+\def\deftypefunargs #1{\x7fdeftypefunargs\x012676,88554
+\def\deffn{\x7fdeffn\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7fmethparsebody\Edeffn\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7ffnx\deffnheader\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7ffnheader\x012690,88936
+\def\deffnheader #1#2#3{\x7fdeffnheader\x012692,88993
 \begingroup\defname {\x7fname\x012693,89041
-\def\defun{\x7f\defun\x012699,89186
-\def\defunheader #1#2{\x7f\defunheader\x012701,89239
+\begingroup\defname {#2}{#1}\defunargs{\x7funargs\x012693,89041
+\def\defun{\x7fdefun\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7fparsebody\Edefun\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7funx\defunheader\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7funheader\x012699,89186
+\def\defunheader #1#2{\x7fdefunheader\x012701,89239
 \begingroup\defname {\x7fname\x012702,89314
 \defunargs {\x7funargs\x012703,89350
-\def\deftypefun{\x7f\deftypefun\x012709,89498
-\def\deftypefunheader #1#2{\x7f\deftypefunheader\x012712,89620
-\def\deftypefunheaderx #1#2 #3\relax{\x7f\deftypefunheaderx\x012714,89729
+\def\deftypefun{\x7fdeftypefun\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7fparsebody\Edeftypefun\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7ftypefunx\deftypefunheader\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7ftypefunheader\x012709,89498
+\def\deftypefunheader #1#2{\x7fdeftypefunheader\x012712,89620
+\def\deftypefunheader #1#2{\deftypefunheaderx{\x7ftypefunheaderx\x012712,89620
+\def\deftypefunheaderx #1#2 #3\relax{\x7fdeftypefunheaderx\x012714,89729
 \begingroup\defname {\x7fname\x012716,89821
 \deftypefunargs {\x7ftypefunargs\x012717,89867
-\def\deftypefn{\x7f\deftypefn\x012723,90038
-\def\deftypefnheader #1#2#3{\x7f\deftypefnheader\x012726,90187
-\def\deftypefnheaderx #1#2#3 #4\relax{\x7f\deftypefnheaderx\x012728,90323
+\def\deftypefn{\x7fdeftypefn\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7fmethparsebody\Edeftypefn\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7ftypefnx\deftypefnheader\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7ftypefnheader\x012723,90038
+\def\deftypefnheader #1#2#3{\x7fdeftypefnheader\x012726,90187
+\def\deftypefnheader #1#2#3{\deftypefnheaderx{\x7ftypefnheaderx\x012726,90187
+\def\deftypefnheaderx #1#2#3 #4\relax{\x7fdeftypefnheaderx\x012728,90323
 \begingroup\defname {\x7fname\x012730,90416
 \deftypefunargs {\x7ftypefunargs\x012731,90456
-\def\defmac{\x7f\defmac\x012737,90577
-\def\defmacheader #1#2{\x7f\defmacheader\x012739,90634
+\def\defmac{\x7fdefmac\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fparsebody\Edefmac\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fmacx\defmacheader\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fmacheader\x012737,90577
+\def\defmacheader #1#2{\x7fdefmacheader\x012739,90634
 \begingroup\defname {\x7fname\x012740,90710
 \defunargs {\x7funargs\x012741,90743
-\def\defspec{\x7f\defspec\x012747,90867
-\def\defspecheader #1#2{\x7f\defspecheader\x012749,90928
+\def\defspec{\x7fdefspec\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fparsebody\Edefspec\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fspecx\defspecheader\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fspecheader\x012747,90867
+\def\defspecheader #1#2{\x7fdefspecheader\x012749,90928
 \begingroup\defname {\x7fname\x012750,91005
 \defunargs {\x7funargs\x012751,91045
-\def\deffnx #1 {\x7f\deffnx\x012758,91240
-\def\defunx #1 {\x7f\defunx\x012759,91297
-\def\defmacx #1 {\x7f\defmacx\x012760,91354
-\def\defspecx #1 {\x7f\defspecx\x012761,91413
-\def\deftypefnx #1 {\x7f\deftypefnx\x012762,91474
-\def\deftypeunx #1 {\x7f\deftypeunx\x012763,91539
-\def\defop #1 {\x7f\defop\x012769,91685
-\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopparsebody\Edefop\defopx\defopheader\defoptype\x012770,91720
-\def\defopheader #1#2#3{\x7f\defopheader\x012772,91774
+\def\deffnx #1 {\x7fdeffnx\x012758,91240
+\def\defunx #1 {\x7fdefunx\x012759,91297
+\def\defmacx #1 {\x7fdefmacx\x012760,91354
+\def\defspecx #1 {\x7fdefspecx\x012761,91413
+\def\deftypefnx #1 {\x7fdeftypefnx\x012762,91474
+\def\deftypeunx #1 {\x7fdeftypeunx\x012763,91539
+\def\defop #1 {\x7fdefop\x012769,91685
+\def\defop #1 {\def\defoptype{\x7fdefoptype\x012769,91685
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopparsebody\Edefop\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopx\defopheader\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopheader\defoptype\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7foptype\x012770,91720
+\def\defopheader #1#2#3{\x7fdefopheader\x012772,91774
 \begingroup\defname {\x7fname\x012774,91863
+\begingroup\defname {#2}{\defoptype{\x7foptype\x012774,91863
 \defunargs {\x7funargs\x012775,91909
-\def\defmethod{\x7f\defmethod\x012780,91970
-\def\defmethodheader #1#2#3{\x7f\defmethodheader\x012782,92043
+\def\defmethod{\x7fdefmethod\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethparsebody\Edefmethod\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethodx\defmethodheader\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethodheader\x012780,91970
+\def\defmethodheader #1#2#3{\x7fdefmethodheader\x012782,92043
 \begingroup\defname {\x7fname\x012784,92131
 \defunargs {\x7funargs\x012785,92171
-\def\defcv #1 {\x7f\defcv\x012790,92245
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype\x012791,92280
-\def\defcvarheader #1#2#3{\x7f\defcvarheader\x012793,92339
+\def\defcv #1 {\x7fdefcv\x012790,92245
+\def\defcv #1 {\def\defcvtype{\x7fdefcvtype\x012790,92245
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fopvarparsebody\Edefcv\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvx\defcvarheader\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvarheader\defcvtype\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvtype\x012791,92280
+\def\defcvarheader #1#2#3{\x7fdefcvarheader\x012793,92339
 \begingroup\defname {\x7fname\x012795,92425
+\begingroup\defname {#2}{\defcvtype{\x7fcvtype\x012795,92425
 \defvarargs {\x7fvarargs\x012796,92471
-\def\defivar{\x7f\defivar\x012801,92544
-\def\defivarheader #1#2#3{\x7f\defivarheader\x012803,92607
+\def\defivar{\x7fdefivar\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fvrparsebody\Edefivar\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fivarx\defivarheader\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fivarheader\x012801,92544
+\def\defivarheader #1#2#3{\x7fdefivarheader\x012803,92607
 \begingroup\defname {\x7fname\x012805,92693
 \defvarargs {\x7fvarargs\x012806,92744
-\def\defopx #1 {\x7f\defopx\x012812,92893
-\def\defmethodx #1 {\x7f\defmethodx\x012813,92950
-\def\defcvx #1 {\x7f\defcvx\x012814,93015
-\def\defivarx #1 {\x7f\defivarx\x012815,93072
-\def\defvarargs #1{\x7f\defvarargs\x012822,93343
-\def\defvr{\x7f\defvr\x012828,93487
-\def\defvrheader #1#2#3{\x7f\defvrheader\x012830,93542
+\def\defopx #1 {\x7fdefopx\x012812,92893
+\def\defmethodx #1 {\x7fdefmethodx\x012813,92950
+\def\defcvx #1 {\x7fdefcvx\x012814,93015
+\def\defivarx #1 {\x7fdefivarx\x012815,93072
+\def\defvarargs #1{\x7fdefvarargs\x012822,93343
+\def\defvr{\x7fdefvr\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrparsebody\Edefvr\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrx\defvrheader\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrheader\x012828,93487
+\def\defvrheader #1#2#3{\x7fdefvrheader\x012830,93542
 \begingroup\defname {\x7fname\x012831,93590
-\def\defvar{\x7f\defvar\x012835,93675
-\def\defvarheader #1#2{\x7f\defvarheader\x012837,93735
+\begingroup\defname {#2}{#1}\defvarargs{\x7fvarargs\x012831,93590
+\def\defvar{\x7fdefvar\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarparsebody\Edefvar\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarx\defvarheader\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarheader\x012835,93675
+\def\defvarheader #1#2{\x7fdefvarheader\x012837,93735
 \begingroup\defname {\x7fname\x012838,93806
 \defvarargs {\x7fvarargs\x012839,93842
-\def\defopt{\x7f\defopt\x012844,93908
-\def\defoptheader #1#2{\x7f\defoptheader\x012846,93968
+\def\defopt{\x7fdefopt\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7fvarparsebody\Edefopt\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7foptx\defoptheader\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7foptheader\x012844,93908
+\def\defoptheader #1#2{\x7fdefoptheader\x012846,93968
 \begingroup\defname {\x7fname\x012847,94039
 \defvarargs {\x7fvarargs\x012848,94078
-\def\deftypevar{\x7f\deftypevar\x012853,94135
-\def\deftypevarheader #1#2{\x7f\deftypevarheader\x012856,94251
+\def\deftypevar{\x7fdeftypevar\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7fvarparsebody\Edeftypevar\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7ftypevarx\deftypevarheader\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7ftypevarheader\x012853,94135
+\def\deftypevarheader #1#2{\x7fdeftypevarheader\x012856,94251
 \begingroup\defname {\x7fname\x012858,94334
-\def\deftypevr{\x7f\deftypevr\x012865,94508
-\def\deftypevrheader #1#2#3{\x7f\deftypevrheader\x012867,94579
+\def\deftypevr{\x7fdeftypevr\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7fvrparsebody\Edeftypevr\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7ftypevrx\deftypevrheader\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7ftypevrheader\x012865,94508
+\def\deftypevrheader #1#2#3{\x7fdeftypevrheader\x012867,94579
 \begingroup\defname {\x7fname\x012868,94631
-\def\defvrx #1 {\x7f\defvrx\x012876,94868
-\def\defvarx #1 {\x7f\defvarx\x012877,94925
-\def\defoptx #1 {\x7f\defoptx\x012878,94984
-\def\deftypevarx #1 {\x7f\deftypevarx\x012879,95043
-\def\deftypevrx #1 {\x7f\deftypevrx\x012880,95110
-\def\deftpargs #1{\x7f\deftpargs\x012885,95259
-\def\deftp{\x7f\deftp\x012889,95339
-\def\deftpheader #1#2#3{\x7f\deftpheader\x012891,95394
+\def\defvrx #1 {\x7fdefvrx\x012876,94868
+\def\defvarx #1 {\x7fdefvarx\x012877,94925
+\def\defoptx #1 {\x7fdefoptx\x012878,94984
+\def\deftypevarx #1 {\x7fdeftypevarx\x012879,95043
+\def\deftypevrx #1 {\x7fdeftypevrx\x012880,95110
+\def\deftpargs #1{\x7fdeftpargs\x012885,95259
+\def\deftpargs #1{\bf \defvarargs{\x7fvarargs\x012885,95259
+\def\deftp{\x7fdeftp\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7fvrparsebody\Edeftp\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7ftpx\deftpheader\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7ftpheader\x012889,95339
+\def\deftpheader #1#2#3{\x7fdeftpheader\x012891,95394
 \begingroup\defname {\x7fname\x012892,95442
-\def\deftpx #1 {\x7f\deftpx\x012897,95601
-\def\setref#1{\x7f\setref\x012908,95922
-\def\unnumbsetref#1{\x7f\unnumbsetref\x012913,96036
-\def\appendixsetref#1{\x7f\appendixsetref\x012918,96143
-\def\pxref#1{\x7f\pxref\x012929,96554
-\def\xref#1{\x7f\xref\x012930,96590
-\def\ref#1{\x7f\ref\x012931,96625
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\x7f\xrefX[\x012932,96655
-\def\printedmanual{\x7f\printedmanual\x012933,96698
-\def\printednodename{\x7f\printednodename\x012934,96736
-\def\printednodename{\x7f\printednodename\x012939,96861
-section ``\printednodename'' in \cite{\printedmanual}\x7f\printedmanual\x012954,97493
+\begingroup\defname {#2}{#1}\deftpargs{\x7ftpargs\x012892,95442
+\def\deftpx #1 {\x7fdeftpx\x012897,95601
+\def\setref#1{\x7fsetref\x012908,95922
+\def\unnumbsetref#1{\x7funnumbsetref\x012913,96036
+\def\appendixsetref#1{\x7fappendixsetref\x012918,96143
+\def\pxref#1{\x7fpxref\x012929,96554
+\def\xref#1{\x7fxref\x012930,96590
+\def\ref#1{\x7fref\x012931,96625
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\x7fxrefX\x012932,96655
+\def\printedmanual{\x7fprintedmanual\x012933,96698
+\def\printednodename{\x7fprintednodename\x012934,96736
+\def\printednodename{\x7fprintednodename\x012939,96861
+section ``\printednodename'' in \cite{\printedmanual}\x7fprintedmanual\x012954,97493
 \refx{\x7fx\x012957,97571
-\def\dosetq #1#2{\x7f\dosetq\x012965,97791
-\def\internalsetq #1#2{\x7f\internalsetq\x012973,98049
-\def\Ypagenumber{\x7f\Ypagenumber\x012977,98150
-\def\Ytitle{\x7f\Ytitle\x012979,98176
-\def\Ynothing{\x7f\Ynothing\x012981,98203
-\def\Ysectionnumberandtype{\x7f\Ysectionnumberandtype\x012983,98220
-\def\Yappendixletterandtype{\x7f\Yappendixletterandtype\x012992,98536
+\refx{#1-snt}{} [\printednodename], page\tie\refx{\x7fx\x012957,97571
+\def\dosetq #1#2{\x7fdosetq\x012965,97791
+\def\dosetq #1#2{{\let\folio=0 \turnoffactive%\x7ffolio\x012965,97791
+\edef\next{\x7fnext\x012966,97838
+\def\internalsetq #1#2{\x7finternalsetq\x012973,98049
+\def\Ypagenumber{\x7fYpagenumber\x012977,98150
+\def\Ytitle{\x7fYtitle\x012979,98176
+\def\Ynothing{\x7fYnothing\x012981,98203
+\def\Ysectionnumberandtype{\x7fYsectionnumberandtype\x012983,98220
+\def\Yappendixletterandtype{\x7fYappendixletterandtype\x012992,98536
 \ifnum\secno=0 Appendix\xreftie'char\the\appendixno{\x7fno\x012993,98566
-\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno %\x7fno.\the\secno\x012994,98621
-Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno %\x7fno.\the\secno.\the\subsecno\x012996,98725
-Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\x7fno.\the\secno.\the\subsecno.\the\subsubsecno\x012998,98796
-  \def\linenumber{\x7f\linenumber\x013009,99135
-\def\refx#1#2{\x7f\refx\x013015,99319
-\def\xrdef #1#2{\x7f\xrdef\x013037,99945
-\def\readauxfile{\x7f\readauxfile\x013040,100030
-\def\supereject{\x7f\supereject\x013110,101811
-\footstrut\parindent=\defaultparindent\hang\textindent{\x7faultparindent\hang\textindent\x013131,102496
-\def\openindices{\x7f\openindices\x013139,102682
+\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno %\x7fno.\the\x012994,98621
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno %\x7fno.\the\x012996,98725
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\x7fno.\the\x012998,98796
+\gdef\xreftie{\x7fxreftie\x013001,98891
+  \let\linenumber = \empty % Non-3.0.\x7flinenumber\x013007,99091
+  \def\linenumber{\x7flinenumber\x013009,99135
+\def\refx#1#2{\x7frefx\x013015,99319
+\def\xrdef #1#2{\x7fxrdef\x013037,99945
+{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {\x7fcsname\x013038,99962
+\def\readauxfile{\x7freadauxfile\x013040,100030
+\def\supereject{\x7fsupereject\x013110,101811
+\let\footnotestyle=\comment\x7ffootnotestyle\x013113,101918
+\let\ptexfootnote=\footnote\x7fptexfootnote\x013115,101947
+\long\gdef\footnote #1{\x7ffootnote\x013118,101993
+\edef\thisfootno{\x7fthisfootno\x013120,102060
+\let\@sf\empty\x7f@sf\x013121,102100
+\ifhmode\edef\@sf{\x7f@sf\x013122,102115
+\long\gdef\footnotezzz #1{\x7ffootnotezzz\x013126,102228
+\footstrut\parindent=\defaultparindent\hang\textindent{\x7faultparindent\hang\x013131,102496
+\def\openindices{\x7fopenindices\x013139,102682
+\newdimen\defaultparindent \defaultparindent = 15pt\x7faultparindent\x013151,102907
 \newdimen\defaultparindent \defaultparindent = 15pt\x7faultparindent\x013151,102907
 \parindent = \defaultparindent\x7faultparindent\x013152,102959
-\def\smallbook{\x7f\smallbook\x013175,103683
-\global\def\Esmallexample{\x7f\Esmallexample\x013192,104110
-\def\afourpaper{\x7f\afourpaper\x013196,104201
-\def\finalout{\x7f\finalout\x013224,105009
-\def\normaldoublequote{\x7f\normaldoublequote\x013235,105270
-\def\normaltilde{\x7f\normaltilde\x013236,105296
-\def\normalcaret{\x7f\normalcaret\x013237,105316
-\def\normalunderscore{\x7f\normalunderscore\x013238,105336
-\def\normalverticalbar{\x7f\normalverticalbar\x013239,105361
-\def\normalless{\x7f\normalless\x013240,105387
-\def\normalgreater{\x7f\normalgreater\x013241,105406
-\def\normalplus{\x7f\normalplus\x013242,105428
-\def\ifusingtt#1#2{\x7f\ifusingtt\x013253,105920
-\def\activedoublequote{\x7f\activedoublequote\x013261,106248
+\def\smallbook{\x7fsmallbook\x013175,103683
+\global\let\smalllisp=\smalllispx\x7fsmalllisp\x013190,104039
+\global\let\smallexample=\smalllispx\x7fsmallexample\x013191,104073
+\global\def\Esmallexample{\x7fEsmallexample\x013192,104110
+\def\afourpaper{\x7fafourpaper\x013196,104201
+\def\finalout{\x7ffinalout\x013224,105009
+\def\normaldoublequote{\x7fnormaldoublequote\x013235,105270
+\def\normaltilde{\x7fnormaltilde\x013236,105296
+\def\normalcaret{\x7fnormalcaret\x013237,105316
+\def\normalunderscore{\x7fnormalunderscore\x013238,105336
+\def\normalverticalbar{\x7fnormalverticalbar\x013239,105361
+\def\normalless{\x7fnormalless\x013240,105387
+\def\normalgreater{\x7fnormalgreater\x013241,105406
+\def\normalplus{\x7fnormalplus\x013242,105428
+\def\ifusingtt#1#2{\x7fifusingtt\x013253,105920
+\def\activedoublequote{\x7factivedoublequote\x013261,106248
+\let"=\activedoublequote\x7f"\x013262,106289
 \def~{\x7f~\x013264,106334
 \def^{\x7f^\x013267,106395
 \def_{\x7f_\x013270,106434
-\def\_{\x7f\_\x013272,106508
-\def\lvvmode{\x7f\lvvmode\x013279,106845
+\def\_{\x7f_\x013272,106508
+\def\lvvmode{\x7flvvmode\x013279,106845
 \def|{\x7f|\x013282,106895
 \def<{\x7f<\x013285,106958
 \def>{\x7f>\x013288,107015
 \def+{\x7f+\x013290,107053
-\def\turnoffactive{\x7f\turnoffactive\x013296,107214
+\def\turnoffactive{\x7fturnoffactive\x013296,107214
+\def\turnoffactive{\let"=\normaldoublequote\x7f"\x013296,107214
+\let~=\normaltilde\x7f~\x013297,107258
+\let^=\normalcaret\x7f^\x013298,107277
+\let_=\normalunderscore\x7f_\x013299,107296
+\let|=\normalverticalbar\x7f|\x013300,107320
+\let<=\normalless\x7f<\x013301,107345
+\let>=\normalgreater\x7f>\x013302,107363
+\let+=\normalplus}\x7f+\x013303,107384
 \global\def={\x7f=\x013307,107500
-\def\normalbackslash{\x7f\normalbackslash\x013321,107882
+\def\normalbackslash{\x7fnormalbackslash\x013321,107882
 \f
 merc-src/accumulator.m,4915
 :- interface\x7f146,5371
diff --git a/test/manual/etags/ETAGS.good_3 b/test/manual/etags/ETAGS.good_3
index 15ed7855b30..79ee70fd1d0 100644
--- a/test/manual/etags/ETAGS.good_3
+++ b/test/manual/etags/ETAGS.good_3
@@ -3555,8 +3555,8 @@ scm-src/test.scm,260
 (define (((((curry-test \x7f14,205
 (define-syntax test-begin\x7f17,265
 \f
-tex-src/testenv.tex,52
-\newcommand{\nm}\x7f\nm\x014,77
+tex-src/testenv.tex,51
+\newcommand{\nm}\x7fnm\x014,77
 \section{blah}\x7fblah\x018,139
 \f
 tex-src/gzip.texi,303
@@ -3571,722 +3571,1142 @@ tex-src/gzip.texi,303
 @node Problems,\x7f460,16769
 @node Concept Index,\x7fConcept Index\x01473,17289
 \f
-tex-src/texinfo.tex,30627
-\def\texinfoversion{\x7f\texinfoversion\x0126,1035
-\def\tie{\x7f\tie\x0149,1526
-\def\gloggingall{\x7f\gloggingall\x0172,2276
-\def\loggingall{\x7f\loggingall\x0173,2345
-\def\onepageout#1{\x7f\onepageout\x0199,3282
-\def\croppageout#1{\x7f\croppageout\x01115,4032
-\def\cropmarks{\x7f\cropmarks\x01142,5092
-\def\pagebody#1{\x7f\pagebody\x01144,5139
-\def\ewtop{\x7f\ewtop\x01157,5594
-\def\nstop{\x7f\nstop\x01158,5658
-\def\ewbot{\x7f\ewbot\x01160,5741
-\def\nsbot{\x7f\nsbot\x01161,5805
-\def\parsearg #1{\x7f\parsearg\x01170,6104
-\def\parseargx{\x7f\parseargx\x01172,6182
-\def\parseargline{\x7f\parseargline\x01182,6422
-\def\flushcr{\x7f\flushcr\x01186,6543
-\newif\ifENV \ENVfalse \def\inENV{\x7f\inENV\x01190,6742
-\def\ENVcheck{\x7f\ENVcheck\x01191,6806
-\outer\def\begin{\x7f\begin\x01198,7053
-\def\beginxxx #1{\x7f\beginxxx\x01200,7091
-\def\end{\x7f\end\x01208,7346
-\def\endxxx #1{\x7f\endxxx\x01210,7374
-\def\errorE#1{\x7f\errorE\x01216,7563
-\def\singlespace{\x7f\singlespace\x01222,7757
-\def\@{\x7f\@\x01232,7980
-\def\`{\x7f\`\x01236,8080
-\def\'{\x7f\'\x01237,8092
-\def\mylbrace {\x7f\mylbrace\x01241,8140
-\def\myrbrace {\x7f\myrbrace\x01242,8173
-\def\:{\x7f\:\x01247,8287
-\def\*{\x7f\*\x01250,8341
-\def\.{\x7f\.\x01253,8417
-\def\w#1{\x7f\w\x01258,8648
-\def\group{\x7f\group\x01268,9131
-  \def\Egroup{\x7f\Egroup\x01273,9295
-\def\need{\x7f\need\x01289,9737
-\def\needx#1{\x7f\needx\x01300,10014
-\def\dots{\x7f\dots\x01339,11400
-\def\page{\x7f\page\x01343,11464
-\def\exdent{\x7f\exdent\x01353,11791
-\def\exdentyyy #1{\x7f\exdentyyy\x01354,11824
-\def\nofillexdent{\x7f\nofillexdent\x01357,11968
-\def\nofillexdentyyy #1{\x7f\nofillexdentyyy\x01358,12013
-\def\include{\x7f\include\x01365,12197
-\def\includezzz #1{\x7f\includezzz\x01366,12232
-\def\thisfile{\x7f\thisfile\x01369,12283
-\def\center{\x7f\center\x01373,12346
-\def\centerzzz #1{\x7f\centerzzz\x01374,12379
-\def\sp{\x7f\sp\x01380,12521
-\def\spxxx #1{\x7f\spxxx\x01381,12546
-\def\comment{\x7f\comment\x01387,12720
-\def\commentxxx #1{\x7f\commentxxx\x01390,12817
-\def\ignoresections{\x7f\ignoresections\x01396,12986
-\let\chapter=\relax\x7f=\relax\x01397,13008
-\let\section=\relax\x7f=\relax\x01406,13253
-\let\subsection=\relax\x7f=\relax\x01409,13314
-\let\subsubsection=\relax\x7f=\relax\x01410,13337
-\let\appendix=\relax\x7f=\relax\x01411,13363
-\let\appendixsec=\relax\x7fsec=\relax\x01412,13384
-\let\appendixsection=\relax\x7fsection=\relax\x01413,13408
-\let\appendixsubsec=\relax\x7fsubsec=\relax\x01414,13436
-\let\appendixsubsection=\relax\x7fsubsection=\relax\x01415,13463
-\let\appendixsubsubsec=\relax\x7fsubsubsec=\relax\x01416,13494
-\let\appendixsubsubsection=\relax\x7fsubsubsection=\relax\x01417,13524
-\def\ignore{\x7f\ignore\x01423,13626
-\long\def\ignorexxx #1\end ignore{\x7f\ignorexxx\x01427,13766
-\def\direntry{\x7f\direntry\x01429,13825
-\long\def\direntryxxx #1\end direntry{\x7f\direntryxxx\x01430,13864
-\def\ifset{\x7f\ifset\x01434,13974
-\def\ifsetxxx #1{\x7f\ifsetxxx\x01436,14032
-\def\Eifset{\x7f\Eifset\x01440,14159
-\def\ifsetfail{\x7f\ifsetfail\x01441,14173
-\long\def\ifsetfailxxx #1\end ifset{\x7f\ifsetfailxxx\x01442,14229
-\def\ifclear{\x7f\ifclear\x01444,14290
-\def\ifclearxxx #1{\x7f\ifclearxxx\x01446,14352
-\def\Eifclear{\x7f\Eifclear\x01450,14483
-\def\ifclearfail{\x7f\ifclearfail\x01451,14499
-\long\def\ifclearfailxxx #1\end ifclear{\x7f\ifclearfailxxx\x01452,14559
-\def\set{\x7f\set\x01456,14710
-\def\setxxx #1{\x7f\setxxx\x01457,14737
-\def\clear{\x7f\clear\x01460,14799
-\def\clearxxx #1{\x7f\clearxxx\x01461,14830
-\def\iftex{\x7f\iftex\x01466,14947
-\def\Eiftex{\x7f\Eiftex\x01467,14960
-\def\ifinfo{\x7f\ifinfo\x01468,14974
-\long\def\ifinfoxxx #1\end ifinfo{\x7f\ifinfoxxx\x01469,15024
-\long\def\menu #1\end menu{\x7f\menu\x01471,15083
-\def\asis#1{\x7f\asis\x01472,15112
-\def\math#1{\x7f\math\x01485,15655
-\def\node{\x7f\node\x01487,15699
-\def\nodezzz#1{\x7f\nodezzz\x01488,15737
-\def\nodexxx[#1,#2]{\x7f\nodexxx[\x01489,15768
-\def\donoderef{\x7f\donoderef\x01492,15830
-\def\unnumbnoderef{\x7f\unnumbnoderef\x01496,15951
-\def\appendixnoderef{\x7f\appendixnoderef\x01500,16082
+tex-src/texinfo.tex,55236
+\def\texinfoversion{\x7ftexinfoversion\x0126,1035
+\let\ptexlbrace=\{\x7fptexlbrace\x0135,1308
+\let\ptexrbrace=\}\x7fptexrbrace\x0136,1327
+\let\ptexdots=\dots\x7fptexdots\x0137,1346
+\let\ptexdot=\.\x7fptexdot\x0138,1366
+\let\ptexstar=\*\x7fptexstar\x0139,1382
+\let\ptexend=\end\x7fptexend\x0140,1399
+\let\ptexbullet=\bullet\x7fptexbullet\x0141,1417
+\let\ptexb=\b\x7fptexb\x0142,1441
+\let\ptexc=\c\x7fptexc\x0143,1455
+\let\ptexi=\i\x7fptexi\x0144,1469
+\let\ptext=\t\x7fptext\x0145,1483
+\let\ptexl=\l\x7fptexl\x0146,1497
+\let\ptexL=\L\x7fptexL\x0147,1511
+\def\tie{\x7ftie\x0149,1526
+\def\gloggingall{\x7fgloggingall\x0172,2276
+\def\loggingall{\x7floggingall\x0173,2345
+\def\onepageout#1{\x7fonepageout\x0199,3282
+\shipout\vbox{{\let\hsize=\pagewidth \makeheadline}\x7fhsize\x01103,3489
+{\let\hsize=\pagewidth \makefootline}\x7fhsize\x01104,3556
+\def\croppageout#1{\x7fcroppageout\x01115,4032
+			{\let\hsize=\pagewidth \makeheadline}\x7fhsize\x01126,4511
+			{\let\hsize=\pagewidth \makefootline}\x7fhsize\x01128,4569
+\def\cropmarks{\x7fcropmarks\x01142,5092
+\def\cropmarks{\let\onepageout=\croppageout }\x7fonepageout\x01142,5092
+\def\pagebody#1{\x7fpagebody\x01144,5139
+\gdef\pagecontents#1{\x7fpagecontents\x01146,5220
+\def\ewtop{\x7fewtop\x01157,5594
+\def\nstop{\x7fnstop\x01158,5658
+\def\ewbot{\x7fewbot\x01160,5741
+\def\nsbot{\x7fnsbot\x01161,5805
+\def\parsearg #1{\x7fparsearg\x01170,6104
+\def\parsearg #1{\let\next=#1\begingroup\obeylines\futurelet\temp\parseargx}\x7fnext\x01170,6104
+\def\parseargx{\x7fparseargx\x01172,6182
+\gdef\parseargdiscardspace {\x7fparseargdiscardspace\x01178,6321
+\gdef\obeyedspace{\x7fobeyedspace\x01180,6399
+\def\parseargline{\x7fparseargline\x01182,6422
+\gdef\parsearglinex #1^^M{\x7fparsearglinex\x01184,6493
+\def\flushcr{\x7fflushcr\x01186,6543
+\def\flushcr{\ifx\par\lisppar \def\next##1{\x7fnext\x01186,6543
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}\x7fnext\x01186,6543
+\newif\ifENV \ENVfalse \def\inENV{\x7finENV\x01190,6742
+\def\ENVcheck{\x7fENVcheck\x01191,6806
+\outer\def\begin{\x7fbegin\x01198,7053
+\def\beginxxx #1{\x7fbeginxxx\x01200,7091
+\def\end{\x7fend\x01208,7346
+\def\endxxx #1{\x7fendxxx\x01210,7374
+\def\errorE#1{\x7ferrorE\x01216,7563
+\def\singlespace{\x7fsinglespace\x01222,7757
+\def\@{\x7f@\x01232,7980
+\def\`{\x7f`\x01236,8080
+\def\'{\x7f'\x01237,8092
+\def\mylbrace {\x7fmylbrace\x01241,8140
+\def\myrbrace {\x7fmyrbrace\x01242,8173
+\let\{=\mylbrace\x7f{\x01243,8206
+\let\}=\myrbrace\x7f}\x01244,8223
+\def\:{\x7f:\x01247,8287
+\def\*{\x7f*\x01250,8341
+\def\.{\x7f.\x01253,8417
+\def\w#1{\x7fw\x01258,8648
+\def\group{\x7fgroup\x01268,9131
+  \def\Egroup{\x7fEgroup\x01273,9295
+\def\need{\x7fneed\x01289,9737
+\def\needx#1{\x7fneedx\x01300,10014
+\let\br = \par\x7fbr\x01335,11355
+\def\dots{\x7fdots\x01339,11400
+\def\page{\x7fpage\x01343,11464
+\def\exdent{\x7fexdent\x01353,11791
+\def\exdentyyy #1{\x7fexdentyyy\x01354,11824
+\def\nofillexdent{\x7fnofillexdent\x01357,11968
+\def\nofillexdentyyy #1{\x7fnofillexdentyyy\x01358,12013
+\def\include{\x7finclude\x01365,12197
+\def\includezzz #1{\x7fincludezzz\x01366,12232
+\def\includezzz #1{{\def\thisfile{\x7fthisfile\x01366,12232
+\def\thisfile{\x7fthisfile\x01369,12283
+\def\center{\x7fcenter\x01373,12346
+\def\centerzzz #1{\x7fcenterzzz\x01374,12379
+\def\sp{\x7fsp\x01380,12521
+\def\spxxx #1{\x7fspxxx\x01381,12546
+\def\comment{\x7fcomment\x01387,12720
+\def\commentxxx #1{\x7fcommentxxx\x01390,12817
+\let\c=\comment\x7fc\x01392,12883
+\def\ignoresections{\x7fignoresections\x01396,12986
+\let\chapter=\relax\x7fchapter\x01397,13008
+\let\unnumbered=\relax\x7funnumbered\x01398,13028
+\let\top=\relax\x7ftop\x01399,13051
+\let\unnumberedsec=\relax\x7funnumberedsec\x01400,13067
+\let\unnumberedsection=\relax\x7funnumberedsection\x01401,13093
+\let\unnumberedsubsec=\relax\x7funnumberedsubsec\x01402,13123
+\let\unnumberedsubsection=\relax\x7funnumberedsubsection\x01403,13152
+\let\unnumberedsubsubsec=\relax\x7funnumberedsubsubsec\x01404,13185
+\let\unnumberedsubsubsection=\relax\x7funnumberedsubsubsection\x01405,13217
+\let\section=\relax\x7fsection\x01406,13253
+\let\subsec=\relax\x7fsubsec\x01407,13273
+\let\subsubsec=\relax\x7fsubsubsec\x01408,13292
+\let\subsection=\relax\x7fsubsection\x01409,13314
+\let\subsubsection=\relax\x7fsubsubsection\x01410,13337
+\let\appendix=\relax\x7fappendix\x01411,13363
+\let\appendixsec=\relax\x7fappendixsec\x01412,13384
+\let\appendixsection=\relax\x7fappendixsection\x01413,13408
+\let\appendixsubsec=\relax\x7fappendixsubsec\x01414,13436
+\let\appendixsubsection=\relax\x7fappendixsubsection\x01415,13463
+\let\appendixsubsubsec=\relax\x7fappendixsubsubsec\x01416,13494
+\let\appendixsubsubsection=\relax\x7fappendixsubsubsection\x01417,13524
+\let\contents=\relax\x7fcontents\x01418,13558
+\let\smallbook=\relax\x7fsmallbook\x01419,13579
+\let\titlepage=\relax\x7ftitlepage\x01420,13601
+\def\ignore{\x7fignore\x01423,13626
+\long\def\ignorexxx #1\end ignore{\x7fignorexxx\x01427,13766
+\def\direntry{\x7fdirentry\x01429,13825
+\long\def\direntryxxx #1\end direntry{\x7fdirentryxxx\x01430,13864
+\def\ifset{\x7fifset\x01434,13974
+\def\ifsetxxx #1{\x7fifsetxxx\x01436,14032
+\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\ifsetfail\x7ftemp\x01437,14059
+\else \let\temp=\relax \fi\x7ftemp\x01438,14125
+\def\Eifset{\x7fEifset\x01440,14159
+\def\ifsetfail{\x7fifsetfail\x01441,14173
+\long\def\ifsetfailxxx #1\end ifset{\x7fifsetfailxxx\x01442,14229
+\def\ifclear{\x7fifclear\x01444,14290
+\def\ifclearxxx #1{\x7fifclearxxx\x01446,14352
+\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\relax\x7ftemp\x01447,14381
+\else \let\temp=\ifclearfail \fi\x7ftemp\x01448,14443
+\def\Eifclear{\x7fEifclear\x01450,14483
+\def\ifclearfail{\x7fifclearfail\x01451,14499
+\long\def\ifclearfailxxx #1\end ifclear{\x7fifclearfailxxx\x01452,14559
+\def\set{\x7fset\x01456,14710
+\def\setxxx #1{\x7fsetxxx\x01457,14737
+\expandafter\let\csname IF#1\endcsname=\set}\x7fcsname\x01458,14753
+\def\clear{\x7fclear\x01460,14799
+\def\clearxxx #1{\x7fclearxxx\x01461,14830
+\expandafter\let\csname IF#1\endcsname=\relax}\x7fcsname\x01462,14848
+\def\iftex{\x7fiftex\x01466,14947
+\def\Eiftex{\x7fEiftex\x01467,14960
+\def\ifinfo{\x7fifinfo\x01468,14974
+\long\def\ifinfoxxx #1\end ifinfo{\x7fifinfoxxx\x01469,15024
+\long\def\menu #1\end menu{\x7fmenu\x01471,15083
+\def\asis#1{\x7fasis\x01472,15112
+\let\implicitmath = $\x7fimplicitmath\x01484,15633
+\def\math#1{\x7fmath\x01485,15655
+\def\node{\x7fnode\x01487,15699
+\def\nodezzz#1{\x7fnodezzz\x01488,15737
+\def\nodexxx[#1,#2]{\x7fnodexxx\x01489,15768
+\def\nodexxx[#1,#2]{\gdef\lastnode{\x7flastnode\x01489,15768
+\let\lastnode=\relax\x7flastnode\x01490,15808
+\def\donoderef{\x7fdonoderef\x01492,15830
+\let\lastnode=\relax}\x7flastnode\x01494,15928
+\def\unnumbnoderef{\x7funnumbnoderef\x01496,15951
+\let\lastnode=\relax}\x7flastnode\x01498,16059
+\def\appendixnoderef{\x7fappendixnoderef\x01500,16082
 \expandafter\expandafter\expandafter\appendixsetref{\x7fsetref\x01501,16128
-\let\refill=\relax\x7fill=\relax\x01504,16217
-\def\setfilename{\x7f\setfilename\x01509,16431
-\outer\def\bye{\x7f\bye\x01518,16677
-\def\inforef #1{\x7f\inforef\x01520,16733
-\def\inforefzzz #1,#2,#3,#4**{\x7f\inforefzzz\x01521,16771
-\def\losespace #1{\x7f\losespace\x01523,16868
-\def\sf{\x7f\sf\x01532,17072
-\font\defbf=cmbx10 scaled \magstep1 %was 1314\x7fbf=cmbx10\x01558,17867
-\font\deftt=cmtt10 scaled \magstep1\x7ftt=cmtt10\x01559,17913
-\def\df{\x7f\df\x01560,17949
-\def\resetmathfonts{\x7f\resetmathfonts\x01635,20543
-\def\textfonts{\x7f\textfonts\x01648,21132
-\def\chapfonts{\x7f\chapfonts\x01653,21347
-\def\secfonts{\x7f\secfonts\x01658,21563
-\def\subsecfonts{\x7f\subsecfonts\x01663,21768
-\def\indexfonts{\x7f\indexfonts\x01668,21985
-\def\smartitalicx{\x7f\smartitalicx\x01691,22717
-\def\smartitalic#1{\x7f\smartitalic\x01692,22793
-\let\cite=\smartitalic\x7f=\smartitalic\x01698,22938
-\def\b#1{\x7f\b\x01700,22962
-\def\t#1{\x7f\t\x01703,22997
-\def\samp #1{\x7f\samp\x01706,23149
-\def\key #1{\x7f\key\x01707,23182
-\def\ctrl #1{\x7f\ctrl\x01708,23243
-\def\tclose#1{\x7f\tclose\x01716,23445
-\def\ {\x7f\\x01720,23611
-\def\xkey{\x7f\xkey\x01728,23880
-\def\kbdfoo#1#2#3\par{\x7f\kbdfoo\x01729,23896
-\def\dmn#1{\x7f\dmn\x01738,24197
-\def\kbd#1{\x7f\kbd\x01740,24224
-\def\l#1{\x7f\l\x01742,24281
-\def\r#1{\x7f\r\x01744,24310
-\def\sc#1{\x7f\sc\x01746,24378
-\def\ii#1{\x7f\ii\x01747,24421
-\def\titlefont#1{\x7f\titlefont\x01755,24654
-\def\titlepage{\x7f\titlepage\x01761,24757
-   \def\subtitlefont{\x7f\subtitlefont\x01766,24984
-   \def\authorfont{\x7f\authorfont\x01768,25068
-   \def\title{\x7f\title\x01774,25278
-   \def\titlezzz##1{\x7f\titlezzz\x01775,25313
-   \def\subtitle{\x7f\subtitle\x01783,25628
-   \def\subtitlezzz##1{\x7f\subtitlezzz\x01784,25669
-   \def\author{\x7f\author\x01787,25787
-   \def\authorzzz##1{\x7f\authorzzz\x01788,25824
-   \def\page{\x7f\page\x01794,26115
-\def\Etitlepage{\x7f\Etitlepage\x01804,26284
-\def\finishtitlepage{\x7f\finishtitlepage\x01817,26672
-\def\evenheading{\x7f\evenheading\x01846,27680
-\def\oddheading{\x7f\oddheading\x01847,27723
-\def\everyheading{\x7f\everyheading\x01848,27764
-\def\evenfooting{\x7f\evenfooting\x01850,27810
-\def\oddfooting{\x7f\oddfooting\x01851,27853
-\def\everyfooting{\x7f\everyfooting\x01852,27894
-\def\headings #1 {\x7f\headings\x01893,29586
-\def\HEADINGSoff{\x7f\HEADINGSoff\x01895,29635
-\def\HEADINGSdouble{\x7f\HEADINGSdouble\x01904,30062
-\def\HEADINGSsingle{\x7f\HEADINGSsingle\x01914,30382
-\def\HEADINGSon{\x7f\HEADINGSon\x01922,30603
-\def\HEADINGSafter{\x7f\HEADINGSafter\x01924,30637
-\def\HEADINGSdoublex{\x7f\HEADINGSdoublex\x01926,30732
-\def\HEADINGSsingleafter{\x7f\HEADINGSsingleafter\x01933,30920
-\def\HEADINGSsinglex{\x7f\HEADINGSsinglex\x01934,30981
-\def\today{\x7f\today\x01943,31256
-\def\thistitle{\x7f\thistitle\x01958,31801
-\def\settitle{\x7f\settitle\x01959,31826
-\def\settitlezzz #1{\x7f\settitlezzz\x01960,31863
-\def\internalBitem{\x7f\internalBitem\x01992,32793
-\def\internalBitemx{\x7f\internalBitemx\x01993,32843
-\def\internalBxitem "#1"{\x7f\internalBxitem\x01995,32888
-\def\internalBxitemx "#1"{\x7f\internalBxitemx\x01996,32968
-\def\internalBkitem{\x7f\internalBkitem\x01998,33043
-\def\internalBkitemx{\x7f\internalBkitemx\x01999,33095
-\def\kitemzzz #1{\x7f\kitemzzz\x011001,33142
-\def\xitemzzz #1{\x7f\xitemzzz\x011004,33244
-\def\itemzzz #1{\x7f\itemzzz\x011007,33347
-\def\item{\x7f\item\x011037,34418
-\def\itemx{\x7f\itemx\x011038,34469
-\def\kitem{\x7f\kitem\x011039,34522
-\def\kitemx{\x7f\kitemx\x011040,34575
-\def\xitem{\x7f\xitem\x011041,34630
-\def\xitemx{\x7f\xitemx\x011042,34683
-\def\description{\x7f\description\x011045,34793
-\def\table{\x7f\table\x011047,34843
-\def\ftable{\x7f\ftable\x011052,34987
-\def\Eftable{\x7f\Eftable\x011056,35133
-\def\vtable{\x7f\vtable\x011059,35202
-\def\Evtable{\x7f\Evtable\x011063,35348
-\def\dontindex #1{\x7f\dontindex\x011066,35417
-\def\fnitemindex #1{\x7f\fnitemindex\x011067,35437
-\def\vritemindex #1{\x7f\vritemindex\x011068,35482
-\def\tablez #1#2#3#4#5#6{\x7f\tablez\x011074,35631
-\def\Edescription{\x7f\Edescription\x011077,35689
-\def\itemfont{\x7f\itemfont\x011082,35890
-\def\Etable{\x7f\Etable\x011090,36116
-\def\itemize{\x7f\itemize\x011103,36440
-\def\itemizezzz #1{\x7f\itemizezzz\x011105,36476
-\def\itemizey #1#2{\x7f\itemizey\x011110,36571
-\def#2{\x7f1119,36817
-\def\itemcontents{\x7f\itemcontents\x011120,36858
-\def\bullet{\x7f\bullet\x011123,36906
-\def\minus{\x7f\minus\x011124,36933
-\def\frenchspacing{\x7f\frenchspacing\x011128,37041
-\def\splitoff#1#2\endmark{\x7f\splitoff\x011134,37266
-\def\enumerate{\x7f\enumerate\x011140,37496
-\def\enumeratezzz #1{\x7f\enumeratezzz\x011141,37535
-\def\enumeratey #1 #2\endenumeratey{\x7f\enumeratey\x011142,37588
-  \def\thearg{\x7f\thearg\x011146,37735
-  \ifx\thearg\empty \def\thearg{\x7f\thearg\x011147,37754
-\def\numericenumerate{\x7f\numericenumerate\x011184,39088
-\def\lowercaseenumerate{\x7f\lowercaseenumerate\x011190,39218
-\def\uppercaseenumerate{\x7f\uppercaseenumerate\x011203,39565
-\def\startenumeration#1{\x7f\startenumeration\x011219,40055
-\def\alphaenumerate{\x7f\alphaenumerate\x011227,40237
-\def\capsenumerate{\x7f\capsenumerate\x011228,40272
-\def\Ealphaenumerate{\x7f\Ealphaenumerate\x011229,40306
-\def\Ecapsenumerate{\x7f\Ecapsenumerate\x011230,40340
-\def\itemizeitem{\x7f\itemizeitem\x011234,40420
-\def\newindex #1{\x7f\newindex\x011259,41277
-\def\defindex{\x7f\defindex\x011268,41566
-\def\newcodeindex #1{\x7f\newcodeindex\x011272,41674
-\def\defcodeindex{\x7f\defcodeindex\x011279,41934
-\def\synindex #1 #2 {\x7f\synindex\x011283,42114
-\def\syncodeindex #1 #2 {\x7f\syncodeindex\x011292,42454
-\def\doindex#1{\x7f\doindex\x011309,43133
-\def\singleindexer #1{\x7f\singleindexer\x011310,43192
-\def\docodeindex#1{\x7f\docodeindex\x011313,43304
-\def\singlecodeindexer #1{\x7f\singlecodeindexer\x011314,43371
-\def\indexdummies{\x7f\indexdummies\x011316,43429
-\def\_{\x7f\_\x011317,43449
-\def\w{\x7f\w\x011318,43477
-\def\bf{\x7f\bf\x011319,43504
-\def\rm{\x7f\rm\x011320,43533
-\def\sl{\x7f\sl\x011321,43562
-\def\sf{\x7f\sf\x011322,43591
-\def\tt{\x7f\tt\x011323,43619
-\def\gtr{\x7f\gtr\x011324,43647
-\def\less{\x7f\less\x011325,43677
-\def\hat{\x7f\hat\x011326,43709
-\def\char{\x7f\char\x011327,43739
-\def\TeX{\x7f\TeX\x011328,43771
-\def\dots{\x7f\dots\x011329,43801
-\def\copyright{\x7f\copyright\x011330,43834
-\def\tclose##1{\x7f\tclose\x011331,43877
-\def\code##1{\x7f\code\x011332,43922
-\def\samp##1{\x7f\samp\x011333,43963
-\def\t##1{\x7f\t\x011334,44004
-\def\r##1{\x7f\r\x011335,44039
-\def\i##1{\x7f\i\x011336,44074
-\def\b##1{\x7f\b\x011337,44109
-\def\cite##1{\x7f\cite\x011338,44144
-\def\key##1{\x7f\key\x011339,44185
-\def\file##1{\x7f\file\x011340,44224
-\def\var##1{\x7f\var\x011341,44265
-\def\kbd##1{\x7f\kbd\x011342,44304
-\def\indexdummyfont#1{\x7f\indexdummyfont\x011347,44460
-\def\indexdummytex{\x7f\indexdummytex\x011348,44486
-\def\indexdummydots{\x7f\indexdummydots\x011349,44510
-\def\indexnofonts{\x7f\indexnofonts\x011351,44536
+\let\lastnode=\relax}\x7flastnode\x01502,16194
+\let\refill=\relax\x7frefill\x01504,16217
+\def\setfilename{\x7fsetfilename\x01509,16431
+   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.\x7fsetfilename\x01514,16562
+\outer\def\bye{\x7fbye\x01518,16677
+\def\inforef #1{\x7finforef\x01520,16733
+\def\inforefzzz #1,#2,#3,#4**{\x7finforefzzz\x01521,16771
+\def\losespace #1{\x7flosespace\x01523,16868
+\def\sf{\x7fsf\x01532,17072
+\let\li = \sf % Sometimes we call it \li, not \sf.\x7fli\x01533,17100
+\let\mainmagstep=\magstephalf\x7fmainmagstep\x01536,17201
+\let\mainmagstep=\magstep1\x7fmainmagstep\x01539,17250
+\font\defbf=cmbx10 scaled \magstep1 %was 1314\x7fbf\x01558,17867
+\font\deftt=cmtt10 scaled \magstep1\x7ftt\x01559,17913
+\def\df{\x7fdf\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftentt\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftt\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftenbf\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7fbf\x01560,17949
+\let\indsl=\indit\x7findsl\x01570,18310
+\let\indtt=\ninett\x7findtt\x01571,18328
+\let\indsf=\indrm\x7findsf\x01572,18347
+\let\indbf=\indrm\x7findbf\x01573,18365
+\let\indsc=\indrm\x7findsc\x01574,18383
+\let\chapbf=\chaprm\x7fchapbf\x01584,18643
+\let\authorrm = \secrm\x7fauthorrm\x01627,20193
+\def\resetmathfonts{\x7fresetmathfonts\x01635,20543
+\def\textfonts{\x7ftextfonts\x01648,21132
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftenrm\x01649,21149
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftenit\x01649,21149
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftensl\x01649,21149
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7ftenbf\x01650,21208
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7ftentt\x01650,21208
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7fsmallcaps\x01650,21208
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7ftensf\x01651,21271
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7fteni\x01651,21271
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7ftensy\x01651,21271
+\def\chapfonts{\x7fchapfonts\x01653,21347
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftenrm\x01654,21364
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftenit\x01654,21364
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftensl\x01654,21364
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7ftenbf\x01655,21424
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7ftentt\x01655,21424
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7fsmallcaps\x01655,21424
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7ftensf\x01656,21487
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7fteni\x01656,21487
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7ftensy\x01656,21487
+\def\secfonts{\x7fsecfonts\x01658,21563
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftenrm\x01659,21579
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftenit\x01659,21579
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftensl\x01659,21579
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7ftenbf\x01660,21635
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7ftentt\x01660,21635
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7fsmallcaps\x01660,21635
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7ftensf\x01661,21695
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7fteni\x01661,21695
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7ftensy\x01661,21695
+\def\subsecfonts{\x7fsubsecfonts\x01663,21768
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftenrm\x01664,21787
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftenit\x01664,21787
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftensl\x01664,21787
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7ftenbf\x01665,21846
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7ftentt\x01665,21846
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7fsmallcaps\x01665,21846
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7ftensf\x01666,21909
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7fteni\x01666,21909
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7ftensy\x01666,21909
+\def\indexfonts{\x7findexfonts\x01668,21985
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftenrm\x01669,22003
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftenit\x01669,22003
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftensl\x01669,22003
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7ftenbf\x01670,22059
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7ftentt\x01670,22059
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7fsmallcaps\x01670,22059
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7ftensf\x01671,22119
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7fteni\x01671,22119
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7ftensy\x01671,22119
+\def\smartitalicx{\x7fsmartitalicx\x01691,22717
+\def\smartitalic#1{\x7fsmartitalic\x01692,22793
+\let\i=\smartitalic\x7fi\x01694,22851
+\let\var=\smartitalic\x7fvar\x01695,22871
+\let\dfn=\smartitalic\x7fdfn\x01696,22893
+\let\emph=\smartitalic\x7femph\x01697,22915
+\let\cite=\smartitalic\x7fcite\x01698,22938
+\def\b#1{\x7fb\x01700,22962
+\let\strong=\b\x7fstrong\x01701,22981
+\def\t#1{\x7ft\x01703,22997
+\let\ttfont = \t\x7fttfont\x01704,23072
+\def\samp #1{\x7fsamp\x01706,23149
+\def\key #1{\x7fkey\x01707,23182
+\def\ctrl #1{\x7fctrl\x01708,23243
+\let\file=\samp\x7ffile\x01710,23285
+\def\tclose#1{\x7ftclose\x01716,23445
+\let\code=\tclose\x7fcode\x01722,23722
+\def\xkey{\x7fxkey\x01728,23880
+\def\kbdfoo#1#2#3\par{\x7fkbdfoo\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{\x7fone\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{\x7fthree\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{\x7fthreex\x01729,23896
+\def\dmn#1{\x7fdmn\x01738,24197
+\def\kbd#1{\x7fkbd\x01740,24224
+\def\kbd#1{\def\look{\x7flook\x01740,24224
+\def\l#1{\x7fl\x01742,24281
+\def\r#1{\x7fr\x01744,24310
+\def\sc#1{\x7fsc\x01746,24378
+\def\ii#1{\x7fii\x01747,24421
+\def\titlefont#1{\x7ftitlefont\x01755,24654
+\def\titlepage{\x7ftitlepage\x01761,24757
+   \let\subtitlerm=\tenrm\x7fsubtitlerm\x01762,24810
+   \def\subtitlefont{\x7fsubtitlefont\x01766,24984
+   \def\authorfont{\x7fauthorfont\x01768,25068
+   \def\title{\x7ftitle\x01774,25278
+   \def\titlezzz##1{\x7ftitlezzz\x01775,25313
+   \def\subtitle{\x7fsubtitle\x01783,25628
+   \def\subtitlezzz##1{\x7fsubtitlezzz\x01784,25669
+   \def\author{\x7fauthor\x01787,25787
+   \def\authorzzz##1{\x7fauthorzzz\x01788,25824
+   \let\oldpage = \page\x7foldpage\x01793,26091
+   \def\page{\x7fpage\x01794,26115
+      \let\page = \oldpage\x7fpage\x01799,26206
+\def\Etitlepage{\x7fEtitlepage\x01804,26284
+\def\finishtitlepage{\x7ffinishtitlepage\x01817,26672
+\let\thispage=\folio\x7fthispage\x01825,26825
+\let\HEADINGShook=\relax\x7fHEADINGShook\x01837,27420
+\def\evenheading{\x7fevenheading\x01846,27680
+\def\oddheading{\x7foddheading\x01847,27723
+\def\everyheading{\x7feveryheading\x01848,27764
+\def\evenfooting{\x7fevenfooting\x01850,27810
+\def\oddfooting{\x7foddfooting\x01851,27853
+\def\everyfooting{\x7feveryfooting\x01852,27894
+\gdef\evenheadingxxx #1{\x7fevenheadingxxx\x01856,27958
+\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{\x7fevenheadingyyy\x01857,28017
+\gdef\oddheadingxxx #1{\x7foddheadingxxx\x01860,28126
+\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{\x7foddheadingyyy\x01861,28183
+\gdef\everyheadingxxx #1{\x7feveryheadingxxx\x01864,28290
+\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{\x7feveryheadingyyy\x01865,28351
+\gdef\evenfootingxxx #1{\x7fevenfootingxxx\x01869,28522
+\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{\x7fevenfootingyyy\x01870,28581
+\gdef\oddfootingxxx #1{\x7foddfootingxxx\x01873,28690
+\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{\x7foddfootingyyy\x01874,28747
+\gdef\everyfootingxxx #1{\x7feveryfootingxxx\x01877,28854
+\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{\x7feveryfootingyyy\x01878,28915
+\def\headings #1 {\x7fheadings\x01893,29586
+\def\HEADINGSoff{\x7fHEADINGSoff\x01895,29635
+\def\HEADINGSdouble{\x7fHEADINGSdouble\x01904,30062
+\def\HEADINGSsingle{\x7fHEADINGSsingle\x01914,30382
+\def\HEADINGSon{\x7fHEADINGSon\x01922,30603
+\def\HEADINGSafter{\x7fHEADINGSafter\x01924,30637
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}\x7fHEADINGShook\x01924,30637
+\let\HEADINGSdoubleafter=\HEADINGSafter\x7fHEADINGSdoubleafter\x01925,30692
+\def\HEADINGSdoublex{\x7fHEADINGSdoublex\x01926,30732
+\def\HEADINGSsingleafter{\x7fHEADINGSsingleafter\x01933,30920
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}\x7fHEADINGShook\x01933,30920
+\def\HEADINGSsinglex{\x7fHEADINGSsinglex\x01934,30981
+\def\today{\x7ftoday\x01943,31256
+\def\thistitle{\x7fthistitle\x01958,31801
+\def\settitle{\x7fsettitle\x01959,31826
+\def\settitlezzz #1{\x7fsettitlezzz\x01960,31863
+\def\settitlezzz #1{\gdef\thistitle{\x7fthistitle\x01960,31863
+\def\internalBitem{\x7finternalBitem\x01992,32793
+\def\internalBitemx{\x7finternalBitemx\x01993,32843
+\def\internalBxitem "#1"{\x7finternalBxitem\x01995,32888
+\def\internalBxitem "#1"{\def\xitemsubtopix{\x7fxitemsubtopix\x01995,32888
+\def\internalBxitemx "#1"{\x7finternalBxitemx\x01996,32968
+\def\internalBxitemx "#1"{\def\xitemsubtopix{\x7fxitemsubtopix\x01996,32968
+\def\internalBkitem{\x7finternalBkitem\x01998,33043
+\def\internalBkitemx{\x7finternalBkitemx\x01999,33095
+\def\kitemzzz #1{\x7fkitemzzz\x011001,33142
+\def\xitemzzz #1{\x7fxitemzzz\x011004,33244
+\def\itemzzz #1{\x7fitemzzz\x011007,33347
+\def\item{\x7fitem\x011037,34418
+\def\itemx{\x7fitemx\x011038,34469
+\def\kitem{\x7fkitem\x011039,34522
+\def\kitemx{\x7fkitemx\x011040,34575
+\def\xitem{\x7fxitem\x011041,34630
+\def\xitemx{\x7fxitemx\x011042,34683
+\def\description{\x7fdescription\x011045,34793
+\def\table{\x7ftable\x011047,34843
+\gdef\tablex #1^^M{\x7ftablex\x011049,34925
+\def\ftable{\x7fftable\x011052,34987
+\gdef\ftablex #1^^M{\x7fftablex\x011054,35071
+\def\Eftable{\x7fEftable\x011056,35133
+\let\Etable=\relax}\x7fEtable\x011057,35180
+\def\vtable{\x7fvtable\x011059,35202
+\gdef\vtablex #1^^M{\x7fvtablex\x011061,35286
+\def\Evtable{\x7fEvtable\x011063,35348
+\let\Etable=\relax}\x7fEtable\x011064,35395
+\def\dontindex #1{\x7fdontindex\x011066,35417
+\def\fnitemindex #1{\x7ffnitemindex\x011067,35437
+\def\vritemindex #1{\x7fvritemindex\x011068,35482
+\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\x7ftabley\x011071,35543
+\def\tablez #1#2#3#4#5#6{\x7ftablez\x011074,35631
+\def\Edescription{\x7fEdescription\x011077,35689
+\let\itemindex=#1%\x7fitemindex\x011078,35735
+\def\itemfont{\x7fitemfont\x011082,35890
+\def\Etable{\x7fEtable\x011090,36116
+\let\item = \internalBitem %\x7fitem\x011091,36162
+\let\itemx = \internalBitemx %\x7fitemx\x011092,36191
+\let\kitem = \internalBkitem %\x7fkitem\x011093,36222
+\let\kitemx = \internalBkitemx %\x7fkitemx\x011094,36253
+\let\xitem = \internalBxitem %\x7fxitem\x011095,36286
+\let\xitemx = \internalBxitemx %\x7fxitemx\x011096,36317
+\def\itemize{\x7fitemize\x011103,36440
+\def\itemizezzz #1{\x7fitemizezzz\x011105,36476
+\def\itemizey #1#2{\x7fitemizey\x011110,36571
+\def\itemcontents{\x7fitemcontents\x011120,36858
+\let\item=\itemizeitem}\x7fitem\x011121,36881
+\def\bullet{\x7fbullet\x011123,36906
+\def\minus{\x7fminus\x011124,36933
+\def\frenchspacing{\x7ffrenchspacing\x011128,37041
+\def\splitoff#1#2\endmark{\x7fsplitoff\x011134,37266
+\def\splitoff#1#2\endmark{\def\first{\x7ffirst\x011134,37266
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{\x7frest\x011134,37266
+\def\enumerate{\x7fenumerate\x011140,37496
+\def\enumeratezzz #1{\x7fenumeratezzz\x011141,37535
+\def\enumeratey #1 #2\endenumeratey{\x7fenumeratey\x011142,37588
+  \def\thearg{\x7fthearg\x011146,37735
+  \ifx\thearg\empty \def\thearg{\x7fthearg\x011147,37754
+\def\numericenumerate{\x7fnumericenumerate\x011184,39088
+\def\lowercaseenumerate{\x7flowercaseenumerate\x011190,39218
+\def\uppercaseenumerate{\x7fuppercaseenumerate\x011203,39565
+\def\startenumeration#1{\x7fstartenumeration\x011219,40055
+\def\alphaenumerate{\x7falphaenumerate\x011227,40237
+\def\capsenumerate{\x7fcapsenumerate\x011228,40272
+\def\Ealphaenumerate{\x7fEalphaenumerate\x011229,40306
+\def\Ecapsenumerate{\x7fEcapsenumerate\x011230,40340
+\def\itemizeitem{\x7fitemizeitem\x011234,40420
+{\let\par=\endgraf \smallbreak}\x7fpar\x011236,40460
+\gdef\newwrite{\x7fnewwrite\x011249,40841
+\def\newindex #1{\x7fnewindex\x011259,41277
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011262,41439
+\def\defindex{\x7fdefindex\x011268,41566
+\def\newcodeindex #1{\x7fnewcodeindex\x011272,41674
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011275,41840
+\def\defcodeindex{\x7fdefcodeindex\x011279,41934
+\def\synindex #1 #2 {\x7fsynindex\x011283,42114
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname\x7fexpandafter\x011284,42137
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo\x7fcsname\x011285,42217
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011286,42273
+\def\syncodeindex #1 #2 {\x7fsyncodeindex\x011292,42454
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname\x7fexpandafter\x011293,42481
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo\x7fcsname\x011294,42561
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011295,42617
+\def\doindex#1{\x7fdoindex\x011309,43133
+\def\doindex#1{\edef\indexname{\x7findexname\x011309,43133
+\def\singleindexer #1{\x7fsingleindexer\x011310,43192
+\def\singleindexer #1{\doind{\indexname}\x7fname\x011310,43192
+\def\docodeindex#1{\x7fdocodeindex\x011313,43304
+\def\docodeindex#1{\edef\indexname{\x7findexname\x011313,43304
+\def\singlecodeindexer #1{\x7fsinglecodeindexer\x011314,43371
+\def\singlecodeindexer #1{\doind{\indexname}\x7fname\x011314,43371
+\def\indexdummies{\x7findexdummies\x011316,43429
+\def\_{\x7f_\x011317,43449
+\def\w{\x7fw\x011318,43477
+\def\bf{\x7fbf\x011319,43504
+\def\rm{\x7frm\x011320,43533
+\def\sl{\x7fsl\x011321,43562
+\def\sf{\x7fsf\x011322,43591
+\def\tt{\x7ftt\x011323,43619
+\def\gtr{\x7fgtr\x011324,43647
+\def\less{\x7fless\x011325,43677
+\def\hat{\x7fhat\x011326,43709
+\def\char{\x7fchar\x011327,43739
+\def\TeX{\x7fTeX\x011328,43771
+\def\dots{\x7fdots\x011329,43801
+\def\copyright{\x7fcopyright\x011330,43834
+\def\tclose##1{\x7ftclose\x011331,43877
+\def\code##1{\x7fcode\x011332,43922
+\def\samp##1{\x7fsamp\x011333,43963
+\def\t##1{\x7ft\x011334,44004
+\def\r##1{\x7fr\x011335,44039
+\def\i##1{\x7fi\x011336,44074
+\def\b##1{\x7fb\x011337,44109
+\def\cite##1{\x7fcite\x011338,44144
+\def\key##1{\x7fkey\x011339,44185
+\def\file##1{\x7ffile\x011340,44224
+\def\var##1{\x7fvar\x011341,44265
+\def\kbd##1{\x7fkbd\x011342,44304
+\def\indexdummyfont#1{\x7findexdummyfont\x011347,44460
+\def\indexdummytex{\x7findexdummytex\x011348,44486
+\def\indexdummydots{\x7findexdummydots\x011349,44510
+\def\indexnofonts{\x7findexnofonts\x011351,44536
+\let\w=\indexdummyfont\x7fw\x011352,44556
 \let\w=\indexdummyfont\x7fdummyfont\x011352,44556
+\let\t=\indexdummyfont\x7ft\x011353,44579
 \let\t=\indexdummyfont\x7fdummyfont\x011353,44579
+\let\r=\indexdummyfont\x7fr\x011354,44602
 \let\r=\indexdummyfont\x7fdummyfont\x011354,44602
+\let\i=\indexdummyfont\x7fi\x011355,44625
 \let\i=\indexdummyfont\x7fdummyfont\x011355,44625
+\let\b=\indexdummyfont\x7fb\x011356,44648
 \let\b=\indexdummyfont\x7fdummyfont\x011356,44648
+\let\emph=\indexdummyfont\x7femph\x011357,44671
 \let\emph=\indexdummyfont\x7fdummyfont\x011357,44671
+\let\strong=\indexdummyfont\x7fstrong\x011358,44697
 \let\strong=\indexdummyfont\x7fdummyfont\x011358,44697
-\let\cite=\indexdummyfont\x7f=\indexdummyfont\x011359,44725
+\let\cite=\indexdummyfont\x7fcite\x011359,44725
+\let\cite=\indexdummyfont\x7fdummyfont\x011359,44725
+\let\sc=\indexdummyfont\x7fsc\x011360,44751
 \let\sc=\indexdummyfont\x7fdummyfont\x011360,44751
+\let\tclose=\indexdummyfont\x7ftclose\x011364,44923
 \let\tclose=\indexdummyfont\x7fdummyfont\x011364,44923
+\let\code=\indexdummyfont\x7fcode\x011365,44951
 \let\code=\indexdummyfont\x7fdummyfont\x011365,44951
+\let\file=\indexdummyfont\x7ffile\x011366,44977
 \let\file=\indexdummyfont\x7fdummyfont\x011366,44977
+\let\samp=\indexdummyfont\x7fsamp\x011367,45003
 \let\samp=\indexdummyfont\x7fdummyfont\x011367,45003
+\let\kbd=\indexdummyfont\x7fkbd\x011368,45029
 \let\kbd=\indexdummyfont\x7fdummyfont\x011368,45029
+\let\key=\indexdummyfont\x7fkey\x011369,45054
 \let\key=\indexdummyfont\x7fdummyfont\x011369,45054
+\let\var=\indexdummyfont\x7fvar\x011370,45079
 \let\var=\indexdummyfont\x7fdummyfont\x011370,45079
+\let\TeX=\indexdummytex\x7fTeX\x011371,45104
 \let\TeX=\indexdummytex\x7fdummytex\x011371,45104
+\let\dots=\indexdummydots\x7fdots\x011372,45128
 \let\dots=\indexdummydots\x7fdummydots\x011372,45128
-\let\indexbackslash=0  %overridden during \printindex.\x7fbackslash=0\x011382,45380
-\def\doind #1#2{\x7f\doind\x011384,45436
+\let\indexbackslash=0  %overridden during \printindex.\x7findexbackslash\x011382,45380
+\def\doind #1#2{\x7fdoind\x011384,45436
 {\indexdummies % Must do this here, since \bf, etc expand at this stage\x7fdummies\x011386,45479
-\def\rawbackslashxx{\x7f\rawbackslashxx\x011389,45619
+{\let\folio=0% Expand all macros now EXCEPT \folio\x7ffolio\x011388,45568
+\def\rawbackslashxx{\x7frawbackslashxx\x011389,45619
+\def\rawbackslashxx{\indexbackslash}\x7fbackslash\x011389,45619
 {\indexnofonts\x7fnofonts\x011394,45881
-\def\dosubind #1#2#3{\x7f\dosubind\x011405,46192
+\xdef\temp1{\x7ftemp1\x011395,45896
+\edef\temp{\x7ftemp\x011399,46068
+\def\dosubind #1#2#3{\x7fdosubind\x011405,46192
 {\indexdummies % Must do this here, since \bf, etc expand at this stage\x7fdummies\x011407,46240
-\def\rawbackslashxx{\x7f\rawbackslashxx\x011410,46344
+{\let\folio=0%\x7ffolio\x011409,46329
+\def\rawbackslashxx{\x7frawbackslashxx\x011410,46344
+\def\rawbackslashxx{\indexbackslash}\x7fbackslash\x011410,46344
 {\indexnofonts\x7fnofonts\x011414,46498
-\def\findex {\x7f\findex\x011443,47429
-\def\kindex {\x7f\kindex\x011444,47452
-\def\cindex {\x7f\cindex\x011445,47475
-\def\vindex {\x7f\vindex\x011446,47498
-\def\tindex {\x7f\tindex\x011447,47521
-\def\pindex {\x7f\pindex\x011448,47544
-\def\cindexsub {\x7f\cindexsub\x011450,47568
-\def\printindex{\x7f\printindex\x011462,47895
-\def\doprintindex#1{\x7f\doprintindex\x011464,47936
-  \def\indexbackslash{\x7f\indexbackslash\x011481,48421
+\xdef\temp1{\x7ftemp1\x011415,46513
+\edef\temp{\x7ftemp\x011419,46688
+\def\findex {\x7ffindex\x011443,47429
+\def\kindex {\x7fkindex\x011444,47452
+\def\cindex {\x7fcindex\x011445,47475
+\def\vindex {\x7fvindex\x011446,47498
+\def\tindex {\x7ftindex\x011447,47521
+\def\pindex {\x7fpindex\x011448,47544
+\def\cindexsub {\x7fcindexsub\x011450,47568
+\gdef\cindexsub "#1" #2^^M{\x7fcindexsub\x011452,47631
+\def\printindex{\x7fprintindex\x011462,47895
+\def\doprintindex#1{\x7fdoprintindex\x011464,47936
+  \def\indexbackslash{\x7findexbackslash\x011481,48421
   \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt\x7ffonts\rm\x011482,48460
-\def\initial #1{\x7f\initial\x011517,49532
-\def\entry #1#2{\x7f\entry\x011523,49739
+\def\initial #1{\x7finitial\x011517,49532
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7ftentt\x011518,49550
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7ftt\x011518,49550
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7fsf\x011518,49550
+\def\entry #1#2{\x7fentry\x011523,49739
   \null\nobreak\indexdotfill % Have leaders before the page number.\x7fdotfill\x011540,50386
-\def\indexdotfill{\x7f\indexdotfill\x011549,50714
-\def\primary #1{\x7f\primary\x011552,50820
-\def\secondary #1#2{\x7f\secondary\x011556,50902
+\def\indexdotfill{\x7findexdotfill\x011549,50714
+\def\primary #1{\x7fprimary\x011552,50820
+\def\secondary #1#2{\x7fsecondary\x011556,50902
 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par\x7fdotfill\x011559,50984
 \newbox\partialpage\x7fialpage\x011566,51157
-\def\begindoublecolumns{\x7f\begindoublecolumns\x011572,51315
-  \output={\global\setbox\partialpage=\x7fialpage=\x011573,51351
-\def\enddoublecolumns{\x7f\enddoublecolumns\x011577,51539
-\def\doublecolumnout{\x7f\doublecolumnout\x011580,51624
+\def\begindoublecolumns{\x7fbegindoublecolumns\x011572,51315
+  \output={\global\setbox\partialpage=\x7fialpage\x011573,51351
+\def\enddoublecolumns{\x7fenddoublecolumns\x011577,51539
+\def\doublecolumnout{\x7fdoublecolumnout\x011580,51624
   \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage\x7fialpage\x011581,51693
-\def\pagesofar{\x7f\pagesofar\x011584,51871
-\def\balancecolumns{\x7f\balancecolumns\x011588,52108
+\def\pagesofar{\x7fpagesofar\x011584,51871
+\def\pagesofar{\unvbox\partialpage %\x7fialpage\x011584,51871
+\def\balancecolumns{\x7fbalancecolumns\x011588,52108
   \availdimen@=\pageheight \advance\availdimen@ by-\ht\partialpage\x7fialpage\x011594,52279
      \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage\x7fialpage\x011600,52540
 \newcount \appendixno  \appendixno = `\@\x7fno\x011627,53445
-\def\appendixletter{\x7f\appendixletter\x011628,53486
-\def\opencontents{\x7f\opencontents\x011632,53589
-\def\thischapter{\x7f\thischapter\x011637,53770
-\def\seccheck#1{\x7f\seccheck\x011638,53808
-\def\chapternofonts{\x7f\chapternofonts\x011643,53912
-\def\result{\x7f\result\x011646,53987
-\def\equiv{\x7f\equiv\x011647,54022
-\def\expansion{\x7f\expansion\x011648,54055
-\def\print{\x7f\print\x011649,54096
-\def\TeX{\x7f\TeX\x011650,54129
-\def\dots{\x7f\dots\x011651,54158
-\def\copyright{\x7f\copyright\x011652,54189
-\def\tt{\x7f\tt\x011653,54230
-\def\bf{\x7f\bf\x011654,54257
-\def\w{\x7f\w\x011655,54285
-\def\less{\x7f\less\x011656,54310
-\def\gtr{\x7f\gtr\x011657,54341
-\def\hat{\x7f\hat\x011658,54370
-\def\char{\x7f\char\x011659,54399
-\def\tclose##1{\x7f\tclose\x011660,54430
-\def\code##1{\x7f\code\x011661,54474
-\def\samp##1{\x7f\samp\x011662,54514
-\def\r##1{\x7f\r\x011663,54554
-\def\b##1{\x7f\b\x011664,54588
-\def\key##1{\x7f\key\x011665,54622
-\def\file##1{\x7f\file\x011666,54660
-\def\kbd##1{\x7f\kbd\x011667,54700
-\def\i##1{\x7f\i\x011669,54808
-\def\cite##1{\x7f\cite\x011670,54842
-\def\var##1{\x7f\var\x011671,54882
-\def\emph##1{\x7f\emph\x011672,54920
-\def\dfn##1{\x7f\dfn\x011673,54960
-\def\thischaptername{\x7f\thischaptername\x011676,55001
-\outer\def\chapter{\x7f\chapter\x011677,55040
-\def\chapterzzz #1{\x7f\chapterzzz\x011678,55081
-{\chapternofonts%\x7fnofonts%\x011687,55477
-\global\let\section = \numberedsec\x7f=\x011692,55630
-\global\let\subsection = \numberedsubsec\x7f=\x011693,55665
-\global\let\subsubsection = \numberedsubsubsec\x7f=\x011694,55706
-\outer\def\appendix{\x7f\appendix\x011697,55757
-\def\appendixzzz #1{\x7f\appendixzzz\x011698,55800
+\newcount \appendixno  \appendixno = `\@\x7fno\x011627,53445
+\def\appendixletter{\x7fappendixletter\x011628,53486
+\def\appendixletter{\char\the\appendixno}\x7fno\x011628,53486
+\def\opencontents{\x7fopencontents\x011632,53589
+\def\thischapter{\x7fthischapter\x011637,53770
+\def\thischapter{} \def\thissection{\x7fthissection\x011637,53770
+\def\seccheck#1{\x7fseccheck\x011638,53808
+\def\chapternofonts{\x7fchapternofonts\x011643,53912
+\let\rawbackslash=\relax%\x7frawbackslash\x011644,53934
+\let\frenchspacing=\relax%\x7ffrenchspacing\x011645,53960
+\def\result{\x7fresult\x011646,53987
+\def\equiv{\x7fequiv\x011647,54022
+\def\expansion{\x7fexpansion\x011648,54055
+\def\print{\x7fprint\x011649,54096
+\def\TeX{\x7fTeX\x011650,54129
+\def\dots{\x7fdots\x011651,54158
+\def\copyright{\x7fcopyright\x011652,54189
+\def\tt{\x7ftt\x011653,54230
+\def\bf{\x7fbf\x011654,54257
+\def\w{\x7fw\x011655,54285
+\def\less{\x7fless\x011656,54310
+\def\gtr{\x7fgtr\x011657,54341
+\def\hat{\x7fhat\x011658,54370
+\def\char{\x7fchar\x011659,54399
+\def\tclose##1{\x7ftclose\x011660,54430
+\def\code##1{\x7fcode\x011661,54474
+\def\samp##1{\x7fsamp\x011662,54514
+\def\r##1{\x7fr\x011663,54554
+\def\b##1{\x7fb\x011664,54588
+\def\key##1{\x7fkey\x011665,54622
+\def\file##1{\x7ffile\x011666,54660
+\def\kbd##1{\x7fkbd\x011667,54700
+\def\i##1{\x7fi\x011669,54808
+\def\cite##1{\x7fcite\x011670,54842
+\def\var##1{\x7fvar\x011671,54882
+\def\emph##1{\x7femph\x011672,54920
+\def\dfn##1{\x7fdfn\x011673,54960
+\def\thischaptername{\x7fthischaptername\x011676,55001
+\outer\def\chapter{\x7fchapter\x011677,55040
+\outer\def\chapter{\parsearg\chapterzzz}\x7fzzz\x011677,55040
+\def\chapterzzz #1{\x7fchapterzzz\x011678,55081
+\gdef\thissection{\x7fthissection\x011682,55246
+\gdef\thischaptername{\x7fthischaptername\x011683,55269
+\xdef\thischapter{\x7fthischapter\x011686,55410
+{\chapternofonts%\x7fnofonts\x011687,55477
+\edef\temp{\x7ftemp\x011688,55495
+\global\let\section = \numberedsec\x7fsection\x011692,55630
+\global\let\subsection = \numberedsubsec\x7fsubsection\x011693,55665
+\global\let\subsubsection = \numberedsubsubsec\x7fsubsubsection\x011694,55706
+\outer\def\appendix{\x7fappendix\x011697,55757
+\outer\def\appendix{\parsearg\appendixzzz}\x7fzzz\x011697,55757
+\def\appendixzzz #1{\x7fappendixzzz\x011698,55800
 \global\advance \appendixno by 1 \message{\x7fno\x011700,55877
+\global\advance \appendixno by 1 \message{Appendix \appendixletter}\x7fletter\x011700,55877
 \chapmacro {#1}{Appendix \appendixletter}\x7fletter\x011701,55946
+\gdef\thissection{\x7fthissection\x011702,55989
+\gdef\thischaptername{\x7fthischaptername\x011703,56012
+\xdef\thischapter{\x7fthischapter\x011704,56039
 \xdef\thischapter{Appendix \appendixletter: \noexpand\thischaptername}\x7fletter:\x011704,56039
-{\chapternofonts%\x7fnofonts%\x011705,56111
+{\chapternofonts%\x7fnofonts\x011705,56111
+\edef\temp{\x7ftemp\x011706,56129
   {#1}{Appendix \appendixletter}\x7fletter\x011707,56167
 \appendixnoderef %\x7fnoderef\x011710,56267
-\global\let\section = \appendixsec\x7f=\x011711,56286
-\global\let\subsection = \appendixsubsec\x7f=\x011712,56321
-\global\let\subsubsection = \appendixsubsubsec\x7f=\x011713,56362
-\outer\def\top{\x7f\top\x011716,56413
-\outer\def\unnumbered{\x7f\unnumbered\x011717,56453
-\def\unnumberedzzz #1{\x7f\unnumberedzzz\x011718,56500
-{\chapternofonts%\x7fnofonts%\x011722,56663
-\global\let\section = \unnumberedsec\x7f=\x011727,56813
-\global\let\subsection = \unnumberedsubsec\x7f=\x011728,56850
-\global\let\subsubsection = \unnumberedsubsubsec\x7f=\x011729,56893
-\outer\def\numberedsec{\x7f\numberedsec\x011732,56946
-\def\seczzz #1{\x7f\seczzz\x011733,56987
-{\chapternofonts%\x7fnofonts%\x011736,57143
-\outer\def\appendixsection{\x7f\appendixsection\x011745,57329
-\outer\def\appendixsec{\x7f\appendixsec\x011746,57386
-\def\appendixsectionzzz #1{\x7f\appendixsectionzzz\x011747,57439
+\global\let\section = \appendixsec\x7fsection\x011711,56286
+\global\let\section = \appendixsec\x7fsec\x011711,56286
+\global\let\subsection = \appendixsubsec\x7fsubsection\x011712,56321
+\global\let\subsection = \appendixsubsec\x7fsubsec\x011712,56321
+\global\let\subsubsection = \appendixsubsubsec\x7fsubsubsection\x011713,56362
+\global\let\subsubsection = \appendixsubsubsec\x7fsubsubsec\x011713,56362
+\outer\def\top{\x7ftop\x011716,56413
+\outer\def\unnumbered{\x7funnumbered\x011717,56453
+\def\unnumberedzzz #1{\x7funnumberedzzz\x011718,56500
+\gdef\thischapter{\x7fthischapter\x011721,56619
+\gdef\thischapter{#1}\gdef\thissection{\x7fthissection\x011721,56619
+{\chapternofonts%\x7fnofonts\x011722,56663
+\edef\temp{\x7ftemp\x011723,56681
+\global\let\section = \unnumberedsec\x7fsection\x011727,56813
+\global\let\subsection = \unnumberedsubsec\x7fsubsection\x011728,56850
+\global\let\subsubsection = \unnumberedsubsubsec\x7fsubsubsection\x011729,56893
+\outer\def\numberedsec{\x7fnumberedsec\x011732,56946
+\def\seczzz #1{\x7fseczzz\x011733,56987
+\gdef\thissection{\x7fthissection\x011735,57079
+{\chapternofonts%\x7fnofonts\x011736,57143
+\edef\temp{\x7ftemp\x011737,57161
+\outer\def\appendixsection{\x7fappendixsection\x011745,57329
+\outer\def\appendixsection{\parsearg\appendixsectionzzz}\x7fsectionzzz\x011745,57329
+\outer\def\appendixsec{\x7fappendixsec\x011746,57386
+\outer\def\appendixsec{\parsearg\appendixsectionzzz}\x7fsectionzzz\x011746,57386
+\def\appendixsectionzzz #1{\x7fappendixsectionzzz\x011747,57439
+\gdef\thissection{\x7fthissection\x011749,57551
 \gdef\thissection{#1}\secheading {#1}{\appendixletter}\x7fletter\x011749,57551
-{\chapternofonts%\x7fnofonts%\x011750,57619
+{\chapternofonts%\x7fnofonts\x011750,57619
+\edef\temp{\x7ftemp\x011751,57637
 {#1}{\appendixletter}\x7fletter\x011752,57675
 \appendixnoderef %\x7fnoderef\x011755,57775
-\outer\def\unnumberedsec{\x7f\unnumberedsec\x011759,57815
-\def\unnumberedseczzz #1{\x7f\unnumberedseczzz\x011760,57868
-{\chapternofonts%\x7fnofonts%\x011762,57963
-\outer\def\numberedsubsec{\x7f\numberedsubsec\x011770,58131
-\def\numberedsubseczzz #1{\x7f\numberedsubseczzz\x011771,58186
-{\chapternofonts%\x7fnofonts%\x011774,58365
-\outer\def\appendixsubsec{\x7f\appendixsubsec\x011783,58569
-\def\appendixsubseczzz #1{\x7f\appendixsubseczzz\x011784,58624
+\outer\def\unnumberedsec{\x7funnumberedsec\x011759,57815
+\def\unnumberedseczzz #1{\x7funnumberedseczzz\x011760,57868
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011761,57919
+{\chapternofonts%\x7fnofonts\x011762,57963
+\edef\temp{\x7ftemp\x011763,57981
+\outer\def\numberedsubsec{\x7fnumberedsubsec\x011770,58131
+\def\numberedsubseczzz #1{\x7fnumberedsubseczzz\x011771,58186
+\gdef\thissection{\x7fthissection\x011772,58235
+{\chapternofonts%\x7fnofonts\x011774,58365
+\edef\temp{\x7ftemp\x011775,58383
+\outer\def\appendixsubsec{\x7fappendixsubsec\x011783,58569
+\outer\def\appendixsubsec{\parsearg\appendixsubseczzz}\x7fsubseczzz\x011783,58569
+\def\appendixsubseczzz #1{\x7fappendixsubseczzz\x011784,58624
+\gdef\thissection{\x7fthissection\x011785,58677
 \subsecheading {#1}{\appendixletter}\x7fletter\x011786,58746
-{\chapternofonts%\x7fnofonts%\x011787,58811
+{\chapternofonts%\x7fnofonts\x011787,58811
+\edef\temp{\x7ftemp\x011788,58829
 {#1}{\appendixletter}\x7fletter\x011789,58870
 \appendixnoderef %\x7fnoderef\x011792,58985
-\outer\def\unnumberedsubsec{\x7f\unnumberedsubsec\x011796,59025
-\def\unnumberedsubseczzz #1{\x7f\unnumberedsubseczzz\x011797,59084
-{\chapternofonts%\x7fnofonts%\x011799,59185
-\outer\def\numberedsubsubsec{\x7f\numberedsubsubsec\x011807,59356
-\def\numberedsubsubseczzz #1{\x7f\numberedsubsubseczzz\x011808,59417
-{\chapternofonts%\x7fnofonts%\x011812,59614
-\outer\def\appendixsubsubsec{\x7f\appendixsubsubsec\x011823,59847
-\def\appendixsubsubseczzz #1{\x7f\appendixsubsubseczzz\x011824,59908
+\outer\def\unnumberedsubsec{\x7funnumberedsubsec\x011796,59025
+\def\unnumberedsubseczzz #1{\x7funnumberedsubseczzz\x011797,59084
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011798,59141
+{\chapternofonts%\x7fnofonts\x011799,59185
+\edef\temp{\x7ftemp\x011800,59203
+\outer\def\numberedsubsubsec{\x7fnumberedsubsubsec\x011807,59356
+\def\numberedsubsubseczzz #1{\x7fnumberedsubsubseczzz\x011808,59417
+\gdef\thissection{\x7fthissection\x011809,59472
+{\chapternofonts%\x7fnofonts\x011812,59614
+\edef\temp{\x7ftemp\x011813,59632
+\outer\def\appendixsubsubsec{\x7fappendixsubsubsec\x011823,59847
+\outer\def\appendixsubsubsec{\parsearg\appendixsubsubseczzz}\x7fsubsubseczzz\x011823,59847
+\def\appendixsubsubseczzz #1{\x7fappendixsubsubseczzz\x011824,59908
+\gdef\thissection{\x7fthissection\x011825,59967
   {\appendixletter}\x7fletter\x011827,60047
-{\chapternofonts%\x7fnofonts%\x011828,60113
+{\chapternofonts%\x7fnofonts\x011828,60113
+\edef\temp{\x7ftemp\x011829,60131
   {\appendixletter}\x7fletter\x011830,60178
 \appendixnoderef %\x7fnoderef\x011834,60312
-\outer\def\unnumberedsubsubsec{\x7f\unnumberedsubsubsec\x011838,60352
-\def\unnumberedsubsubseczzz #1{\x7f\unnumberedsubsubseczzz\x011839,60417
-{\chapternofonts%\x7fnofonts%\x011841,60524
-\def\infotop{\x7f\infotop\x011851,60853
-\def\infounnumbered{\x7f\infounnumbered\x011852,60891
-\def\infounnumberedsec{\x7f\infounnumberedsec\x011853,60936
-\def\infounnumberedsubsec{\x7f\infounnumberedsubsec\x011854,60987
-\def\infounnumberedsubsubsec{\x7f\infounnumberedsubsubsec\x011855,61044
-\def\infoappendix{\x7f\infoappendix\x011857,61108
-\def\infoappendixsec{\x7f\infoappendixsec\x011858,61149
-\def\infoappendixsubsec{\x7f\infoappendixsubsec\x011859,61196
-\def\infoappendixsubsubsec{\x7f\infoappendixsubsubsec\x011860,61249
-\def\infochapter{\x7f\infochapter\x011862,61309
-\def\infosection{\x7f\infosection\x011863,61348
-\def\infosubsection{\x7f\infosubsection\x011864,61387
-\def\infosubsubsection{\x7f\infosubsubsection\x011865,61432
-\global\let\section = \numberedsec\x7f=\x011870,61669
-\global\let\subsection = \numberedsubsec\x7f=\x011871,61704
-\global\let\subsubsection = \numberedsubsubsec\x7f=\x011872,61745
-\def\majorheading{\x7f\majorheading\x011886,62252
-\def\majorheadingzzz #1{\x7f\majorheadingzzz\x011887,62297
-\def\chapheading{\x7f\chapheading\x011893,62530
-\def\chapheadingzzz #1{\x7f\chapheadingzzz\x011894,62573
-\def\heading{\x7f\heading\x011899,62768
-\def\subheading{\x7f\subheading\x011901,62805
-\def\subsubheading{\x7f\subsubheading\x011903,62848
-\def\dobreak#1#2{\x7f\dobreak\x011910,63125
-\def\setchapterstyle #1 {\x7f\setchapterstyle\x011912,63203
-\def\chapbreak{\x7f\chapbreak\x011919,63458
-\def\chappager{\x7f\chappager\x011920,63508
-\def\chapoddpage{\x7f\chapoddpage\x011921,63546
-\def\setchapternewpage #1 {\x7f\setchapternewpage\x011923,63625
-\def\CHAPPAGoff{\x7f\CHAPPAGoff\x011925,63682
-\def\CHAPPAGon{\x7f\CHAPPAGon\x011929,63776
-\global\def\HEADINGSon{\x7f\HEADINGSon\x011932,63867
-\def\CHAPPAGodd{\x7f\CHAPPAGodd\x011934,63909
-\global\def\HEADINGSon{\x7f\HEADINGSon\x011937,64005
-\def\CHAPFplain{\x7f\CHAPFplain\x011941,64059
-\def\chfplain #1#2{\x7f\chfplain\x011945,64151
-\def\unnchfplain #1{\x7f\unnchfplain\x011956,64374
-\def\unnchfopen #1{\x7f\unnchfopen\x011964,64603
-\def\chfopen #1#2{\x7f\chfopen\x011970,64811
-\def\CHAPFopen{\x7f\CHAPFopen\x011975,64955
-\def\subsecheadingbreak{\x7f\subsecheadingbreak\x011982,65173
-\def\secheadingbreak{\x7f\secheadingbreak\x011985,65302
-\def\secheading #1#2#3{\x7f\secheading\x011993,65584
-\def\plainsecheading #1{\x7f\plainsecheading\x011994,65640
-\def\secheadingi #1{\x7f\secheadingi\x011995,65683
-\def\subsecheading #1#2#3#4{\x7f\subsecheading\x012006,66051
-\def\subsecheadingi #1{\x7f\subsecheadingi\x012007,66118
-\def\subsubsecfonts{\x7f\subsubsecfonts\x012014,66415
-\def\subsubsecheading #1#2#3#4#5{\x7f\subsubsecheading\x012017,66538
-\def\subsubsecheadingi #1{\x7f\subsubsecheadingi\x012018,66616
-\def\startcontents#1{\x7f\startcontents\x012032,67088
-   \unnumbchapmacro{#1}\def\thischapter{\x7f\thischapter\x012040,67361
-\outer\def\contents{\x7f\contents\x012049,67720
-\outer\def\summarycontents{\x7f\summarycontents\x012057,67864
-      \def\secentry ##1##2##3##4{\x7f\secentry\x012067,68235
-      \def\unnumbsecentry ##1##2{\x7f\unnumbsecentry\x012068,68270
-      \def\subsecentry ##1##2##3##4##5{\x7f\subsecentry\x012069,68305
-      \def\unnumbsubsecentry ##1##2{\x7f\unnumbsubsecentry\x012070,68346
-      \def\subsubsecentry ##1##2##3##4##5##6{\x7f\subsubsecentry\x012071,68384
-      \def\unnumbsubsubsecentry ##1##2{\x7f\unnumbsubsubsecentry\x012072,68431
-\def\chapentry#1#2#3{\x7f\chapentry\x012085,68865
-\def\shortchapentry#1#2#3{\x7f\shortchapentry\x012088,68982
+\outer\def\unnumberedsubsubsec{\x7funnumberedsubsubsec\x011838,60352
+\def\unnumberedsubsubseczzz #1{\x7funnumberedsubsubseczzz\x011839,60417
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011840,60480
+{\chapternofonts%\x7fnofonts\x011841,60524
+\edef\temp{\x7ftemp\x011842,60542
+\def\infotop{\x7finfotop\x011851,60853
+\def\infounnumbered{\x7finfounnumbered\x011852,60891
+\def\infounnumberedsec{\x7finfounnumberedsec\x011853,60936
+\def\infounnumberedsubsec{\x7finfounnumberedsubsec\x011854,60987
+\def\infounnumberedsubsubsec{\x7finfounnumberedsubsubsec\x011855,61044
+\def\infoappendix{\x7finfoappendix\x011857,61108
+\def\infoappendix{\parsearg\appendixzzz}\x7fzzz\x011857,61108
+\def\infoappendixsec{\x7finfoappendixsec\x011858,61149
+\def\infoappendixsec{\parsearg\appendixseczzz}\x7fseczzz\x011858,61149
+\def\infoappendixsubsec{\x7finfoappendixsubsec\x011859,61196
+\def\infoappendixsubsec{\parsearg\appendixsubseczzz}\x7fsubseczzz\x011859,61196
+\def\infoappendixsubsubsec{\x7finfoappendixsubsubsec\x011860,61249
+\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}\x7fsubsubseczzz\x011860,61249
+\def\infochapter{\x7finfochapter\x011862,61309
+\def\infochapter{\parsearg\chapterzzz}\x7fzzz\x011862,61309
+\def\infosection{\x7finfosection\x011863,61348
+\def\infosection{\parsearg\sectionzzz}\x7fzzz\x011863,61348
+\def\infosubsection{\x7finfosubsection\x011864,61387
+\def\infosubsection{\parsearg\subsectionzzz}\x7fzzz\x011864,61387
+\def\infosubsubsection{\x7finfosubsubsection\x011865,61432
+\def\infosubsubsection{\parsearg\subsubsectionzzz}\x7fzzz\x011865,61432
+\global\let\section = \numberedsec\x7fsection\x011870,61669
+\global\let\subsection = \numberedsubsec\x7fsubsection\x011871,61704
+\global\let\subsubsection = \numberedsubsubsec\x7fsubsubsection\x011872,61745
+\def\majorheading{\x7fmajorheading\x011886,62252
+\def\majorheadingzzz #1{\x7fmajorheadingzzz\x011887,62297
+\def\chapheading{\x7fchapheading\x011893,62530
+\def\chapheadingzzz #1{\x7fchapheadingzzz\x011894,62573
+\def\heading{\x7fheading\x011899,62768
+\def\subheading{\x7fsubheading\x011901,62805
+\def\subsubheading{\x7fsubsubheading\x011903,62848
+\def\dobreak#1#2{\x7fdobreak\x011910,63125
+\def\setchapterstyle #1 {\x7fsetchapterstyle\x011912,63203
+\def\chapbreak{\x7fchapbreak\x011919,63458
+\def\chappager{\x7fchappager\x011920,63508
+\def\chapoddpage{\x7fchapoddpage\x011921,63546
+\def\setchapternewpage #1 {\x7fsetchapternewpage\x011923,63625
+\def\CHAPPAGoff{\x7fCHAPPAGoff\x011925,63682
+\global\let\pchapsepmacro=\chapbreak\x7fpchapsepmacro\x011926,63699
+\global\let\pagealignmacro=\chappager}\x7fpagealignmacro\x011927,63736
+\def\CHAPPAGon{\x7fCHAPPAGon\x011929,63776
+\global\let\pchapsepmacro=\chappager\x7fpchapsepmacro\x011930,63792
+\global\let\pagealignmacro=\chappager\x7fpagealignmacro\x011931,63829
+\global\def\HEADINGSon{\x7fHEADINGSon\x011932,63867
+\def\CHAPPAGodd{\x7fCHAPPAGodd\x011934,63909
+\global\let\pchapsepmacro=\chapoddpage\x7fpchapsepmacro\x011935,63926
+\global\let\pagealignmacro=\chapoddpage\x7fpagealignmacro\x011936,63965
+\global\def\HEADINGSon{\x7fHEADINGSon\x011937,64005
+\def\CHAPFplain{\x7fCHAPFplain\x011941,64059
+\global\let\chapmacro=\chfplain\x7fchapmacro\x011942,64076
+\global\let\unnumbchapmacro=\unnchfplain}\x7funnumbchapmacro\x011943,64108
+\def\chfplain #1#2{\x7fchfplain\x011945,64151
+\def\unnchfplain #1{\x7funnchfplain\x011956,64374
+\def\unnchfopen #1{\x7funnchfopen\x011964,64603
+\def\chfopen #1#2{\x7fchfopen\x011970,64811
+\def\CHAPFopen{\x7fCHAPFopen\x011975,64955
+\global\let\chapmacro=\chfopen\x7fchapmacro\x011976,64971
+\global\let\unnumbchapmacro=\unnchfopen}\x7funnumbchapmacro\x011977,65002
+\def\subsecheadingbreak{\x7fsubsecheadingbreak\x011982,65173
+\def\secheadingbreak{\x7fsecheadingbreak\x011985,65302
+\let\paragraphindent=\comment\x7fparagraphindent\x011988,65428
+\def\secheading #1#2#3{\x7fsecheading\x011993,65584
+\def\plainsecheading #1{\x7fplainsecheading\x011994,65640
+\def\secheadingi #1{\x7fsecheadingi\x011995,65683
+\def\subsecheading #1#2#3#4{\x7fsubsecheading\x012006,66051
+\def\subsecheadingi #1{\x7fsubsecheadingi\x012007,66118
+\def\subsubsecfonts{\x7fsubsubsecfonts\x012014,66415
+\def\subsubsecheading #1#2#3#4#5{\x7fsubsubsecheading\x012017,66538
+\def\subsubsecheadingi #1{\x7fsubsubsecheadingi\x012018,66616
+\def\startcontents#1{\x7fstartcontents\x012032,67088
+   \unnumbchapmacro{#1}\def\thischapter{\x7fthischapter\x012040,67361
+\outer\def\contents{\x7fcontents\x012049,67720
+\outer\def\summarycontents{\x7fsummarycontents\x012057,67864
+      \let\chapentry = \shortchapentry\x7fchapentry\x012060,67936
+      \let\unnumbchapentry = \shortunnumberedentry\x7funnumbchapentry\x012061,67975
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7frm\x012064,68098
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7fbf\x012064,68098
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7fsl\x012064,68098
+      \def\secentry ##1##2##3##4{\x7fsecentry\x012067,68235
+      \def\unnumbsecentry ##1##2{\x7funnumbsecentry\x012068,68270
+      \def\subsecentry ##1##2##3##4##5{\x7fsubsecentry\x012069,68305
+      \def\unnumbsubsecentry ##1##2{\x7funnumbsubsecentry\x012070,68346
+      \def\subsubsecentry ##1##2##3##4##5##6{\x7fsubsubsecentry\x012071,68384
+      \def\unnumbsubsubsecentry ##1##2{\x7funnumbsubsubsecentry\x012072,68431
+\let\shortcontents = \summarycontents\x7fshortcontents\x012077,68530
+\def\chapentry#1#2#3{\x7fchapentry\x012085,68865
+\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}\x7fspace\x012085,68865
+\def\shortchapentry#1#2#3{\x7fshortchapentry\x012088,68982
     {#2\labelspace #1}\x7fspace\x012091,69092
-\def\unnumbchapentry#1#2{\x7f\unnumbchapentry\x012094,69146
-\def\shortunnumberedentry#1#2{\x7f\shortunnumberedentry\x012095,69193
-\def\secentry#1#2#3#4{\x7f\secentry\x012102,69357
-\def\unnumbsecentry#1#2{\x7f\unnumbsecentry\x012103,69416
-\def\subsecentry#1#2#3#4#5{\x7f\subsecentry\x012106,69477
-\def\unnumbsubsecentry#1#2{\x7f\unnumbsubsecentry\x012107,69547
-\def\subsubsecentry#1#2#3#4#5#6{\x7f\subsubsecentry\x012110,69621
+\def\unnumbchapentry#1#2{\x7funnumbchapentry\x012094,69146
+\def\shortunnumberedentry#1#2{\x7fshortunnumberedentry\x012095,69193
+\def\secentry#1#2#3#4{\x7fsecentry\x012102,69357
+\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}\x7fspace\x012102,69357
+\def\unnumbsecentry#1#2{\x7funnumbsecentry\x012103,69416
+\def\subsecentry#1#2#3#4#5{\x7fsubsecentry\x012106,69477
+\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}\x7fspace\x012106,69477
+\def\unnumbsubsecentry#1#2{\x7funnumbsubsecentry\x012107,69547
+\def\subsubsecentry#1#2#3#4#5#6{\x7fsubsubsecentry\x012110,69621
   \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}\x7fspace\x012111,69655
-\def\unnumbsubsubsecentry#1#2{\x7f\unnumbsubsubsecentry\x012112,69706
-\def\dochapentry#1#2{\x7f\dochapentry\x012123,70080
-\def\dosecentry#1#2{\x7f\dosecentry\x012138,70685
-\def\dosubsecentry#1#2{\x7f\dosubsecentry\x012145,70863
-\def\dosubsubsecentry#1#2{\x7f\dosubsubsecentry\x012152,71048
-\def\labelspace{\x7f\labelspace\x012160,71299
-\def\dopageno#1{\x7f\dopageno\x012162,71334
-\def\doshortpageno#1{\x7f\doshortpageno\x012163,71360
-\def\chapentryfonts{\x7f\chapentryfonts\x012165,71392
-\def\secentryfonts{\x7f\secentryfonts\x012166,71427
-\def\point{\x7f\point\x012192,72386
-\def\result{\x7f\result\x012194,72407
-\def\expansion{\x7f\expansion\x012195,72480
-\def\print{\x7f\print\x012196,72551
-\def\equiv{\x7f\equiv\x012198,72618
-\def\error{\x7f\error\x012218,73391
-\def\tex{\x7f\tex\x012224,73620
-\def\@{\x7f\@\x012242,74003
-\gdef\sepspaces{\def {\ }}}\x7f\\x012265,74735
-\def\aboveenvbreak{\x7f\aboveenvbreak\x012268,74817
-\def\afterenvbreak{\x7f\afterenvbreak\x012272,74983
-\def\ctl{\x7f\ctl\x012286,75494
-\def\ctr{\x7f\ctr\x012287,75566
-\def\cbl{\x7f\cbl\x012288,75605
-\def\cbr{\x7f\cbr\x012289,75645
-\def\carttop{\x7f\carttop\x012290,75684
-\def\cartbot{\x7f\cartbot\x012293,75792
-\long\def\cartouche{\x7f\cartouche\x012299,75932
-\def\Ecartouche{\x7f\Ecartouche\x012326,76720
-\def\lisp{\x7f\lisp\x012338,76855
-\def\Elisp{\x7f\Elisp\x012348,77202
-\def\next##1{\x7f\next\x012360,77528
-\def\Eexample{\x7f\Eexample\x012364,77570
-\def\Esmallexample{\x7f\Esmallexample\x012367,77617
-\def\smalllispx{\x7f\smalllispx\x012373,77795
-\def\Esmalllisp{\x7f\Esmalllisp\x012383,78149
+\def\unnumbsubsubsecentry#1#2{\x7funnumbsubsubsecentry\x012112,69706
+\def\dochapentry#1#2{\x7fdochapentry\x012123,70080
+\def\dosecentry#1#2{\x7fdosecentry\x012138,70685
+\def\dosubsecentry#1#2{\x7fdosubsecentry\x012145,70863
+\def\dosubsubsecentry#1#2{\x7fdosubsubsecentry\x012152,71048
+\def\labelspace{\x7flabelspace\x012160,71299
+\def\dopageno#1{\x7fdopageno\x012162,71334
+\def\doshortpageno#1{\x7fdoshortpageno\x012163,71360
+\def\chapentryfonts{\x7fchapentryfonts\x012165,71392
+\def\secentryfonts{\x7fsecentryfonts\x012166,71427
+\let\subsecentryfonts = \textfonts\x7fsubsecentryfonts\x012167,71458
+\let\subsubsecentryfonts = \textfonts\x7fsubsubsecentryfonts\x012168,71493
+\let\ptexequiv = \equiv\x7fptexequiv\x012180,71896
+\def\point{\x7fpoint\x012192,72386
+\def\result{\x7fresult\x012194,72407
+\def\expansion{\x7fexpansion\x012195,72480
+\def\print{\x7fprint\x012196,72551
+\def\equiv{\x7fequiv\x012198,72618
+\def\error{\x7ferror\x012218,73391
+\def\tex{\x7ftex\x012224,73620
+\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie\x7f~\x012227,73731
+\let\{=\ptexlbrace\x7f{\x012237,73912
+\let\}=\ptexrbrace\x7f}\x012238,73931
+\let\.=\ptexdot\x7f.\x012239,73950
+\let\*=\ptexstar\x7f*\x012240,73966
+\let\dots=\ptexdots\x7fdots\x012241,73983
+\def\@{\x7f@\x012242,74003
+\let\bullet=\ptexbullet\x7fbullet\x012243,74014
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fb\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fc\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fi\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7ft\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fl\x012244,74038
+\let\L=\ptexL\x7fL\x012245,74108
+\let\Etex=\endgroup}\x7fEtex\x012247,74124
+\gdef\lisppar{\x7flisppar\x012259,74517
+\gdef\sepspaces{\x7fsepspaces\x012265,74735
+\def\aboveenvbreak{\x7faboveenvbreak\x012268,74817
+\def\afterenvbreak{\x7fafterenvbreak\x012272,74983
+\let\nonarrowing=\relax\x7fnonarrowing\x012276,75176
+\def\ctl{\x7fctl\x012286,75494
+\def\ctr{\x7fctr\x012287,75566
+\def\cbl{\x7fcbl\x012288,75605
+\def\cbr{\x7fcbr\x012289,75645
+\def\carttop{\x7fcarttop\x012290,75684
+\def\cartbot{\x7fcartbot\x012293,75792
+\long\def\cartouche{\x7fcartouche\x012299,75932
+	\let\nonarrowing=\comment\x7fnonarrowing\x012311,76404
+\def\Ecartouche{\x7fEcartouche\x012326,76720
+\def\lisp{\x7flisp\x012338,76855
+\let\par=\lisppar\x7fpar\x012347,77184
+\def\Elisp{\x7fElisp\x012348,77202
+\let\exdent=\nofillexdent\x7fexdent\x012355,77418
+\let\nonarrowing=\relax\x7fnonarrowing\x012356,77444
+\def\next##1{\x7fnext\x012360,77528
+\let\example=\lisp\x7fexample\x012363,77551
+\def\Eexample{\x7fEexample\x012364,77570
+\let\smallexample=\lisp\x7fsmallexample\x012366,77593
+\def\Esmallexample{\x7fEsmallexample\x012367,77617
+\def\smalllispx{\x7fsmalllispx\x012373,77795
+\let\par=\lisppar\x7fpar\x012382,78131
+\def\Esmalllisp{\x7fEsmalllisp\x012383,78149
+\let\exdent=\nofillexdent\x7fexdent\x012392,78436
+\let\nonarrowing=\relax\x7fnonarrowing\x012393,78462
 \obeyspaces \obeylines \ninett \indexfonts \rawbackslash\x7ffonts\x012396,78505
-\def\next##1{\x7f\next\x012397,78562
-\def\display{\x7f\display\x012401,78642
-\def\Edisplay{\x7f\Edisplay\x012410,78961
-\def\next##1{\x7f\next\x012422,79272
-\def\format{\x7f\format\x012426,79375
-\def\Eformat{\x7f\Eformat\x012434,79671
-\def\next##1{\x7f\next\x012437,79760
-\def\flushleft{\x7f\flushleft\x012441,79812
-\def\Eflushleft{\x7f\Eflushleft\x012451,80183
-\def\next##1{\x7f\next\x012454,80276
-\def\flushright{\x7f\flushright\x012456,80298
-\def\Eflushright{\x7f\Eflushright\x012466,80670
-\def\next##1{\x7f\next\x012470,80801
-\def\quotation{\x7f\quotation\x012474,80859
-\def\Equotation{\x7f\Equotation\x012480,81051
-\def\setdeffont #1 {\x7f\setdeffont\x012493,81449
+\def\next##1{\x7fnext\x012397,78562
+\def\display{\x7fdisplay\x012401,78642
+\let\par=\lisppar\x7fpar\x012409,78943
+\def\Edisplay{\x7fEdisplay\x012410,78961
+\let\exdent=\nofillexdent\x7fexdent\x012417,79180
+\let\nonarrowing=\relax\x7fnonarrowing\x012418,79206
+\def\next##1{\x7fnext\x012422,79272
+\def\format{\x7fformat\x012426,79375
+\let\par=\lisppar\x7fpar\x012433,79653
+\def\Eformat{\x7fEformat\x012434,79671
+\def\next##1{\x7fnext\x012437,79760
+\def\flushleft{\x7fflushleft\x012441,79812
+\let\par=\lisppar\x7fpar\x012450,80165
+\def\Eflushleft{\x7fEflushleft\x012451,80183
+\def\next##1{\x7fnext\x012454,80276
+\def\flushright{\x7fflushright\x012456,80298
+\let\par=\lisppar\x7fpar\x012465,80652
+\def\Eflushright{\x7fEflushright\x012466,80670
+\def\next##1{\x7fnext\x012470,80801
+\def\quotation{\x7fquotation\x012474,80859
+\def\Equotation{\x7fEquotation\x012480,81051
+\let\nonarrowing=\relax\x7fnonarrowing\x012487,81301
+\def\setdeffont #1 {\x7fsetdeffont\x012493,81449
+\newskip\defbodyindent \defbodyindent=.4in\x7fbodyindent\x012495,81495
 \newskip\defbodyindent \defbodyindent=.4in\x7fbodyindent\x012495,81495
 \newskip\defargsindent \defargsindent=50pt\x7fargsindent\x012496,81538
+\newskip\defargsindent \defargsindent=50pt\x7fargsindent\x012496,81538
 \newskip\deftypemargin \deftypemargin=12pt\x7ftypemargin\x012497,81581
+\newskip\deftypemargin \deftypemargin=12pt\x7ftypemargin\x012497,81581
+\newskip\deflastargmargin \deflastargmargin=18pt\x7flastargmargin\x012498,81624
 \newskip\deflastargmargin \deflastargmargin=18pt\x7flastargmargin\x012498,81624
-\def\activeparens{\x7f\activeparens\x012503,81822
-\def\opnr{\x7f\opnr\x012529,83034
-\def\lbrb{\x7f\lbrb\x012530,83099
-\def\defname #1#2{\x7f\defname\x012536,83300
+\def\activeparens{\x7factiveparens\x012503,81822
+\gdef\functionparens{\x7ffunctionparens\x012507,82016
+\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }\x7f&\x012507,82016
+\gdef\boldbrax{\x7fboldbrax\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f(\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f)\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f[\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f]\x012508,82074
+\gdef\oprm#1 {\x7foprm\x012512,82250
+\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %\x7f(\x012512,82250
+\gdef\opnested{\x7fopnested\x012516,82407
+\gdef\clrm{\x7fclrm\x012518,82466
+\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi\x7f(\x012520,82602
+\gdef\amprm#1 {\x7famprm\x012523,82769
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }\x7f(\x012523,82769
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }\x7f)\x012523,82769
+\gdef\normalparens{\x7fnormalparens\x012525,82822
+\gdef\normalparens{\boldbrax\let&=\ampnr}\x7f&\x012525,82822
+\def\opnr{\x7fopnr\x012529,83034
+\def\opnr{{\sf\char`\(}} \def\clnr{\x7fclnr\x012529,83034
+\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\x7fampnr\x012529,83034
+\def\lbrb{\x7flbrb\x012530,83099
+\def\lbrb{{\bf\char`\[}} \def\rbrb{\x7frbrb\x012530,83099
+\def\defname #1#2{\x7fdefname\x012536,83300
 \advance\dimen2 by -\defbodyindent\x7fbodyindent\x012540,83418
 \advance\dimen3 by -\defbodyindent\x7fbodyindent\x012542,83472
 \setbox0=\hbox{\hskip \deflastargmargin{\x7flastargmargin\x012544,83526
+\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}\x7ftypemargin\x012544,83526
 \dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations\x7fargsindent\x012546,83668
 \parshape 2 0in \dimen0 \defargsindent \dimen1     %\x7fargsindent\x012547,83743
 \rlap{\rightline{{\rm #2}\hskip \deftypemargin}\x7ftypemargin\x012554,84112
 \advance\leftskip by -\defbodyindent\x7fbodyindent\x012557,84246
 \exdentamount=\defbodyindent\x7fbodyindent\x012558,84283
-\def\defparsebody #1#2#3{\x7f\defparsebody\x012568,84642
-\def#1{\x7f2572,84826
-\def#2{\x7f2573,84862
+\def\defparsebody #1#2#3{\x7fdefparsebody\x012568,84642
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012575,84934
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012575,84934
 \exdentamount=\defbodyindent\x7fbodyindent\x012576,85008
-\def\defmethparsebody #1#2#3#4 {\x7f\defmethparsebody\x012581,85112
-\def#1{\x7f2585,85273
-\def#2##1 {\x7f2586,85309
+\def\defmethparsebody #1#2#3#4 {\x7fdefmethparsebody\x012581,85112
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012588,85392
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012588,85392
 \exdentamount=\defbodyindent\x7fbodyindent\x012589,85466
-\def\defopparsebody #1#2#3#4#5 {\x7f\defopparsebody\x012592,85551
-\def#1{\x7f2596,85712
-\def#2##1 ##2 {\x7f2597,85748
+\def\defopparsebody #1#2#3#4#5 {\x7fdefopparsebody\x012592,85551
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012600,85848
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012600,85848
 \exdentamount=\defbodyindent\x7fbodyindent\x012601,85922
-\def\defvarparsebody #1#2#3{\x7f\defvarparsebody\x012608,86193
-\def#1{\x7f2612,86380
-\def#2{\x7f2613,86416
+\def\defvarparsebody #1#2#3{\x7fdefvarparsebody\x012608,86193
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012615,86475
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012615,86475
 \exdentamount=\defbodyindent\x7fbodyindent\x012616,86549
-\def\defvrparsebody #1#2#3#4 {\x7f\defvrparsebody\x012621,86640
-\def#1{\x7f2625,86799
-\def#2##1 {\x7f2626,86835
+\def\defvrparsebody #1#2#3#4 {\x7fdefvrparsebody\x012621,86640
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012628,86905
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012628,86905
 \exdentamount=\defbodyindent\x7fbodyindent\x012629,86979
-\def\defopvarparsebody #1#2#3#4#5 {\x7f\defopvarparsebody\x012632,87051
-\def#1{\x7f2636,87215
-\def#2##1 ##2 {\x7f2637,87251
+\def\defopvarparsebody #1#2#3#4#5 {\x7fdefopvarparsebody\x012632,87051
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012640,87338
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012640,87338
 \exdentamount=\defbodyindent\x7fbodyindent\x012641,87412
-\def\defunargs #1{\x7f\defunargs\x012664,88172
-\def\deftypefunargs #1{\x7f\deftypefunargs\x012676,88554
-\def\deffn{\x7f\deffn\x012690,88936
-\def\deffnheader #1#2#3{\x7f\deffnheader\x012692,88993
+\gdef\spacesplit#1#2^^M{\x7fspacesplit\x012652,87775
+\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{\x7fspacesplitfoo\x012653,87852
+\def\defunargs #1{\x7fdefunargs\x012664,88172
+\def\deftypefunargs #1{\x7fdeftypefunargs\x012676,88554
+\def\deffn{\x7fdeffn\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7fmethparsebody\Edeffn\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7ffnx\deffnheader\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7ffnheader\x012690,88936
+\def\deffnheader #1#2#3{\x7fdeffnheader\x012692,88993
 \begingroup\defname {\x7fname\x012693,89041
-\def\defun{\x7f\defun\x012699,89186
-\def\defunheader #1#2{\x7f\defunheader\x012701,89239
+\begingroup\defname {#2}{#1}\defunargs{\x7funargs\x012693,89041
+\def\defun{\x7fdefun\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7fparsebody\Edefun\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7funx\defunheader\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7funheader\x012699,89186
+\def\defunheader #1#2{\x7fdefunheader\x012701,89239
 \begingroup\defname {\x7fname\x012702,89314
 \defunargs {\x7funargs\x012703,89350
-\def\deftypefun{\x7f\deftypefun\x012709,89498
-\def\deftypefunheader #1#2{\x7f\deftypefunheader\x012712,89620
-\def\deftypefunheaderx #1#2 #3\relax{\x7f\deftypefunheaderx\x012714,89729
+\def\deftypefun{\x7fdeftypefun\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7fparsebody\Edeftypefun\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7ftypefunx\deftypefunheader\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7ftypefunheader\x012709,89498
+\def\deftypefunheader #1#2{\x7fdeftypefunheader\x012712,89620
+\def\deftypefunheader #1#2{\deftypefunheaderx{\x7ftypefunheaderx\x012712,89620
+\def\deftypefunheaderx #1#2 #3\relax{\x7fdeftypefunheaderx\x012714,89729
 \begingroup\defname {\x7fname\x012716,89821
 \deftypefunargs {\x7ftypefunargs\x012717,89867
-\def\deftypefn{\x7f\deftypefn\x012723,90038
-\def\deftypefnheader #1#2#3{\x7f\deftypefnheader\x012726,90187
-\def\deftypefnheaderx #1#2#3 #4\relax{\x7f\deftypefnheaderx\x012728,90323
+\def\deftypefn{\x7fdeftypefn\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7fmethparsebody\Edeftypefn\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7ftypefnx\deftypefnheader\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7ftypefnheader\x012723,90038
+\def\deftypefnheader #1#2#3{\x7fdeftypefnheader\x012726,90187
+\def\deftypefnheader #1#2#3{\deftypefnheaderx{\x7ftypefnheaderx\x012726,90187
+\def\deftypefnheaderx #1#2#3 #4\relax{\x7fdeftypefnheaderx\x012728,90323
 \begingroup\defname {\x7fname\x012730,90416
 \deftypefunargs {\x7ftypefunargs\x012731,90456
-\def\defmac{\x7f\defmac\x012737,90577
-\def\defmacheader #1#2{\x7f\defmacheader\x012739,90634
+\def\defmac{\x7fdefmac\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fparsebody\Edefmac\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fmacx\defmacheader\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fmacheader\x012737,90577
+\def\defmacheader #1#2{\x7fdefmacheader\x012739,90634
 \begingroup\defname {\x7fname\x012740,90710
 \defunargs {\x7funargs\x012741,90743
-\def\defspec{\x7f\defspec\x012747,90867
-\def\defspecheader #1#2{\x7f\defspecheader\x012749,90928
+\def\defspec{\x7fdefspec\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fparsebody\Edefspec\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fspecx\defspecheader\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fspecheader\x012747,90867
+\def\defspecheader #1#2{\x7fdefspecheader\x012749,90928
 \begingroup\defname {\x7fname\x012750,91005
 \defunargs {\x7funargs\x012751,91045
-\def\deffnx #1 {\x7f\deffnx\x012758,91240
-\def\defunx #1 {\x7f\defunx\x012759,91297
-\def\defmacx #1 {\x7f\defmacx\x012760,91354
-\def\defspecx #1 {\x7f\defspecx\x012761,91413
-\def\deftypefnx #1 {\x7f\deftypefnx\x012762,91474
-\def\deftypeunx #1 {\x7f\deftypeunx\x012763,91539
-\def\defop #1 {\x7f\defop\x012769,91685
-\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopparsebody\Edefop\defopx\defopheader\defoptype\x012770,91720
-\def\defopheader #1#2#3{\x7f\defopheader\x012772,91774
+\def\deffnx #1 {\x7fdeffnx\x012758,91240
+\def\defunx #1 {\x7fdefunx\x012759,91297
+\def\defmacx #1 {\x7fdefmacx\x012760,91354
+\def\defspecx #1 {\x7fdefspecx\x012761,91413
+\def\deftypefnx #1 {\x7fdeftypefnx\x012762,91474
+\def\deftypeunx #1 {\x7fdeftypeunx\x012763,91539
+\def\defop #1 {\x7fdefop\x012769,91685
+\def\defop #1 {\def\defoptype{\x7fdefoptype\x012769,91685
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopparsebody\Edefop\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopx\defopheader\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopheader\defoptype\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7foptype\x012770,91720
+\def\defopheader #1#2#3{\x7fdefopheader\x012772,91774
 \begingroup\defname {\x7fname\x012774,91863
+\begingroup\defname {#2}{\defoptype{\x7foptype\x012774,91863
 \defunargs {\x7funargs\x012775,91909
-\def\defmethod{\x7f\defmethod\x012780,91970
-\def\defmethodheader #1#2#3{\x7f\defmethodheader\x012782,92043
+\def\defmethod{\x7fdefmethod\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethparsebody\Edefmethod\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethodx\defmethodheader\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethodheader\x012780,91970
+\def\defmethodheader #1#2#3{\x7fdefmethodheader\x012782,92043
 \begingroup\defname {\x7fname\x012784,92131
 \defunargs {\x7funargs\x012785,92171
-\def\defcv #1 {\x7f\defcv\x012790,92245
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype\x012791,92280
-\def\defcvarheader #1#2#3{\x7f\defcvarheader\x012793,92339
+\def\defcv #1 {\x7fdefcv\x012790,92245
+\def\defcv #1 {\def\defcvtype{\x7fdefcvtype\x012790,92245
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fopvarparsebody\Edefcv\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvx\defcvarheader\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvarheader\defcvtype\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvtype\x012791,92280
+\def\defcvarheader #1#2#3{\x7fdefcvarheader\x012793,92339
 \begingroup\defname {\x7fname\x012795,92425
+\begingroup\defname {#2}{\defcvtype{\x7fcvtype\x012795,92425
 \defvarargs {\x7fvarargs\x012796,92471
-\def\defivar{\x7f\defivar\x012801,92544
-\def\defivarheader #1#2#3{\x7f\defivarheader\x012803,92607
+\def\defivar{\x7fdefivar\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fvrparsebody\Edefivar\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fivarx\defivarheader\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fivarheader\x012801,92544
+\def\defivarheader #1#2#3{\x7fdefivarheader\x012803,92607
 \begingroup\defname {\x7fname\x012805,92693
 \defvarargs {\x7fvarargs\x012806,92744
-\def\defopx #1 {\x7f\defopx\x012812,92893
-\def\defmethodx #1 {\x7f\defmethodx\x012813,92950
-\def\defcvx #1 {\x7f\defcvx\x012814,93015
-\def\defivarx #1 {\x7f\defivarx\x012815,93072
-\def\defvarargs #1{\x7f\defvarargs\x012822,93343
-\def\defvr{\x7f\defvr\x012828,93487
-\def\defvrheader #1#2#3{\x7f\defvrheader\x012830,93542
+\def\defopx #1 {\x7fdefopx\x012812,92893
+\def\defmethodx #1 {\x7fdefmethodx\x012813,92950
+\def\defcvx #1 {\x7fdefcvx\x012814,93015
+\def\defivarx #1 {\x7fdefivarx\x012815,93072
+\def\defvarargs #1{\x7fdefvarargs\x012822,93343
+\def\defvr{\x7fdefvr\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrparsebody\Edefvr\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrx\defvrheader\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrheader\x012828,93487
+\def\defvrheader #1#2#3{\x7fdefvrheader\x012830,93542
 \begingroup\defname {\x7fname\x012831,93590
-\def\defvar{\x7f\defvar\x012835,93675
-\def\defvarheader #1#2{\x7f\defvarheader\x012837,93735
+\begingroup\defname {#2}{#1}\defvarargs{\x7fvarargs\x012831,93590
+\def\defvar{\x7fdefvar\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarparsebody\Edefvar\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarx\defvarheader\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarheader\x012835,93675
+\def\defvarheader #1#2{\x7fdefvarheader\x012837,93735
 \begingroup\defname {\x7fname\x012838,93806
 \defvarargs {\x7fvarargs\x012839,93842
-\def\defopt{\x7f\defopt\x012844,93908
-\def\defoptheader #1#2{\x7f\defoptheader\x012846,93968
+\def\defopt{\x7fdefopt\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7fvarparsebody\Edefopt\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7foptx\defoptheader\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7foptheader\x012844,93908
+\def\defoptheader #1#2{\x7fdefoptheader\x012846,93968
 \begingroup\defname {\x7fname\x012847,94039
 \defvarargs {\x7fvarargs\x012848,94078
-\def\deftypevar{\x7f\deftypevar\x012853,94135
-\def\deftypevarheader #1#2{\x7f\deftypevarheader\x012856,94251
+\def\deftypevar{\x7fdeftypevar\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7fvarparsebody\Edeftypevar\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7ftypevarx\deftypevarheader\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7ftypevarheader\x012853,94135
+\def\deftypevarheader #1#2{\x7fdeftypevarheader\x012856,94251
 \begingroup\defname {\x7fname\x012858,94334
-\def\deftypevr{\x7f\deftypevr\x012865,94508
-\def\deftypevrheader #1#2#3{\x7f\deftypevrheader\x012867,94579
+\def\deftypevr{\x7fdeftypevr\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7fvrparsebody\Edeftypevr\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7ftypevrx\deftypevrheader\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7ftypevrheader\x012865,94508
+\def\deftypevrheader #1#2#3{\x7fdeftypevrheader\x012867,94579
 \begingroup\defname {\x7fname\x012868,94631
-\def\defvrx #1 {\x7f\defvrx\x012876,94868
-\def\defvarx #1 {\x7f\defvarx\x012877,94925
-\def\defoptx #1 {\x7f\defoptx\x012878,94984
-\def\deftypevarx #1 {\x7f\deftypevarx\x012879,95043
-\def\deftypevrx #1 {\x7f\deftypevrx\x012880,95110
-\def\deftpargs #1{\x7f\deftpargs\x012885,95259
-\def\deftp{\x7f\deftp\x012889,95339
-\def\deftpheader #1#2#3{\x7f\deftpheader\x012891,95394
+\def\defvrx #1 {\x7fdefvrx\x012876,94868
+\def\defvarx #1 {\x7fdefvarx\x012877,94925
+\def\defoptx #1 {\x7fdefoptx\x012878,94984
+\def\deftypevarx #1 {\x7fdeftypevarx\x012879,95043
+\def\deftypevrx #1 {\x7fdeftypevrx\x012880,95110
+\def\deftpargs #1{\x7fdeftpargs\x012885,95259
+\def\deftpargs #1{\bf \defvarargs{\x7fvarargs\x012885,95259
+\def\deftp{\x7fdeftp\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7fvrparsebody\Edeftp\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7ftpx\deftpheader\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7ftpheader\x012889,95339
+\def\deftpheader #1#2#3{\x7fdeftpheader\x012891,95394
 \begingroup\defname {\x7fname\x012892,95442
-\def\deftpx #1 {\x7f\deftpx\x012897,95601
-\def\setref#1{\x7f\setref\x012908,95922
-\def\unnumbsetref#1{\x7f\unnumbsetref\x012913,96036
-\def\appendixsetref#1{\x7f\appendixsetref\x012918,96143
-\def\pxref#1{\x7f\pxref\x012929,96554
-\def\xref#1{\x7f\xref\x012930,96590
-\def\ref#1{\x7f\ref\x012931,96625
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\x7f\xrefX[\x012932,96655
-\def\printedmanual{\x7f\printedmanual\x012933,96698
-\def\printednodename{\x7f\printednodename\x012934,96736
-\def\printednodename{\x7f\printednodename\x012939,96861
-section ``\printednodename'' in \cite{\printedmanual}\x7f\printedmanual\x012954,97493
+\begingroup\defname {#2}{#1}\deftpargs{\x7ftpargs\x012892,95442
+\def\deftpx #1 {\x7fdeftpx\x012897,95601
+\def\setref#1{\x7fsetref\x012908,95922
+\def\unnumbsetref#1{\x7funnumbsetref\x012913,96036
+\def\appendixsetref#1{\x7fappendixsetref\x012918,96143
+\def\pxref#1{\x7fpxref\x012929,96554
+\def\xref#1{\x7fxref\x012930,96590
+\def\ref#1{\x7fref\x012931,96625
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\x7fxrefX\x012932,96655
+\def\printedmanual{\x7fprintedmanual\x012933,96698
+\def\printednodename{\x7fprintednodename\x012934,96736
+\def\printednodename{\x7fprintednodename\x012939,96861
+section ``\printednodename'' in \cite{\printedmanual}\x7fprintedmanual\x012954,97493
 \refx{\x7fx\x012957,97571
-\def\dosetq #1#2{\x7f\dosetq\x012965,97791
-\def\internalsetq #1#2{\x7f\internalsetq\x012973,98049
-\def\Ypagenumber{\x7f\Ypagenumber\x012977,98150
-\def\Ytitle{\x7f\Ytitle\x012979,98176
-\def\Ynothing{\x7f\Ynothing\x012981,98203
-\def\Ysectionnumberandtype{\x7f\Ysectionnumberandtype\x012983,98220
-\def\Yappendixletterandtype{\x7f\Yappendixletterandtype\x012992,98536
+\refx{#1-snt}{} [\printednodename], page\tie\refx{\x7fx\x012957,97571
+\def\dosetq #1#2{\x7fdosetq\x012965,97791
+\def\dosetq #1#2{{\let\folio=0 \turnoffactive%\x7ffolio\x012965,97791
+\edef\next{\x7fnext\x012966,97838
+\def\internalsetq #1#2{\x7finternalsetq\x012973,98049
+\def\Ypagenumber{\x7fYpagenumber\x012977,98150
+\def\Ytitle{\x7fYtitle\x012979,98176
+\def\Ynothing{\x7fYnothing\x012981,98203
+\def\Ysectionnumberandtype{\x7fYsectionnumberandtype\x012983,98220
+\def\Yappendixletterandtype{\x7fYappendixletterandtype\x012992,98536
 \ifnum\secno=0 Appendix\xreftie'char\the\appendixno{\x7fno\x012993,98566
-\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno %\x7fno.\the\secno\x012994,98621
-Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno %\x7fno.\the\secno.\the\subsecno\x012996,98725
-Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\x7fno.\the\secno.\the\subsecno.\the\subsubsecno\x012998,98796
-  \def\linenumber{\x7f\linenumber\x013009,99135
-\def\refx#1#2{\x7f\refx\x013015,99319
-\def\xrdef #1#2{\x7f\xrdef\x013037,99945
-\def\readauxfile{\x7f\readauxfile\x013040,100030
-\def\supereject{\x7f\supereject\x013110,101811
-\footstrut\parindent=\defaultparindent\hang\textindent{\x7faultparindent\hang\textindent\x013131,102496
-\def\openindices{\x7f\openindices\x013139,102682
+\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno %\x7fno.\the\x012994,98621
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno %\x7fno.\the\x012996,98725
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\x7fno.\the\x012998,98796
+\gdef\xreftie{\x7fxreftie\x013001,98891
+  \let\linenumber = \empty % Non-3.0.\x7flinenumber\x013007,99091
+  \def\linenumber{\x7flinenumber\x013009,99135
+\def\refx#1#2{\x7frefx\x013015,99319
+\def\xrdef #1#2{\x7fxrdef\x013037,99945
+{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {\x7fcsname\x013038,99962
+\def\readauxfile{\x7freadauxfile\x013040,100030
+\def\supereject{\x7fsupereject\x013110,101811
+\let\footnotestyle=\comment\x7ffootnotestyle\x013113,101918
+\let\ptexfootnote=\footnote\x7fptexfootnote\x013115,101947
+\long\gdef\footnote #1{\x7ffootnote\x013118,101993
+\edef\thisfootno{\x7fthisfootno\x013120,102060
+\let\@sf\empty\x7f@sf\x013121,102100
+\ifhmode\edef\@sf{\x7f@sf\x013122,102115
+\long\gdef\footnotezzz #1{\x7ffootnotezzz\x013126,102228
+\footstrut\parindent=\defaultparindent\hang\textindent{\x7faultparindent\hang\x013131,102496
+\def\openindices{\x7fopenindices\x013139,102682
+\newdimen\defaultparindent \defaultparindent = 15pt\x7faultparindent\x013151,102907
 \newdimen\defaultparindent \defaultparindent = 15pt\x7faultparindent\x013151,102907
 \parindent = \defaultparindent\x7faultparindent\x013152,102959
-\def\smallbook{\x7f\smallbook\x013175,103683
-\global\def\Esmallexample{\x7f\Esmallexample\x013192,104110
-\def\afourpaper{\x7f\afourpaper\x013196,104201
-\def\finalout{\x7f\finalout\x013224,105009
-\def\normaldoublequote{\x7f\normaldoublequote\x013235,105270
-\def\normaltilde{\x7f\normaltilde\x013236,105296
-\def\normalcaret{\x7f\normalcaret\x013237,105316
-\def\normalunderscore{\x7f\normalunderscore\x013238,105336
-\def\normalverticalbar{\x7f\normalverticalbar\x013239,105361
-\def\normalless{\x7f\normalless\x013240,105387
-\def\normalgreater{\x7f\normalgreater\x013241,105406
-\def\normalplus{\x7f\normalplus\x013242,105428
-\def\ifusingtt#1#2{\x7f\ifusingtt\x013253,105920
-\def\activedoublequote{\x7f\activedoublequote\x013261,106248
+\def\smallbook{\x7fsmallbook\x013175,103683
+\global\let\smalllisp=\smalllispx\x7fsmalllisp\x013190,104039
+\global\let\smallexample=\smalllispx\x7fsmallexample\x013191,104073
+\global\def\Esmallexample{\x7fEsmallexample\x013192,104110
+\def\afourpaper{\x7fafourpaper\x013196,104201
+\def\finalout{\x7ffinalout\x013224,105009
+\def\normaldoublequote{\x7fnormaldoublequote\x013235,105270
+\def\normaltilde{\x7fnormaltilde\x013236,105296
+\def\normalcaret{\x7fnormalcaret\x013237,105316
+\def\normalunderscore{\x7fnormalunderscore\x013238,105336
+\def\normalverticalbar{\x7fnormalverticalbar\x013239,105361
+\def\normalless{\x7fnormalless\x013240,105387
+\def\normalgreater{\x7fnormalgreater\x013241,105406
+\def\normalplus{\x7fnormalplus\x013242,105428
+\def\ifusingtt#1#2{\x7fifusingtt\x013253,105920
+\def\activedoublequote{\x7factivedoublequote\x013261,106248
+\let"=\activedoublequote\x7f"\x013262,106289
 \def~{\x7f~\x013264,106334
 \def^{\x7f^\x013267,106395
 \def_{\x7f_\x013270,106434
-\def\_{\x7f\_\x013272,106508
-\def\lvvmode{\x7f\lvvmode\x013279,106845
+\def\_{\x7f_\x013272,106508
+\def\lvvmode{\x7flvvmode\x013279,106845
 \def|{\x7f|\x013282,106895
 \def<{\x7f<\x013285,106958
 \def>{\x7f>\x013288,107015
 \def+{\x7f+\x013290,107053
-\def\turnoffactive{\x7f\turnoffactive\x013296,107214
+\def\turnoffactive{\x7fturnoffactive\x013296,107214
+\def\turnoffactive{\let"=\normaldoublequote\x7f"\x013296,107214
+\let~=\normaltilde\x7f~\x013297,107258
+\let^=\normalcaret\x7f^\x013298,107277
+\let_=\normalunderscore\x7f_\x013299,107296
+\let|=\normalverticalbar\x7f|\x013300,107320
+\let<=\normalless\x7f<\x013301,107345
+\let>=\normalgreater\x7f>\x013302,107363
+\let+=\normalplus}\x7f+\x013303,107384
 \global\def={\x7f=\x013307,107500
-\def\normalbackslash{\x7f\normalbackslash\x013321,107882
+\def\normalbackslash{\x7fnormalbackslash\x013321,107882
 \f
 merc-src/accumulator.m,3228
 :- interface\x7f146,5371
diff --git a/test/manual/etags/ETAGS.good_4 b/test/manual/etags/ETAGS.good_4
index dc65a09fdc2..afde92702bb 100644
--- a/test/manual/etags/ETAGS.good_4
+++ b/test/manual/etags/ETAGS.good_4
@@ -3310,8 +3310,8 @@ scm-src/test.scm,260
 (define (((((curry-test \x7f14,205
 (define-syntax test-begin\x7f17,265
 \f
-tex-src/testenv.tex,52
-\newcommand{\nm}\x7f\nm\x014,77
+tex-src/testenv.tex,51
+\newcommand{\nm}\x7fnm\x014,77
 \section{blah}\x7fblah\x018,139
 \f
 tex-src/gzip.texi,303
@@ -3326,722 +3326,1142 @@ tex-src/gzip.texi,303
 @node Problems,\x7f460,16769
 @node Concept Index,\x7fConcept Index\x01473,17289
 \f
-tex-src/texinfo.tex,30627
-\def\texinfoversion{\x7f\texinfoversion\x0126,1035
-\def\tie{\x7f\tie\x0149,1526
-\def\gloggingall{\x7f\gloggingall\x0172,2276
-\def\loggingall{\x7f\loggingall\x0173,2345
-\def\onepageout#1{\x7f\onepageout\x0199,3282
-\def\croppageout#1{\x7f\croppageout\x01115,4032
-\def\cropmarks{\x7f\cropmarks\x01142,5092
-\def\pagebody#1{\x7f\pagebody\x01144,5139
-\def\ewtop{\x7f\ewtop\x01157,5594
-\def\nstop{\x7f\nstop\x01158,5658
-\def\ewbot{\x7f\ewbot\x01160,5741
-\def\nsbot{\x7f\nsbot\x01161,5805
-\def\parsearg #1{\x7f\parsearg\x01170,6104
-\def\parseargx{\x7f\parseargx\x01172,6182
-\def\parseargline{\x7f\parseargline\x01182,6422
-\def\flushcr{\x7f\flushcr\x01186,6543
-\newif\ifENV \ENVfalse \def\inENV{\x7f\inENV\x01190,6742
-\def\ENVcheck{\x7f\ENVcheck\x01191,6806
-\outer\def\begin{\x7f\begin\x01198,7053
-\def\beginxxx #1{\x7f\beginxxx\x01200,7091
-\def\end{\x7f\end\x01208,7346
-\def\endxxx #1{\x7f\endxxx\x01210,7374
-\def\errorE#1{\x7f\errorE\x01216,7563
-\def\singlespace{\x7f\singlespace\x01222,7757
-\def\@{\x7f\@\x01232,7980
-\def\`{\x7f\`\x01236,8080
-\def\'{\x7f\'\x01237,8092
-\def\mylbrace {\x7f\mylbrace\x01241,8140
-\def\myrbrace {\x7f\myrbrace\x01242,8173
-\def\:{\x7f\:\x01247,8287
-\def\*{\x7f\*\x01250,8341
-\def\.{\x7f\.\x01253,8417
-\def\w#1{\x7f\w\x01258,8648
-\def\group{\x7f\group\x01268,9131
-  \def\Egroup{\x7f\Egroup\x01273,9295
-\def\need{\x7f\need\x01289,9737
-\def\needx#1{\x7f\needx\x01300,10014
-\def\dots{\x7f\dots\x01339,11400
-\def\page{\x7f\page\x01343,11464
-\def\exdent{\x7f\exdent\x01353,11791
-\def\exdentyyy #1{\x7f\exdentyyy\x01354,11824
-\def\nofillexdent{\x7f\nofillexdent\x01357,11968
-\def\nofillexdentyyy #1{\x7f\nofillexdentyyy\x01358,12013
-\def\include{\x7f\include\x01365,12197
-\def\includezzz #1{\x7f\includezzz\x01366,12232
-\def\thisfile{\x7f\thisfile\x01369,12283
-\def\center{\x7f\center\x01373,12346
-\def\centerzzz #1{\x7f\centerzzz\x01374,12379
-\def\sp{\x7f\sp\x01380,12521
-\def\spxxx #1{\x7f\spxxx\x01381,12546
-\def\comment{\x7f\comment\x01387,12720
-\def\commentxxx #1{\x7f\commentxxx\x01390,12817
-\def\ignoresections{\x7f\ignoresections\x01396,12986
-\let\chapter=\relax\x7f=\relax\x01397,13008
-\let\section=\relax\x7f=\relax\x01406,13253
-\let\subsection=\relax\x7f=\relax\x01409,13314
-\let\subsubsection=\relax\x7f=\relax\x01410,13337
-\let\appendix=\relax\x7f=\relax\x01411,13363
-\let\appendixsec=\relax\x7fsec=\relax\x01412,13384
-\let\appendixsection=\relax\x7fsection=\relax\x01413,13408
-\let\appendixsubsec=\relax\x7fsubsec=\relax\x01414,13436
-\let\appendixsubsection=\relax\x7fsubsection=\relax\x01415,13463
-\let\appendixsubsubsec=\relax\x7fsubsubsec=\relax\x01416,13494
-\let\appendixsubsubsection=\relax\x7fsubsubsection=\relax\x01417,13524
-\def\ignore{\x7f\ignore\x01423,13626
-\long\def\ignorexxx #1\end ignore{\x7f\ignorexxx\x01427,13766
-\def\direntry{\x7f\direntry\x01429,13825
-\long\def\direntryxxx #1\end direntry{\x7f\direntryxxx\x01430,13864
-\def\ifset{\x7f\ifset\x01434,13974
-\def\ifsetxxx #1{\x7f\ifsetxxx\x01436,14032
-\def\Eifset{\x7f\Eifset\x01440,14159
-\def\ifsetfail{\x7f\ifsetfail\x01441,14173
-\long\def\ifsetfailxxx #1\end ifset{\x7f\ifsetfailxxx\x01442,14229
-\def\ifclear{\x7f\ifclear\x01444,14290
-\def\ifclearxxx #1{\x7f\ifclearxxx\x01446,14352
-\def\Eifclear{\x7f\Eifclear\x01450,14483
-\def\ifclearfail{\x7f\ifclearfail\x01451,14499
-\long\def\ifclearfailxxx #1\end ifclear{\x7f\ifclearfailxxx\x01452,14559
-\def\set{\x7f\set\x01456,14710
-\def\setxxx #1{\x7f\setxxx\x01457,14737
-\def\clear{\x7f\clear\x01460,14799
-\def\clearxxx #1{\x7f\clearxxx\x01461,14830
-\def\iftex{\x7f\iftex\x01466,14947
-\def\Eiftex{\x7f\Eiftex\x01467,14960
-\def\ifinfo{\x7f\ifinfo\x01468,14974
-\long\def\ifinfoxxx #1\end ifinfo{\x7f\ifinfoxxx\x01469,15024
-\long\def\menu #1\end menu{\x7f\menu\x01471,15083
-\def\asis#1{\x7f\asis\x01472,15112
-\def\math#1{\x7f\math\x01485,15655
-\def\node{\x7f\node\x01487,15699
-\def\nodezzz#1{\x7f\nodezzz\x01488,15737
-\def\nodexxx[#1,#2]{\x7f\nodexxx[\x01489,15768
-\def\donoderef{\x7f\donoderef\x01492,15830
-\def\unnumbnoderef{\x7f\unnumbnoderef\x01496,15951
-\def\appendixnoderef{\x7f\appendixnoderef\x01500,16082
+tex-src/texinfo.tex,55236
+\def\texinfoversion{\x7ftexinfoversion\x0126,1035
+\let\ptexlbrace=\{\x7fptexlbrace\x0135,1308
+\let\ptexrbrace=\}\x7fptexrbrace\x0136,1327
+\let\ptexdots=\dots\x7fptexdots\x0137,1346
+\let\ptexdot=\.\x7fptexdot\x0138,1366
+\let\ptexstar=\*\x7fptexstar\x0139,1382
+\let\ptexend=\end\x7fptexend\x0140,1399
+\let\ptexbullet=\bullet\x7fptexbullet\x0141,1417
+\let\ptexb=\b\x7fptexb\x0142,1441
+\let\ptexc=\c\x7fptexc\x0143,1455
+\let\ptexi=\i\x7fptexi\x0144,1469
+\let\ptext=\t\x7fptext\x0145,1483
+\let\ptexl=\l\x7fptexl\x0146,1497
+\let\ptexL=\L\x7fptexL\x0147,1511
+\def\tie{\x7ftie\x0149,1526
+\def\gloggingall{\x7fgloggingall\x0172,2276
+\def\loggingall{\x7floggingall\x0173,2345
+\def\onepageout#1{\x7fonepageout\x0199,3282
+\shipout\vbox{{\let\hsize=\pagewidth \makeheadline}\x7fhsize\x01103,3489
+{\let\hsize=\pagewidth \makefootline}\x7fhsize\x01104,3556
+\def\croppageout#1{\x7fcroppageout\x01115,4032
+			{\let\hsize=\pagewidth \makeheadline}\x7fhsize\x01126,4511
+			{\let\hsize=\pagewidth \makefootline}\x7fhsize\x01128,4569
+\def\cropmarks{\x7fcropmarks\x01142,5092
+\def\cropmarks{\let\onepageout=\croppageout }\x7fonepageout\x01142,5092
+\def\pagebody#1{\x7fpagebody\x01144,5139
+\gdef\pagecontents#1{\x7fpagecontents\x01146,5220
+\def\ewtop{\x7fewtop\x01157,5594
+\def\nstop{\x7fnstop\x01158,5658
+\def\ewbot{\x7fewbot\x01160,5741
+\def\nsbot{\x7fnsbot\x01161,5805
+\def\parsearg #1{\x7fparsearg\x01170,6104
+\def\parsearg #1{\let\next=#1\begingroup\obeylines\futurelet\temp\parseargx}\x7fnext\x01170,6104
+\def\parseargx{\x7fparseargx\x01172,6182
+\gdef\parseargdiscardspace {\x7fparseargdiscardspace\x01178,6321
+\gdef\obeyedspace{\x7fobeyedspace\x01180,6399
+\def\parseargline{\x7fparseargline\x01182,6422
+\gdef\parsearglinex #1^^M{\x7fparsearglinex\x01184,6493
+\def\flushcr{\x7fflushcr\x01186,6543
+\def\flushcr{\ifx\par\lisppar \def\next##1{\x7fnext\x01186,6543
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}\x7fnext\x01186,6543
+\newif\ifENV \ENVfalse \def\inENV{\x7finENV\x01190,6742
+\def\ENVcheck{\x7fENVcheck\x01191,6806
+\outer\def\begin{\x7fbegin\x01198,7053
+\def\beginxxx #1{\x7fbeginxxx\x01200,7091
+\def\end{\x7fend\x01208,7346
+\def\endxxx #1{\x7fendxxx\x01210,7374
+\def\errorE#1{\x7ferrorE\x01216,7563
+\def\singlespace{\x7fsinglespace\x01222,7757
+\def\@{\x7f@\x01232,7980
+\def\`{\x7f`\x01236,8080
+\def\'{\x7f'\x01237,8092
+\def\mylbrace {\x7fmylbrace\x01241,8140
+\def\myrbrace {\x7fmyrbrace\x01242,8173
+\let\{=\mylbrace\x7f{\x01243,8206
+\let\}=\myrbrace\x7f}\x01244,8223
+\def\:{\x7f:\x01247,8287
+\def\*{\x7f*\x01250,8341
+\def\.{\x7f.\x01253,8417
+\def\w#1{\x7fw\x01258,8648
+\def\group{\x7fgroup\x01268,9131
+  \def\Egroup{\x7fEgroup\x01273,9295
+\def\need{\x7fneed\x01289,9737
+\def\needx#1{\x7fneedx\x01300,10014
+\let\br = \par\x7fbr\x01335,11355
+\def\dots{\x7fdots\x01339,11400
+\def\page{\x7fpage\x01343,11464
+\def\exdent{\x7fexdent\x01353,11791
+\def\exdentyyy #1{\x7fexdentyyy\x01354,11824
+\def\nofillexdent{\x7fnofillexdent\x01357,11968
+\def\nofillexdentyyy #1{\x7fnofillexdentyyy\x01358,12013
+\def\include{\x7finclude\x01365,12197
+\def\includezzz #1{\x7fincludezzz\x01366,12232
+\def\includezzz #1{{\def\thisfile{\x7fthisfile\x01366,12232
+\def\thisfile{\x7fthisfile\x01369,12283
+\def\center{\x7fcenter\x01373,12346
+\def\centerzzz #1{\x7fcenterzzz\x01374,12379
+\def\sp{\x7fsp\x01380,12521
+\def\spxxx #1{\x7fspxxx\x01381,12546
+\def\comment{\x7fcomment\x01387,12720
+\def\commentxxx #1{\x7fcommentxxx\x01390,12817
+\let\c=\comment\x7fc\x01392,12883
+\def\ignoresections{\x7fignoresections\x01396,12986
+\let\chapter=\relax\x7fchapter\x01397,13008
+\let\unnumbered=\relax\x7funnumbered\x01398,13028
+\let\top=\relax\x7ftop\x01399,13051
+\let\unnumberedsec=\relax\x7funnumberedsec\x01400,13067
+\let\unnumberedsection=\relax\x7funnumberedsection\x01401,13093
+\let\unnumberedsubsec=\relax\x7funnumberedsubsec\x01402,13123
+\let\unnumberedsubsection=\relax\x7funnumberedsubsection\x01403,13152
+\let\unnumberedsubsubsec=\relax\x7funnumberedsubsubsec\x01404,13185
+\let\unnumberedsubsubsection=\relax\x7funnumberedsubsubsection\x01405,13217
+\let\section=\relax\x7fsection\x01406,13253
+\let\subsec=\relax\x7fsubsec\x01407,13273
+\let\subsubsec=\relax\x7fsubsubsec\x01408,13292
+\let\subsection=\relax\x7fsubsection\x01409,13314
+\let\subsubsection=\relax\x7fsubsubsection\x01410,13337
+\let\appendix=\relax\x7fappendix\x01411,13363
+\let\appendixsec=\relax\x7fappendixsec\x01412,13384
+\let\appendixsection=\relax\x7fappendixsection\x01413,13408
+\let\appendixsubsec=\relax\x7fappendixsubsec\x01414,13436
+\let\appendixsubsection=\relax\x7fappendixsubsection\x01415,13463
+\let\appendixsubsubsec=\relax\x7fappendixsubsubsec\x01416,13494
+\let\appendixsubsubsection=\relax\x7fappendixsubsubsection\x01417,13524
+\let\contents=\relax\x7fcontents\x01418,13558
+\let\smallbook=\relax\x7fsmallbook\x01419,13579
+\let\titlepage=\relax\x7ftitlepage\x01420,13601
+\def\ignore{\x7fignore\x01423,13626
+\long\def\ignorexxx #1\end ignore{\x7fignorexxx\x01427,13766
+\def\direntry{\x7fdirentry\x01429,13825
+\long\def\direntryxxx #1\end direntry{\x7fdirentryxxx\x01430,13864
+\def\ifset{\x7fifset\x01434,13974
+\def\ifsetxxx #1{\x7fifsetxxx\x01436,14032
+\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\ifsetfail\x7ftemp\x01437,14059
+\else \let\temp=\relax \fi\x7ftemp\x01438,14125
+\def\Eifset{\x7fEifset\x01440,14159
+\def\ifsetfail{\x7fifsetfail\x01441,14173
+\long\def\ifsetfailxxx #1\end ifset{\x7fifsetfailxxx\x01442,14229
+\def\ifclear{\x7fifclear\x01444,14290
+\def\ifclearxxx #1{\x7fifclearxxx\x01446,14352
+\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\relax\x7ftemp\x01447,14381
+\else \let\temp=\ifclearfail \fi\x7ftemp\x01448,14443
+\def\Eifclear{\x7fEifclear\x01450,14483
+\def\ifclearfail{\x7fifclearfail\x01451,14499
+\long\def\ifclearfailxxx #1\end ifclear{\x7fifclearfailxxx\x01452,14559
+\def\set{\x7fset\x01456,14710
+\def\setxxx #1{\x7fsetxxx\x01457,14737
+\expandafter\let\csname IF#1\endcsname=\set}\x7fcsname\x01458,14753
+\def\clear{\x7fclear\x01460,14799
+\def\clearxxx #1{\x7fclearxxx\x01461,14830
+\expandafter\let\csname IF#1\endcsname=\relax}\x7fcsname\x01462,14848
+\def\iftex{\x7fiftex\x01466,14947
+\def\Eiftex{\x7fEiftex\x01467,14960
+\def\ifinfo{\x7fifinfo\x01468,14974
+\long\def\ifinfoxxx #1\end ifinfo{\x7fifinfoxxx\x01469,15024
+\long\def\menu #1\end menu{\x7fmenu\x01471,15083
+\def\asis#1{\x7fasis\x01472,15112
+\let\implicitmath = $\x7fimplicitmath\x01484,15633
+\def\math#1{\x7fmath\x01485,15655
+\def\node{\x7fnode\x01487,15699
+\def\nodezzz#1{\x7fnodezzz\x01488,15737
+\def\nodexxx[#1,#2]{\x7fnodexxx\x01489,15768
+\def\nodexxx[#1,#2]{\gdef\lastnode{\x7flastnode\x01489,15768
+\let\lastnode=\relax\x7flastnode\x01490,15808
+\def\donoderef{\x7fdonoderef\x01492,15830
+\let\lastnode=\relax}\x7flastnode\x01494,15928
+\def\unnumbnoderef{\x7funnumbnoderef\x01496,15951
+\let\lastnode=\relax}\x7flastnode\x01498,16059
+\def\appendixnoderef{\x7fappendixnoderef\x01500,16082
 \expandafter\expandafter\expandafter\appendixsetref{\x7fsetref\x01501,16128
-\let\refill=\relax\x7fill=\relax\x01504,16217
-\def\setfilename{\x7f\setfilename\x01509,16431
-\outer\def\bye{\x7f\bye\x01518,16677
-\def\inforef #1{\x7f\inforef\x01520,16733
-\def\inforefzzz #1,#2,#3,#4**{\x7f\inforefzzz\x01521,16771
-\def\losespace #1{\x7f\losespace\x01523,16868
-\def\sf{\x7f\sf\x01532,17072
-\font\defbf=cmbx10 scaled \magstep1 %was 1314\x7fbf=cmbx10\x01558,17867
-\font\deftt=cmtt10 scaled \magstep1\x7ftt=cmtt10\x01559,17913
-\def\df{\x7f\df\x01560,17949
-\def\resetmathfonts{\x7f\resetmathfonts\x01635,20543
-\def\textfonts{\x7f\textfonts\x01648,21132
-\def\chapfonts{\x7f\chapfonts\x01653,21347
-\def\secfonts{\x7f\secfonts\x01658,21563
-\def\subsecfonts{\x7f\subsecfonts\x01663,21768
-\def\indexfonts{\x7f\indexfonts\x01668,21985
-\def\smartitalicx{\x7f\smartitalicx\x01691,22717
-\def\smartitalic#1{\x7f\smartitalic\x01692,22793
-\let\cite=\smartitalic\x7f=\smartitalic\x01698,22938
-\def\b#1{\x7f\b\x01700,22962
-\def\t#1{\x7f\t\x01703,22997
-\def\samp #1{\x7f\samp\x01706,23149
-\def\key #1{\x7f\key\x01707,23182
-\def\ctrl #1{\x7f\ctrl\x01708,23243
-\def\tclose#1{\x7f\tclose\x01716,23445
-\def\ {\x7f\\x01720,23611
-\def\xkey{\x7f\xkey\x01728,23880
-\def\kbdfoo#1#2#3\par{\x7f\kbdfoo\x01729,23896
-\def\dmn#1{\x7f\dmn\x01738,24197
-\def\kbd#1{\x7f\kbd\x01740,24224
-\def\l#1{\x7f\l\x01742,24281
-\def\r#1{\x7f\r\x01744,24310
-\def\sc#1{\x7f\sc\x01746,24378
-\def\ii#1{\x7f\ii\x01747,24421
-\def\titlefont#1{\x7f\titlefont\x01755,24654
-\def\titlepage{\x7f\titlepage\x01761,24757
-   \def\subtitlefont{\x7f\subtitlefont\x01766,24984
-   \def\authorfont{\x7f\authorfont\x01768,25068
-   \def\title{\x7f\title\x01774,25278
-   \def\titlezzz##1{\x7f\titlezzz\x01775,25313
-   \def\subtitle{\x7f\subtitle\x01783,25628
-   \def\subtitlezzz##1{\x7f\subtitlezzz\x01784,25669
-   \def\author{\x7f\author\x01787,25787
-   \def\authorzzz##1{\x7f\authorzzz\x01788,25824
-   \def\page{\x7f\page\x01794,26115
-\def\Etitlepage{\x7f\Etitlepage\x01804,26284
-\def\finishtitlepage{\x7f\finishtitlepage\x01817,26672
-\def\evenheading{\x7f\evenheading\x01846,27680
-\def\oddheading{\x7f\oddheading\x01847,27723
-\def\everyheading{\x7f\everyheading\x01848,27764
-\def\evenfooting{\x7f\evenfooting\x01850,27810
-\def\oddfooting{\x7f\oddfooting\x01851,27853
-\def\everyfooting{\x7f\everyfooting\x01852,27894
-\def\headings #1 {\x7f\headings\x01893,29586
-\def\HEADINGSoff{\x7f\HEADINGSoff\x01895,29635
-\def\HEADINGSdouble{\x7f\HEADINGSdouble\x01904,30062
-\def\HEADINGSsingle{\x7f\HEADINGSsingle\x01914,30382
-\def\HEADINGSon{\x7f\HEADINGSon\x01922,30603
-\def\HEADINGSafter{\x7f\HEADINGSafter\x01924,30637
-\def\HEADINGSdoublex{\x7f\HEADINGSdoublex\x01926,30732
-\def\HEADINGSsingleafter{\x7f\HEADINGSsingleafter\x01933,30920
-\def\HEADINGSsinglex{\x7f\HEADINGSsinglex\x01934,30981
-\def\today{\x7f\today\x01943,31256
-\def\thistitle{\x7f\thistitle\x01958,31801
-\def\settitle{\x7f\settitle\x01959,31826
-\def\settitlezzz #1{\x7f\settitlezzz\x01960,31863
-\def\internalBitem{\x7f\internalBitem\x01992,32793
-\def\internalBitemx{\x7f\internalBitemx\x01993,32843
-\def\internalBxitem "#1"{\x7f\internalBxitem\x01995,32888
-\def\internalBxitemx "#1"{\x7f\internalBxitemx\x01996,32968
-\def\internalBkitem{\x7f\internalBkitem\x01998,33043
-\def\internalBkitemx{\x7f\internalBkitemx\x01999,33095
-\def\kitemzzz #1{\x7f\kitemzzz\x011001,33142
-\def\xitemzzz #1{\x7f\xitemzzz\x011004,33244
-\def\itemzzz #1{\x7f\itemzzz\x011007,33347
-\def\item{\x7f\item\x011037,34418
-\def\itemx{\x7f\itemx\x011038,34469
-\def\kitem{\x7f\kitem\x011039,34522
-\def\kitemx{\x7f\kitemx\x011040,34575
-\def\xitem{\x7f\xitem\x011041,34630
-\def\xitemx{\x7f\xitemx\x011042,34683
-\def\description{\x7f\description\x011045,34793
-\def\table{\x7f\table\x011047,34843
-\def\ftable{\x7f\ftable\x011052,34987
-\def\Eftable{\x7f\Eftable\x011056,35133
-\def\vtable{\x7f\vtable\x011059,35202
-\def\Evtable{\x7f\Evtable\x011063,35348
-\def\dontindex #1{\x7f\dontindex\x011066,35417
-\def\fnitemindex #1{\x7f\fnitemindex\x011067,35437
-\def\vritemindex #1{\x7f\vritemindex\x011068,35482
-\def\tablez #1#2#3#4#5#6{\x7f\tablez\x011074,35631
-\def\Edescription{\x7f\Edescription\x011077,35689
-\def\itemfont{\x7f\itemfont\x011082,35890
-\def\Etable{\x7f\Etable\x011090,36116
-\def\itemize{\x7f\itemize\x011103,36440
-\def\itemizezzz #1{\x7f\itemizezzz\x011105,36476
-\def\itemizey #1#2{\x7f\itemizey\x011110,36571
-\def#2{\x7f1119,36817
-\def\itemcontents{\x7f\itemcontents\x011120,36858
-\def\bullet{\x7f\bullet\x011123,36906
-\def\minus{\x7f\minus\x011124,36933
-\def\frenchspacing{\x7f\frenchspacing\x011128,37041
-\def\splitoff#1#2\endmark{\x7f\splitoff\x011134,37266
-\def\enumerate{\x7f\enumerate\x011140,37496
-\def\enumeratezzz #1{\x7f\enumeratezzz\x011141,37535
-\def\enumeratey #1 #2\endenumeratey{\x7f\enumeratey\x011142,37588
-  \def\thearg{\x7f\thearg\x011146,37735
-  \ifx\thearg\empty \def\thearg{\x7f\thearg\x011147,37754
-\def\numericenumerate{\x7f\numericenumerate\x011184,39088
-\def\lowercaseenumerate{\x7f\lowercaseenumerate\x011190,39218
-\def\uppercaseenumerate{\x7f\uppercaseenumerate\x011203,39565
-\def\startenumeration#1{\x7f\startenumeration\x011219,40055
-\def\alphaenumerate{\x7f\alphaenumerate\x011227,40237
-\def\capsenumerate{\x7f\capsenumerate\x011228,40272
-\def\Ealphaenumerate{\x7f\Ealphaenumerate\x011229,40306
-\def\Ecapsenumerate{\x7f\Ecapsenumerate\x011230,40340
-\def\itemizeitem{\x7f\itemizeitem\x011234,40420
-\def\newindex #1{\x7f\newindex\x011259,41277
-\def\defindex{\x7f\defindex\x011268,41566
-\def\newcodeindex #1{\x7f\newcodeindex\x011272,41674
-\def\defcodeindex{\x7f\defcodeindex\x011279,41934
-\def\synindex #1 #2 {\x7f\synindex\x011283,42114
-\def\syncodeindex #1 #2 {\x7f\syncodeindex\x011292,42454
-\def\doindex#1{\x7f\doindex\x011309,43133
-\def\singleindexer #1{\x7f\singleindexer\x011310,43192
-\def\docodeindex#1{\x7f\docodeindex\x011313,43304
-\def\singlecodeindexer #1{\x7f\singlecodeindexer\x011314,43371
-\def\indexdummies{\x7f\indexdummies\x011316,43429
-\def\_{\x7f\_\x011317,43449
-\def\w{\x7f\w\x011318,43477
-\def\bf{\x7f\bf\x011319,43504
-\def\rm{\x7f\rm\x011320,43533
-\def\sl{\x7f\sl\x011321,43562
-\def\sf{\x7f\sf\x011322,43591
-\def\tt{\x7f\tt\x011323,43619
-\def\gtr{\x7f\gtr\x011324,43647
-\def\less{\x7f\less\x011325,43677
-\def\hat{\x7f\hat\x011326,43709
-\def\char{\x7f\char\x011327,43739
-\def\TeX{\x7f\TeX\x011328,43771
-\def\dots{\x7f\dots\x011329,43801
-\def\copyright{\x7f\copyright\x011330,43834
-\def\tclose##1{\x7f\tclose\x011331,43877
-\def\code##1{\x7f\code\x011332,43922
-\def\samp##1{\x7f\samp\x011333,43963
-\def\t##1{\x7f\t\x011334,44004
-\def\r##1{\x7f\r\x011335,44039
-\def\i##1{\x7f\i\x011336,44074
-\def\b##1{\x7f\b\x011337,44109
-\def\cite##1{\x7f\cite\x011338,44144
-\def\key##1{\x7f\key\x011339,44185
-\def\file##1{\x7f\file\x011340,44224
-\def\var##1{\x7f\var\x011341,44265
-\def\kbd##1{\x7f\kbd\x011342,44304
-\def\indexdummyfont#1{\x7f\indexdummyfont\x011347,44460
-\def\indexdummytex{\x7f\indexdummytex\x011348,44486
-\def\indexdummydots{\x7f\indexdummydots\x011349,44510
-\def\indexnofonts{\x7f\indexnofonts\x011351,44536
+\let\lastnode=\relax}\x7flastnode\x01502,16194
+\let\refill=\relax\x7frefill\x01504,16217
+\def\setfilename{\x7fsetfilename\x01509,16431
+   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.\x7fsetfilename\x01514,16562
+\outer\def\bye{\x7fbye\x01518,16677
+\def\inforef #1{\x7finforef\x01520,16733
+\def\inforefzzz #1,#2,#3,#4**{\x7finforefzzz\x01521,16771
+\def\losespace #1{\x7flosespace\x01523,16868
+\def\sf{\x7fsf\x01532,17072
+\let\li = \sf % Sometimes we call it \li, not \sf.\x7fli\x01533,17100
+\let\mainmagstep=\magstephalf\x7fmainmagstep\x01536,17201
+\let\mainmagstep=\magstep1\x7fmainmagstep\x01539,17250
+\font\defbf=cmbx10 scaled \magstep1 %was 1314\x7fbf\x01558,17867
+\font\deftt=cmtt10 scaled \magstep1\x7ftt\x01559,17913
+\def\df{\x7fdf\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftentt\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftt\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftenbf\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7fbf\x01560,17949
+\let\indsl=\indit\x7findsl\x01570,18310
+\let\indtt=\ninett\x7findtt\x01571,18328
+\let\indsf=\indrm\x7findsf\x01572,18347
+\let\indbf=\indrm\x7findbf\x01573,18365
+\let\indsc=\indrm\x7findsc\x01574,18383
+\let\chapbf=\chaprm\x7fchapbf\x01584,18643
+\let\authorrm = \secrm\x7fauthorrm\x01627,20193
+\def\resetmathfonts{\x7fresetmathfonts\x01635,20543
+\def\textfonts{\x7ftextfonts\x01648,21132
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftenrm\x01649,21149
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftenit\x01649,21149
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftensl\x01649,21149
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7ftenbf\x01650,21208
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7ftentt\x01650,21208
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7fsmallcaps\x01650,21208
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7ftensf\x01651,21271
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7fteni\x01651,21271
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7ftensy\x01651,21271
+\def\chapfonts{\x7fchapfonts\x01653,21347
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftenrm\x01654,21364
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftenit\x01654,21364
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftensl\x01654,21364
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7ftenbf\x01655,21424
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7ftentt\x01655,21424
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7fsmallcaps\x01655,21424
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7ftensf\x01656,21487
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7fteni\x01656,21487
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7ftensy\x01656,21487
+\def\secfonts{\x7fsecfonts\x01658,21563
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftenrm\x01659,21579
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftenit\x01659,21579
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftensl\x01659,21579
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7ftenbf\x01660,21635
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7ftentt\x01660,21635
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7fsmallcaps\x01660,21635
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7ftensf\x01661,21695
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7fteni\x01661,21695
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7ftensy\x01661,21695
+\def\subsecfonts{\x7fsubsecfonts\x01663,21768
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftenrm\x01664,21787
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftenit\x01664,21787
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftensl\x01664,21787
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7ftenbf\x01665,21846
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7ftentt\x01665,21846
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7fsmallcaps\x01665,21846
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7ftensf\x01666,21909
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7fteni\x01666,21909
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7ftensy\x01666,21909
+\def\indexfonts{\x7findexfonts\x01668,21985
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftenrm\x01669,22003
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftenit\x01669,22003
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftensl\x01669,22003
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7ftenbf\x01670,22059
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7ftentt\x01670,22059
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7fsmallcaps\x01670,22059
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7ftensf\x01671,22119
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7fteni\x01671,22119
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7ftensy\x01671,22119
+\def\smartitalicx{\x7fsmartitalicx\x01691,22717
+\def\smartitalic#1{\x7fsmartitalic\x01692,22793
+\let\i=\smartitalic\x7fi\x01694,22851
+\let\var=\smartitalic\x7fvar\x01695,22871
+\let\dfn=\smartitalic\x7fdfn\x01696,22893
+\let\emph=\smartitalic\x7femph\x01697,22915
+\let\cite=\smartitalic\x7fcite\x01698,22938
+\def\b#1{\x7fb\x01700,22962
+\let\strong=\b\x7fstrong\x01701,22981
+\def\t#1{\x7ft\x01703,22997
+\let\ttfont = \t\x7fttfont\x01704,23072
+\def\samp #1{\x7fsamp\x01706,23149
+\def\key #1{\x7fkey\x01707,23182
+\def\ctrl #1{\x7fctrl\x01708,23243
+\let\file=\samp\x7ffile\x01710,23285
+\def\tclose#1{\x7ftclose\x01716,23445
+\let\code=\tclose\x7fcode\x01722,23722
+\def\xkey{\x7fxkey\x01728,23880
+\def\kbdfoo#1#2#3\par{\x7fkbdfoo\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{\x7fone\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{\x7fthree\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{\x7fthreex\x01729,23896
+\def\dmn#1{\x7fdmn\x01738,24197
+\def\kbd#1{\x7fkbd\x01740,24224
+\def\kbd#1{\def\look{\x7flook\x01740,24224
+\def\l#1{\x7fl\x01742,24281
+\def\r#1{\x7fr\x01744,24310
+\def\sc#1{\x7fsc\x01746,24378
+\def\ii#1{\x7fii\x01747,24421
+\def\titlefont#1{\x7ftitlefont\x01755,24654
+\def\titlepage{\x7ftitlepage\x01761,24757
+   \let\subtitlerm=\tenrm\x7fsubtitlerm\x01762,24810
+   \def\subtitlefont{\x7fsubtitlefont\x01766,24984
+   \def\authorfont{\x7fauthorfont\x01768,25068
+   \def\title{\x7ftitle\x01774,25278
+   \def\titlezzz##1{\x7ftitlezzz\x01775,25313
+   \def\subtitle{\x7fsubtitle\x01783,25628
+   \def\subtitlezzz##1{\x7fsubtitlezzz\x01784,25669
+   \def\author{\x7fauthor\x01787,25787
+   \def\authorzzz##1{\x7fauthorzzz\x01788,25824
+   \let\oldpage = \page\x7foldpage\x01793,26091
+   \def\page{\x7fpage\x01794,26115
+      \let\page = \oldpage\x7fpage\x01799,26206
+\def\Etitlepage{\x7fEtitlepage\x01804,26284
+\def\finishtitlepage{\x7ffinishtitlepage\x01817,26672
+\let\thispage=\folio\x7fthispage\x01825,26825
+\let\HEADINGShook=\relax\x7fHEADINGShook\x01837,27420
+\def\evenheading{\x7fevenheading\x01846,27680
+\def\oddheading{\x7foddheading\x01847,27723
+\def\everyheading{\x7feveryheading\x01848,27764
+\def\evenfooting{\x7fevenfooting\x01850,27810
+\def\oddfooting{\x7foddfooting\x01851,27853
+\def\everyfooting{\x7feveryfooting\x01852,27894
+\gdef\evenheadingxxx #1{\x7fevenheadingxxx\x01856,27958
+\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{\x7fevenheadingyyy\x01857,28017
+\gdef\oddheadingxxx #1{\x7foddheadingxxx\x01860,28126
+\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{\x7foddheadingyyy\x01861,28183
+\gdef\everyheadingxxx #1{\x7feveryheadingxxx\x01864,28290
+\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{\x7feveryheadingyyy\x01865,28351
+\gdef\evenfootingxxx #1{\x7fevenfootingxxx\x01869,28522
+\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{\x7fevenfootingyyy\x01870,28581
+\gdef\oddfootingxxx #1{\x7foddfootingxxx\x01873,28690
+\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{\x7foddfootingyyy\x01874,28747
+\gdef\everyfootingxxx #1{\x7feveryfootingxxx\x01877,28854
+\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{\x7feveryfootingyyy\x01878,28915
+\def\headings #1 {\x7fheadings\x01893,29586
+\def\HEADINGSoff{\x7fHEADINGSoff\x01895,29635
+\def\HEADINGSdouble{\x7fHEADINGSdouble\x01904,30062
+\def\HEADINGSsingle{\x7fHEADINGSsingle\x01914,30382
+\def\HEADINGSon{\x7fHEADINGSon\x01922,30603
+\def\HEADINGSafter{\x7fHEADINGSafter\x01924,30637
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}\x7fHEADINGShook\x01924,30637
+\let\HEADINGSdoubleafter=\HEADINGSafter\x7fHEADINGSdoubleafter\x01925,30692
+\def\HEADINGSdoublex{\x7fHEADINGSdoublex\x01926,30732
+\def\HEADINGSsingleafter{\x7fHEADINGSsingleafter\x01933,30920
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}\x7fHEADINGShook\x01933,30920
+\def\HEADINGSsinglex{\x7fHEADINGSsinglex\x01934,30981
+\def\today{\x7ftoday\x01943,31256
+\def\thistitle{\x7fthistitle\x01958,31801
+\def\settitle{\x7fsettitle\x01959,31826
+\def\settitlezzz #1{\x7fsettitlezzz\x01960,31863
+\def\settitlezzz #1{\gdef\thistitle{\x7fthistitle\x01960,31863
+\def\internalBitem{\x7finternalBitem\x01992,32793
+\def\internalBitemx{\x7finternalBitemx\x01993,32843
+\def\internalBxitem "#1"{\x7finternalBxitem\x01995,32888
+\def\internalBxitem "#1"{\def\xitemsubtopix{\x7fxitemsubtopix\x01995,32888
+\def\internalBxitemx "#1"{\x7finternalBxitemx\x01996,32968
+\def\internalBxitemx "#1"{\def\xitemsubtopix{\x7fxitemsubtopix\x01996,32968
+\def\internalBkitem{\x7finternalBkitem\x01998,33043
+\def\internalBkitemx{\x7finternalBkitemx\x01999,33095
+\def\kitemzzz #1{\x7fkitemzzz\x011001,33142
+\def\xitemzzz #1{\x7fxitemzzz\x011004,33244
+\def\itemzzz #1{\x7fitemzzz\x011007,33347
+\def\item{\x7fitem\x011037,34418
+\def\itemx{\x7fitemx\x011038,34469
+\def\kitem{\x7fkitem\x011039,34522
+\def\kitemx{\x7fkitemx\x011040,34575
+\def\xitem{\x7fxitem\x011041,34630
+\def\xitemx{\x7fxitemx\x011042,34683
+\def\description{\x7fdescription\x011045,34793
+\def\table{\x7ftable\x011047,34843
+\gdef\tablex #1^^M{\x7ftablex\x011049,34925
+\def\ftable{\x7fftable\x011052,34987
+\gdef\ftablex #1^^M{\x7fftablex\x011054,35071
+\def\Eftable{\x7fEftable\x011056,35133
+\let\Etable=\relax}\x7fEtable\x011057,35180
+\def\vtable{\x7fvtable\x011059,35202
+\gdef\vtablex #1^^M{\x7fvtablex\x011061,35286
+\def\Evtable{\x7fEvtable\x011063,35348
+\let\Etable=\relax}\x7fEtable\x011064,35395
+\def\dontindex #1{\x7fdontindex\x011066,35417
+\def\fnitemindex #1{\x7ffnitemindex\x011067,35437
+\def\vritemindex #1{\x7fvritemindex\x011068,35482
+\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\x7ftabley\x011071,35543
+\def\tablez #1#2#3#4#5#6{\x7ftablez\x011074,35631
+\def\Edescription{\x7fEdescription\x011077,35689
+\let\itemindex=#1%\x7fitemindex\x011078,35735
+\def\itemfont{\x7fitemfont\x011082,35890
+\def\Etable{\x7fEtable\x011090,36116
+\let\item = \internalBitem %\x7fitem\x011091,36162
+\let\itemx = \internalBitemx %\x7fitemx\x011092,36191
+\let\kitem = \internalBkitem %\x7fkitem\x011093,36222
+\let\kitemx = \internalBkitemx %\x7fkitemx\x011094,36253
+\let\xitem = \internalBxitem %\x7fxitem\x011095,36286
+\let\xitemx = \internalBxitemx %\x7fxitemx\x011096,36317
+\def\itemize{\x7fitemize\x011103,36440
+\def\itemizezzz #1{\x7fitemizezzz\x011105,36476
+\def\itemizey #1#2{\x7fitemizey\x011110,36571
+\def\itemcontents{\x7fitemcontents\x011120,36858
+\let\item=\itemizeitem}\x7fitem\x011121,36881
+\def\bullet{\x7fbullet\x011123,36906
+\def\minus{\x7fminus\x011124,36933
+\def\frenchspacing{\x7ffrenchspacing\x011128,37041
+\def\splitoff#1#2\endmark{\x7fsplitoff\x011134,37266
+\def\splitoff#1#2\endmark{\def\first{\x7ffirst\x011134,37266
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{\x7frest\x011134,37266
+\def\enumerate{\x7fenumerate\x011140,37496
+\def\enumeratezzz #1{\x7fenumeratezzz\x011141,37535
+\def\enumeratey #1 #2\endenumeratey{\x7fenumeratey\x011142,37588
+  \def\thearg{\x7fthearg\x011146,37735
+  \ifx\thearg\empty \def\thearg{\x7fthearg\x011147,37754
+\def\numericenumerate{\x7fnumericenumerate\x011184,39088
+\def\lowercaseenumerate{\x7flowercaseenumerate\x011190,39218
+\def\uppercaseenumerate{\x7fuppercaseenumerate\x011203,39565
+\def\startenumeration#1{\x7fstartenumeration\x011219,40055
+\def\alphaenumerate{\x7falphaenumerate\x011227,40237
+\def\capsenumerate{\x7fcapsenumerate\x011228,40272
+\def\Ealphaenumerate{\x7fEalphaenumerate\x011229,40306
+\def\Ecapsenumerate{\x7fEcapsenumerate\x011230,40340
+\def\itemizeitem{\x7fitemizeitem\x011234,40420
+{\let\par=\endgraf \smallbreak}\x7fpar\x011236,40460
+\gdef\newwrite{\x7fnewwrite\x011249,40841
+\def\newindex #1{\x7fnewindex\x011259,41277
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011262,41439
+\def\defindex{\x7fdefindex\x011268,41566
+\def\newcodeindex #1{\x7fnewcodeindex\x011272,41674
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011275,41840
+\def\defcodeindex{\x7fdefcodeindex\x011279,41934
+\def\synindex #1 #2 {\x7fsynindex\x011283,42114
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname\x7fexpandafter\x011284,42137
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo\x7fcsname\x011285,42217
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011286,42273
+\def\syncodeindex #1 #2 {\x7fsyncodeindex\x011292,42454
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname\x7fexpandafter\x011293,42481
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo\x7fcsname\x011294,42561
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011295,42617
+\def\doindex#1{\x7fdoindex\x011309,43133
+\def\doindex#1{\edef\indexname{\x7findexname\x011309,43133
+\def\singleindexer #1{\x7fsingleindexer\x011310,43192
+\def\singleindexer #1{\doind{\indexname}\x7fname\x011310,43192
+\def\docodeindex#1{\x7fdocodeindex\x011313,43304
+\def\docodeindex#1{\edef\indexname{\x7findexname\x011313,43304
+\def\singlecodeindexer #1{\x7fsinglecodeindexer\x011314,43371
+\def\singlecodeindexer #1{\doind{\indexname}\x7fname\x011314,43371
+\def\indexdummies{\x7findexdummies\x011316,43429
+\def\_{\x7f_\x011317,43449
+\def\w{\x7fw\x011318,43477
+\def\bf{\x7fbf\x011319,43504
+\def\rm{\x7frm\x011320,43533
+\def\sl{\x7fsl\x011321,43562
+\def\sf{\x7fsf\x011322,43591
+\def\tt{\x7ftt\x011323,43619
+\def\gtr{\x7fgtr\x011324,43647
+\def\less{\x7fless\x011325,43677
+\def\hat{\x7fhat\x011326,43709
+\def\char{\x7fchar\x011327,43739
+\def\TeX{\x7fTeX\x011328,43771
+\def\dots{\x7fdots\x011329,43801
+\def\copyright{\x7fcopyright\x011330,43834
+\def\tclose##1{\x7ftclose\x011331,43877
+\def\code##1{\x7fcode\x011332,43922
+\def\samp##1{\x7fsamp\x011333,43963
+\def\t##1{\x7ft\x011334,44004
+\def\r##1{\x7fr\x011335,44039
+\def\i##1{\x7fi\x011336,44074
+\def\b##1{\x7fb\x011337,44109
+\def\cite##1{\x7fcite\x011338,44144
+\def\key##1{\x7fkey\x011339,44185
+\def\file##1{\x7ffile\x011340,44224
+\def\var##1{\x7fvar\x011341,44265
+\def\kbd##1{\x7fkbd\x011342,44304
+\def\indexdummyfont#1{\x7findexdummyfont\x011347,44460
+\def\indexdummytex{\x7findexdummytex\x011348,44486
+\def\indexdummydots{\x7findexdummydots\x011349,44510
+\def\indexnofonts{\x7findexnofonts\x011351,44536
+\let\w=\indexdummyfont\x7fw\x011352,44556
 \let\w=\indexdummyfont\x7fdummyfont\x011352,44556
+\let\t=\indexdummyfont\x7ft\x011353,44579
 \let\t=\indexdummyfont\x7fdummyfont\x011353,44579
+\let\r=\indexdummyfont\x7fr\x011354,44602
 \let\r=\indexdummyfont\x7fdummyfont\x011354,44602
+\let\i=\indexdummyfont\x7fi\x011355,44625
 \let\i=\indexdummyfont\x7fdummyfont\x011355,44625
+\let\b=\indexdummyfont\x7fb\x011356,44648
 \let\b=\indexdummyfont\x7fdummyfont\x011356,44648
+\let\emph=\indexdummyfont\x7femph\x011357,44671
 \let\emph=\indexdummyfont\x7fdummyfont\x011357,44671
+\let\strong=\indexdummyfont\x7fstrong\x011358,44697
 \let\strong=\indexdummyfont\x7fdummyfont\x011358,44697
-\let\cite=\indexdummyfont\x7f=\indexdummyfont\x011359,44725
+\let\cite=\indexdummyfont\x7fcite\x011359,44725
+\let\cite=\indexdummyfont\x7fdummyfont\x011359,44725
+\let\sc=\indexdummyfont\x7fsc\x011360,44751
 \let\sc=\indexdummyfont\x7fdummyfont\x011360,44751
+\let\tclose=\indexdummyfont\x7ftclose\x011364,44923
 \let\tclose=\indexdummyfont\x7fdummyfont\x011364,44923
+\let\code=\indexdummyfont\x7fcode\x011365,44951
 \let\code=\indexdummyfont\x7fdummyfont\x011365,44951
+\let\file=\indexdummyfont\x7ffile\x011366,44977
 \let\file=\indexdummyfont\x7fdummyfont\x011366,44977
+\let\samp=\indexdummyfont\x7fsamp\x011367,45003
 \let\samp=\indexdummyfont\x7fdummyfont\x011367,45003
+\let\kbd=\indexdummyfont\x7fkbd\x011368,45029
 \let\kbd=\indexdummyfont\x7fdummyfont\x011368,45029
+\let\key=\indexdummyfont\x7fkey\x011369,45054
 \let\key=\indexdummyfont\x7fdummyfont\x011369,45054
+\let\var=\indexdummyfont\x7fvar\x011370,45079
 \let\var=\indexdummyfont\x7fdummyfont\x011370,45079
+\let\TeX=\indexdummytex\x7fTeX\x011371,45104
 \let\TeX=\indexdummytex\x7fdummytex\x011371,45104
+\let\dots=\indexdummydots\x7fdots\x011372,45128
 \let\dots=\indexdummydots\x7fdummydots\x011372,45128
-\let\indexbackslash=0  %overridden during \printindex.\x7fbackslash=0\x011382,45380
-\def\doind #1#2{\x7f\doind\x011384,45436
+\let\indexbackslash=0  %overridden during \printindex.\x7findexbackslash\x011382,45380
+\def\doind #1#2{\x7fdoind\x011384,45436
 {\indexdummies % Must do this here, since \bf, etc expand at this stage\x7fdummies\x011386,45479
-\def\rawbackslashxx{\x7f\rawbackslashxx\x011389,45619
+{\let\folio=0% Expand all macros now EXCEPT \folio\x7ffolio\x011388,45568
+\def\rawbackslashxx{\x7frawbackslashxx\x011389,45619
+\def\rawbackslashxx{\indexbackslash}\x7fbackslash\x011389,45619
 {\indexnofonts\x7fnofonts\x011394,45881
-\def\dosubind #1#2#3{\x7f\dosubind\x011405,46192
+\xdef\temp1{\x7ftemp1\x011395,45896
+\edef\temp{\x7ftemp\x011399,46068
+\def\dosubind #1#2#3{\x7fdosubind\x011405,46192
 {\indexdummies % Must do this here, since \bf, etc expand at this stage\x7fdummies\x011407,46240
-\def\rawbackslashxx{\x7f\rawbackslashxx\x011410,46344
+{\let\folio=0%\x7ffolio\x011409,46329
+\def\rawbackslashxx{\x7frawbackslashxx\x011410,46344
+\def\rawbackslashxx{\indexbackslash}\x7fbackslash\x011410,46344
 {\indexnofonts\x7fnofonts\x011414,46498
-\def\findex {\x7f\findex\x011443,47429
-\def\kindex {\x7f\kindex\x011444,47452
-\def\cindex {\x7f\cindex\x011445,47475
-\def\vindex {\x7f\vindex\x011446,47498
-\def\tindex {\x7f\tindex\x011447,47521
-\def\pindex {\x7f\pindex\x011448,47544
-\def\cindexsub {\x7f\cindexsub\x011450,47568
-\def\printindex{\x7f\printindex\x011462,47895
-\def\doprintindex#1{\x7f\doprintindex\x011464,47936
-  \def\indexbackslash{\x7f\indexbackslash\x011481,48421
+\xdef\temp1{\x7ftemp1\x011415,46513
+\edef\temp{\x7ftemp\x011419,46688
+\def\findex {\x7ffindex\x011443,47429
+\def\kindex {\x7fkindex\x011444,47452
+\def\cindex {\x7fcindex\x011445,47475
+\def\vindex {\x7fvindex\x011446,47498
+\def\tindex {\x7ftindex\x011447,47521
+\def\pindex {\x7fpindex\x011448,47544
+\def\cindexsub {\x7fcindexsub\x011450,47568
+\gdef\cindexsub "#1" #2^^M{\x7fcindexsub\x011452,47631
+\def\printindex{\x7fprintindex\x011462,47895
+\def\doprintindex#1{\x7fdoprintindex\x011464,47936
+  \def\indexbackslash{\x7findexbackslash\x011481,48421
   \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt\x7ffonts\rm\x011482,48460
-\def\initial #1{\x7f\initial\x011517,49532
-\def\entry #1#2{\x7f\entry\x011523,49739
+\def\initial #1{\x7finitial\x011517,49532
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7ftentt\x011518,49550
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7ftt\x011518,49550
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7fsf\x011518,49550
+\def\entry #1#2{\x7fentry\x011523,49739
   \null\nobreak\indexdotfill % Have leaders before the page number.\x7fdotfill\x011540,50386
-\def\indexdotfill{\x7f\indexdotfill\x011549,50714
-\def\primary #1{\x7f\primary\x011552,50820
-\def\secondary #1#2{\x7f\secondary\x011556,50902
+\def\indexdotfill{\x7findexdotfill\x011549,50714
+\def\primary #1{\x7fprimary\x011552,50820
+\def\secondary #1#2{\x7fsecondary\x011556,50902
 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par\x7fdotfill\x011559,50984
 \newbox\partialpage\x7fialpage\x011566,51157
-\def\begindoublecolumns{\x7f\begindoublecolumns\x011572,51315
-  \output={\global\setbox\partialpage=\x7fialpage=\x011573,51351
-\def\enddoublecolumns{\x7f\enddoublecolumns\x011577,51539
-\def\doublecolumnout{\x7f\doublecolumnout\x011580,51624
+\def\begindoublecolumns{\x7fbegindoublecolumns\x011572,51315
+  \output={\global\setbox\partialpage=\x7fialpage\x011573,51351
+\def\enddoublecolumns{\x7fenddoublecolumns\x011577,51539
+\def\doublecolumnout{\x7fdoublecolumnout\x011580,51624
   \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage\x7fialpage\x011581,51693
-\def\pagesofar{\x7f\pagesofar\x011584,51871
-\def\balancecolumns{\x7f\balancecolumns\x011588,52108
+\def\pagesofar{\x7fpagesofar\x011584,51871
+\def\pagesofar{\unvbox\partialpage %\x7fialpage\x011584,51871
+\def\balancecolumns{\x7fbalancecolumns\x011588,52108
   \availdimen@=\pageheight \advance\availdimen@ by-\ht\partialpage\x7fialpage\x011594,52279
      \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage\x7fialpage\x011600,52540
 \newcount \appendixno  \appendixno = `\@\x7fno\x011627,53445
-\def\appendixletter{\x7f\appendixletter\x011628,53486
-\def\opencontents{\x7f\opencontents\x011632,53589
-\def\thischapter{\x7f\thischapter\x011637,53770
-\def\seccheck#1{\x7f\seccheck\x011638,53808
-\def\chapternofonts{\x7f\chapternofonts\x011643,53912
-\def\result{\x7f\result\x011646,53987
-\def\equiv{\x7f\equiv\x011647,54022
-\def\expansion{\x7f\expansion\x011648,54055
-\def\print{\x7f\print\x011649,54096
-\def\TeX{\x7f\TeX\x011650,54129
-\def\dots{\x7f\dots\x011651,54158
-\def\copyright{\x7f\copyright\x011652,54189
-\def\tt{\x7f\tt\x011653,54230
-\def\bf{\x7f\bf\x011654,54257
-\def\w{\x7f\w\x011655,54285
-\def\less{\x7f\less\x011656,54310
-\def\gtr{\x7f\gtr\x011657,54341
-\def\hat{\x7f\hat\x011658,54370
-\def\char{\x7f\char\x011659,54399
-\def\tclose##1{\x7f\tclose\x011660,54430
-\def\code##1{\x7f\code\x011661,54474
-\def\samp##1{\x7f\samp\x011662,54514
-\def\r##1{\x7f\r\x011663,54554
-\def\b##1{\x7f\b\x011664,54588
-\def\key##1{\x7f\key\x011665,54622
-\def\file##1{\x7f\file\x011666,54660
-\def\kbd##1{\x7f\kbd\x011667,54700
-\def\i##1{\x7f\i\x011669,54808
-\def\cite##1{\x7f\cite\x011670,54842
-\def\var##1{\x7f\var\x011671,54882
-\def\emph##1{\x7f\emph\x011672,54920
-\def\dfn##1{\x7f\dfn\x011673,54960
-\def\thischaptername{\x7f\thischaptername\x011676,55001
-\outer\def\chapter{\x7f\chapter\x011677,55040
-\def\chapterzzz #1{\x7f\chapterzzz\x011678,55081
-{\chapternofonts%\x7fnofonts%\x011687,55477
-\global\let\section = \numberedsec\x7f=\x011692,55630
-\global\let\subsection = \numberedsubsec\x7f=\x011693,55665
-\global\let\subsubsection = \numberedsubsubsec\x7f=\x011694,55706
-\outer\def\appendix{\x7f\appendix\x011697,55757
-\def\appendixzzz #1{\x7f\appendixzzz\x011698,55800
+\newcount \appendixno  \appendixno = `\@\x7fno\x011627,53445
+\def\appendixletter{\x7fappendixletter\x011628,53486
+\def\appendixletter{\char\the\appendixno}\x7fno\x011628,53486
+\def\opencontents{\x7fopencontents\x011632,53589
+\def\thischapter{\x7fthischapter\x011637,53770
+\def\thischapter{} \def\thissection{\x7fthissection\x011637,53770
+\def\seccheck#1{\x7fseccheck\x011638,53808
+\def\chapternofonts{\x7fchapternofonts\x011643,53912
+\let\rawbackslash=\relax%\x7frawbackslash\x011644,53934
+\let\frenchspacing=\relax%\x7ffrenchspacing\x011645,53960
+\def\result{\x7fresult\x011646,53987
+\def\equiv{\x7fequiv\x011647,54022
+\def\expansion{\x7fexpansion\x011648,54055
+\def\print{\x7fprint\x011649,54096
+\def\TeX{\x7fTeX\x011650,54129
+\def\dots{\x7fdots\x011651,54158
+\def\copyright{\x7fcopyright\x011652,54189
+\def\tt{\x7ftt\x011653,54230
+\def\bf{\x7fbf\x011654,54257
+\def\w{\x7fw\x011655,54285
+\def\less{\x7fless\x011656,54310
+\def\gtr{\x7fgtr\x011657,54341
+\def\hat{\x7fhat\x011658,54370
+\def\char{\x7fchar\x011659,54399
+\def\tclose##1{\x7ftclose\x011660,54430
+\def\code##1{\x7fcode\x011661,54474
+\def\samp##1{\x7fsamp\x011662,54514
+\def\r##1{\x7fr\x011663,54554
+\def\b##1{\x7fb\x011664,54588
+\def\key##1{\x7fkey\x011665,54622
+\def\file##1{\x7ffile\x011666,54660
+\def\kbd##1{\x7fkbd\x011667,54700
+\def\i##1{\x7fi\x011669,54808
+\def\cite##1{\x7fcite\x011670,54842
+\def\var##1{\x7fvar\x011671,54882
+\def\emph##1{\x7femph\x011672,54920
+\def\dfn##1{\x7fdfn\x011673,54960
+\def\thischaptername{\x7fthischaptername\x011676,55001
+\outer\def\chapter{\x7fchapter\x011677,55040
+\outer\def\chapter{\parsearg\chapterzzz}\x7fzzz\x011677,55040
+\def\chapterzzz #1{\x7fchapterzzz\x011678,55081
+\gdef\thissection{\x7fthissection\x011682,55246
+\gdef\thischaptername{\x7fthischaptername\x011683,55269
+\xdef\thischapter{\x7fthischapter\x011686,55410
+{\chapternofonts%\x7fnofonts\x011687,55477
+\edef\temp{\x7ftemp\x011688,55495
+\global\let\section = \numberedsec\x7fsection\x011692,55630
+\global\let\subsection = \numberedsubsec\x7fsubsection\x011693,55665
+\global\let\subsubsection = \numberedsubsubsec\x7fsubsubsection\x011694,55706
+\outer\def\appendix{\x7fappendix\x011697,55757
+\outer\def\appendix{\parsearg\appendixzzz}\x7fzzz\x011697,55757
+\def\appendixzzz #1{\x7fappendixzzz\x011698,55800
 \global\advance \appendixno by 1 \message{\x7fno\x011700,55877
+\global\advance \appendixno by 1 \message{Appendix \appendixletter}\x7fletter\x011700,55877
 \chapmacro {#1}{Appendix \appendixletter}\x7fletter\x011701,55946
+\gdef\thissection{\x7fthissection\x011702,55989
+\gdef\thischaptername{\x7fthischaptername\x011703,56012
+\xdef\thischapter{\x7fthischapter\x011704,56039
 \xdef\thischapter{Appendix \appendixletter: \noexpand\thischaptername}\x7fletter:\x011704,56039
-{\chapternofonts%\x7fnofonts%\x011705,56111
+{\chapternofonts%\x7fnofonts\x011705,56111
+\edef\temp{\x7ftemp\x011706,56129
   {#1}{Appendix \appendixletter}\x7fletter\x011707,56167
 \appendixnoderef %\x7fnoderef\x011710,56267
-\global\let\section = \appendixsec\x7f=\x011711,56286
-\global\let\subsection = \appendixsubsec\x7f=\x011712,56321
-\global\let\subsubsection = \appendixsubsubsec\x7f=\x011713,56362
-\outer\def\top{\x7f\top\x011716,56413
-\outer\def\unnumbered{\x7f\unnumbered\x011717,56453
-\def\unnumberedzzz #1{\x7f\unnumberedzzz\x011718,56500
-{\chapternofonts%\x7fnofonts%\x011722,56663
-\global\let\section = \unnumberedsec\x7f=\x011727,56813
-\global\let\subsection = \unnumberedsubsec\x7f=\x011728,56850
-\global\let\subsubsection = \unnumberedsubsubsec\x7f=\x011729,56893
-\outer\def\numberedsec{\x7f\numberedsec\x011732,56946
-\def\seczzz #1{\x7f\seczzz\x011733,56987
-{\chapternofonts%\x7fnofonts%\x011736,57143
-\outer\def\appendixsection{\x7f\appendixsection\x011745,57329
-\outer\def\appendixsec{\x7f\appendixsec\x011746,57386
-\def\appendixsectionzzz #1{\x7f\appendixsectionzzz\x011747,57439
+\global\let\section = \appendixsec\x7fsection\x011711,56286
+\global\let\section = \appendixsec\x7fsec\x011711,56286
+\global\let\subsection = \appendixsubsec\x7fsubsection\x011712,56321
+\global\let\subsection = \appendixsubsec\x7fsubsec\x011712,56321
+\global\let\subsubsection = \appendixsubsubsec\x7fsubsubsection\x011713,56362
+\global\let\subsubsection = \appendixsubsubsec\x7fsubsubsec\x011713,56362
+\outer\def\top{\x7ftop\x011716,56413
+\outer\def\unnumbered{\x7funnumbered\x011717,56453
+\def\unnumberedzzz #1{\x7funnumberedzzz\x011718,56500
+\gdef\thischapter{\x7fthischapter\x011721,56619
+\gdef\thischapter{#1}\gdef\thissection{\x7fthissection\x011721,56619
+{\chapternofonts%\x7fnofonts\x011722,56663
+\edef\temp{\x7ftemp\x011723,56681
+\global\let\section = \unnumberedsec\x7fsection\x011727,56813
+\global\let\subsection = \unnumberedsubsec\x7fsubsection\x011728,56850
+\global\let\subsubsection = \unnumberedsubsubsec\x7fsubsubsection\x011729,56893
+\outer\def\numberedsec{\x7fnumberedsec\x011732,56946
+\def\seczzz #1{\x7fseczzz\x011733,56987
+\gdef\thissection{\x7fthissection\x011735,57079
+{\chapternofonts%\x7fnofonts\x011736,57143
+\edef\temp{\x7ftemp\x011737,57161
+\outer\def\appendixsection{\x7fappendixsection\x011745,57329
+\outer\def\appendixsection{\parsearg\appendixsectionzzz}\x7fsectionzzz\x011745,57329
+\outer\def\appendixsec{\x7fappendixsec\x011746,57386
+\outer\def\appendixsec{\parsearg\appendixsectionzzz}\x7fsectionzzz\x011746,57386
+\def\appendixsectionzzz #1{\x7fappendixsectionzzz\x011747,57439
+\gdef\thissection{\x7fthissection\x011749,57551
 \gdef\thissection{#1}\secheading {#1}{\appendixletter}\x7fletter\x011749,57551
-{\chapternofonts%\x7fnofonts%\x011750,57619
+{\chapternofonts%\x7fnofonts\x011750,57619
+\edef\temp{\x7ftemp\x011751,57637
 {#1}{\appendixletter}\x7fletter\x011752,57675
 \appendixnoderef %\x7fnoderef\x011755,57775
-\outer\def\unnumberedsec{\x7f\unnumberedsec\x011759,57815
-\def\unnumberedseczzz #1{\x7f\unnumberedseczzz\x011760,57868
-{\chapternofonts%\x7fnofonts%\x011762,57963
-\outer\def\numberedsubsec{\x7f\numberedsubsec\x011770,58131
-\def\numberedsubseczzz #1{\x7f\numberedsubseczzz\x011771,58186
-{\chapternofonts%\x7fnofonts%\x011774,58365
-\outer\def\appendixsubsec{\x7f\appendixsubsec\x011783,58569
-\def\appendixsubseczzz #1{\x7f\appendixsubseczzz\x011784,58624
+\outer\def\unnumberedsec{\x7funnumberedsec\x011759,57815
+\def\unnumberedseczzz #1{\x7funnumberedseczzz\x011760,57868
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011761,57919
+{\chapternofonts%\x7fnofonts\x011762,57963
+\edef\temp{\x7ftemp\x011763,57981
+\outer\def\numberedsubsec{\x7fnumberedsubsec\x011770,58131
+\def\numberedsubseczzz #1{\x7fnumberedsubseczzz\x011771,58186
+\gdef\thissection{\x7fthissection\x011772,58235
+{\chapternofonts%\x7fnofonts\x011774,58365
+\edef\temp{\x7ftemp\x011775,58383
+\outer\def\appendixsubsec{\x7fappendixsubsec\x011783,58569
+\outer\def\appendixsubsec{\parsearg\appendixsubseczzz}\x7fsubseczzz\x011783,58569
+\def\appendixsubseczzz #1{\x7fappendixsubseczzz\x011784,58624
+\gdef\thissection{\x7fthissection\x011785,58677
 \subsecheading {#1}{\appendixletter}\x7fletter\x011786,58746
-{\chapternofonts%\x7fnofonts%\x011787,58811
+{\chapternofonts%\x7fnofonts\x011787,58811
+\edef\temp{\x7ftemp\x011788,58829
 {#1}{\appendixletter}\x7fletter\x011789,58870
 \appendixnoderef %\x7fnoderef\x011792,58985
-\outer\def\unnumberedsubsec{\x7f\unnumberedsubsec\x011796,59025
-\def\unnumberedsubseczzz #1{\x7f\unnumberedsubseczzz\x011797,59084
-{\chapternofonts%\x7fnofonts%\x011799,59185
-\outer\def\numberedsubsubsec{\x7f\numberedsubsubsec\x011807,59356
-\def\numberedsubsubseczzz #1{\x7f\numberedsubsubseczzz\x011808,59417
-{\chapternofonts%\x7fnofonts%\x011812,59614
-\outer\def\appendixsubsubsec{\x7f\appendixsubsubsec\x011823,59847
-\def\appendixsubsubseczzz #1{\x7f\appendixsubsubseczzz\x011824,59908
+\outer\def\unnumberedsubsec{\x7funnumberedsubsec\x011796,59025
+\def\unnumberedsubseczzz #1{\x7funnumberedsubseczzz\x011797,59084
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011798,59141
+{\chapternofonts%\x7fnofonts\x011799,59185
+\edef\temp{\x7ftemp\x011800,59203
+\outer\def\numberedsubsubsec{\x7fnumberedsubsubsec\x011807,59356
+\def\numberedsubsubseczzz #1{\x7fnumberedsubsubseczzz\x011808,59417
+\gdef\thissection{\x7fthissection\x011809,59472
+{\chapternofonts%\x7fnofonts\x011812,59614
+\edef\temp{\x7ftemp\x011813,59632
+\outer\def\appendixsubsubsec{\x7fappendixsubsubsec\x011823,59847
+\outer\def\appendixsubsubsec{\parsearg\appendixsubsubseczzz}\x7fsubsubseczzz\x011823,59847
+\def\appendixsubsubseczzz #1{\x7fappendixsubsubseczzz\x011824,59908
+\gdef\thissection{\x7fthissection\x011825,59967
   {\appendixletter}\x7fletter\x011827,60047
-{\chapternofonts%\x7fnofonts%\x011828,60113
+{\chapternofonts%\x7fnofonts\x011828,60113
+\edef\temp{\x7ftemp\x011829,60131
   {\appendixletter}\x7fletter\x011830,60178
 \appendixnoderef %\x7fnoderef\x011834,60312
-\outer\def\unnumberedsubsubsec{\x7f\unnumberedsubsubsec\x011838,60352
-\def\unnumberedsubsubseczzz #1{\x7f\unnumberedsubsubseczzz\x011839,60417
-{\chapternofonts%\x7fnofonts%\x011841,60524
-\def\infotop{\x7f\infotop\x011851,60853
-\def\infounnumbered{\x7f\infounnumbered\x011852,60891
-\def\infounnumberedsec{\x7f\infounnumberedsec\x011853,60936
-\def\infounnumberedsubsec{\x7f\infounnumberedsubsec\x011854,60987
-\def\infounnumberedsubsubsec{\x7f\infounnumberedsubsubsec\x011855,61044
-\def\infoappendix{\x7f\infoappendix\x011857,61108
-\def\infoappendixsec{\x7f\infoappendixsec\x011858,61149
-\def\infoappendixsubsec{\x7f\infoappendixsubsec\x011859,61196
-\def\infoappendixsubsubsec{\x7f\infoappendixsubsubsec\x011860,61249
-\def\infochapter{\x7f\infochapter\x011862,61309
-\def\infosection{\x7f\infosection\x011863,61348
-\def\infosubsection{\x7f\infosubsection\x011864,61387
-\def\infosubsubsection{\x7f\infosubsubsection\x011865,61432
-\global\let\section = \numberedsec\x7f=\x011870,61669
-\global\let\subsection = \numberedsubsec\x7f=\x011871,61704
-\global\let\subsubsection = \numberedsubsubsec\x7f=\x011872,61745
-\def\majorheading{\x7f\majorheading\x011886,62252
-\def\majorheadingzzz #1{\x7f\majorheadingzzz\x011887,62297
-\def\chapheading{\x7f\chapheading\x011893,62530
-\def\chapheadingzzz #1{\x7f\chapheadingzzz\x011894,62573
-\def\heading{\x7f\heading\x011899,62768
-\def\subheading{\x7f\subheading\x011901,62805
-\def\subsubheading{\x7f\subsubheading\x011903,62848
-\def\dobreak#1#2{\x7f\dobreak\x011910,63125
-\def\setchapterstyle #1 {\x7f\setchapterstyle\x011912,63203
-\def\chapbreak{\x7f\chapbreak\x011919,63458
-\def\chappager{\x7f\chappager\x011920,63508
-\def\chapoddpage{\x7f\chapoddpage\x011921,63546
-\def\setchapternewpage #1 {\x7f\setchapternewpage\x011923,63625
-\def\CHAPPAGoff{\x7f\CHAPPAGoff\x011925,63682
-\def\CHAPPAGon{\x7f\CHAPPAGon\x011929,63776
-\global\def\HEADINGSon{\x7f\HEADINGSon\x011932,63867
-\def\CHAPPAGodd{\x7f\CHAPPAGodd\x011934,63909
-\global\def\HEADINGSon{\x7f\HEADINGSon\x011937,64005
-\def\CHAPFplain{\x7f\CHAPFplain\x011941,64059
-\def\chfplain #1#2{\x7f\chfplain\x011945,64151
-\def\unnchfplain #1{\x7f\unnchfplain\x011956,64374
-\def\unnchfopen #1{\x7f\unnchfopen\x011964,64603
-\def\chfopen #1#2{\x7f\chfopen\x011970,64811
-\def\CHAPFopen{\x7f\CHAPFopen\x011975,64955
-\def\subsecheadingbreak{\x7f\subsecheadingbreak\x011982,65173
-\def\secheadingbreak{\x7f\secheadingbreak\x011985,65302
-\def\secheading #1#2#3{\x7f\secheading\x011993,65584
-\def\plainsecheading #1{\x7f\plainsecheading\x011994,65640
-\def\secheadingi #1{\x7f\secheadingi\x011995,65683
-\def\subsecheading #1#2#3#4{\x7f\subsecheading\x012006,66051
-\def\subsecheadingi #1{\x7f\subsecheadingi\x012007,66118
-\def\subsubsecfonts{\x7f\subsubsecfonts\x012014,66415
-\def\subsubsecheading #1#2#3#4#5{\x7f\subsubsecheading\x012017,66538
-\def\subsubsecheadingi #1{\x7f\subsubsecheadingi\x012018,66616
-\def\startcontents#1{\x7f\startcontents\x012032,67088
-   \unnumbchapmacro{#1}\def\thischapter{\x7f\thischapter\x012040,67361
-\outer\def\contents{\x7f\contents\x012049,67720
-\outer\def\summarycontents{\x7f\summarycontents\x012057,67864
-      \def\secentry ##1##2##3##4{\x7f\secentry\x012067,68235
-      \def\unnumbsecentry ##1##2{\x7f\unnumbsecentry\x012068,68270
-      \def\subsecentry ##1##2##3##4##5{\x7f\subsecentry\x012069,68305
-      \def\unnumbsubsecentry ##1##2{\x7f\unnumbsubsecentry\x012070,68346
-      \def\subsubsecentry ##1##2##3##4##5##6{\x7f\subsubsecentry\x012071,68384
-      \def\unnumbsubsubsecentry ##1##2{\x7f\unnumbsubsubsecentry\x012072,68431
-\def\chapentry#1#2#3{\x7f\chapentry\x012085,68865
-\def\shortchapentry#1#2#3{\x7f\shortchapentry\x012088,68982
+\outer\def\unnumberedsubsubsec{\x7funnumberedsubsubsec\x011838,60352
+\def\unnumberedsubsubseczzz #1{\x7funnumberedsubsubseczzz\x011839,60417
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011840,60480
+{\chapternofonts%\x7fnofonts\x011841,60524
+\edef\temp{\x7ftemp\x011842,60542
+\def\infotop{\x7finfotop\x011851,60853
+\def\infounnumbered{\x7finfounnumbered\x011852,60891
+\def\infounnumberedsec{\x7finfounnumberedsec\x011853,60936
+\def\infounnumberedsubsec{\x7finfounnumberedsubsec\x011854,60987
+\def\infounnumberedsubsubsec{\x7finfounnumberedsubsubsec\x011855,61044
+\def\infoappendix{\x7finfoappendix\x011857,61108
+\def\infoappendix{\parsearg\appendixzzz}\x7fzzz\x011857,61108
+\def\infoappendixsec{\x7finfoappendixsec\x011858,61149
+\def\infoappendixsec{\parsearg\appendixseczzz}\x7fseczzz\x011858,61149
+\def\infoappendixsubsec{\x7finfoappendixsubsec\x011859,61196
+\def\infoappendixsubsec{\parsearg\appendixsubseczzz}\x7fsubseczzz\x011859,61196
+\def\infoappendixsubsubsec{\x7finfoappendixsubsubsec\x011860,61249
+\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}\x7fsubsubseczzz\x011860,61249
+\def\infochapter{\x7finfochapter\x011862,61309
+\def\infochapter{\parsearg\chapterzzz}\x7fzzz\x011862,61309
+\def\infosection{\x7finfosection\x011863,61348
+\def\infosection{\parsearg\sectionzzz}\x7fzzz\x011863,61348
+\def\infosubsection{\x7finfosubsection\x011864,61387
+\def\infosubsection{\parsearg\subsectionzzz}\x7fzzz\x011864,61387
+\def\infosubsubsection{\x7finfosubsubsection\x011865,61432
+\def\infosubsubsection{\parsearg\subsubsectionzzz}\x7fzzz\x011865,61432
+\global\let\section = \numberedsec\x7fsection\x011870,61669
+\global\let\subsection = \numberedsubsec\x7fsubsection\x011871,61704
+\global\let\subsubsection = \numberedsubsubsec\x7fsubsubsection\x011872,61745
+\def\majorheading{\x7fmajorheading\x011886,62252
+\def\majorheadingzzz #1{\x7fmajorheadingzzz\x011887,62297
+\def\chapheading{\x7fchapheading\x011893,62530
+\def\chapheadingzzz #1{\x7fchapheadingzzz\x011894,62573
+\def\heading{\x7fheading\x011899,62768
+\def\subheading{\x7fsubheading\x011901,62805
+\def\subsubheading{\x7fsubsubheading\x011903,62848
+\def\dobreak#1#2{\x7fdobreak\x011910,63125
+\def\setchapterstyle #1 {\x7fsetchapterstyle\x011912,63203
+\def\chapbreak{\x7fchapbreak\x011919,63458
+\def\chappager{\x7fchappager\x011920,63508
+\def\chapoddpage{\x7fchapoddpage\x011921,63546
+\def\setchapternewpage #1 {\x7fsetchapternewpage\x011923,63625
+\def\CHAPPAGoff{\x7fCHAPPAGoff\x011925,63682
+\global\let\pchapsepmacro=\chapbreak\x7fpchapsepmacro\x011926,63699
+\global\let\pagealignmacro=\chappager}\x7fpagealignmacro\x011927,63736
+\def\CHAPPAGon{\x7fCHAPPAGon\x011929,63776
+\global\let\pchapsepmacro=\chappager\x7fpchapsepmacro\x011930,63792
+\global\let\pagealignmacro=\chappager\x7fpagealignmacro\x011931,63829
+\global\def\HEADINGSon{\x7fHEADINGSon\x011932,63867
+\def\CHAPPAGodd{\x7fCHAPPAGodd\x011934,63909
+\global\let\pchapsepmacro=\chapoddpage\x7fpchapsepmacro\x011935,63926
+\global\let\pagealignmacro=\chapoddpage\x7fpagealignmacro\x011936,63965
+\global\def\HEADINGSon{\x7fHEADINGSon\x011937,64005
+\def\CHAPFplain{\x7fCHAPFplain\x011941,64059
+\global\let\chapmacro=\chfplain\x7fchapmacro\x011942,64076
+\global\let\unnumbchapmacro=\unnchfplain}\x7funnumbchapmacro\x011943,64108
+\def\chfplain #1#2{\x7fchfplain\x011945,64151
+\def\unnchfplain #1{\x7funnchfplain\x011956,64374
+\def\unnchfopen #1{\x7funnchfopen\x011964,64603
+\def\chfopen #1#2{\x7fchfopen\x011970,64811
+\def\CHAPFopen{\x7fCHAPFopen\x011975,64955
+\global\let\chapmacro=\chfopen\x7fchapmacro\x011976,64971
+\global\let\unnumbchapmacro=\unnchfopen}\x7funnumbchapmacro\x011977,65002
+\def\subsecheadingbreak{\x7fsubsecheadingbreak\x011982,65173
+\def\secheadingbreak{\x7fsecheadingbreak\x011985,65302
+\let\paragraphindent=\comment\x7fparagraphindent\x011988,65428
+\def\secheading #1#2#3{\x7fsecheading\x011993,65584
+\def\plainsecheading #1{\x7fplainsecheading\x011994,65640
+\def\secheadingi #1{\x7fsecheadingi\x011995,65683
+\def\subsecheading #1#2#3#4{\x7fsubsecheading\x012006,66051
+\def\subsecheadingi #1{\x7fsubsecheadingi\x012007,66118
+\def\subsubsecfonts{\x7fsubsubsecfonts\x012014,66415
+\def\subsubsecheading #1#2#3#4#5{\x7fsubsubsecheading\x012017,66538
+\def\subsubsecheadingi #1{\x7fsubsubsecheadingi\x012018,66616
+\def\startcontents#1{\x7fstartcontents\x012032,67088
+   \unnumbchapmacro{#1}\def\thischapter{\x7fthischapter\x012040,67361
+\outer\def\contents{\x7fcontents\x012049,67720
+\outer\def\summarycontents{\x7fsummarycontents\x012057,67864
+      \let\chapentry = \shortchapentry\x7fchapentry\x012060,67936
+      \let\unnumbchapentry = \shortunnumberedentry\x7funnumbchapentry\x012061,67975
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7frm\x012064,68098
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7fbf\x012064,68098
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7fsl\x012064,68098
+      \def\secentry ##1##2##3##4{\x7fsecentry\x012067,68235
+      \def\unnumbsecentry ##1##2{\x7funnumbsecentry\x012068,68270
+      \def\subsecentry ##1##2##3##4##5{\x7fsubsecentry\x012069,68305
+      \def\unnumbsubsecentry ##1##2{\x7funnumbsubsecentry\x012070,68346
+      \def\subsubsecentry ##1##2##3##4##5##6{\x7fsubsubsecentry\x012071,68384
+      \def\unnumbsubsubsecentry ##1##2{\x7funnumbsubsubsecentry\x012072,68431
+\let\shortcontents = \summarycontents\x7fshortcontents\x012077,68530
+\def\chapentry#1#2#3{\x7fchapentry\x012085,68865
+\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}\x7fspace\x012085,68865
+\def\shortchapentry#1#2#3{\x7fshortchapentry\x012088,68982
     {#2\labelspace #1}\x7fspace\x012091,69092
-\def\unnumbchapentry#1#2{\x7f\unnumbchapentry\x012094,69146
-\def\shortunnumberedentry#1#2{\x7f\shortunnumberedentry\x012095,69193
-\def\secentry#1#2#3#4{\x7f\secentry\x012102,69357
-\def\unnumbsecentry#1#2{\x7f\unnumbsecentry\x012103,69416
-\def\subsecentry#1#2#3#4#5{\x7f\subsecentry\x012106,69477
-\def\unnumbsubsecentry#1#2{\x7f\unnumbsubsecentry\x012107,69547
-\def\subsubsecentry#1#2#3#4#5#6{\x7f\subsubsecentry\x012110,69621
+\def\unnumbchapentry#1#2{\x7funnumbchapentry\x012094,69146
+\def\shortunnumberedentry#1#2{\x7fshortunnumberedentry\x012095,69193
+\def\secentry#1#2#3#4{\x7fsecentry\x012102,69357
+\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}\x7fspace\x012102,69357
+\def\unnumbsecentry#1#2{\x7funnumbsecentry\x012103,69416
+\def\subsecentry#1#2#3#4#5{\x7fsubsecentry\x012106,69477
+\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}\x7fspace\x012106,69477
+\def\unnumbsubsecentry#1#2{\x7funnumbsubsecentry\x012107,69547
+\def\subsubsecentry#1#2#3#4#5#6{\x7fsubsubsecentry\x012110,69621
   \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}\x7fspace\x012111,69655
-\def\unnumbsubsubsecentry#1#2{\x7f\unnumbsubsubsecentry\x012112,69706
-\def\dochapentry#1#2{\x7f\dochapentry\x012123,70080
-\def\dosecentry#1#2{\x7f\dosecentry\x012138,70685
-\def\dosubsecentry#1#2{\x7f\dosubsecentry\x012145,70863
-\def\dosubsubsecentry#1#2{\x7f\dosubsubsecentry\x012152,71048
-\def\labelspace{\x7f\labelspace\x012160,71299
-\def\dopageno#1{\x7f\dopageno\x012162,71334
-\def\doshortpageno#1{\x7f\doshortpageno\x012163,71360
-\def\chapentryfonts{\x7f\chapentryfonts\x012165,71392
-\def\secentryfonts{\x7f\secentryfonts\x012166,71427
-\def\point{\x7f\point\x012192,72386
-\def\result{\x7f\result\x012194,72407
-\def\expansion{\x7f\expansion\x012195,72480
-\def\print{\x7f\print\x012196,72551
-\def\equiv{\x7f\equiv\x012198,72618
-\def\error{\x7f\error\x012218,73391
-\def\tex{\x7f\tex\x012224,73620
-\def\@{\x7f\@\x012242,74003
-\gdef\sepspaces{\def {\ }}}\x7f\\x012265,74735
-\def\aboveenvbreak{\x7f\aboveenvbreak\x012268,74817
-\def\afterenvbreak{\x7f\afterenvbreak\x012272,74983
-\def\ctl{\x7f\ctl\x012286,75494
-\def\ctr{\x7f\ctr\x012287,75566
-\def\cbl{\x7f\cbl\x012288,75605
-\def\cbr{\x7f\cbr\x012289,75645
-\def\carttop{\x7f\carttop\x012290,75684
-\def\cartbot{\x7f\cartbot\x012293,75792
-\long\def\cartouche{\x7f\cartouche\x012299,75932
-\def\Ecartouche{\x7f\Ecartouche\x012326,76720
-\def\lisp{\x7f\lisp\x012338,76855
-\def\Elisp{\x7f\Elisp\x012348,77202
-\def\next##1{\x7f\next\x012360,77528
-\def\Eexample{\x7f\Eexample\x012364,77570
-\def\Esmallexample{\x7f\Esmallexample\x012367,77617
-\def\smalllispx{\x7f\smalllispx\x012373,77795
-\def\Esmalllisp{\x7f\Esmalllisp\x012383,78149
+\def\unnumbsubsubsecentry#1#2{\x7funnumbsubsubsecentry\x012112,69706
+\def\dochapentry#1#2{\x7fdochapentry\x012123,70080
+\def\dosecentry#1#2{\x7fdosecentry\x012138,70685
+\def\dosubsecentry#1#2{\x7fdosubsecentry\x012145,70863
+\def\dosubsubsecentry#1#2{\x7fdosubsubsecentry\x012152,71048
+\def\labelspace{\x7flabelspace\x012160,71299
+\def\dopageno#1{\x7fdopageno\x012162,71334
+\def\doshortpageno#1{\x7fdoshortpageno\x012163,71360
+\def\chapentryfonts{\x7fchapentryfonts\x012165,71392
+\def\secentryfonts{\x7fsecentryfonts\x012166,71427
+\let\subsecentryfonts = \textfonts\x7fsubsecentryfonts\x012167,71458
+\let\subsubsecentryfonts = \textfonts\x7fsubsubsecentryfonts\x012168,71493
+\let\ptexequiv = \equiv\x7fptexequiv\x012180,71896
+\def\point{\x7fpoint\x012192,72386
+\def\result{\x7fresult\x012194,72407
+\def\expansion{\x7fexpansion\x012195,72480
+\def\print{\x7fprint\x012196,72551
+\def\equiv{\x7fequiv\x012198,72618
+\def\error{\x7ferror\x012218,73391
+\def\tex{\x7ftex\x012224,73620
+\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie\x7f~\x012227,73731
+\let\{=\ptexlbrace\x7f{\x012237,73912
+\let\}=\ptexrbrace\x7f}\x012238,73931
+\let\.=\ptexdot\x7f.\x012239,73950
+\let\*=\ptexstar\x7f*\x012240,73966
+\let\dots=\ptexdots\x7fdots\x012241,73983
+\def\@{\x7f@\x012242,74003
+\let\bullet=\ptexbullet\x7fbullet\x012243,74014
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fb\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fc\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fi\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7ft\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fl\x012244,74038
+\let\L=\ptexL\x7fL\x012245,74108
+\let\Etex=\endgroup}\x7fEtex\x012247,74124
+\gdef\lisppar{\x7flisppar\x012259,74517
+\gdef\sepspaces{\x7fsepspaces\x012265,74735
+\def\aboveenvbreak{\x7faboveenvbreak\x012268,74817
+\def\afterenvbreak{\x7fafterenvbreak\x012272,74983
+\let\nonarrowing=\relax\x7fnonarrowing\x012276,75176
+\def\ctl{\x7fctl\x012286,75494
+\def\ctr{\x7fctr\x012287,75566
+\def\cbl{\x7fcbl\x012288,75605
+\def\cbr{\x7fcbr\x012289,75645
+\def\carttop{\x7fcarttop\x012290,75684
+\def\cartbot{\x7fcartbot\x012293,75792
+\long\def\cartouche{\x7fcartouche\x012299,75932
+	\let\nonarrowing=\comment\x7fnonarrowing\x012311,76404
+\def\Ecartouche{\x7fEcartouche\x012326,76720
+\def\lisp{\x7flisp\x012338,76855
+\let\par=\lisppar\x7fpar\x012347,77184
+\def\Elisp{\x7fElisp\x012348,77202
+\let\exdent=\nofillexdent\x7fexdent\x012355,77418
+\let\nonarrowing=\relax\x7fnonarrowing\x012356,77444
+\def\next##1{\x7fnext\x012360,77528
+\let\example=\lisp\x7fexample\x012363,77551
+\def\Eexample{\x7fEexample\x012364,77570
+\let\smallexample=\lisp\x7fsmallexample\x012366,77593
+\def\Esmallexample{\x7fEsmallexample\x012367,77617
+\def\smalllispx{\x7fsmalllispx\x012373,77795
+\let\par=\lisppar\x7fpar\x012382,78131
+\def\Esmalllisp{\x7fEsmalllisp\x012383,78149
+\let\exdent=\nofillexdent\x7fexdent\x012392,78436
+\let\nonarrowing=\relax\x7fnonarrowing\x012393,78462
 \obeyspaces \obeylines \ninett \indexfonts \rawbackslash\x7ffonts\x012396,78505
-\def\next##1{\x7f\next\x012397,78562
-\def\display{\x7f\display\x012401,78642
-\def\Edisplay{\x7f\Edisplay\x012410,78961
-\def\next##1{\x7f\next\x012422,79272
-\def\format{\x7f\format\x012426,79375
-\def\Eformat{\x7f\Eformat\x012434,79671
-\def\next##1{\x7f\next\x012437,79760
-\def\flushleft{\x7f\flushleft\x012441,79812
-\def\Eflushleft{\x7f\Eflushleft\x012451,80183
-\def\next##1{\x7f\next\x012454,80276
-\def\flushright{\x7f\flushright\x012456,80298
-\def\Eflushright{\x7f\Eflushright\x012466,80670
-\def\next##1{\x7f\next\x012470,80801
-\def\quotation{\x7f\quotation\x012474,80859
-\def\Equotation{\x7f\Equotation\x012480,81051
-\def\setdeffont #1 {\x7f\setdeffont\x012493,81449
+\def\next##1{\x7fnext\x012397,78562
+\def\display{\x7fdisplay\x012401,78642
+\let\par=\lisppar\x7fpar\x012409,78943
+\def\Edisplay{\x7fEdisplay\x012410,78961
+\let\exdent=\nofillexdent\x7fexdent\x012417,79180
+\let\nonarrowing=\relax\x7fnonarrowing\x012418,79206
+\def\next##1{\x7fnext\x012422,79272
+\def\format{\x7fformat\x012426,79375
+\let\par=\lisppar\x7fpar\x012433,79653
+\def\Eformat{\x7fEformat\x012434,79671
+\def\next##1{\x7fnext\x012437,79760
+\def\flushleft{\x7fflushleft\x012441,79812
+\let\par=\lisppar\x7fpar\x012450,80165
+\def\Eflushleft{\x7fEflushleft\x012451,80183
+\def\next##1{\x7fnext\x012454,80276
+\def\flushright{\x7fflushright\x012456,80298
+\let\par=\lisppar\x7fpar\x012465,80652
+\def\Eflushright{\x7fEflushright\x012466,80670
+\def\next##1{\x7fnext\x012470,80801
+\def\quotation{\x7fquotation\x012474,80859
+\def\Equotation{\x7fEquotation\x012480,81051
+\let\nonarrowing=\relax\x7fnonarrowing\x012487,81301
+\def\setdeffont #1 {\x7fsetdeffont\x012493,81449
+\newskip\defbodyindent \defbodyindent=.4in\x7fbodyindent\x012495,81495
 \newskip\defbodyindent \defbodyindent=.4in\x7fbodyindent\x012495,81495
 \newskip\defargsindent \defargsindent=50pt\x7fargsindent\x012496,81538
+\newskip\defargsindent \defargsindent=50pt\x7fargsindent\x012496,81538
 \newskip\deftypemargin \deftypemargin=12pt\x7ftypemargin\x012497,81581
+\newskip\deftypemargin \deftypemargin=12pt\x7ftypemargin\x012497,81581
+\newskip\deflastargmargin \deflastargmargin=18pt\x7flastargmargin\x012498,81624
 \newskip\deflastargmargin \deflastargmargin=18pt\x7flastargmargin\x012498,81624
-\def\activeparens{\x7f\activeparens\x012503,81822
-\def\opnr{\x7f\opnr\x012529,83034
-\def\lbrb{\x7f\lbrb\x012530,83099
-\def\defname #1#2{\x7f\defname\x012536,83300
+\def\activeparens{\x7factiveparens\x012503,81822
+\gdef\functionparens{\x7ffunctionparens\x012507,82016
+\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }\x7f&\x012507,82016
+\gdef\boldbrax{\x7fboldbrax\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f(\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f)\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f[\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f]\x012508,82074
+\gdef\oprm#1 {\x7foprm\x012512,82250
+\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %\x7f(\x012512,82250
+\gdef\opnested{\x7fopnested\x012516,82407
+\gdef\clrm{\x7fclrm\x012518,82466
+\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi\x7f(\x012520,82602
+\gdef\amprm#1 {\x7famprm\x012523,82769
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }\x7f(\x012523,82769
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }\x7f)\x012523,82769
+\gdef\normalparens{\x7fnormalparens\x012525,82822
+\gdef\normalparens{\boldbrax\let&=\ampnr}\x7f&\x012525,82822
+\def\opnr{\x7fopnr\x012529,83034
+\def\opnr{{\sf\char`\(}} \def\clnr{\x7fclnr\x012529,83034
+\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\x7fampnr\x012529,83034
+\def\lbrb{\x7flbrb\x012530,83099
+\def\lbrb{{\bf\char`\[}} \def\rbrb{\x7frbrb\x012530,83099
+\def\defname #1#2{\x7fdefname\x012536,83300
 \advance\dimen2 by -\defbodyindent\x7fbodyindent\x012540,83418
 \advance\dimen3 by -\defbodyindent\x7fbodyindent\x012542,83472
 \setbox0=\hbox{\hskip \deflastargmargin{\x7flastargmargin\x012544,83526
+\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}\x7ftypemargin\x012544,83526
 \dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations\x7fargsindent\x012546,83668
 \parshape 2 0in \dimen0 \defargsindent \dimen1     %\x7fargsindent\x012547,83743
 \rlap{\rightline{{\rm #2}\hskip \deftypemargin}\x7ftypemargin\x012554,84112
 \advance\leftskip by -\defbodyindent\x7fbodyindent\x012557,84246
 \exdentamount=\defbodyindent\x7fbodyindent\x012558,84283
-\def\defparsebody #1#2#3{\x7f\defparsebody\x012568,84642
-\def#1{\x7f2572,84826
-\def#2{\x7f2573,84862
+\def\defparsebody #1#2#3{\x7fdefparsebody\x012568,84642
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012575,84934
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012575,84934
 \exdentamount=\defbodyindent\x7fbodyindent\x012576,85008
-\def\defmethparsebody #1#2#3#4 {\x7f\defmethparsebody\x012581,85112
-\def#1{\x7f2585,85273
-\def#2##1 {\x7f2586,85309
+\def\defmethparsebody #1#2#3#4 {\x7fdefmethparsebody\x012581,85112
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012588,85392
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012588,85392
 \exdentamount=\defbodyindent\x7fbodyindent\x012589,85466
-\def\defopparsebody #1#2#3#4#5 {\x7f\defopparsebody\x012592,85551
-\def#1{\x7f2596,85712
-\def#2##1 ##2 {\x7f2597,85748
+\def\defopparsebody #1#2#3#4#5 {\x7fdefopparsebody\x012592,85551
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012600,85848
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012600,85848
 \exdentamount=\defbodyindent\x7fbodyindent\x012601,85922
-\def\defvarparsebody #1#2#3{\x7f\defvarparsebody\x012608,86193
-\def#1{\x7f2612,86380
-\def#2{\x7f2613,86416
+\def\defvarparsebody #1#2#3{\x7fdefvarparsebody\x012608,86193
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012615,86475
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012615,86475
 \exdentamount=\defbodyindent\x7fbodyindent\x012616,86549
-\def\defvrparsebody #1#2#3#4 {\x7f\defvrparsebody\x012621,86640
-\def#1{\x7f2625,86799
-\def#2##1 {\x7f2626,86835
+\def\defvrparsebody #1#2#3#4 {\x7fdefvrparsebody\x012621,86640
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012628,86905
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012628,86905
 \exdentamount=\defbodyindent\x7fbodyindent\x012629,86979
-\def\defopvarparsebody #1#2#3#4#5 {\x7f\defopvarparsebody\x012632,87051
-\def#1{\x7f2636,87215
-\def#2##1 ##2 {\x7f2637,87251
+\def\defopvarparsebody #1#2#3#4#5 {\x7fdefopvarparsebody\x012632,87051
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012640,87338
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012640,87338
 \exdentamount=\defbodyindent\x7fbodyindent\x012641,87412
-\def\defunargs #1{\x7f\defunargs\x012664,88172
-\def\deftypefunargs #1{\x7f\deftypefunargs\x012676,88554
-\def\deffn{\x7f\deffn\x012690,88936
-\def\deffnheader #1#2#3{\x7f\deffnheader\x012692,88993
+\gdef\spacesplit#1#2^^M{\x7fspacesplit\x012652,87775
+\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{\x7fspacesplitfoo\x012653,87852
+\def\defunargs #1{\x7fdefunargs\x012664,88172
+\def\deftypefunargs #1{\x7fdeftypefunargs\x012676,88554
+\def\deffn{\x7fdeffn\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7fmethparsebody\Edeffn\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7ffnx\deffnheader\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7ffnheader\x012690,88936
+\def\deffnheader #1#2#3{\x7fdeffnheader\x012692,88993
 \begingroup\defname {\x7fname\x012693,89041
-\def\defun{\x7f\defun\x012699,89186
-\def\defunheader #1#2{\x7f\defunheader\x012701,89239
+\begingroup\defname {#2}{#1}\defunargs{\x7funargs\x012693,89041
+\def\defun{\x7fdefun\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7fparsebody\Edefun\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7funx\defunheader\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7funheader\x012699,89186
+\def\defunheader #1#2{\x7fdefunheader\x012701,89239
 \begingroup\defname {\x7fname\x012702,89314
 \defunargs {\x7funargs\x012703,89350
-\def\deftypefun{\x7f\deftypefun\x012709,89498
-\def\deftypefunheader #1#2{\x7f\deftypefunheader\x012712,89620
-\def\deftypefunheaderx #1#2 #3\relax{\x7f\deftypefunheaderx\x012714,89729
+\def\deftypefun{\x7fdeftypefun\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7fparsebody\Edeftypefun\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7ftypefunx\deftypefunheader\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7ftypefunheader\x012709,89498
+\def\deftypefunheader #1#2{\x7fdeftypefunheader\x012712,89620
+\def\deftypefunheader #1#2{\deftypefunheaderx{\x7ftypefunheaderx\x012712,89620
+\def\deftypefunheaderx #1#2 #3\relax{\x7fdeftypefunheaderx\x012714,89729
 \begingroup\defname {\x7fname\x012716,89821
 \deftypefunargs {\x7ftypefunargs\x012717,89867
-\def\deftypefn{\x7f\deftypefn\x012723,90038
-\def\deftypefnheader #1#2#3{\x7f\deftypefnheader\x012726,90187
-\def\deftypefnheaderx #1#2#3 #4\relax{\x7f\deftypefnheaderx\x012728,90323
+\def\deftypefn{\x7fdeftypefn\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7fmethparsebody\Edeftypefn\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7ftypefnx\deftypefnheader\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7ftypefnheader\x012723,90038
+\def\deftypefnheader #1#2#3{\x7fdeftypefnheader\x012726,90187
+\def\deftypefnheader #1#2#3{\deftypefnheaderx{\x7ftypefnheaderx\x012726,90187
+\def\deftypefnheaderx #1#2#3 #4\relax{\x7fdeftypefnheaderx\x012728,90323
 \begingroup\defname {\x7fname\x012730,90416
 \deftypefunargs {\x7ftypefunargs\x012731,90456
-\def\defmac{\x7f\defmac\x012737,90577
-\def\defmacheader #1#2{\x7f\defmacheader\x012739,90634
+\def\defmac{\x7fdefmac\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fparsebody\Edefmac\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fmacx\defmacheader\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fmacheader\x012737,90577
+\def\defmacheader #1#2{\x7fdefmacheader\x012739,90634
 \begingroup\defname {\x7fname\x012740,90710
 \defunargs {\x7funargs\x012741,90743
-\def\defspec{\x7f\defspec\x012747,90867
-\def\defspecheader #1#2{\x7f\defspecheader\x012749,90928
+\def\defspec{\x7fdefspec\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fparsebody\Edefspec\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fspecx\defspecheader\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fspecheader\x012747,90867
+\def\defspecheader #1#2{\x7fdefspecheader\x012749,90928
 \begingroup\defname {\x7fname\x012750,91005
 \defunargs {\x7funargs\x012751,91045
-\def\deffnx #1 {\x7f\deffnx\x012758,91240
-\def\defunx #1 {\x7f\defunx\x012759,91297
-\def\defmacx #1 {\x7f\defmacx\x012760,91354
-\def\defspecx #1 {\x7f\defspecx\x012761,91413
-\def\deftypefnx #1 {\x7f\deftypefnx\x012762,91474
-\def\deftypeunx #1 {\x7f\deftypeunx\x012763,91539
-\def\defop #1 {\x7f\defop\x012769,91685
-\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopparsebody\Edefop\defopx\defopheader\defoptype\x012770,91720
-\def\defopheader #1#2#3{\x7f\defopheader\x012772,91774
+\def\deffnx #1 {\x7fdeffnx\x012758,91240
+\def\defunx #1 {\x7fdefunx\x012759,91297
+\def\defmacx #1 {\x7fdefmacx\x012760,91354
+\def\defspecx #1 {\x7fdefspecx\x012761,91413
+\def\deftypefnx #1 {\x7fdeftypefnx\x012762,91474
+\def\deftypeunx #1 {\x7fdeftypeunx\x012763,91539
+\def\defop #1 {\x7fdefop\x012769,91685
+\def\defop #1 {\def\defoptype{\x7fdefoptype\x012769,91685
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopparsebody\Edefop\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopx\defopheader\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopheader\defoptype\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7foptype\x012770,91720
+\def\defopheader #1#2#3{\x7fdefopheader\x012772,91774
 \begingroup\defname {\x7fname\x012774,91863
+\begingroup\defname {#2}{\defoptype{\x7foptype\x012774,91863
 \defunargs {\x7funargs\x012775,91909
-\def\defmethod{\x7f\defmethod\x012780,91970
-\def\defmethodheader #1#2#3{\x7f\defmethodheader\x012782,92043
+\def\defmethod{\x7fdefmethod\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethparsebody\Edefmethod\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethodx\defmethodheader\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethodheader\x012780,91970
+\def\defmethodheader #1#2#3{\x7fdefmethodheader\x012782,92043
 \begingroup\defname {\x7fname\x012784,92131
 \defunargs {\x7funargs\x012785,92171
-\def\defcv #1 {\x7f\defcv\x012790,92245
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype\x012791,92280
-\def\defcvarheader #1#2#3{\x7f\defcvarheader\x012793,92339
+\def\defcv #1 {\x7fdefcv\x012790,92245
+\def\defcv #1 {\def\defcvtype{\x7fdefcvtype\x012790,92245
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fopvarparsebody\Edefcv\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvx\defcvarheader\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvarheader\defcvtype\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvtype\x012791,92280
+\def\defcvarheader #1#2#3{\x7fdefcvarheader\x012793,92339
 \begingroup\defname {\x7fname\x012795,92425
+\begingroup\defname {#2}{\defcvtype{\x7fcvtype\x012795,92425
 \defvarargs {\x7fvarargs\x012796,92471
-\def\defivar{\x7f\defivar\x012801,92544
-\def\defivarheader #1#2#3{\x7f\defivarheader\x012803,92607
+\def\defivar{\x7fdefivar\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fvrparsebody\Edefivar\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fivarx\defivarheader\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fivarheader\x012801,92544
+\def\defivarheader #1#2#3{\x7fdefivarheader\x012803,92607
 \begingroup\defname {\x7fname\x012805,92693
 \defvarargs {\x7fvarargs\x012806,92744
-\def\defopx #1 {\x7f\defopx\x012812,92893
-\def\defmethodx #1 {\x7f\defmethodx\x012813,92950
-\def\defcvx #1 {\x7f\defcvx\x012814,93015
-\def\defivarx #1 {\x7f\defivarx\x012815,93072
-\def\defvarargs #1{\x7f\defvarargs\x012822,93343
-\def\defvr{\x7f\defvr\x012828,93487
-\def\defvrheader #1#2#3{\x7f\defvrheader\x012830,93542
+\def\defopx #1 {\x7fdefopx\x012812,92893
+\def\defmethodx #1 {\x7fdefmethodx\x012813,92950
+\def\defcvx #1 {\x7fdefcvx\x012814,93015
+\def\defivarx #1 {\x7fdefivarx\x012815,93072
+\def\defvarargs #1{\x7fdefvarargs\x012822,93343
+\def\defvr{\x7fdefvr\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrparsebody\Edefvr\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrx\defvrheader\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrheader\x012828,93487
+\def\defvrheader #1#2#3{\x7fdefvrheader\x012830,93542
 \begingroup\defname {\x7fname\x012831,93590
-\def\defvar{\x7f\defvar\x012835,93675
-\def\defvarheader #1#2{\x7f\defvarheader\x012837,93735
+\begingroup\defname {#2}{#1}\defvarargs{\x7fvarargs\x012831,93590
+\def\defvar{\x7fdefvar\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarparsebody\Edefvar\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarx\defvarheader\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarheader\x012835,93675
+\def\defvarheader #1#2{\x7fdefvarheader\x012837,93735
 \begingroup\defname {\x7fname\x012838,93806
 \defvarargs {\x7fvarargs\x012839,93842
-\def\defopt{\x7f\defopt\x012844,93908
-\def\defoptheader #1#2{\x7f\defoptheader\x012846,93968
+\def\defopt{\x7fdefopt\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7fvarparsebody\Edefopt\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7foptx\defoptheader\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7foptheader\x012844,93908
+\def\defoptheader #1#2{\x7fdefoptheader\x012846,93968
 \begingroup\defname {\x7fname\x012847,94039
 \defvarargs {\x7fvarargs\x012848,94078
-\def\deftypevar{\x7f\deftypevar\x012853,94135
-\def\deftypevarheader #1#2{\x7f\deftypevarheader\x012856,94251
+\def\deftypevar{\x7fdeftypevar\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7fvarparsebody\Edeftypevar\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7ftypevarx\deftypevarheader\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7ftypevarheader\x012853,94135
+\def\deftypevarheader #1#2{\x7fdeftypevarheader\x012856,94251
 \begingroup\defname {\x7fname\x012858,94334
-\def\deftypevr{\x7f\deftypevr\x012865,94508
-\def\deftypevrheader #1#2#3{\x7f\deftypevrheader\x012867,94579
+\def\deftypevr{\x7fdeftypevr\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7fvrparsebody\Edeftypevr\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7ftypevrx\deftypevrheader\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7ftypevrheader\x012865,94508
+\def\deftypevrheader #1#2#3{\x7fdeftypevrheader\x012867,94579
 \begingroup\defname {\x7fname\x012868,94631
-\def\defvrx #1 {\x7f\defvrx\x012876,94868
-\def\defvarx #1 {\x7f\defvarx\x012877,94925
-\def\defoptx #1 {\x7f\defoptx\x012878,94984
-\def\deftypevarx #1 {\x7f\deftypevarx\x012879,95043
-\def\deftypevrx #1 {\x7f\deftypevrx\x012880,95110
-\def\deftpargs #1{\x7f\deftpargs\x012885,95259
-\def\deftp{\x7f\deftp\x012889,95339
-\def\deftpheader #1#2#3{\x7f\deftpheader\x012891,95394
+\def\defvrx #1 {\x7fdefvrx\x012876,94868
+\def\defvarx #1 {\x7fdefvarx\x012877,94925
+\def\defoptx #1 {\x7fdefoptx\x012878,94984
+\def\deftypevarx #1 {\x7fdeftypevarx\x012879,95043
+\def\deftypevrx #1 {\x7fdeftypevrx\x012880,95110
+\def\deftpargs #1{\x7fdeftpargs\x012885,95259
+\def\deftpargs #1{\bf \defvarargs{\x7fvarargs\x012885,95259
+\def\deftp{\x7fdeftp\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7fvrparsebody\Edeftp\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7ftpx\deftpheader\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7ftpheader\x012889,95339
+\def\deftpheader #1#2#3{\x7fdeftpheader\x012891,95394
 \begingroup\defname {\x7fname\x012892,95442
-\def\deftpx #1 {\x7f\deftpx\x012897,95601
-\def\setref#1{\x7f\setref\x012908,95922
-\def\unnumbsetref#1{\x7f\unnumbsetref\x012913,96036
-\def\appendixsetref#1{\x7f\appendixsetref\x012918,96143
-\def\pxref#1{\x7f\pxref\x012929,96554
-\def\xref#1{\x7f\xref\x012930,96590
-\def\ref#1{\x7f\ref\x012931,96625
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\x7f\xrefX[\x012932,96655
-\def\printedmanual{\x7f\printedmanual\x012933,96698
-\def\printednodename{\x7f\printednodename\x012934,96736
-\def\printednodename{\x7f\printednodename\x012939,96861
-section ``\printednodename'' in \cite{\printedmanual}\x7f\printedmanual\x012954,97493
+\begingroup\defname {#2}{#1}\deftpargs{\x7ftpargs\x012892,95442
+\def\deftpx #1 {\x7fdeftpx\x012897,95601
+\def\setref#1{\x7fsetref\x012908,95922
+\def\unnumbsetref#1{\x7funnumbsetref\x012913,96036
+\def\appendixsetref#1{\x7fappendixsetref\x012918,96143
+\def\pxref#1{\x7fpxref\x012929,96554
+\def\xref#1{\x7fxref\x012930,96590
+\def\ref#1{\x7fref\x012931,96625
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\x7fxrefX\x012932,96655
+\def\printedmanual{\x7fprintedmanual\x012933,96698
+\def\printednodename{\x7fprintednodename\x012934,96736
+\def\printednodename{\x7fprintednodename\x012939,96861
+section ``\printednodename'' in \cite{\printedmanual}\x7fprintedmanual\x012954,97493
 \refx{\x7fx\x012957,97571
-\def\dosetq #1#2{\x7f\dosetq\x012965,97791
-\def\internalsetq #1#2{\x7f\internalsetq\x012973,98049
-\def\Ypagenumber{\x7f\Ypagenumber\x012977,98150
-\def\Ytitle{\x7f\Ytitle\x012979,98176
-\def\Ynothing{\x7f\Ynothing\x012981,98203
-\def\Ysectionnumberandtype{\x7f\Ysectionnumberandtype\x012983,98220
-\def\Yappendixletterandtype{\x7f\Yappendixletterandtype\x012992,98536
+\refx{#1-snt}{} [\printednodename], page\tie\refx{\x7fx\x012957,97571
+\def\dosetq #1#2{\x7fdosetq\x012965,97791
+\def\dosetq #1#2{{\let\folio=0 \turnoffactive%\x7ffolio\x012965,97791
+\edef\next{\x7fnext\x012966,97838
+\def\internalsetq #1#2{\x7finternalsetq\x012973,98049
+\def\Ypagenumber{\x7fYpagenumber\x012977,98150
+\def\Ytitle{\x7fYtitle\x012979,98176
+\def\Ynothing{\x7fYnothing\x012981,98203
+\def\Ysectionnumberandtype{\x7fYsectionnumberandtype\x012983,98220
+\def\Yappendixletterandtype{\x7fYappendixletterandtype\x012992,98536
 \ifnum\secno=0 Appendix\xreftie'char\the\appendixno{\x7fno\x012993,98566
-\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno %\x7fno.\the\secno\x012994,98621
-Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno %\x7fno.\the\secno.\the\subsecno\x012996,98725
-Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\x7fno.\the\secno.\the\subsecno.\the\subsubsecno\x012998,98796
-  \def\linenumber{\x7f\linenumber\x013009,99135
-\def\refx#1#2{\x7f\refx\x013015,99319
-\def\xrdef #1#2{\x7f\xrdef\x013037,99945
-\def\readauxfile{\x7f\readauxfile\x013040,100030
-\def\supereject{\x7f\supereject\x013110,101811
-\footstrut\parindent=\defaultparindent\hang\textindent{\x7faultparindent\hang\textindent\x013131,102496
-\def\openindices{\x7f\openindices\x013139,102682
+\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno %\x7fno.\the\x012994,98621
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno %\x7fno.\the\x012996,98725
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\x7fno.\the\x012998,98796
+\gdef\xreftie{\x7fxreftie\x013001,98891
+  \let\linenumber = \empty % Non-3.0.\x7flinenumber\x013007,99091
+  \def\linenumber{\x7flinenumber\x013009,99135
+\def\refx#1#2{\x7frefx\x013015,99319
+\def\xrdef #1#2{\x7fxrdef\x013037,99945
+{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {\x7fcsname\x013038,99962
+\def\readauxfile{\x7freadauxfile\x013040,100030
+\def\supereject{\x7fsupereject\x013110,101811
+\let\footnotestyle=\comment\x7ffootnotestyle\x013113,101918
+\let\ptexfootnote=\footnote\x7fptexfootnote\x013115,101947
+\long\gdef\footnote #1{\x7ffootnote\x013118,101993
+\edef\thisfootno{\x7fthisfootno\x013120,102060
+\let\@sf\empty\x7f@sf\x013121,102100
+\ifhmode\edef\@sf{\x7f@sf\x013122,102115
+\long\gdef\footnotezzz #1{\x7ffootnotezzz\x013126,102228
+\footstrut\parindent=\defaultparindent\hang\textindent{\x7faultparindent\hang\x013131,102496
+\def\openindices{\x7fopenindices\x013139,102682
+\newdimen\defaultparindent \defaultparindent = 15pt\x7faultparindent\x013151,102907
 \newdimen\defaultparindent \defaultparindent = 15pt\x7faultparindent\x013151,102907
 \parindent = \defaultparindent\x7faultparindent\x013152,102959
-\def\smallbook{\x7f\smallbook\x013175,103683
-\global\def\Esmallexample{\x7f\Esmallexample\x013192,104110
-\def\afourpaper{\x7f\afourpaper\x013196,104201
-\def\finalout{\x7f\finalout\x013224,105009
-\def\normaldoublequote{\x7f\normaldoublequote\x013235,105270
-\def\normaltilde{\x7f\normaltilde\x013236,105296
-\def\normalcaret{\x7f\normalcaret\x013237,105316
-\def\normalunderscore{\x7f\normalunderscore\x013238,105336
-\def\normalverticalbar{\x7f\normalverticalbar\x013239,105361
-\def\normalless{\x7f\normalless\x013240,105387
-\def\normalgreater{\x7f\normalgreater\x013241,105406
-\def\normalplus{\x7f\normalplus\x013242,105428
-\def\ifusingtt#1#2{\x7f\ifusingtt\x013253,105920
-\def\activedoublequote{\x7f\activedoublequote\x013261,106248
+\def\smallbook{\x7fsmallbook\x013175,103683
+\global\let\smalllisp=\smalllispx\x7fsmalllisp\x013190,104039
+\global\let\smallexample=\smalllispx\x7fsmallexample\x013191,104073
+\global\def\Esmallexample{\x7fEsmallexample\x013192,104110
+\def\afourpaper{\x7fafourpaper\x013196,104201
+\def\finalout{\x7ffinalout\x013224,105009
+\def\normaldoublequote{\x7fnormaldoublequote\x013235,105270
+\def\normaltilde{\x7fnormaltilde\x013236,105296
+\def\normalcaret{\x7fnormalcaret\x013237,105316
+\def\normalunderscore{\x7fnormalunderscore\x013238,105336
+\def\normalverticalbar{\x7fnormalverticalbar\x013239,105361
+\def\normalless{\x7fnormalless\x013240,105387
+\def\normalgreater{\x7fnormalgreater\x013241,105406
+\def\normalplus{\x7fnormalplus\x013242,105428
+\def\ifusingtt#1#2{\x7fifusingtt\x013253,105920
+\def\activedoublequote{\x7factivedoublequote\x013261,106248
+\let"=\activedoublequote\x7f"\x013262,106289
 \def~{\x7f~\x013264,106334
 \def^{\x7f^\x013267,106395
 \def_{\x7f_\x013270,106434
-\def\_{\x7f\_\x013272,106508
-\def\lvvmode{\x7f\lvvmode\x013279,106845
+\def\_{\x7f_\x013272,106508
+\def\lvvmode{\x7flvvmode\x013279,106845
 \def|{\x7f|\x013282,106895
 \def<{\x7f<\x013285,106958
 \def>{\x7f>\x013288,107015
 \def+{\x7f+\x013290,107053
-\def\turnoffactive{\x7f\turnoffactive\x013296,107214
+\def\turnoffactive{\x7fturnoffactive\x013296,107214
+\def\turnoffactive{\let"=\normaldoublequote\x7f"\x013296,107214
+\let~=\normaltilde\x7f~\x013297,107258
+\let^=\normalcaret\x7f^\x013298,107277
+\let_=\normalunderscore\x7f_\x013299,107296
+\let|=\normalverticalbar\x7f|\x013300,107320
+\let<=\normalless\x7f<\x013301,107345
+\let>=\normalgreater\x7f>\x013302,107363
+\let+=\normalplus}\x7f+\x013303,107384
 \global\def={\x7f=\x013307,107500
-\def\normalbackslash{\x7f\normalbackslash\x013321,107882
+\def\normalbackslash{\x7fnormalbackslash\x013321,107882
 \f
 merc-src/accumulator.m,3228
 :- interface\x7f146,5371
diff --git a/test/manual/etags/ETAGS.good_5 b/test/manual/etags/ETAGS.good_5
index 3e238a50f38..26385943f2d 100644
--- a/test/manual/etags/ETAGS.good_5
+++ b/test/manual/etags/ETAGS.good_5
@@ -4290,8 +4290,8 @@ scm-src/test.scm,260
 (define (((((curry-test \x7f14,205
 (define-syntax test-begin\x7f17,265
 \f
-tex-src/testenv.tex,52
-\newcommand{\nm}\x7f\nm\x014,77
+tex-src/testenv.tex,51
+\newcommand{\nm}\x7fnm\x014,77
 \section{blah}\x7fblah\x018,139
 \f
 tex-src/gzip.texi,303
@@ -4306,722 +4306,1142 @@ tex-src/gzip.texi,303
 @node Problems,\x7f460,16769
 @node Concept Index,\x7fConcept Index\x01473,17289
 \f
-tex-src/texinfo.tex,30627
-\def\texinfoversion{\x7f\texinfoversion\x0126,1035
-\def\tie{\x7f\tie\x0149,1526
-\def\gloggingall{\x7f\gloggingall\x0172,2276
-\def\loggingall{\x7f\loggingall\x0173,2345
-\def\onepageout#1{\x7f\onepageout\x0199,3282
-\def\croppageout#1{\x7f\croppageout\x01115,4032
-\def\cropmarks{\x7f\cropmarks\x01142,5092
-\def\pagebody#1{\x7f\pagebody\x01144,5139
-\def\ewtop{\x7f\ewtop\x01157,5594
-\def\nstop{\x7f\nstop\x01158,5658
-\def\ewbot{\x7f\ewbot\x01160,5741
-\def\nsbot{\x7f\nsbot\x01161,5805
-\def\parsearg #1{\x7f\parsearg\x01170,6104
-\def\parseargx{\x7f\parseargx\x01172,6182
-\def\parseargline{\x7f\parseargline\x01182,6422
-\def\flushcr{\x7f\flushcr\x01186,6543
-\newif\ifENV \ENVfalse \def\inENV{\x7f\inENV\x01190,6742
-\def\ENVcheck{\x7f\ENVcheck\x01191,6806
-\outer\def\begin{\x7f\begin\x01198,7053
-\def\beginxxx #1{\x7f\beginxxx\x01200,7091
-\def\end{\x7f\end\x01208,7346
-\def\endxxx #1{\x7f\endxxx\x01210,7374
-\def\errorE#1{\x7f\errorE\x01216,7563
-\def\singlespace{\x7f\singlespace\x01222,7757
-\def\@{\x7f\@\x01232,7980
-\def\`{\x7f\`\x01236,8080
-\def\'{\x7f\'\x01237,8092
-\def\mylbrace {\x7f\mylbrace\x01241,8140
-\def\myrbrace {\x7f\myrbrace\x01242,8173
-\def\:{\x7f\:\x01247,8287
-\def\*{\x7f\*\x01250,8341
-\def\.{\x7f\.\x01253,8417
-\def\w#1{\x7f\w\x01258,8648
-\def\group{\x7f\group\x01268,9131
-  \def\Egroup{\x7f\Egroup\x01273,9295
-\def\need{\x7f\need\x01289,9737
-\def\needx#1{\x7f\needx\x01300,10014
-\def\dots{\x7f\dots\x01339,11400
-\def\page{\x7f\page\x01343,11464
-\def\exdent{\x7f\exdent\x01353,11791
-\def\exdentyyy #1{\x7f\exdentyyy\x01354,11824
-\def\nofillexdent{\x7f\nofillexdent\x01357,11968
-\def\nofillexdentyyy #1{\x7f\nofillexdentyyy\x01358,12013
-\def\include{\x7f\include\x01365,12197
-\def\includezzz #1{\x7f\includezzz\x01366,12232
-\def\thisfile{\x7f\thisfile\x01369,12283
-\def\center{\x7f\center\x01373,12346
-\def\centerzzz #1{\x7f\centerzzz\x01374,12379
-\def\sp{\x7f\sp\x01380,12521
-\def\spxxx #1{\x7f\spxxx\x01381,12546
-\def\comment{\x7f\comment\x01387,12720
-\def\commentxxx #1{\x7f\commentxxx\x01390,12817
-\def\ignoresections{\x7f\ignoresections\x01396,12986
-\let\chapter=\relax\x7f=\relax\x01397,13008
-\let\section=\relax\x7f=\relax\x01406,13253
-\let\subsection=\relax\x7f=\relax\x01409,13314
-\let\subsubsection=\relax\x7f=\relax\x01410,13337
-\let\appendix=\relax\x7f=\relax\x01411,13363
-\let\appendixsec=\relax\x7fsec=\relax\x01412,13384
-\let\appendixsection=\relax\x7fsection=\relax\x01413,13408
-\let\appendixsubsec=\relax\x7fsubsec=\relax\x01414,13436
-\let\appendixsubsection=\relax\x7fsubsection=\relax\x01415,13463
-\let\appendixsubsubsec=\relax\x7fsubsubsec=\relax\x01416,13494
-\let\appendixsubsubsection=\relax\x7fsubsubsection=\relax\x01417,13524
-\def\ignore{\x7f\ignore\x01423,13626
-\long\def\ignorexxx #1\end ignore{\x7f\ignorexxx\x01427,13766
-\def\direntry{\x7f\direntry\x01429,13825
-\long\def\direntryxxx #1\end direntry{\x7f\direntryxxx\x01430,13864
-\def\ifset{\x7f\ifset\x01434,13974
-\def\ifsetxxx #1{\x7f\ifsetxxx\x01436,14032
-\def\Eifset{\x7f\Eifset\x01440,14159
-\def\ifsetfail{\x7f\ifsetfail\x01441,14173
-\long\def\ifsetfailxxx #1\end ifset{\x7f\ifsetfailxxx\x01442,14229
-\def\ifclear{\x7f\ifclear\x01444,14290
-\def\ifclearxxx #1{\x7f\ifclearxxx\x01446,14352
-\def\Eifclear{\x7f\Eifclear\x01450,14483
-\def\ifclearfail{\x7f\ifclearfail\x01451,14499
-\long\def\ifclearfailxxx #1\end ifclear{\x7f\ifclearfailxxx\x01452,14559
-\def\set{\x7f\set\x01456,14710
-\def\setxxx #1{\x7f\setxxx\x01457,14737
-\def\clear{\x7f\clear\x01460,14799
-\def\clearxxx #1{\x7f\clearxxx\x01461,14830
-\def\iftex{\x7f\iftex\x01466,14947
-\def\Eiftex{\x7f\Eiftex\x01467,14960
-\def\ifinfo{\x7f\ifinfo\x01468,14974
-\long\def\ifinfoxxx #1\end ifinfo{\x7f\ifinfoxxx\x01469,15024
-\long\def\menu #1\end menu{\x7f\menu\x01471,15083
-\def\asis#1{\x7f\asis\x01472,15112
-\def\math#1{\x7f\math\x01485,15655
-\def\node{\x7f\node\x01487,15699
-\def\nodezzz#1{\x7f\nodezzz\x01488,15737
-\def\nodexxx[#1,#2]{\x7f\nodexxx[\x01489,15768
-\def\donoderef{\x7f\donoderef\x01492,15830
-\def\unnumbnoderef{\x7f\unnumbnoderef\x01496,15951
-\def\appendixnoderef{\x7f\appendixnoderef\x01500,16082
+tex-src/texinfo.tex,55236
+\def\texinfoversion{\x7ftexinfoversion\x0126,1035
+\let\ptexlbrace=\{\x7fptexlbrace\x0135,1308
+\let\ptexrbrace=\}\x7fptexrbrace\x0136,1327
+\let\ptexdots=\dots\x7fptexdots\x0137,1346
+\let\ptexdot=\.\x7fptexdot\x0138,1366
+\let\ptexstar=\*\x7fptexstar\x0139,1382
+\let\ptexend=\end\x7fptexend\x0140,1399
+\let\ptexbullet=\bullet\x7fptexbullet\x0141,1417
+\let\ptexb=\b\x7fptexb\x0142,1441
+\let\ptexc=\c\x7fptexc\x0143,1455
+\let\ptexi=\i\x7fptexi\x0144,1469
+\let\ptext=\t\x7fptext\x0145,1483
+\let\ptexl=\l\x7fptexl\x0146,1497
+\let\ptexL=\L\x7fptexL\x0147,1511
+\def\tie{\x7ftie\x0149,1526
+\def\gloggingall{\x7fgloggingall\x0172,2276
+\def\loggingall{\x7floggingall\x0173,2345
+\def\onepageout#1{\x7fonepageout\x0199,3282
+\shipout\vbox{{\let\hsize=\pagewidth \makeheadline}\x7fhsize\x01103,3489
+{\let\hsize=\pagewidth \makefootline}\x7fhsize\x01104,3556
+\def\croppageout#1{\x7fcroppageout\x01115,4032
+			{\let\hsize=\pagewidth \makeheadline}\x7fhsize\x01126,4511
+			{\let\hsize=\pagewidth \makefootline}\x7fhsize\x01128,4569
+\def\cropmarks{\x7fcropmarks\x01142,5092
+\def\cropmarks{\let\onepageout=\croppageout }\x7fonepageout\x01142,5092
+\def\pagebody#1{\x7fpagebody\x01144,5139
+\gdef\pagecontents#1{\x7fpagecontents\x01146,5220
+\def\ewtop{\x7fewtop\x01157,5594
+\def\nstop{\x7fnstop\x01158,5658
+\def\ewbot{\x7fewbot\x01160,5741
+\def\nsbot{\x7fnsbot\x01161,5805
+\def\parsearg #1{\x7fparsearg\x01170,6104
+\def\parsearg #1{\let\next=#1\begingroup\obeylines\futurelet\temp\parseargx}\x7fnext\x01170,6104
+\def\parseargx{\x7fparseargx\x01172,6182
+\gdef\parseargdiscardspace {\x7fparseargdiscardspace\x01178,6321
+\gdef\obeyedspace{\x7fobeyedspace\x01180,6399
+\def\parseargline{\x7fparseargline\x01182,6422
+\gdef\parsearglinex #1^^M{\x7fparsearglinex\x01184,6493
+\def\flushcr{\x7fflushcr\x01186,6543
+\def\flushcr{\ifx\par\lisppar \def\next##1{\x7fnext\x01186,6543
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}\x7fnext\x01186,6543
+\newif\ifENV \ENVfalse \def\inENV{\x7finENV\x01190,6742
+\def\ENVcheck{\x7fENVcheck\x01191,6806
+\outer\def\begin{\x7fbegin\x01198,7053
+\def\beginxxx #1{\x7fbeginxxx\x01200,7091
+\def\end{\x7fend\x01208,7346
+\def\endxxx #1{\x7fendxxx\x01210,7374
+\def\errorE#1{\x7ferrorE\x01216,7563
+\def\singlespace{\x7fsinglespace\x01222,7757
+\def\@{\x7f@\x01232,7980
+\def\`{\x7f`\x01236,8080
+\def\'{\x7f'\x01237,8092
+\def\mylbrace {\x7fmylbrace\x01241,8140
+\def\myrbrace {\x7fmyrbrace\x01242,8173
+\let\{=\mylbrace\x7f{\x01243,8206
+\let\}=\myrbrace\x7f}\x01244,8223
+\def\:{\x7f:\x01247,8287
+\def\*{\x7f*\x01250,8341
+\def\.{\x7f.\x01253,8417
+\def\w#1{\x7fw\x01258,8648
+\def\group{\x7fgroup\x01268,9131
+  \def\Egroup{\x7fEgroup\x01273,9295
+\def\need{\x7fneed\x01289,9737
+\def\needx#1{\x7fneedx\x01300,10014
+\let\br = \par\x7fbr\x01335,11355
+\def\dots{\x7fdots\x01339,11400
+\def\page{\x7fpage\x01343,11464
+\def\exdent{\x7fexdent\x01353,11791
+\def\exdentyyy #1{\x7fexdentyyy\x01354,11824
+\def\nofillexdent{\x7fnofillexdent\x01357,11968
+\def\nofillexdentyyy #1{\x7fnofillexdentyyy\x01358,12013
+\def\include{\x7finclude\x01365,12197
+\def\includezzz #1{\x7fincludezzz\x01366,12232
+\def\includezzz #1{{\def\thisfile{\x7fthisfile\x01366,12232
+\def\thisfile{\x7fthisfile\x01369,12283
+\def\center{\x7fcenter\x01373,12346
+\def\centerzzz #1{\x7fcenterzzz\x01374,12379
+\def\sp{\x7fsp\x01380,12521
+\def\spxxx #1{\x7fspxxx\x01381,12546
+\def\comment{\x7fcomment\x01387,12720
+\def\commentxxx #1{\x7fcommentxxx\x01390,12817
+\let\c=\comment\x7fc\x01392,12883
+\def\ignoresections{\x7fignoresections\x01396,12986
+\let\chapter=\relax\x7fchapter\x01397,13008
+\let\unnumbered=\relax\x7funnumbered\x01398,13028
+\let\top=\relax\x7ftop\x01399,13051
+\let\unnumberedsec=\relax\x7funnumberedsec\x01400,13067
+\let\unnumberedsection=\relax\x7funnumberedsection\x01401,13093
+\let\unnumberedsubsec=\relax\x7funnumberedsubsec\x01402,13123
+\let\unnumberedsubsection=\relax\x7funnumberedsubsection\x01403,13152
+\let\unnumberedsubsubsec=\relax\x7funnumberedsubsubsec\x01404,13185
+\let\unnumberedsubsubsection=\relax\x7funnumberedsubsubsection\x01405,13217
+\let\section=\relax\x7fsection\x01406,13253
+\let\subsec=\relax\x7fsubsec\x01407,13273
+\let\subsubsec=\relax\x7fsubsubsec\x01408,13292
+\let\subsection=\relax\x7fsubsection\x01409,13314
+\let\subsubsection=\relax\x7fsubsubsection\x01410,13337
+\let\appendix=\relax\x7fappendix\x01411,13363
+\let\appendixsec=\relax\x7fappendixsec\x01412,13384
+\let\appendixsection=\relax\x7fappendixsection\x01413,13408
+\let\appendixsubsec=\relax\x7fappendixsubsec\x01414,13436
+\let\appendixsubsection=\relax\x7fappendixsubsection\x01415,13463
+\let\appendixsubsubsec=\relax\x7fappendixsubsubsec\x01416,13494
+\let\appendixsubsubsection=\relax\x7fappendixsubsubsection\x01417,13524
+\let\contents=\relax\x7fcontents\x01418,13558
+\let\smallbook=\relax\x7fsmallbook\x01419,13579
+\let\titlepage=\relax\x7ftitlepage\x01420,13601
+\def\ignore{\x7fignore\x01423,13626
+\long\def\ignorexxx #1\end ignore{\x7fignorexxx\x01427,13766
+\def\direntry{\x7fdirentry\x01429,13825
+\long\def\direntryxxx #1\end direntry{\x7fdirentryxxx\x01430,13864
+\def\ifset{\x7fifset\x01434,13974
+\def\ifsetxxx #1{\x7fifsetxxx\x01436,14032
+\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\ifsetfail\x7ftemp\x01437,14059
+\else \let\temp=\relax \fi\x7ftemp\x01438,14125
+\def\Eifset{\x7fEifset\x01440,14159
+\def\ifsetfail{\x7fifsetfail\x01441,14173
+\long\def\ifsetfailxxx #1\end ifset{\x7fifsetfailxxx\x01442,14229
+\def\ifclear{\x7fifclear\x01444,14290
+\def\ifclearxxx #1{\x7fifclearxxx\x01446,14352
+\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\relax\x7ftemp\x01447,14381
+\else \let\temp=\ifclearfail \fi\x7ftemp\x01448,14443
+\def\Eifclear{\x7fEifclear\x01450,14483
+\def\ifclearfail{\x7fifclearfail\x01451,14499
+\long\def\ifclearfailxxx #1\end ifclear{\x7fifclearfailxxx\x01452,14559
+\def\set{\x7fset\x01456,14710
+\def\setxxx #1{\x7fsetxxx\x01457,14737
+\expandafter\let\csname IF#1\endcsname=\set}\x7fcsname\x01458,14753
+\def\clear{\x7fclear\x01460,14799
+\def\clearxxx #1{\x7fclearxxx\x01461,14830
+\expandafter\let\csname IF#1\endcsname=\relax}\x7fcsname\x01462,14848
+\def\iftex{\x7fiftex\x01466,14947
+\def\Eiftex{\x7fEiftex\x01467,14960
+\def\ifinfo{\x7fifinfo\x01468,14974
+\long\def\ifinfoxxx #1\end ifinfo{\x7fifinfoxxx\x01469,15024
+\long\def\menu #1\end menu{\x7fmenu\x01471,15083
+\def\asis#1{\x7fasis\x01472,15112
+\let\implicitmath = $\x7fimplicitmath\x01484,15633
+\def\math#1{\x7fmath\x01485,15655
+\def\node{\x7fnode\x01487,15699
+\def\nodezzz#1{\x7fnodezzz\x01488,15737
+\def\nodexxx[#1,#2]{\x7fnodexxx\x01489,15768
+\def\nodexxx[#1,#2]{\gdef\lastnode{\x7flastnode\x01489,15768
+\let\lastnode=\relax\x7flastnode\x01490,15808
+\def\donoderef{\x7fdonoderef\x01492,15830
+\let\lastnode=\relax}\x7flastnode\x01494,15928
+\def\unnumbnoderef{\x7funnumbnoderef\x01496,15951
+\let\lastnode=\relax}\x7flastnode\x01498,16059
+\def\appendixnoderef{\x7fappendixnoderef\x01500,16082
 \expandafter\expandafter\expandafter\appendixsetref{\x7fsetref\x01501,16128
-\let\refill=\relax\x7fill=\relax\x01504,16217
-\def\setfilename{\x7f\setfilename\x01509,16431
-\outer\def\bye{\x7f\bye\x01518,16677
-\def\inforef #1{\x7f\inforef\x01520,16733
-\def\inforefzzz #1,#2,#3,#4**{\x7f\inforefzzz\x01521,16771
-\def\losespace #1{\x7f\losespace\x01523,16868
-\def\sf{\x7f\sf\x01532,17072
-\font\defbf=cmbx10 scaled \magstep1 %was 1314\x7fbf=cmbx10\x01558,17867
-\font\deftt=cmtt10 scaled \magstep1\x7ftt=cmtt10\x01559,17913
-\def\df{\x7f\df\x01560,17949
-\def\resetmathfonts{\x7f\resetmathfonts\x01635,20543
-\def\textfonts{\x7f\textfonts\x01648,21132
-\def\chapfonts{\x7f\chapfonts\x01653,21347
-\def\secfonts{\x7f\secfonts\x01658,21563
-\def\subsecfonts{\x7f\subsecfonts\x01663,21768
-\def\indexfonts{\x7f\indexfonts\x01668,21985
-\def\smartitalicx{\x7f\smartitalicx\x01691,22717
-\def\smartitalic#1{\x7f\smartitalic\x01692,22793
-\let\cite=\smartitalic\x7f=\smartitalic\x01698,22938
-\def\b#1{\x7f\b\x01700,22962
-\def\t#1{\x7f\t\x01703,22997
-\def\samp #1{\x7f\samp\x01706,23149
-\def\key #1{\x7f\key\x01707,23182
-\def\ctrl #1{\x7f\ctrl\x01708,23243
-\def\tclose#1{\x7f\tclose\x01716,23445
-\def\ {\x7f\\x01720,23611
-\def\xkey{\x7f\xkey\x01728,23880
-\def\kbdfoo#1#2#3\par{\x7f\kbdfoo\x01729,23896
-\def\dmn#1{\x7f\dmn\x01738,24197
-\def\kbd#1{\x7f\kbd\x01740,24224
-\def\l#1{\x7f\l\x01742,24281
-\def\r#1{\x7f\r\x01744,24310
-\def\sc#1{\x7f\sc\x01746,24378
-\def\ii#1{\x7f\ii\x01747,24421
-\def\titlefont#1{\x7f\titlefont\x01755,24654
-\def\titlepage{\x7f\titlepage\x01761,24757
-   \def\subtitlefont{\x7f\subtitlefont\x01766,24984
-   \def\authorfont{\x7f\authorfont\x01768,25068
-   \def\title{\x7f\title\x01774,25278
-   \def\titlezzz##1{\x7f\titlezzz\x01775,25313
-   \def\subtitle{\x7f\subtitle\x01783,25628
-   \def\subtitlezzz##1{\x7f\subtitlezzz\x01784,25669
-   \def\author{\x7f\author\x01787,25787
-   \def\authorzzz##1{\x7f\authorzzz\x01788,25824
-   \def\page{\x7f\page\x01794,26115
-\def\Etitlepage{\x7f\Etitlepage\x01804,26284
-\def\finishtitlepage{\x7f\finishtitlepage\x01817,26672
-\def\evenheading{\x7f\evenheading\x01846,27680
-\def\oddheading{\x7f\oddheading\x01847,27723
-\def\everyheading{\x7f\everyheading\x01848,27764
-\def\evenfooting{\x7f\evenfooting\x01850,27810
-\def\oddfooting{\x7f\oddfooting\x01851,27853
-\def\everyfooting{\x7f\everyfooting\x01852,27894
-\def\headings #1 {\x7f\headings\x01893,29586
-\def\HEADINGSoff{\x7f\HEADINGSoff\x01895,29635
-\def\HEADINGSdouble{\x7f\HEADINGSdouble\x01904,30062
-\def\HEADINGSsingle{\x7f\HEADINGSsingle\x01914,30382
-\def\HEADINGSon{\x7f\HEADINGSon\x01922,30603
-\def\HEADINGSafter{\x7f\HEADINGSafter\x01924,30637
-\def\HEADINGSdoublex{\x7f\HEADINGSdoublex\x01926,30732
-\def\HEADINGSsingleafter{\x7f\HEADINGSsingleafter\x01933,30920
-\def\HEADINGSsinglex{\x7f\HEADINGSsinglex\x01934,30981
-\def\today{\x7f\today\x01943,31256
-\def\thistitle{\x7f\thistitle\x01958,31801
-\def\settitle{\x7f\settitle\x01959,31826
-\def\settitlezzz #1{\x7f\settitlezzz\x01960,31863
-\def\internalBitem{\x7f\internalBitem\x01992,32793
-\def\internalBitemx{\x7f\internalBitemx\x01993,32843
-\def\internalBxitem "#1"{\x7f\internalBxitem\x01995,32888
-\def\internalBxitemx "#1"{\x7f\internalBxitemx\x01996,32968
-\def\internalBkitem{\x7f\internalBkitem\x01998,33043
-\def\internalBkitemx{\x7f\internalBkitemx\x01999,33095
-\def\kitemzzz #1{\x7f\kitemzzz\x011001,33142
-\def\xitemzzz #1{\x7f\xitemzzz\x011004,33244
-\def\itemzzz #1{\x7f\itemzzz\x011007,33347
-\def\item{\x7f\item\x011037,34418
-\def\itemx{\x7f\itemx\x011038,34469
-\def\kitem{\x7f\kitem\x011039,34522
-\def\kitemx{\x7f\kitemx\x011040,34575
-\def\xitem{\x7f\xitem\x011041,34630
-\def\xitemx{\x7f\xitemx\x011042,34683
-\def\description{\x7f\description\x011045,34793
-\def\table{\x7f\table\x011047,34843
-\def\ftable{\x7f\ftable\x011052,34987
-\def\Eftable{\x7f\Eftable\x011056,35133
-\def\vtable{\x7f\vtable\x011059,35202
-\def\Evtable{\x7f\Evtable\x011063,35348
-\def\dontindex #1{\x7f\dontindex\x011066,35417
-\def\fnitemindex #1{\x7f\fnitemindex\x011067,35437
-\def\vritemindex #1{\x7f\vritemindex\x011068,35482
-\def\tablez #1#2#3#4#5#6{\x7f\tablez\x011074,35631
-\def\Edescription{\x7f\Edescription\x011077,35689
-\def\itemfont{\x7f\itemfont\x011082,35890
-\def\Etable{\x7f\Etable\x011090,36116
-\def\itemize{\x7f\itemize\x011103,36440
-\def\itemizezzz #1{\x7f\itemizezzz\x011105,36476
-\def\itemizey #1#2{\x7f\itemizey\x011110,36571
-\def#2{\x7f1119,36817
-\def\itemcontents{\x7f\itemcontents\x011120,36858
-\def\bullet{\x7f\bullet\x011123,36906
-\def\minus{\x7f\minus\x011124,36933
-\def\frenchspacing{\x7f\frenchspacing\x011128,37041
-\def\splitoff#1#2\endmark{\x7f\splitoff\x011134,37266
-\def\enumerate{\x7f\enumerate\x011140,37496
-\def\enumeratezzz #1{\x7f\enumeratezzz\x011141,37535
-\def\enumeratey #1 #2\endenumeratey{\x7f\enumeratey\x011142,37588
-  \def\thearg{\x7f\thearg\x011146,37735
-  \ifx\thearg\empty \def\thearg{\x7f\thearg\x011147,37754
-\def\numericenumerate{\x7f\numericenumerate\x011184,39088
-\def\lowercaseenumerate{\x7f\lowercaseenumerate\x011190,39218
-\def\uppercaseenumerate{\x7f\uppercaseenumerate\x011203,39565
-\def\startenumeration#1{\x7f\startenumeration\x011219,40055
-\def\alphaenumerate{\x7f\alphaenumerate\x011227,40237
-\def\capsenumerate{\x7f\capsenumerate\x011228,40272
-\def\Ealphaenumerate{\x7f\Ealphaenumerate\x011229,40306
-\def\Ecapsenumerate{\x7f\Ecapsenumerate\x011230,40340
-\def\itemizeitem{\x7f\itemizeitem\x011234,40420
-\def\newindex #1{\x7f\newindex\x011259,41277
-\def\defindex{\x7f\defindex\x011268,41566
-\def\newcodeindex #1{\x7f\newcodeindex\x011272,41674
-\def\defcodeindex{\x7f\defcodeindex\x011279,41934
-\def\synindex #1 #2 {\x7f\synindex\x011283,42114
-\def\syncodeindex #1 #2 {\x7f\syncodeindex\x011292,42454
-\def\doindex#1{\x7f\doindex\x011309,43133
-\def\singleindexer #1{\x7f\singleindexer\x011310,43192
-\def\docodeindex#1{\x7f\docodeindex\x011313,43304
-\def\singlecodeindexer #1{\x7f\singlecodeindexer\x011314,43371
-\def\indexdummies{\x7f\indexdummies\x011316,43429
-\def\_{\x7f\_\x011317,43449
-\def\w{\x7f\w\x011318,43477
-\def\bf{\x7f\bf\x011319,43504
-\def\rm{\x7f\rm\x011320,43533
-\def\sl{\x7f\sl\x011321,43562
-\def\sf{\x7f\sf\x011322,43591
-\def\tt{\x7f\tt\x011323,43619
-\def\gtr{\x7f\gtr\x011324,43647
-\def\less{\x7f\less\x011325,43677
-\def\hat{\x7f\hat\x011326,43709
-\def\char{\x7f\char\x011327,43739
-\def\TeX{\x7f\TeX\x011328,43771
-\def\dots{\x7f\dots\x011329,43801
-\def\copyright{\x7f\copyright\x011330,43834
-\def\tclose##1{\x7f\tclose\x011331,43877
-\def\code##1{\x7f\code\x011332,43922
-\def\samp##1{\x7f\samp\x011333,43963
-\def\t##1{\x7f\t\x011334,44004
-\def\r##1{\x7f\r\x011335,44039
-\def\i##1{\x7f\i\x011336,44074
-\def\b##1{\x7f\b\x011337,44109
-\def\cite##1{\x7f\cite\x011338,44144
-\def\key##1{\x7f\key\x011339,44185
-\def\file##1{\x7f\file\x011340,44224
-\def\var##1{\x7f\var\x011341,44265
-\def\kbd##1{\x7f\kbd\x011342,44304
-\def\indexdummyfont#1{\x7f\indexdummyfont\x011347,44460
-\def\indexdummytex{\x7f\indexdummytex\x011348,44486
-\def\indexdummydots{\x7f\indexdummydots\x011349,44510
-\def\indexnofonts{\x7f\indexnofonts\x011351,44536
+\let\lastnode=\relax}\x7flastnode\x01502,16194
+\let\refill=\relax\x7frefill\x01504,16217
+\def\setfilename{\x7fsetfilename\x01509,16431
+   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.\x7fsetfilename\x01514,16562
+\outer\def\bye{\x7fbye\x01518,16677
+\def\inforef #1{\x7finforef\x01520,16733
+\def\inforefzzz #1,#2,#3,#4**{\x7finforefzzz\x01521,16771
+\def\losespace #1{\x7flosespace\x01523,16868
+\def\sf{\x7fsf\x01532,17072
+\let\li = \sf % Sometimes we call it \li, not \sf.\x7fli\x01533,17100
+\let\mainmagstep=\magstephalf\x7fmainmagstep\x01536,17201
+\let\mainmagstep=\magstep1\x7fmainmagstep\x01539,17250
+\font\defbf=cmbx10 scaled \magstep1 %was 1314\x7fbf\x01558,17867
+\font\deftt=cmtt10 scaled \magstep1\x7ftt\x01559,17913
+\def\df{\x7fdf\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftentt\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftt\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftenbf\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7fbf\x01560,17949
+\let\indsl=\indit\x7findsl\x01570,18310
+\let\indtt=\ninett\x7findtt\x01571,18328
+\let\indsf=\indrm\x7findsf\x01572,18347
+\let\indbf=\indrm\x7findbf\x01573,18365
+\let\indsc=\indrm\x7findsc\x01574,18383
+\let\chapbf=\chaprm\x7fchapbf\x01584,18643
+\let\authorrm = \secrm\x7fauthorrm\x01627,20193
+\def\resetmathfonts{\x7fresetmathfonts\x01635,20543
+\def\textfonts{\x7ftextfonts\x01648,21132
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftenrm\x01649,21149
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftenit\x01649,21149
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftensl\x01649,21149
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7ftenbf\x01650,21208
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7ftentt\x01650,21208
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7fsmallcaps\x01650,21208
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7ftensf\x01651,21271
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7fteni\x01651,21271
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7ftensy\x01651,21271
+\def\chapfonts{\x7fchapfonts\x01653,21347
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftenrm\x01654,21364
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftenit\x01654,21364
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftensl\x01654,21364
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7ftenbf\x01655,21424
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7ftentt\x01655,21424
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7fsmallcaps\x01655,21424
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7ftensf\x01656,21487
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7fteni\x01656,21487
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7ftensy\x01656,21487
+\def\secfonts{\x7fsecfonts\x01658,21563
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftenrm\x01659,21579
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftenit\x01659,21579
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftensl\x01659,21579
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7ftenbf\x01660,21635
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7ftentt\x01660,21635
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7fsmallcaps\x01660,21635
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7ftensf\x01661,21695
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7fteni\x01661,21695
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7ftensy\x01661,21695
+\def\subsecfonts{\x7fsubsecfonts\x01663,21768
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftenrm\x01664,21787
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftenit\x01664,21787
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftensl\x01664,21787
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7ftenbf\x01665,21846
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7ftentt\x01665,21846
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7fsmallcaps\x01665,21846
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7ftensf\x01666,21909
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7fteni\x01666,21909
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7ftensy\x01666,21909
+\def\indexfonts{\x7findexfonts\x01668,21985
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftenrm\x01669,22003
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftenit\x01669,22003
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftensl\x01669,22003
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7ftenbf\x01670,22059
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7ftentt\x01670,22059
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7fsmallcaps\x01670,22059
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7ftensf\x01671,22119
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7fteni\x01671,22119
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7ftensy\x01671,22119
+\def\smartitalicx{\x7fsmartitalicx\x01691,22717
+\def\smartitalic#1{\x7fsmartitalic\x01692,22793
+\let\i=\smartitalic\x7fi\x01694,22851
+\let\var=\smartitalic\x7fvar\x01695,22871
+\let\dfn=\smartitalic\x7fdfn\x01696,22893
+\let\emph=\smartitalic\x7femph\x01697,22915
+\let\cite=\smartitalic\x7fcite\x01698,22938
+\def\b#1{\x7fb\x01700,22962
+\let\strong=\b\x7fstrong\x01701,22981
+\def\t#1{\x7ft\x01703,22997
+\let\ttfont = \t\x7fttfont\x01704,23072
+\def\samp #1{\x7fsamp\x01706,23149
+\def\key #1{\x7fkey\x01707,23182
+\def\ctrl #1{\x7fctrl\x01708,23243
+\let\file=\samp\x7ffile\x01710,23285
+\def\tclose#1{\x7ftclose\x01716,23445
+\let\code=\tclose\x7fcode\x01722,23722
+\def\xkey{\x7fxkey\x01728,23880
+\def\kbdfoo#1#2#3\par{\x7fkbdfoo\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{\x7fone\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{\x7fthree\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{\x7fthreex\x01729,23896
+\def\dmn#1{\x7fdmn\x01738,24197
+\def\kbd#1{\x7fkbd\x01740,24224
+\def\kbd#1{\def\look{\x7flook\x01740,24224
+\def\l#1{\x7fl\x01742,24281
+\def\r#1{\x7fr\x01744,24310
+\def\sc#1{\x7fsc\x01746,24378
+\def\ii#1{\x7fii\x01747,24421
+\def\titlefont#1{\x7ftitlefont\x01755,24654
+\def\titlepage{\x7ftitlepage\x01761,24757
+   \let\subtitlerm=\tenrm\x7fsubtitlerm\x01762,24810
+   \def\subtitlefont{\x7fsubtitlefont\x01766,24984
+   \def\authorfont{\x7fauthorfont\x01768,25068
+   \def\title{\x7ftitle\x01774,25278
+   \def\titlezzz##1{\x7ftitlezzz\x01775,25313
+   \def\subtitle{\x7fsubtitle\x01783,25628
+   \def\subtitlezzz##1{\x7fsubtitlezzz\x01784,25669
+   \def\author{\x7fauthor\x01787,25787
+   \def\authorzzz##1{\x7fauthorzzz\x01788,25824
+   \let\oldpage = \page\x7foldpage\x01793,26091
+   \def\page{\x7fpage\x01794,26115
+      \let\page = \oldpage\x7fpage\x01799,26206
+\def\Etitlepage{\x7fEtitlepage\x01804,26284
+\def\finishtitlepage{\x7ffinishtitlepage\x01817,26672
+\let\thispage=\folio\x7fthispage\x01825,26825
+\let\HEADINGShook=\relax\x7fHEADINGShook\x01837,27420
+\def\evenheading{\x7fevenheading\x01846,27680
+\def\oddheading{\x7foddheading\x01847,27723
+\def\everyheading{\x7feveryheading\x01848,27764
+\def\evenfooting{\x7fevenfooting\x01850,27810
+\def\oddfooting{\x7foddfooting\x01851,27853
+\def\everyfooting{\x7feveryfooting\x01852,27894
+\gdef\evenheadingxxx #1{\x7fevenheadingxxx\x01856,27958
+\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{\x7fevenheadingyyy\x01857,28017
+\gdef\oddheadingxxx #1{\x7foddheadingxxx\x01860,28126
+\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{\x7foddheadingyyy\x01861,28183
+\gdef\everyheadingxxx #1{\x7feveryheadingxxx\x01864,28290
+\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{\x7feveryheadingyyy\x01865,28351
+\gdef\evenfootingxxx #1{\x7fevenfootingxxx\x01869,28522
+\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{\x7fevenfootingyyy\x01870,28581
+\gdef\oddfootingxxx #1{\x7foddfootingxxx\x01873,28690
+\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{\x7foddfootingyyy\x01874,28747
+\gdef\everyfootingxxx #1{\x7feveryfootingxxx\x01877,28854
+\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{\x7feveryfootingyyy\x01878,28915
+\def\headings #1 {\x7fheadings\x01893,29586
+\def\HEADINGSoff{\x7fHEADINGSoff\x01895,29635
+\def\HEADINGSdouble{\x7fHEADINGSdouble\x01904,30062
+\def\HEADINGSsingle{\x7fHEADINGSsingle\x01914,30382
+\def\HEADINGSon{\x7fHEADINGSon\x01922,30603
+\def\HEADINGSafter{\x7fHEADINGSafter\x01924,30637
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}\x7fHEADINGShook\x01924,30637
+\let\HEADINGSdoubleafter=\HEADINGSafter\x7fHEADINGSdoubleafter\x01925,30692
+\def\HEADINGSdoublex{\x7fHEADINGSdoublex\x01926,30732
+\def\HEADINGSsingleafter{\x7fHEADINGSsingleafter\x01933,30920
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}\x7fHEADINGShook\x01933,30920
+\def\HEADINGSsinglex{\x7fHEADINGSsinglex\x01934,30981
+\def\today{\x7ftoday\x01943,31256
+\def\thistitle{\x7fthistitle\x01958,31801
+\def\settitle{\x7fsettitle\x01959,31826
+\def\settitlezzz #1{\x7fsettitlezzz\x01960,31863
+\def\settitlezzz #1{\gdef\thistitle{\x7fthistitle\x01960,31863
+\def\internalBitem{\x7finternalBitem\x01992,32793
+\def\internalBitemx{\x7finternalBitemx\x01993,32843
+\def\internalBxitem "#1"{\x7finternalBxitem\x01995,32888
+\def\internalBxitem "#1"{\def\xitemsubtopix{\x7fxitemsubtopix\x01995,32888
+\def\internalBxitemx "#1"{\x7finternalBxitemx\x01996,32968
+\def\internalBxitemx "#1"{\def\xitemsubtopix{\x7fxitemsubtopix\x01996,32968
+\def\internalBkitem{\x7finternalBkitem\x01998,33043
+\def\internalBkitemx{\x7finternalBkitemx\x01999,33095
+\def\kitemzzz #1{\x7fkitemzzz\x011001,33142
+\def\xitemzzz #1{\x7fxitemzzz\x011004,33244
+\def\itemzzz #1{\x7fitemzzz\x011007,33347
+\def\item{\x7fitem\x011037,34418
+\def\itemx{\x7fitemx\x011038,34469
+\def\kitem{\x7fkitem\x011039,34522
+\def\kitemx{\x7fkitemx\x011040,34575
+\def\xitem{\x7fxitem\x011041,34630
+\def\xitemx{\x7fxitemx\x011042,34683
+\def\description{\x7fdescription\x011045,34793
+\def\table{\x7ftable\x011047,34843
+\gdef\tablex #1^^M{\x7ftablex\x011049,34925
+\def\ftable{\x7fftable\x011052,34987
+\gdef\ftablex #1^^M{\x7fftablex\x011054,35071
+\def\Eftable{\x7fEftable\x011056,35133
+\let\Etable=\relax}\x7fEtable\x011057,35180
+\def\vtable{\x7fvtable\x011059,35202
+\gdef\vtablex #1^^M{\x7fvtablex\x011061,35286
+\def\Evtable{\x7fEvtable\x011063,35348
+\let\Etable=\relax}\x7fEtable\x011064,35395
+\def\dontindex #1{\x7fdontindex\x011066,35417
+\def\fnitemindex #1{\x7ffnitemindex\x011067,35437
+\def\vritemindex #1{\x7fvritemindex\x011068,35482
+\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\x7ftabley\x011071,35543
+\def\tablez #1#2#3#4#5#6{\x7ftablez\x011074,35631
+\def\Edescription{\x7fEdescription\x011077,35689
+\let\itemindex=#1%\x7fitemindex\x011078,35735
+\def\itemfont{\x7fitemfont\x011082,35890
+\def\Etable{\x7fEtable\x011090,36116
+\let\item = \internalBitem %\x7fitem\x011091,36162
+\let\itemx = \internalBitemx %\x7fitemx\x011092,36191
+\let\kitem = \internalBkitem %\x7fkitem\x011093,36222
+\let\kitemx = \internalBkitemx %\x7fkitemx\x011094,36253
+\let\xitem = \internalBxitem %\x7fxitem\x011095,36286
+\let\xitemx = \internalBxitemx %\x7fxitemx\x011096,36317
+\def\itemize{\x7fitemize\x011103,36440
+\def\itemizezzz #1{\x7fitemizezzz\x011105,36476
+\def\itemizey #1#2{\x7fitemizey\x011110,36571
+\def\itemcontents{\x7fitemcontents\x011120,36858
+\let\item=\itemizeitem}\x7fitem\x011121,36881
+\def\bullet{\x7fbullet\x011123,36906
+\def\minus{\x7fminus\x011124,36933
+\def\frenchspacing{\x7ffrenchspacing\x011128,37041
+\def\splitoff#1#2\endmark{\x7fsplitoff\x011134,37266
+\def\splitoff#1#2\endmark{\def\first{\x7ffirst\x011134,37266
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{\x7frest\x011134,37266
+\def\enumerate{\x7fenumerate\x011140,37496
+\def\enumeratezzz #1{\x7fenumeratezzz\x011141,37535
+\def\enumeratey #1 #2\endenumeratey{\x7fenumeratey\x011142,37588
+  \def\thearg{\x7fthearg\x011146,37735
+  \ifx\thearg\empty \def\thearg{\x7fthearg\x011147,37754
+\def\numericenumerate{\x7fnumericenumerate\x011184,39088
+\def\lowercaseenumerate{\x7flowercaseenumerate\x011190,39218
+\def\uppercaseenumerate{\x7fuppercaseenumerate\x011203,39565
+\def\startenumeration#1{\x7fstartenumeration\x011219,40055
+\def\alphaenumerate{\x7falphaenumerate\x011227,40237
+\def\capsenumerate{\x7fcapsenumerate\x011228,40272
+\def\Ealphaenumerate{\x7fEalphaenumerate\x011229,40306
+\def\Ecapsenumerate{\x7fEcapsenumerate\x011230,40340
+\def\itemizeitem{\x7fitemizeitem\x011234,40420
+{\let\par=\endgraf \smallbreak}\x7fpar\x011236,40460
+\gdef\newwrite{\x7fnewwrite\x011249,40841
+\def\newindex #1{\x7fnewindex\x011259,41277
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011262,41439
+\def\defindex{\x7fdefindex\x011268,41566
+\def\newcodeindex #1{\x7fnewcodeindex\x011272,41674
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011275,41840
+\def\defcodeindex{\x7fdefcodeindex\x011279,41934
+\def\synindex #1 #2 {\x7fsynindex\x011283,42114
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname\x7fexpandafter\x011284,42137
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo\x7fcsname\x011285,42217
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011286,42273
+\def\syncodeindex #1 #2 {\x7fsyncodeindex\x011292,42454
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname\x7fexpandafter\x011293,42481
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo\x7fcsname\x011294,42561
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011295,42617
+\def\doindex#1{\x7fdoindex\x011309,43133
+\def\doindex#1{\edef\indexname{\x7findexname\x011309,43133
+\def\singleindexer #1{\x7fsingleindexer\x011310,43192
+\def\singleindexer #1{\doind{\indexname}\x7fname\x011310,43192
+\def\docodeindex#1{\x7fdocodeindex\x011313,43304
+\def\docodeindex#1{\edef\indexname{\x7findexname\x011313,43304
+\def\singlecodeindexer #1{\x7fsinglecodeindexer\x011314,43371
+\def\singlecodeindexer #1{\doind{\indexname}\x7fname\x011314,43371
+\def\indexdummies{\x7findexdummies\x011316,43429
+\def\_{\x7f_\x011317,43449
+\def\w{\x7fw\x011318,43477
+\def\bf{\x7fbf\x011319,43504
+\def\rm{\x7frm\x011320,43533
+\def\sl{\x7fsl\x011321,43562
+\def\sf{\x7fsf\x011322,43591
+\def\tt{\x7ftt\x011323,43619
+\def\gtr{\x7fgtr\x011324,43647
+\def\less{\x7fless\x011325,43677
+\def\hat{\x7fhat\x011326,43709
+\def\char{\x7fchar\x011327,43739
+\def\TeX{\x7fTeX\x011328,43771
+\def\dots{\x7fdots\x011329,43801
+\def\copyright{\x7fcopyright\x011330,43834
+\def\tclose##1{\x7ftclose\x011331,43877
+\def\code##1{\x7fcode\x011332,43922
+\def\samp##1{\x7fsamp\x011333,43963
+\def\t##1{\x7ft\x011334,44004
+\def\r##1{\x7fr\x011335,44039
+\def\i##1{\x7fi\x011336,44074
+\def\b##1{\x7fb\x011337,44109
+\def\cite##1{\x7fcite\x011338,44144
+\def\key##1{\x7fkey\x011339,44185
+\def\file##1{\x7ffile\x011340,44224
+\def\var##1{\x7fvar\x011341,44265
+\def\kbd##1{\x7fkbd\x011342,44304
+\def\indexdummyfont#1{\x7findexdummyfont\x011347,44460
+\def\indexdummytex{\x7findexdummytex\x011348,44486
+\def\indexdummydots{\x7findexdummydots\x011349,44510
+\def\indexnofonts{\x7findexnofonts\x011351,44536
+\let\w=\indexdummyfont\x7fw\x011352,44556
 \let\w=\indexdummyfont\x7fdummyfont\x011352,44556
+\let\t=\indexdummyfont\x7ft\x011353,44579
 \let\t=\indexdummyfont\x7fdummyfont\x011353,44579
+\let\r=\indexdummyfont\x7fr\x011354,44602
 \let\r=\indexdummyfont\x7fdummyfont\x011354,44602
+\let\i=\indexdummyfont\x7fi\x011355,44625
 \let\i=\indexdummyfont\x7fdummyfont\x011355,44625
+\let\b=\indexdummyfont\x7fb\x011356,44648
 \let\b=\indexdummyfont\x7fdummyfont\x011356,44648
+\let\emph=\indexdummyfont\x7femph\x011357,44671
 \let\emph=\indexdummyfont\x7fdummyfont\x011357,44671
+\let\strong=\indexdummyfont\x7fstrong\x011358,44697
 \let\strong=\indexdummyfont\x7fdummyfont\x011358,44697
-\let\cite=\indexdummyfont\x7f=\indexdummyfont\x011359,44725
+\let\cite=\indexdummyfont\x7fcite\x011359,44725
+\let\cite=\indexdummyfont\x7fdummyfont\x011359,44725
+\let\sc=\indexdummyfont\x7fsc\x011360,44751
 \let\sc=\indexdummyfont\x7fdummyfont\x011360,44751
+\let\tclose=\indexdummyfont\x7ftclose\x011364,44923
 \let\tclose=\indexdummyfont\x7fdummyfont\x011364,44923
+\let\code=\indexdummyfont\x7fcode\x011365,44951
 \let\code=\indexdummyfont\x7fdummyfont\x011365,44951
+\let\file=\indexdummyfont\x7ffile\x011366,44977
 \let\file=\indexdummyfont\x7fdummyfont\x011366,44977
+\let\samp=\indexdummyfont\x7fsamp\x011367,45003
 \let\samp=\indexdummyfont\x7fdummyfont\x011367,45003
+\let\kbd=\indexdummyfont\x7fkbd\x011368,45029
 \let\kbd=\indexdummyfont\x7fdummyfont\x011368,45029
+\let\key=\indexdummyfont\x7fkey\x011369,45054
 \let\key=\indexdummyfont\x7fdummyfont\x011369,45054
+\let\var=\indexdummyfont\x7fvar\x011370,45079
 \let\var=\indexdummyfont\x7fdummyfont\x011370,45079
+\let\TeX=\indexdummytex\x7fTeX\x011371,45104
 \let\TeX=\indexdummytex\x7fdummytex\x011371,45104
+\let\dots=\indexdummydots\x7fdots\x011372,45128
 \let\dots=\indexdummydots\x7fdummydots\x011372,45128
-\let\indexbackslash=0  %overridden during \printindex.\x7fbackslash=0\x011382,45380
-\def\doind #1#2{\x7f\doind\x011384,45436
+\let\indexbackslash=0  %overridden during \printindex.\x7findexbackslash\x011382,45380
+\def\doind #1#2{\x7fdoind\x011384,45436
 {\indexdummies % Must do this here, since \bf, etc expand at this stage\x7fdummies\x011386,45479
-\def\rawbackslashxx{\x7f\rawbackslashxx\x011389,45619
+{\let\folio=0% Expand all macros now EXCEPT \folio\x7ffolio\x011388,45568
+\def\rawbackslashxx{\x7frawbackslashxx\x011389,45619
+\def\rawbackslashxx{\indexbackslash}\x7fbackslash\x011389,45619
 {\indexnofonts\x7fnofonts\x011394,45881
-\def\dosubind #1#2#3{\x7f\dosubind\x011405,46192
+\xdef\temp1{\x7ftemp1\x011395,45896
+\edef\temp{\x7ftemp\x011399,46068
+\def\dosubind #1#2#3{\x7fdosubind\x011405,46192
 {\indexdummies % Must do this here, since \bf, etc expand at this stage\x7fdummies\x011407,46240
-\def\rawbackslashxx{\x7f\rawbackslashxx\x011410,46344
+{\let\folio=0%\x7ffolio\x011409,46329
+\def\rawbackslashxx{\x7frawbackslashxx\x011410,46344
+\def\rawbackslashxx{\indexbackslash}\x7fbackslash\x011410,46344
 {\indexnofonts\x7fnofonts\x011414,46498
-\def\findex {\x7f\findex\x011443,47429
-\def\kindex {\x7f\kindex\x011444,47452
-\def\cindex {\x7f\cindex\x011445,47475
-\def\vindex {\x7f\vindex\x011446,47498
-\def\tindex {\x7f\tindex\x011447,47521
-\def\pindex {\x7f\pindex\x011448,47544
-\def\cindexsub {\x7f\cindexsub\x011450,47568
-\def\printindex{\x7f\printindex\x011462,47895
-\def\doprintindex#1{\x7f\doprintindex\x011464,47936
-  \def\indexbackslash{\x7f\indexbackslash\x011481,48421
+\xdef\temp1{\x7ftemp1\x011415,46513
+\edef\temp{\x7ftemp\x011419,46688
+\def\findex {\x7ffindex\x011443,47429
+\def\kindex {\x7fkindex\x011444,47452
+\def\cindex {\x7fcindex\x011445,47475
+\def\vindex {\x7fvindex\x011446,47498
+\def\tindex {\x7ftindex\x011447,47521
+\def\pindex {\x7fpindex\x011448,47544
+\def\cindexsub {\x7fcindexsub\x011450,47568
+\gdef\cindexsub "#1" #2^^M{\x7fcindexsub\x011452,47631
+\def\printindex{\x7fprintindex\x011462,47895
+\def\doprintindex#1{\x7fdoprintindex\x011464,47936
+  \def\indexbackslash{\x7findexbackslash\x011481,48421
   \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt\x7ffonts\rm\x011482,48460
-\def\initial #1{\x7f\initial\x011517,49532
-\def\entry #1#2{\x7f\entry\x011523,49739
+\def\initial #1{\x7finitial\x011517,49532
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7ftentt\x011518,49550
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7ftt\x011518,49550
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7fsf\x011518,49550
+\def\entry #1#2{\x7fentry\x011523,49739
   \null\nobreak\indexdotfill % Have leaders before the page number.\x7fdotfill\x011540,50386
-\def\indexdotfill{\x7f\indexdotfill\x011549,50714
-\def\primary #1{\x7f\primary\x011552,50820
-\def\secondary #1#2{\x7f\secondary\x011556,50902
+\def\indexdotfill{\x7findexdotfill\x011549,50714
+\def\primary #1{\x7fprimary\x011552,50820
+\def\secondary #1#2{\x7fsecondary\x011556,50902
 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par\x7fdotfill\x011559,50984
 \newbox\partialpage\x7fialpage\x011566,51157
-\def\begindoublecolumns{\x7f\begindoublecolumns\x011572,51315
-  \output={\global\setbox\partialpage=\x7fialpage=\x011573,51351
-\def\enddoublecolumns{\x7f\enddoublecolumns\x011577,51539
-\def\doublecolumnout{\x7f\doublecolumnout\x011580,51624
+\def\begindoublecolumns{\x7fbegindoublecolumns\x011572,51315
+  \output={\global\setbox\partialpage=\x7fialpage\x011573,51351
+\def\enddoublecolumns{\x7fenddoublecolumns\x011577,51539
+\def\doublecolumnout{\x7fdoublecolumnout\x011580,51624
   \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage\x7fialpage\x011581,51693
-\def\pagesofar{\x7f\pagesofar\x011584,51871
-\def\balancecolumns{\x7f\balancecolumns\x011588,52108
+\def\pagesofar{\x7fpagesofar\x011584,51871
+\def\pagesofar{\unvbox\partialpage %\x7fialpage\x011584,51871
+\def\balancecolumns{\x7fbalancecolumns\x011588,52108
   \availdimen@=\pageheight \advance\availdimen@ by-\ht\partialpage\x7fialpage\x011594,52279
      \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage\x7fialpage\x011600,52540
 \newcount \appendixno  \appendixno = `\@\x7fno\x011627,53445
-\def\appendixletter{\x7f\appendixletter\x011628,53486
-\def\opencontents{\x7f\opencontents\x011632,53589
-\def\thischapter{\x7f\thischapter\x011637,53770
-\def\seccheck#1{\x7f\seccheck\x011638,53808
-\def\chapternofonts{\x7f\chapternofonts\x011643,53912
-\def\result{\x7f\result\x011646,53987
-\def\equiv{\x7f\equiv\x011647,54022
-\def\expansion{\x7f\expansion\x011648,54055
-\def\print{\x7f\print\x011649,54096
-\def\TeX{\x7f\TeX\x011650,54129
-\def\dots{\x7f\dots\x011651,54158
-\def\copyright{\x7f\copyright\x011652,54189
-\def\tt{\x7f\tt\x011653,54230
-\def\bf{\x7f\bf\x011654,54257
-\def\w{\x7f\w\x011655,54285
-\def\less{\x7f\less\x011656,54310
-\def\gtr{\x7f\gtr\x011657,54341
-\def\hat{\x7f\hat\x011658,54370
-\def\char{\x7f\char\x011659,54399
-\def\tclose##1{\x7f\tclose\x011660,54430
-\def\code##1{\x7f\code\x011661,54474
-\def\samp##1{\x7f\samp\x011662,54514
-\def\r##1{\x7f\r\x011663,54554
-\def\b##1{\x7f\b\x011664,54588
-\def\key##1{\x7f\key\x011665,54622
-\def\file##1{\x7f\file\x011666,54660
-\def\kbd##1{\x7f\kbd\x011667,54700
-\def\i##1{\x7f\i\x011669,54808
-\def\cite##1{\x7f\cite\x011670,54842
-\def\var##1{\x7f\var\x011671,54882
-\def\emph##1{\x7f\emph\x011672,54920
-\def\dfn##1{\x7f\dfn\x011673,54960
-\def\thischaptername{\x7f\thischaptername\x011676,55001
-\outer\def\chapter{\x7f\chapter\x011677,55040
-\def\chapterzzz #1{\x7f\chapterzzz\x011678,55081
-{\chapternofonts%\x7fnofonts%\x011687,55477
-\global\let\section = \numberedsec\x7f=\x011692,55630
-\global\let\subsection = \numberedsubsec\x7f=\x011693,55665
-\global\let\subsubsection = \numberedsubsubsec\x7f=\x011694,55706
-\outer\def\appendix{\x7f\appendix\x011697,55757
-\def\appendixzzz #1{\x7f\appendixzzz\x011698,55800
+\newcount \appendixno  \appendixno = `\@\x7fno\x011627,53445
+\def\appendixletter{\x7fappendixletter\x011628,53486
+\def\appendixletter{\char\the\appendixno}\x7fno\x011628,53486
+\def\opencontents{\x7fopencontents\x011632,53589
+\def\thischapter{\x7fthischapter\x011637,53770
+\def\thischapter{} \def\thissection{\x7fthissection\x011637,53770
+\def\seccheck#1{\x7fseccheck\x011638,53808
+\def\chapternofonts{\x7fchapternofonts\x011643,53912
+\let\rawbackslash=\relax%\x7frawbackslash\x011644,53934
+\let\frenchspacing=\relax%\x7ffrenchspacing\x011645,53960
+\def\result{\x7fresult\x011646,53987
+\def\equiv{\x7fequiv\x011647,54022
+\def\expansion{\x7fexpansion\x011648,54055
+\def\print{\x7fprint\x011649,54096
+\def\TeX{\x7fTeX\x011650,54129
+\def\dots{\x7fdots\x011651,54158
+\def\copyright{\x7fcopyright\x011652,54189
+\def\tt{\x7ftt\x011653,54230
+\def\bf{\x7fbf\x011654,54257
+\def\w{\x7fw\x011655,54285
+\def\less{\x7fless\x011656,54310
+\def\gtr{\x7fgtr\x011657,54341
+\def\hat{\x7fhat\x011658,54370
+\def\char{\x7fchar\x011659,54399
+\def\tclose##1{\x7ftclose\x011660,54430
+\def\code##1{\x7fcode\x011661,54474
+\def\samp##1{\x7fsamp\x011662,54514
+\def\r##1{\x7fr\x011663,54554
+\def\b##1{\x7fb\x011664,54588
+\def\key##1{\x7fkey\x011665,54622
+\def\file##1{\x7ffile\x011666,54660
+\def\kbd##1{\x7fkbd\x011667,54700
+\def\i##1{\x7fi\x011669,54808
+\def\cite##1{\x7fcite\x011670,54842
+\def\var##1{\x7fvar\x011671,54882
+\def\emph##1{\x7femph\x011672,54920
+\def\dfn##1{\x7fdfn\x011673,54960
+\def\thischaptername{\x7fthischaptername\x011676,55001
+\outer\def\chapter{\x7fchapter\x011677,55040
+\outer\def\chapter{\parsearg\chapterzzz}\x7fzzz\x011677,55040
+\def\chapterzzz #1{\x7fchapterzzz\x011678,55081
+\gdef\thissection{\x7fthissection\x011682,55246
+\gdef\thischaptername{\x7fthischaptername\x011683,55269
+\xdef\thischapter{\x7fthischapter\x011686,55410
+{\chapternofonts%\x7fnofonts\x011687,55477
+\edef\temp{\x7ftemp\x011688,55495
+\global\let\section = \numberedsec\x7fsection\x011692,55630
+\global\let\subsection = \numberedsubsec\x7fsubsection\x011693,55665
+\global\let\subsubsection = \numberedsubsubsec\x7fsubsubsection\x011694,55706
+\outer\def\appendix{\x7fappendix\x011697,55757
+\outer\def\appendix{\parsearg\appendixzzz}\x7fzzz\x011697,55757
+\def\appendixzzz #1{\x7fappendixzzz\x011698,55800
 \global\advance \appendixno by 1 \message{\x7fno\x011700,55877
+\global\advance \appendixno by 1 \message{Appendix \appendixletter}\x7fletter\x011700,55877
 \chapmacro {#1}{Appendix \appendixletter}\x7fletter\x011701,55946
+\gdef\thissection{\x7fthissection\x011702,55989
+\gdef\thischaptername{\x7fthischaptername\x011703,56012
+\xdef\thischapter{\x7fthischapter\x011704,56039
 \xdef\thischapter{Appendix \appendixletter: \noexpand\thischaptername}\x7fletter:\x011704,56039
-{\chapternofonts%\x7fnofonts%\x011705,56111
+{\chapternofonts%\x7fnofonts\x011705,56111
+\edef\temp{\x7ftemp\x011706,56129
   {#1}{Appendix \appendixletter}\x7fletter\x011707,56167
 \appendixnoderef %\x7fnoderef\x011710,56267
-\global\let\section = \appendixsec\x7f=\x011711,56286
-\global\let\subsection = \appendixsubsec\x7f=\x011712,56321
-\global\let\subsubsection = \appendixsubsubsec\x7f=\x011713,56362
-\outer\def\top{\x7f\top\x011716,56413
-\outer\def\unnumbered{\x7f\unnumbered\x011717,56453
-\def\unnumberedzzz #1{\x7f\unnumberedzzz\x011718,56500
-{\chapternofonts%\x7fnofonts%\x011722,56663
-\global\let\section = \unnumberedsec\x7f=\x011727,56813
-\global\let\subsection = \unnumberedsubsec\x7f=\x011728,56850
-\global\let\subsubsection = \unnumberedsubsubsec\x7f=\x011729,56893
-\outer\def\numberedsec{\x7f\numberedsec\x011732,56946
-\def\seczzz #1{\x7f\seczzz\x011733,56987
-{\chapternofonts%\x7fnofonts%\x011736,57143
-\outer\def\appendixsection{\x7f\appendixsection\x011745,57329
-\outer\def\appendixsec{\x7f\appendixsec\x011746,57386
-\def\appendixsectionzzz #1{\x7f\appendixsectionzzz\x011747,57439
+\global\let\section = \appendixsec\x7fsection\x011711,56286
+\global\let\section = \appendixsec\x7fsec\x011711,56286
+\global\let\subsection = \appendixsubsec\x7fsubsection\x011712,56321
+\global\let\subsection = \appendixsubsec\x7fsubsec\x011712,56321
+\global\let\subsubsection = \appendixsubsubsec\x7fsubsubsection\x011713,56362
+\global\let\subsubsection = \appendixsubsubsec\x7fsubsubsec\x011713,56362
+\outer\def\top{\x7ftop\x011716,56413
+\outer\def\unnumbered{\x7funnumbered\x011717,56453
+\def\unnumberedzzz #1{\x7funnumberedzzz\x011718,56500
+\gdef\thischapter{\x7fthischapter\x011721,56619
+\gdef\thischapter{#1}\gdef\thissection{\x7fthissection\x011721,56619
+{\chapternofonts%\x7fnofonts\x011722,56663
+\edef\temp{\x7ftemp\x011723,56681
+\global\let\section = \unnumberedsec\x7fsection\x011727,56813
+\global\let\subsection = \unnumberedsubsec\x7fsubsection\x011728,56850
+\global\let\subsubsection = \unnumberedsubsubsec\x7fsubsubsection\x011729,56893
+\outer\def\numberedsec{\x7fnumberedsec\x011732,56946
+\def\seczzz #1{\x7fseczzz\x011733,56987
+\gdef\thissection{\x7fthissection\x011735,57079
+{\chapternofonts%\x7fnofonts\x011736,57143
+\edef\temp{\x7ftemp\x011737,57161
+\outer\def\appendixsection{\x7fappendixsection\x011745,57329
+\outer\def\appendixsection{\parsearg\appendixsectionzzz}\x7fsectionzzz\x011745,57329
+\outer\def\appendixsec{\x7fappendixsec\x011746,57386
+\outer\def\appendixsec{\parsearg\appendixsectionzzz}\x7fsectionzzz\x011746,57386
+\def\appendixsectionzzz #1{\x7fappendixsectionzzz\x011747,57439
+\gdef\thissection{\x7fthissection\x011749,57551
 \gdef\thissection{#1}\secheading {#1}{\appendixletter}\x7fletter\x011749,57551
-{\chapternofonts%\x7fnofonts%\x011750,57619
+{\chapternofonts%\x7fnofonts\x011750,57619
+\edef\temp{\x7ftemp\x011751,57637
 {#1}{\appendixletter}\x7fletter\x011752,57675
 \appendixnoderef %\x7fnoderef\x011755,57775
-\outer\def\unnumberedsec{\x7f\unnumberedsec\x011759,57815
-\def\unnumberedseczzz #1{\x7f\unnumberedseczzz\x011760,57868
-{\chapternofonts%\x7fnofonts%\x011762,57963
-\outer\def\numberedsubsec{\x7f\numberedsubsec\x011770,58131
-\def\numberedsubseczzz #1{\x7f\numberedsubseczzz\x011771,58186
-{\chapternofonts%\x7fnofonts%\x011774,58365
-\outer\def\appendixsubsec{\x7f\appendixsubsec\x011783,58569
-\def\appendixsubseczzz #1{\x7f\appendixsubseczzz\x011784,58624
+\outer\def\unnumberedsec{\x7funnumberedsec\x011759,57815
+\def\unnumberedseczzz #1{\x7funnumberedseczzz\x011760,57868
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011761,57919
+{\chapternofonts%\x7fnofonts\x011762,57963
+\edef\temp{\x7ftemp\x011763,57981
+\outer\def\numberedsubsec{\x7fnumberedsubsec\x011770,58131
+\def\numberedsubseczzz #1{\x7fnumberedsubseczzz\x011771,58186
+\gdef\thissection{\x7fthissection\x011772,58235
+{\chapternofonts%\x7fnofonts\x011774,58365
+\edef\temp{\x7ftemp\x011775,58383
+\outer\def\appendixsubsec{\x7fappendixsubsec\x011783,58569
+\outer\def\appendixsubsec{\parsearg\appendixsubseczzz}\x7fsubseczzz\x011783,58569
+\def\appendixsubseczzz #1{\x7fappendixsubseczzz\x011784,58624
+\gdef\thissection{\x7fthissection\x011785,58677
 \subsecheading {#1}{\appendixletter}\x7fletter\x011786,58746
-{\chapternofonts%\x7fnofonts%\x011787,58811
+{\chapternofonts%\x7fnofonts\x011787,58811
+\edef\temp{\x7ftemp\x011788,58829
 {#1}{\appendixletter}\x7fletter\x011789,58870
 \appendixnoderef %\x7fnoderef\x011792,58985
-\outer\def\unnumberedsubsec{\x7f\unnumberedsubsec\x011796,59025
-\def\unnumberedsubseczzz #1{\x7f\unnumberedsubseczzz\x011797,59084
-{\chapternofonts%\x7fnofonts%\x011799,59185
-\outer\def\numberedsubsubsec{\x7f\numberedsubsubsec\x011807,59356
-\def\numberedsubsubseczzz #1{\x7f\numberedsubsubseczzz\x011808,59417
-{\chapternofonts%\x7fnofonts%\x011812,59614
-\outer\def\appendixsubsubsec{\x7f\appendixsubsubsec\x011823,59847
-\def\appendixsubsubseczzz #1{\x7f\appendixsubsubseczzz\x011824,59908
+\outer\def\unnumberedsubsec{\x7funnumberedsubsec\x011796,59025
+\def\unnumberedsubseczzz #1{\x7funnumberedsubseczzz\x011797,59084
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011798,59141
+{\chapternofonts%\x7fnofonts\x011799,59185
+\edef\temp{\x7ftemp\x011800,59203
+\outer\def\numberedsubsubsec{\x7fnumberedsubsubsec\x011807,59356
+\def\numberedsubsubseczzz #1{\x7fnumberedsubsubseczzz\x011808,59417
+\gdef\thissection{\x7fthissection\x011809,59472
+{\chapternofonts%\x7fnofonts\x011812,59614
+\edef\temp{\x7ftemp\x011813,59632
+\outer\def\appendixsubsubsec{\x7fappendixsubsubsec\x011823,59847
+\outer\def\appendixsubsubsec{\parsearg\appendixsubsubseczzz}\x7fsubsubseczzz\x011823,59847
+\def\appendixsubsubseczzz #1{\x7fappendixsubsubseczzz\x011824,59908
+\gdef\thissection{\x7fthissection\x011825,59967
   {\appendixletter}\x7fletter\x011827,60047
-{\chapternofonts%\x7fnofonts%\x011828,60113
+{\chapternofonts%\x7fnofonts\x011828,60113
+\edef\temp{\x7ftemp\x011829,60131
   {\appendixletter}\x7fletter\x011830,60178
 \appendixnoderef %\x7fnoderef\x011834,60312
-\outer\def\unnumberedsubsubsec{\x7f\unnumberedsubsubsec\x011838,60352
-\def\unnumberedsubsubseczzz #1{\x7f\unnumberedsubsubseczzz\x011839,60417
-{\chapternofonts%\x7fnofonts%\x011841,60524
-\def\infotop{\x7f\infotop\x011851,60853
-\def\infounnumbered{\x7f\infounnumbered\x011852,60891
-\def\infounnumberedsec{\x7f\infounnumberedsec\x011853,60936
-\def\infounnumberedsubsec{\x7f\infounnumberedsubsec\x011854,60987
-\def\infounnumberedsubsubsec{\x7f\infounnumberedsubsubsec\x011855,61044
-\def\infoappendix{\x7f\infoappendix\x011857,61108
-\def\infoappendixsec{\x7f\infoappendixsec\x011858,61149
-\def\infoappendixsubsec{\x7f\infoappendixsubsec\x011859,61196
-\def\infoappendixsubsubsec{\x7f\infoappendixsubsubsec\x011860,61249
-\def\infochapter{\x7f\infochapter\x011862,61309
-\def\infosection{\x7f\infosection\x011863,61348
-\def\infosubsection{\x7f\infosubsection\x011864,61387
-\def\infosubsubsection{\x7f\infosubsubsection\x011865,61432
-\global\let\section = \numberedsec\x7f=\x011870,61669
-\global\let\subsection = \numberedsubsec\x7f=\x011871,61704
-\global\let\subsubsection = \numberedsubsubsec\x7f=\x011872,61745
-\def\majorheading{\x7f\majorheading\x011886,62252
-\def\majorheadingzzz #1{\x7f\majorheadingzzz\x011887,62297
-\def\chapheading{\x7f\chapheading\x011893,62530
-\def\chapheadingzzz #1{\x7f\chapheadingzzz\x011894,62573
-\def\heading{\x7f\heading\x011899,62768
-\def\subheading{\x7f\subheading\x011901,62805
-\def\subsubheading{\x7f\subsubheading\x011903,62848
-\def\dobreak#1#2{\x7f\dobreak\x011910,63125
-\def\setchapterstyle #1 {\x7f\setchapterstyle\x011912,63203
-\def\chapbreak{\x7f\chapbreak\x011919,63458
-\def\chappager{\x7f\chappager\x011920,63508
-\def\chapoddpage{\x7f\chapoddpage\x011921,63546
-\def\setchapternewpage #1 {\x7f\setchapternewpage\x011923,63625
-\def\CHAPPAGoff{\x7f\CHAPPAGoff\x011925,63682
-\def\CHAPPAGon{\x7f\CHAPPAGon\x011929,63776
-\global\def\HEADINGSon{\x7f\HEADINGSon\x011932,63867
-\def\CHAPPAGodd{\x7f\CHAPPAGodd\x011934,63909
-\global\def\HEADINGSon{\x7f\HEADINGSon\x011937,64005
-\def\CHAPFplain{\x7f\CHAPFplain\x011941,64059
-\def\chfplain #1#2{\x7f\chfplain\x011945,64151
-\def\unnchfplain #1{\x7f\unnchfplain\x011956,64374
-\def\unnchfopen #1{\x7f\unnchfopen\x011964,64603
-\def\chfopen #1#2{\x7f\chfopen\x011970,64811
-\def\CHAPFopen{\x7f\CHAPFopen\x011975,64955
-\def\subsecheadingbreak{\x7f\subsecheadingbreak\x011982,65173
-\def\secheadingbreak{\x7f\secheadingbreak\x011985,65302
-\def\secheading #1#2#3{\x7f\secheading\x011993,65584
-\def\plainsecheading #1{\x7f\plainsecheading\x011994,65640
-\def\secheadingi #1{\x7f\secheadingi\x011995,65683
-\def\subsecheading #1#2#3#4{\x7f\subsecheading\x012006,66051
-\def\subsecheadingi #1{\x7f\subsecheadingi\x012007,66118
-\def\subsubsecfonts{\x7f\subsubsecfonts\x012014,66415
-\def\subsubsecheading #1#2#3#4#5{\x7f\subsubsecheading\x012017,66538
-\def\subsubsecheadingi #1{\x7f\subsubsecheadingi\x012018,66616
-\def\startcontents#1{\x7f\startcontents\x012032,67088
-   \unnumbchapmacro{#1}\def\thischapter{\x7f\thischapter\x012040,67361
-\outer\def\contents{\x7f\contents\x012049,67720
-\outer\def\summarycontents{\x7f\summarycontents\x012057,67864
-      \def\secentry ##1##2##3##4{\x7f\secentry\x012067,68235
-      \def\unnumbsecentry ##1##2{\x7f\unnumbsecentry\x012068,68270
-      \def\subsecentry ##1##2##3##4##5{\x7f\subsecentry\x012069,68305
-      \def\unnumbsubsecentry ##1##2{\x7f\unnumbsubsecentry\x012070,68346
-      \def\subsubsecentry ##1##2##3##4##5##6{\x7f\subsubsecentry\x012071,68384
-      \def\unnumbsubsubsecentry ##1##2{\x7f\unnumbsubsubsecentry\x012072,68431
-\def\chapentry#1#2#3{\x7f\chapentry\x012085,68865
-\def\shortchapentry#1#2#3{\x7f\shortchapentry\x012088,68982
+\outer\def\unnumberedsubsubsec{\x7funnumberedsubsubsec\x011838,60352
+\def\unnumberedsubsubseczzz #1{\x7funnumberedsubsubseczzz\x011839,60417
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011840,60480
+{\chapternofonts%\x7fnofonts\x011841,60524
+\edef\temp{\x7ftemp\x011842,60542
+\def\infotop{\x7finfotop\x011851,60853
+\def\infounnumbered{\x7finfounnumbered\x011852,60891
+\def\infounnumberedsec{\x7finfounnumberedsec\x011853,60936
+\def\infounnumberedsubsec{\x7finfounnumberedsubsec\x011854,60987
+\def\infounnumberedsubsubsec{\x7finfounnumberedsubsubsec\x011855,61044
+\def\infoappendix{\x7finfoappendix\x011857,61108
+\def\infoappendix{\parsearg\appendixzzz}\x7fzzz\x011857,61108
+\def\infoappendixsec{\x7finfoappendixsec\x011858,61149
+\def\infoappendixsec{\parsearg\appendixseczzz}\x7fseczzz\x011858,61149
+\def\infoappendixsubsec{\x7finfoappendixsubsec\x011859,61196
+\def\infoappendixsubsec{\parsearg\appendixsubseczzz}\x7fsubseczzz\x011859,61196
+\def\infoappendixsubsubsec{\x7finfoappendixsubsubsec\x011860,61249
+\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}\x7fsubsubseczzz\x011860,61249
+\def\infochapter{\x7finfochapter\x011862,61309
+\def\infochapter{\parsearg\chapterzzz}\x7fzzz\x011862,61309
+\def\infosection{\x7finfosection\x011863,61348
+\def\infosection{\parsearg\sectionzzz}\x7fzzz\x011863,61348
+\def\infosubsection{\x7finfosubsection\x011864,61387
+\def\infosubsection{\parsearg\subsectionzzz}\x7fzzz\x011864,61387
+\def\infosubsubsection{\x7finfosubsubsection\x011865,61432
+\def\infosubsubsection{\parsearg\subsubsectionzzz}\x7fzzz\x011865,61432
+\global\let\section = \numberedsec\x7fsection\x011870,61669
+\global\let\subsection = \numberedsubsec\x7fsubsection\x011871,61704
+\global\let\subsubsection = \numberedsubsubsec\x7fsubsubsection\x011872,61745
+\def\majorheading{\x7fmajorheading\x011886,62252
+\def\majorheadingzzz #1{\x7fmajorheadingzzz\x011887,62297
+\def\chapheading{\x7fchapheading\x011893,62530
+\def\chapheadingzzz #1{\x7fchapheadingzzz\x011894,62573
+\def\heading{\x7fheading\x011899,62768
+\def\subheading{\x7fsubheading\x011901,62805
+\def\subsubheading{\x7fsubsubheading\x011903,62848
+\def\dobreak#1#2{\x7fdobreak\x011910,63125
+\def\setchapterstyle #1 {\x7fsetchapterstyle\x011912,63203
+\def\chapbreak{\x7fchapbreak\x011919,63458
+\def\chappager{\x7fchappager\x011920,63508
+\def\chapoddpage{\x7fchapoddpage\x011921,63546
+\def\setchapternewpage #1 {\x7fsetchapternewpage\x011923,63625
+\def\CHAPPAGoff{\x7fCHAPPAGoff\x011925,63682
+\global\let\pchapsepmacro=\chapbreak\x7fpchapsepmacro\x011926,63699
+\global\let\pagealignmacro=\chappager}\x7fpagealignmacro\x011927,63736
+\def\CHAPPAGon{\x7fCHAPPAGon\x011929,63776
+\global\let\pchapsepmacro=\chappager\x7fpchapsepmacro\x011930,63792
+\global\let\pagealignmacro=\chappager\x7fpagealignmacro\x011931,63829
+\global\def\HEADINGSon{\x7fHEADINGSon\x011932,63867
+\def\CHAPPAGodd{\x7fCHAPPAGodd\x011934,63909
+\global\let\pchapsepmacro=\chapoddpage\x7fpchapsepmacro\x011935,63926
+\global\let\pagealignmacro=\chapoddpage\x7fpagealignmacro\x011936,63965
+\global\def\HEADINGSon{\x7fHEADINGSon\x011937,64005
+\def\CHAPFplain{\x7fCHAPFplain\x011941,64059
+\global\let\chapmacro=\chfplain\x7fchapmacro\x011942,64076
+\global\let\unnumbchapmacro=\unnchfplain}\x7funnumbchapmacro\x011943,64108
+\def\chfplain #1#2{\x7fchfplain\x011945,64151
+\def\unnchfplain #1{\x7funnchfplain\x011956,64374
+\def\unnchfopen #1{\x7funnchfopen\x011964,64603
+\def\chfopen #1#2{\x7fchfopen\x011970,64811
+\def\CHAPFopen{\x7fCHAPFopen\x011975,64955
+\global\let\chapmacro=\chfopen\x7fchapmacro\x011976,64971
+\global\let\unnumbchapmacro=\unnchfopen}\x7funnumbchapmacro\x011977,65002
+\def\subsecheadingbreak{\x7fsubsecheadingbreak\x011982,65173
+\def\secheadingbreak{\x7fsecheadingbreak\x011985,65302
+\let\paragraphindent=\comment\x7fparagraphindent\x011988,65428
+\def\secheading #1#2#3{\x7fsecheading\x011993,65584
+\def\plainsecheading #1{\x7fplainsecheading\x011994,65640
+\def\secheadingi #1{\x7fsecheadingi\x011995,65683
+\def\subsecheading #1#2#3#4{\x7fsubsecheading\x012006,66051
+\def\subsecheadingi #1{\x7fsubsecheadingi\x012007,66118
+\def\subsubsecfonts{\x7fsubsubsecfonts\x012014,66415
+\def\subsubsecheading #1#2#3#4#5{\x7fsubsubsecheading\x012017,66538
+\def\subsubsecheadingi #1{\x7fsubsubsecheadingi\x012018,66616
+\def\startcontents#1{\x7fstartcontents\x012032,67088
+   \unnumbchapmacro{#1}\def\thischapter{\x7fthischapter\x012040,67361
+\outer\def\contents{\x7fcontents\x012049,67720
+\outer\def\summarycontents{\x7fsummarycontents\x012057,67864
+      \let\chapentry = \shortchapentry\x7fchapentry\x012060,67936
+      \let\unnumbchapentry = \shortunnumberedentry\x7funnumbchapentry\x012061,67975
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7frm\x012064,68098
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7fbf\x012064,68098
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7fsl\x012064,68098
+      \def\secentry ##1##2##3##4{\x7fsecentry\x012067,68235
+      \def\unnumbsecentry ##1##2{\x7funnumbsecentry\x012068,68270
+      \def\subsecentry ##1##2##3##4##5{\x7fsubsecentry\x012069,68305
+      \def\unnumbsubsecentry ##1##2{\x7funnumbsubsecentry\x012070,68346
+      \def\subsubsecentry ##1##2##3##4##5##6{\x7fsubsubsecentry\x012071,68384
+      \def\unnumbsubsubsecentry ##1##2{\x7funnumbsubsubsecentry\x012072,68431
+\let\shortcontents = \summarycontents\x7fshortcontents\x012077,68530
+\def\chapentry#1#2#3{\x7fchapentry\x012085,68865
+\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}\x7fspace\x012085,68865
+\def\shortchapentry#1#2#3{\x7fshortchapentry\x012088,68982
     {#2\labelspace #1}\x7fspace\x012091,69092
-\def\unnumbchapentry#1#2{\x7f\unnumbchapentry\x012094,69146
-\def\shortunnumberedentry#1#2{\x7f\shortunnumberedentry\x012095,69193
-\def\secentry#1#2#3#4{\x7f\secentry\x012102,69357
-\def\unnumbsecentry#1#2{\x7f\unnumbsecentry\x012103,69416
-\def\subsecentry#1#2#3#4#5{\x7f\subsecentry\x012106,69477
-\def\unnumbsubsecentry#1#2{\x7f\unnumbsubsecentry\x012107,69547
-\def\subsubsecentry#1#2#3#4#5#6{\x7f\subsubsecentry\x012110,69621
+\def\unnumbchapentry#1#2{\x7funnumbchapentry\x012094,69146
+\def\shortunnumberedentry#1#2{\x7fshortunnumberedentry\x012095,69193
+\def\secentry#1#2#3#4{\x7fsecentry\x012102,69357
+\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}\x7fspace\x012102,69357
+\def\unnumbsecentry#1#2{\x7funnumbsecentry\x012103,69416
+\def\subsecentry#1#2#3#4#5{\x7fsubsecentry\x012106,69477
+\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}\x7fspace\x012106,69477
+\def\unnumbsubsecentry#1#2{\x7funnumbsubsecentry\x012107,69547
+\def\subsubsecentry#1#2#3#4#5#6{\x7fsubsubsecentry\x012110,69621
   \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}\x7fspace\x012111,69655
-\def\unnumbsubsubsecentry#1#2{\x7f\unnumbsubsubsecentry\x012112,69706
-\def\dochapentry#1#2{\x7f\dochapentry\x012123,70080
-\def\dosecentry#1#2{\x7f\dosecentry\x012138,70685
-\def\dosubsecentry#1#2{\x7f\dosubsecentry\x012145,70863
-\def\dosubsubsecentry#1#2{\x7f\dosubsubsecentry\x012152,71048
-\def\labelspace{\x7f\labelspace\x012160,71299
-\def\dopageno#1{\x7f\dopageno\x012162,71334
-\def\doshortpageno#1{\x7f\doshortpageno\x012163,71360
-\def\chapentryfonts{\x7f\chapentryfonts\x012165,71392
-\def\secentryfonts{\x7f\secentryfonts\x012166,71427
-\def\point{\x7f\point\x012192,72386
-\def\result{\x7f\result\x012194,72407
-\def\expansion{\x7f\expansion\x012195,72480
-\def\print{\x7f\print\x012196,72551
-\def\equiv{\x7f\equiv\x012198,72618
-\def\error{\x7f\error\x012218,73391
-\def\tex{\x7f\tex\x012224,73620
-\def\@{\x7f\@\x012242,74003
-\gdef\sepspaces{\def {\ }}}\x7f\\x012265,74735
-\def\aboveenvbreak{\x7f\aboveenvbreak\x012268,74817
-\def\afterenvbreak{\x7f\afterenvbreak\x012272,74983
-\def\ctl{\x7f\ctl\x012286,75494
-\def\ctr{\x7f\ctr\x012287,75566
-\def\cbl{\x7f\cbl\x012288,75605
-\def\cbr{\x7f\cbr\x012289,75645
-\def\carttop{\x7f\carttop\x012290,75684
-\def\cartbot{\x7f\cartbot\x012293,75792
-\long\def\cartouche{\x7f\cartouche\x012299,75932
-\def\Ecartouche{\x7f\Ecartouche\x012326,76720
-\def\lisp{\x7f\lisp\x012338,76855
-\def\Elisp{\x7f\Elisp\x012348,77202
-\def\next##1{\x7f\next\x012360,77528
-\def\Eexample{\x7f\Eexample\x012364,77570
-\def\Esmallexample{\x7f\Esmallexample\x012367,77617
-\def\smalllispx{\x7f\smalllispx\x012373,77795
-\def\Esmalllisp{\x7f\Esmalllisp\x012383,78149
+\def\unnumbsubsubsecentry#1#2{\x7funnumbsubsubsecentry\x012112,69706
+\def\dochapentry#1#2{\x7fdochapentry\x012123,70080
+\def\dosecentry#1#2{\x7fdosecentry\x012138,70685
+\def\dosubsecentry#1#2{\x7fdosubsecentry\x012145,70863
+\def\dosubsubsecentry#1#2{\x7fdosubsubsecentry\x012152,71048
+\def\labelspace{\x7flabelspace\x012160,71299
+\def\dopageno#1{\x7fdopageno\x012162,71334
+\def\doshortpageno#1{\x7fdoshortpageno\x012163,71360
+\def\chapentryfonts{\x7fchapentryfonts\x012165,71392
+\def\secentryfonts{\x7fsecentryfonts\x012166,71427
+\let\subsecentryfonts = \textfonts\x7fsubsecentryfonts\x012167,71458
+\let\subsubsecentryfonts = \textfonts\x7fsubsubsecentryfonts\x012168,71493
+\let\ptexequiv = \equiv\x7fptexequiv\x012180,71896
+\def\point{\x7fpoint\x012192,72386
+\def\result{\x7fresult\x012194,72407
+\def\expansion{\x7fexpansion\x012195,72480
+\def\print{\x7fprint\x012196,72551
+\def\equiv{\x7fequiv\x012198,72618
+\def\error{\x7ferror\x012218,73391
+\def\tex{\x7ftex\x012224,73620
+\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie\x7f~\x012227,73731
+\let\{=\ptexlbrace\x7f{\x012237,73912
+\let\}=\ptexrbrace\x7f}\x012238,73931
+\let\.=\ptexdot\x7f.\x012239,73950
+\let\*=\ptexstar\x7f*\x012240,73966
+\let\dots=\ptexdots\x7fdots\x012241,73983
+\def\@{\x7f@\x012242,74003
+\let\bullet=\ptexbullet\x7fbullet\x012243,74014
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fb\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fc\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fi\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7ft\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fl\x012244,74038
+\let\L=\ptexL\x7fL\x012245,74108
+\let\Etex=\endgroup}\x7fEtex\x012247,74124
+\gdef\lisppar{\x7flisppar\x012259,74517
+\gdef\sepspaces{\x7fsepspaces\x012265,74735
+\def\aboveenvbreak{\x7faboveenvbreak\x012268,74817
+\def\afterenvbreak{\x7fafterenvbreak\x012272,74983
+\let\nonarrowing=\relax\x7fnonarrowing\x012276,75176
+\def\ctl{\x7fctl\x012286,75494
+\def\ctr{\x7fctr\x012287,75566
+\def\cbl{\x7fcbl\x012288,75605
+\def\cbr{\x7fcbr\x012289,75645
+\def\carttop{\x7fcarttop\x012290,75684
+\def\cartbot{\x7fcartbot\x012293,75792
+\long\def\cartouche{\x7fcartouche\x012299,75932
+	\let\nonarrowing=\comment\x7fnonarrowing\x012311,76404
+\def\Ecartouche{\x7fEcartouche\x012326,76720
+\def\lisp{\x7flisp\x012338,76855
+\let\par=\lisppar\x7fpar\x012347,77184
+\def\Elisp{\x7fElisp\x012348,77202
+\let\exdent=\nofillexdent\x7fexdent\x012355,77418
+\let\nonarrowing=\relax\x7fnonarrowing\x012356,77444
+\def\next##1{\x7fnext\x012360,77528
+\let\example=\lisp\x7fexample\x012363,77551
+\def\Eexample{\x7fEexample\x012364,77570
+\let\smallexample=\lisp\x7fsmallexample\x012366,77593
+\def\Esmallexample{\x7fEsmallexample\x012367,77617
+\def\smalllispx{\x7fsmalllispx\x012373,77795
+\let\par=\lisppar\x7fpar\x012382,78131
+\def\Esmalllisp{\x7fEsmalllisp\x012383,78149
+\let\exdent=\nofillexdent\x7fexdent\x012392,78436
+\let\nonarrowing=\relax\x7fnonarrowing\x012393,78462
 \obeyspaces \obeylines \ninett \indexfonts \rawbackslash\x7ffonts\x012396,78505
-\def\next##1{\x7f\next\x012397,78562
-\def\display{\x7f\display\x012401,78642
-\def\Edisplay{\x7f\Edisplay\x012410,78961
-\def\next##1{\x7f\next\x012422,79272
-\def\format{\x7f\format\x012426,79375
-\def\Eformat{\x7f\Eformat\x012434,79671
-\def\next##1{\x7f\next\x012437,79760
-\def\flushleft{\x7f\flushleft\x012441,79812
-\def\Eflushleft{\x7f\Eflushleft\x012451,80183
-\def\next##1{\x7f\next\x012454,80276
-\def\flushright{\x7f\flushright\x012456,80298
-\def\Eflushright{\x7f\Eflushright\x012466,80670
-\def\next##1{\x7f\next\x012470,80801
-\def\quotation{\x7f\quotation\x012474,80859
-\def\Equotation{\x7f\Equotation\x012480,81051
-\def\setdeffont #1 {\x7f\setdeffont\x012493,81449
+\def\next##1{\x7fnext\x012397,78562
+\def\display{\x7fdisplay\x012401,78642
+\let\par=\lisppar\x7fpar\x012409,78943
+\def\Edisplay{\x7fEdisplay\x012410,78961
+\let\exdent=\nofillexdent\x7fexdent\x012417,79180
+\let\nonarrowing=\relax\x7fnonarrowing\x012418,79206
+\def\next##1{\x7fnext\x012422,79272
+\def\format{\x7fformat\x012426,79375
+\let\par=\lisppar\x7fpar\x012433,79653
+\def\Eformat{\x7fEformat\x012434,79671
+\def\next##1{\x7fnext\x012437,79760
+\def\flushleft{\x7fflushleft\x012441,79812
+\let\par=\lisppar\x7fpar\x012450,80165
+\def\Eflushleft{\x7fEflushleft\x012451,80183
+\def\next##1{\x7fnext\x012454,80276
+\def\flushright{\x7fflushright\x012456,80298
+\let\par=\lisppar\x7fpar\x012465,80652
+\def\Eflushright{\x7fEflushright\x012466,80670
+\def\next##1{\x7fnext\x012470,80801
+\def\quotation{\x7fquotation\x012474,80859
+\def\Equotation{\x7fEquotation\x012480,81051
+\let\nonarrowing=\relax\x7fnonarrowing\x012487,81301
+\def\setdeffont #1 {\x7fsetdeffont\x012493,81449
+\newskip\defbodyindent \defbodyindent=.4in\x7fbodyindent\x012495,81495
 \newskip\defbodyindent \defbodyindent=.4in\x7fbodyindent\x012495,81495
 \newskip\defargsindent \defargsindent=50pt\x7fargsindent\x012496,81538
+\newskip\defargsindent \defargsindent=50pt\x7fargsindent\x012496,81538
 \newskip\deftypemargin \deftypemargin=12pt\x7ftypemargin\x012497,81581
+\newskip\deftypemargin \deftypemargin=12pt\x7ftypemargin\x012497,81581
+\newskip\deflastargmargin \deflastargmargin=18pt\x7flastargmargin\x012498,81624
 \newskip\deflastargmargin \deflastargmargin=18pt\x7flastargmargin\x012498,81624
-\def\activeparens{\x7f\activeparens\x012503,81822
-\def\opnr{\x7f\opnr\x012529,83034
-\def\lbrb{\x7f\lbrb\x012530,83099
-\def\defname #1#2{\x7f\defname\x012536,83300
+\def\activeparens{\x7factiveparens\x012503,81822
+\gdef\functionparens{\x7ffunctionparens\x012507,82016
+\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }\x7f&\x012507,82016
+\gdef\boldbrax{\x7fboldbrax\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f(\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f)\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f[\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f]\x012508,82074
+\gdef\oprm#1 {\x7foprm\x012512,82250
+\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %\x7f(\x012512,82250
+\gdef\opnested{\x7fopnested\x012516,82407
+\gdef\clrm{\x7fclrm\x012518,82466
+\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi\x7f(\x012520,82602
+\gdef\amprm#1 {\x7famprm\x012523,82769
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }\x7f(\x012523,82769
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }\x7f)\x012523,82769
+\gdef\normalparens{\x7fnormalparens\x012525,82822
+\gdef\normalparens{\boldbrax\let&=\ampnr}\x7f&\x012525,82822
+\def\opnr{\x7fopnr\x012529,83034
+\def\opnr{{\sf\char`\(}} \def\clnr{\x7fclnr\x012529,83034
+\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\x7fampnr\x012529,83034
+\def\lbrb{\x7flbrb\x012530,83099
+\def\lbrb{{\bf\char`\[}} \def\rbrb{\x7frbrb\x012530,83099
+\def\defname #1#2{\x7fdefname\x012536,83300
 \advance\dimen2 by -\defbodyindent\x7fbodyindent\x012540,83418
 \advance\dimen3 by -\defbodyindent\x7fbodyindent\x012542,83472
 \setbox0=\hbox{\hskip \deflastargmargin{\x7flastargmargin\x012544,83526
+\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}\x7ftypemargin\x012544,83526
 \dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations\x7fargsindent\x012546,83668
 \parshape 2 0in \dimen0 \defargsindent \dimen1     %\x7fargsindent\x012547,83743
 \rlap{\rightline{{\rm #2}\hskip \deftypemargin}\x7ftypemargin\x012554,84112
 \advance\leftskip by -\defbodyindent\x7fbodyindent\x012557,84246
 \exdentamount=\defbodyindent\x7fbodyindent\x012558,84283
-\def\defparsebody #1#2#3{\x7f\defparsebody\x012568,84642
-\def#1{\x7f2572,84826
-\def#2{\x7f2573,84862
+\def\defparsebody #1#2#3{\x7fdefparsebody\x012568,84642
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012575,84934
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012575,84934
 \exdentamount=\defbodyindent\x7fbodyindent\x012576,85008
-\def\defmethparsebody #1#2#3#4 {\x7f\defmethparsebody\x012581,85112
-\def#1{\x7f2585,85273
-\def#2##1 {\x7f2586,85309
+\def\defmethparsebody #1#2#3#4 {\x7fdefmethparsebody\x012581,85112
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012588,85392
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012588,85392
 \exdentamount=\defbodyindent\x7fbodyindent\x012589,85466
-\def\defopparsebody #1#2#3#4#5 {\x7f\defopparsebody\x012592,85551
-\def#1{\x7f2596,85712
-\def#2##1 ##2 {\x7f2597,85748
+\def\defopparsebody #1#2#3#4#5 {\x7fdefopparsebody\x012592,85551
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012600,85848
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012600,85848
 \exdentamount=\defbodyindent\x7fbodyindent\x012601,85922
-\def\defvarparsebody #1#2#3{\x7f\defvarparsebody\x012608,86193
-\def#1{\x7f2612,86380
-\def#2{\x7f2613,86416
+\def\defvarparsebody #1#2#3{\x7fdefvarparsebody\x012608,86193
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012615,86475
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012615,86475
 \exdentamount=\defbodyindent\x7fbodyindent\x012616,86549
-\def\defvrparsebody #1#2#3#4 {\x7f\defvrparsebody\x012621,86640
-\def#1{\x7f2625,86799
-\def#2##1 {\x7f2626,86835
+\def\defvrparsebody #1#2#3#4 {\x7fdefvrparsebody\x012621,86640
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012628,86905
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012628,86905
 \exdentamount=\defbodyindent\x7fbodyindent\x012629,86979
-\def\defopvarparsebody #1#2#3#4#5 {\x7f\defopvarparsebody\x012632,87051
-\def#1{\x7f2636,87215
-\def#2##1 ##2 {\x7f2637,87251
+\def\defopvarparsebody #1#2#3#4#5 {\x7fdefopvarparsebody\x012632,87051
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012640,87338
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012640,87338
 \exdentamount=\defbodyindent\x7fbodyindent\x012641,87412
-\def\defunargs #1{\x7f\defunargs\x012664,88172
-\def\deftypefunargs #1{\x7f\deftypefunargs\x012676,88554
-\def\deffn{\x7f\deffn\x012690,88936
-\def\deffnheader #1#2#3{\x7f\deffnheader\x012692,88993
+\gdef\spacesplit#1#2^^M{\x7fspacesplit\x012652,87775
+\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{\x7fspacesplitfoo\x012653,87852
+\def\defunargs #1{\x7fdefunargs\x012664,88172
+\def\deftypefunargs #1{\x7fdeftypefunargs\x012676,88554
+\def\deffn{\x7fdeffn\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7fmethparsebody\Edeffn\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7ffnx\deffnheader\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7ffnheader\x012690,88936
+\def\deffnheader #1#2#3{\x7fdeffnheader\x012692,88993
 \begingroup\defname {\x7fname\x012693,89041
-\def\defun{\x7f\defun\x012699,89186
-\def\defunheader #1#2{\x7f\defunheader\x012701,89239
+\begingroup\defname {#2}{#1}\defunargs{\x7funargs\x012693,89041
+\def\defun{\x7fdefun\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7fparsebody\Edefun\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7funx\defunheader\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7funheader\x012699,89186
+\def\defunheader #1#2{\x7fdefunheader\x012701,89239
 \begingroup\defname {\x7fname\x012702,89314
 \defunargs {\x7funargs\x012703,89350
-\def\deftypefun{\x7f\deftypefun\x012709,89498
-\def\deftypefunheader #1#2{\x7f\deftypefunheader\x012712,89620
-\def\deftypefunheaderx #1#2 #3\relax{\x7f\deftypefunheaderx\x012714,89729
+\def\deftypefun{\x7fdeftypefun\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7fparsebody\Edeftypefun\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7ftypefunx\deftypefunheader\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7ftypefunheader\x012709,89498
+\def\deftypefunheader #1#2{\x7fdeftypefunheader\x012712,89620
+\def\deftypefunheader #1#2{\deftypefunheaderx{\x7ftypefunheaderx\x012712,89620
+\def\deftypefunheaderx #1#2 #3\relax{\x7fdeftypefunheaderx\x012714,89729
 \begingroup\defname {\x7fname\x012716,89821
 \deftypefunargs {\x7ftypefunargs\x012717,89867
-\def\deftypefn{\x7f\deftypefn\x012723,90038
-\def\deftypefnheader #1#2#3{\x7f\deftypefnheader\x012726,90187
-\def\deftypefnheaderx #1#2#3 #4\relax{\x7f\deftypefnheaderx\x012728,90323
+\def\deftypefn{\x7fdeftypefn\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7fmethparsebody\Edeftypefn\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7ftypefnx\deftypefnheader\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7ftypefnheader\x012723,90038
+\def\deftypefnheader #1#2#3{\x7fdeftypefnheader\x012726,90187
+\def\deftypefnheader #1#2#3{\deftypefnheaderx{\x7ftypefnheaderx\x012726,90187
+\def\deftypefnheaderx #1#2#3 #4\relax{\x7fdeftypefnheaderx\x012728,90323
 \begingroup\defname {\x7fname\x012730,90416
 \deftypefunargs {\x7ftypefunargs\x012731,90456
-\def\defmac{\x7f\defmac\x012737,90577
-\def\defmacheader #1#2{\x7f\defmacheader\x012739,90634
+\def\defmac{\x7fdefmac\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fparsebody\Edefmac\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fmacx\defmacheader\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fmacheader\x012737,90577
+\def\defmacheader #1#2{\x7fdefmacheader\x012739,90634
 \begingroup\defname {\x7fname\x012740,90710
 \defunargs {\x7funargs\x012741,90743
-\def\defspec{\x7f\defspec\x012747,90867
-\def\defspecheader #1#2{\x7f\defspecheader\x012749,90928
+\def\defspec{\x7fdefspec\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fparsebody\Edefspec\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fspecx\defspecheader\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fspecheader\x012747,90867
+\def\defspecheader #1#2{\x7fdefspecheader\x012749,90928
 \begingroup\defname {\x7fname\x012750,91005
 \defunargs {\x7funargs\x012751,91045
-\def\deffnx #1 {\x7f\deffnx\x012758,91240
-\def\defunx #1 {\x7f\defunx\x012759,91297
-\def\defmacx #1 {\x7f\defmacx\x012760,91354
-\def\defspecx #1 {\x7f\defspecx\x012761,91413
-\def\deftypefnx #1 {\x7f\deftypefnx\x012762,91474
-\def\deftypeunx #1 {\x7f\deftypeunx\x012763,91539
-\def\defop #1 {\x7f\defop\x012769,91685
-\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopparsebody\Edefop\defopx\defopheader\defoptype\x012770,91720
-\def\defopheader #1#2#3{\x7f\defopheader\x012772,91774
+\def\deffnx #1 {\x7fdeffnx\x012758,91240
+\def\defunx #1 {\x7fdefunx\x012759,91297
+\def\defmacx #1 {\x7fdefmacx\x012760,91354
+\def\defspecx #1 {\x7fdefspecx\x012761,91413
+\def\deftypefnx #1 {\x7fdeftypefnx\x012762,91474
+\def\deftypeunx #1 {\x7fdeftypeunx\x012763,91539
+\def\defop #1 {\x7fdefop\x012769,91685
+\def\defop #1 {\def\defoptype{\x7fdefoptype\x012769,91685
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopparsebody\Edefop\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopx\defopheader\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopheader\defoptype\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7foptype\x012770,91720
+\def\defopheader #1#2#3{\x7fdefopheader\x012772,91774
 \begingroup\defname {\x7fname\x012774,91863
+\begingroup\defname {#2}{\defoptype{\x7foptype\x012774,91863
 \defunargs {\x7funargs\x012775,91909
-\def\defmethod{\x7f\defmethod\x012780,91970
-\def\defmethodheader #1#2#3{\x7f\defmethodheader\x012782,92043
+\def\defmethod{\x7fdefmethod\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethparsebody\Edefmethod\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethodx\defmethodheader\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethodheader\x012780,91970
+\def\defmethodheader #1#2#3{\x7fdefmethodheader\x012782,92043
 \begingroup\defname {\x7fname\x012784,92131
 \defunargs {\x7funargs\x012785,92171
-\def\defcv #1 {\x7f\defcv\x012790,92245
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype\x012791,92280
-\def\defcvarheader #1#2#3{\x7f\defcvarheader\x012793,92339
+\def\defcv #1 {\x7fdefcv\x012790,92245
+\def\defcv #1 {\def\defcvtype{\x7fdefcvtype\x012790,92245
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fopvarparsebody\Edefcv\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvx\defcvarheader\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvarheader\defcvtype\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvtype\x012791,92280
+\def\defcvarheader #1#2#3{\x7fdefcvarheader\x012793,92339
 \begingroup\defname {\x7fname\x012795,92425
+\begingroup\defname {#2}{\defcvtype{\x7fcvtype\x012795,92425
 \defvarargs {\x7fvarargs\x012796,92471
-\def\defivar{\x7f\defivar\x012801,92544
-\def\defivarheader #1#2#3{\x7f\defivarheader\x012803,92607
+\def\defivar{\x7fdefivar\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fvrparsebody\Edefivar\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fivarx\defivarheader\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fivarheader\x012801,92544
+\def\defivarheader #1#2#3{\x7fdefivarheader\x012803,92607
 \begingroup\defname {\x7fname\x012805,92693
 \defvarargs {\x7fvarargs\x012806,92744
-\def\defopx #1 {\x7f\defopx\x012812,92893
-\def\defmethodx #1 {\x7f\defmethodx\x012813,92950
-\def\defcvx #1 {\x7f\defcvx\x012814,93015
-\def\defivarx #1 {\x7f\defivarx\x012815,93072
-\def\defvarargs #1{\x7f\defvarargs\x012822,93343
-\def\defvr{\x7f\defvr\x012828,93487
-\def\defvrheader #1#2#3{\x7f\defvrheader\x012830,93542
+\def\defopx #1 {\x7fdefopx\x012812,92893
+\def\defmethodx #1 {\x7fdefmethodx\x012813,92950
+\def\defcvx #1 {\x7fdefcvx\x012814,93015
+\def\defivarx #1 {\x7fdefivarx\x012815,93072
+\def\defvarargs #1{\x7fdefvarargs\x012822,93343
+\def\defvr{\x7fdefvr\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrparsebody\Edefvr\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrx\defvrheader\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrheader\x012828,93487
+\def\defvrheader #1#2#3{\x7fdefvrheader\x012830,93542
 \begingroup\defname {\x7fname\x012831,93590
-\def\defvar{\x7f\defvar\x012835,93675
-\def\defvarheader #1#2{\x7f\defvarheader\x012837,93735
+\begingroup\defname {#2}{#1}\defvarargs{\x7fvarargs\x012831,93590
+\def\defvar{\x7fdefvar\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarparsebody\Edefvar\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarx\defvarheader\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarheader\x012835,93675
+\def\defvarheader #1#2{\x7fdefvarheader\x012837,93735
 \begingroup\defname {\x7fname\x012838,93806
 \defvarargs {\x7fvarargs\x012839,93842
-\def\defopt{\x7f\defopt\x012844,93908
-\def\defoptheader #1#2{\x7f\defoptheader\x012846,93968
+\def\defopt{\x7fdefopt\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7fvarparsebody\Edefopt\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7foptx\defoptheader\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7foptheader\x012844,93908
+\def\defoptheader #1#2{\x7fdefoptheader\x012846,93968
 \begingroup\defname {\x7fname\x012847,94039
 \defvarargs {\x7fvarargs\x012848,94078
-\def\deftypevar{\x7f\deftypevar\x012853,94135
-\def\deftypevarheader #1#2{\x7f\deftypevarheader\x012856,94251
+\def\deftypevar{\x7fdeftypevar\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7fvarparsebody\Edeftypevar\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7ftypevarx\deftypevarheader\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7ftypevarheader\x012853,94135
+\def\deftypevarheader #1#2{\x7fdeftypevarheader\x012856,94251
 \begingroup\defname {\x7fname\x012858,94334
-\def\deftypevr{\x7f\deftypevr\x012865,94508
-\def\deftypevrheader #1#2#3{\x7f\deftypevrheader\x012867,94579
+\def\deftypevr{\x7fdeftypevr\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7fvrparsebody\Edeftypevr\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7ftypevrx\deftypevrheader\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7ftypevrheader\x012865,94508
+\def\deftypevrheader #1#2#3{\x7fdeftypevrheader\x012867,94579
 \begingroup\defname {\x7fname\x012868,94631
-\def\defvrx #1 {\x7f\defvrx\x012876,94868
-\def\defvarx #1 {\x7f\defvarx\x012877,94925
-\def\defoptx #1 {\x7f\defoptx\x012878,94984
-\def\deftypevarx #1 {\x7f\deftypevarx\x012879,95043
-\def\deftypevrx #1 {\x7f\deftypevrx\x012880,95110
-\def\deftpargs #1{\x7f\deftpargs\x012885,95259
-\def\deftp{\x7f\deftp\x012889,95339
-\def\deftpheader #1#2#3{\x7f\deftpheader\x012891,95394
+\def\defvrx #1 {\x7fdefvrx\x012876,94868
+\def\defvarx #1 {\x7fdefvarx\x012877,94925
+\def\defoptx #1 {\x7fdefoptx\x012878,94984
+\def\deftypevarx #1 {\x7fdeftypevarx\x012879,95043
+\def\deftypevrx #1 {\x7fdeftypevrx\x012880,95110
+\def\deftpargs #1{\x7fdeftpargs\x012885,95259
+\def\deftpargs #1{\bf \defvarargs{\x7fvarargs\x012885,95259
+\def\deftp{\x7fdeftp\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7fvrparsebody\Edeftp\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7ftpx\deftpheader\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7ftpheader\x012889,95339
+\def\deftpheader #1#2#3{\x7fdeftpheader\x012891,95394
 \begingroup\defname {\x7fname\x012892,95442
-\def\deftpx #1 {\x7f\deftpx\x012897,95601
-\def\setref#1{\x7f\setref\x012908,95922
-\def\unnumbsetref#1{\x7f\unnumbsetref\x012913,96036
-\def\appendixsetref#1{\x7f\appendixsetref\x012918,96143
-\def\pxref#1{\x7f\pxref\x012929,96554
-\def\xref#1{\x7f\xref\x012930,96590
-\def\ref#1{\x7f\ref\x012931,96625
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\x7f\xrefX[\x012932,96655
-\def\printedmanual{\x7f\printedmanual\x012933,96698
-\def\printednodename{\x7f\printednodename\x012934,96736
-\def\printednodename{\x7f\printednodename\x012939,96861
-section ``\printednodename'' in \cite{\printedmanual}\x7f\printedmanual\x012954,97493
+\begingroup\defname {#2}{#1}\deftpargs{\x7ftpargs\x012892,95442
+\def\deftpx #1 {\x7fdeftpx\x012897,95601
+\def\setref#1{\x7fsetref\x012908,95922
+\def\unnumbsetref#1{\x7funnumbsetref\x012913,96036
+\def\appendixsetref#1{\x7fappendixsetref\x012918,96143
+\def\pxref#1{\x7fpxref\x012929,96554
+\def\xref#1{\x7fxref\x012930,96590
+\def\ref#1{\x7fref\x012931,96625
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\x7fxrefX\x012932,96655
+\def\printedmanual{\x7fprintedmanual\x012933,96698
+\def\printednodename{\x7fprintednodename\x012934,96736
+\def\printednodename{\x7fprintednodename\x012939,96861
+section ``\printednodename'' in \cite{\printedmanual}\x7fprintedmanual\x012954,97493
 \refx{\x7fx\x012957,97571
-\def\dosetq #1#2{\x7f\dosetq\x012965,97791
-\def\internalsetq #1#2{\x7f\internalsetq\x012973,98049
-\def\Ypagenumber{\x7f\Ypagenumber\x012977,98150
-\def\Ytitle{\x7f\Ytitle\x012979,98176
-\def\Ynothing{\x7f\Ynothing\x012981,98203
-\def\Ysectionnumberandtype{\x7f\Ysectionnumberandtype\x012983,98220
-\def\Yappendixletterandtype{\x7f\Yappendixletterandtype\x012992,98536
+\refx{#1-snt}{} [\printednodename], page\tie\refx{\x7fx\x012957,97571
+\def\dosetq #1#2{\x7fdosetq\x012965,97791
+\def\dosetq #1#2{{\let\folio=0 \turnoffactive%\x7ffolio\x012965,97791
+\edef\next{\x7fnext\x012966,97838
+\def\internalsetq #1#2{\x7finternalsetq\x012973,98049
+\def\Ypagenumber{\x7fYpagenumber\x012977,98150
+\def\Ytitle{\x7fYtitle\x012979,98176
+\def\Ynothing{\x7fYnothing\x012981,98203
+\def\Ysectionnumberandtype{\x7fYsectionnumberandtype\x012983,98220
+\def\Yappendixletterandtype{\x7fYappendixletterandtype\x012992,98536
 \ifnum\secno=0 Appendix\xreftie'char\the\appendixno{\x7fno\x012993,98566
-\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno %\x7fno.\the\secno\x012994,98621
-Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno %\x7fno.\the\secno.\the\subsecno\x012996,98725
-Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\x7fno.\the\secno.\the\subsecno.\the\subsubsecno\x012998,98796
-  \def\linenumber{\x7f\linenumber\x013009,99135
-\def\refx#1#2{\x7f\refx\x013015,99319
-\def\xrdef #1#2{\x7f\xrdef\x013037,99945
-\def\readauxfile{\x7f\readauxfile\x013040,100030
-\def\supereject{\x7f\supereject\x013110,101811
-\footstrut\parindent=\defaultparindent\hang\textindent{\x7faultparindent\hang\textindent\x013131,102496
-\def\openindices{\x7f\openindices\x013139,102682
+\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno %\x7fno.\the\x012994,98621
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno %\x7fno.\the\x012996,98725
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\x7fno.\the\x012998,98796
+\gdef\xreftie{\x7fxreftie\x013001,98891
+  \let\linenumber = \empty % Non-3.0.\x7flinenumber\x013007,99091
+  \def\linenumber{\x7flinenumber\x013009,99135
+\def\refx#1#2{\x7frefx\x013015,99319
+\def\xrdef #1#2{\x7fxrdef\x013037,99945
+{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {\x7fcsname\x013038,99962
+\def\readauxfile{\x7freadauxfile\x013040,100030
+\def\supereject{\x7fsupereject\x013110,101811
+\let\footnotestyle=\comment\x7ffootnotestyle\x013113,101918
+\let\ptexfootnote=\footnote\x7fptexfootnote\x013115,101947
+\long\gdef\footnote #1{\x7ffootnote\x013118,101993
+\edef\thisfootno{\x7fthisfootno\x013120,102060
+\let\@sf\empty\x7f@sf\x013121,102100
+\ifhmode\edef\@sf{\x7f@sf\x013122,102115
+\long\gdef\footnotezzz #1{\x7ffootnotezzz\x013126,102228
+\footstrut\parindent=\defaultparindent\hang\textindent{\x7faultparindent\hang\x013131,102496
+\def\openindices{\x7fopenindices\x013139,102682
+\newdimen\defaultparindent \defaultparindent = 15pt\x7faultparindent\x013151,102907
 \newdimen\defaultparindent \defaultparindent = 15pt\x7faultparindent\x013151,102907
 \parindent = \defaultparindent\x7faultparindent\x013152,102959
-\def\smallbook{\x7f\smallbook\x013175,103683
-\global\def\Esmallexample{\x7f\Esmallexample\x013192,104110
-\def\afourpaper{\x7f\afourpaper\x013196,104201
-\def\finalout{\x7f\finalout\x013224,105009
-\def\normaldoublequote{\x7f\normaldoublequote\x013235,105270
-\def\normaltilde{\x7f\normaltilde\x013236,105296
-\def\normalcaret{\x7f\normalcaret\x013237,105316
-\def\normalunderscore{\x7f\normalunderscore\x013238,105336
-\def\normalverticalbar{\x7f\normalverticalbar\x013239,105361
-\def\normalless{\x7f\normalless\x013240,105387
-\def\normalgreater{\x7f\normalgreater\x013241,105406
-\def\normalplus{\x7f\normalplus\x013242,105428
-\def\ifusingtt#1#2{\x7f\ifusingtt\x013253,105920
-\def\activedoublequote{\x7f\activedoublequote\x013261,106248
+\def\smallbook{\x7fsmallbook\x013175,103683
+\global\let\smalllisp=\smalllispx\x7fsmalllisp\x013190,104039
+\global\let\smallexample=\smalllispx\x7fsmallexample\x013191,104073
+\global\def\Esmallexample{\x7fEsmallexample\x013192,104110
+\def\afourpaper{\x7fafourpaper\x013196,104201
+\def\finalout{\x7ffinalout\x013224,105009
+\def\normaldoublequote{\x7fnormaldoublequote\x013235,105270
+\def\normaltilde{\x7fnormaltilde\x013236,105296
+\def\normalcaret{\x7fnormalcaret\x013237,105316
+\def\normalunderscore{\x7fnormalunderscore\x013238,105336
+\def\normalverticalbar{\x7fnormalverticalbar\x013239,105361
+\def\normalless{\x7fnormalless\x013240,105387
+\def\normalgreater{\x7fnormalgreater\x013241,105406
+\def\normalplus{\x7fnormalplus\x013242,105428
+\def\ifusingtt#1#2{\x7fifusingtt\x013253,105920
+\def\activedoublequote{\x7factivedoublequote\x013261,106248
+\let"=\activedoublequote\x7f"\x013262,106289
 \def~{\x7f~\x013264,106334
 \def^{\x7f^\x013267,106395
 \def_{\x7f_\x013270,106434
-\def\_{\x7f\_\x013272,106508
-\def\lvvmode{\x7f\lvvmode\x013279,106845
+\def\_{\x7f_\x013272,106508
+\def\lvvmode{\x7flvvmode\x013279,106845
 \def|{\x7f|\x013282,106895
 \def<{\x7f<\x013285,106958
 \def>{\x7f>\x013288,107015
 \def+{\x7f+\x013290,107053
-\def\turnoffactive{\x7f\turnoffactive\x013296,107214
+\def\turnoffactive{\x7fturnoffactive\x013296,107214
+\def\turnoffactive{\let"=\normaldoublequote\x7f"\x013296,107214
+\let~=\normaltilde\x7f~\x013297,107258
+\let^=\normalcaret\x7f^\x013298,107277
+\let_=\normalunderscore\x7f_\x013299,107296
+\let|=\normalverticalbar\x7f|\x013300,107320
+\let<=\normalless\x7f<\x013301,107345
+\let>=\normalgreater\x7f>\x013302,107363
+\let+=\normalplus}\x7f+\x013303,107384
 \global\def={\x7f=\x013307,107500
-\def\normalbackslash{\x7f\normalbackslash\x013321,107882
+\def\normalbackslash{\x7fnormalbackslash\x013321,107882
 \f
 merc-src/accumulator.m,4915
 :- interface\x7f146,5371
diff --git a/test/manual/etags/ETAGS.good_6 b/test/manual/etags/ETAGS.good_6
index 09abde35c51..35265f606c2 100644
--- a/test/manual/etags/ETAGS.good_6
+++ b/test/manual/etags/ETAGS.good_6
@@ -4290,8 +4290,8 @@ scm-src/test.scm,260
 (define (((((curry-test \x7f14,205
 (define-syntax test-begin\x7f17,265
 \f
-tex-src/testenv.tex,52
-\newcommand{\nm}\x7f\nm\x014,77
+tex-src/testenv.tex,51
+\newcommand{\nm}\x7fnm\x014,77
 \section{blah}\x7fblah\x018,139
 \f
 tex-src/gzip.texi,303
@@ -4306,722 +4306,1142 @@ tex-src/gzip.texi,303
 @node Problems,\x7f460,16769
 @node Concept Index,\x7fConcept Index\x01473,17289
 \f
-tex-src/texinfo.tex,30627
-\def\texinfoversion{\x7f\texinfoversion\x0126,1035
-\def\tie{\x7f\tie\x0149,1526
-\def\gloggingall{\x7f\gloggingall\x0172,2276
-\def\loggingall{\x7f\loggingall\x0173,2345
-\def\onepageout#1{\x7f\onepageout\x0199,3282
-\def\croppageout#1{\x7f\croppageout\x01115,4032
-\def\cropmarks{\x7f\cropmarks\x01142,5092
-\def\pagebody#1{\x7f\pagebody\x01144,5139
-\def\ewtop{\x7f\ewtop\x01157,5594
-\def\nstop{\x7f\nstop\x01158,5658
-\def\ewbot{\x7f\ewbot\x01160,5741
-\def\nsbot{\x7f\nsbot\x01161,5805
-\def\parsearg #1{\x7f\parsearg\x01170,6104
-\def\parseargx{\x7f\parseargx\x01172,6182
-\def\parseargline{\x7f\parseargline\x01182,6422
-\def\flushcr{\x7f\flushcr\x01186,6543
-\newif\ifENV \ENVfalse \def\inENV{\x7f\inENV\x01190,6742
-\def\ENVcheck{\x7f\ENVcheck\x01191,6806
-\outer\def\begin{\x7f\begin\x01198,7053
-\def\beginxxx #1{\x7f\beginxxx\x01200,7091
-\def\end{\x7f\end\x01208,7346
-\def\endxxx #1{\x7f\endxxx\x01210,7374
-\def\errorE#1{\x7f\errorE\x01216,7563
-\def\singlespace{\x7f\singlespace\x01222,7757
-\def\@{\x7f\@\x01232,7980
-\def\`{\x7f\`\x01236,8080
-\def\'{\x7f\'\x01237,8092
-\def\mylbrace {\x7f\mylbrace\x01241,8140
-\def\myrbrace {\x7f\myrbrace\x01242,8173
-\def\:{\x7f\:\x01247,8287
-\def\*{\x7f\*\x01250,8341
-\def\.{\x7f\.\x01253,8417
-\def\w#1{\x7f\w\x01258,8648
-\def\group{\x7f\group\x01268,9131
-  \def\Egroup{\x7f\Egroup\x01273,9295
-\def\need{\x7f\need\x01289,9737
-\def\needx#1{\x7f\needx\x01300,10014
-\def\dots{\x7f\dots\x01339,11400
-\def\page{\x7f\page\x01343,11464
-\def\exdent{\x7f\exdent\x01353,11791
-\def\exdentyyy #1{\x7f\exdentyyy\x01354,11824
-\def\nofillexdent{\x7f\nofillexdent\x01357,11968
-\def\nofillexdentyyy #1{\x7f\nofillexdentyyy\x01358,12013
-\def\include{\x7f\include\x01365,12197
-\def\includezzz #1{\x7f\includezzz\x01366,12232
-\def\thisfile{\x7f\thisfile\x01369,12283
-\def\center{\x7f\center\x01373,12346
-\def\centerzzz #1{\x7f\centerzzz\x01374,12379
-\def\sp{\x7f\sp\x01380,12521
-\def\spxxx #1{\x7f\spxxx\x01381,12546
-\def\comment{\x7f\comment\x01387,12720
-\def\commentxxx #1{\x7f\commentxxx\x01390,12817
-\def\ignoresections{\x7f\ignoresections\x01396,12986
-\let\chapter=\relax\x7f=\relax\x01397,13008
-\let\section=\relax\x7f=\relax\x01406,13253
-\let\subsection=\relax\x7f=\relax\x01409,13314
-\let\subsubsection=\relax\x7f=\relax\x01410,13337
-\let\appendix=\relax\x7f=\relax\x01411,13363
-\let\appendixsec=\relax\x7fsec=\relax\x01412,13384
-\let\appendixsection=\relax\x7fsection=\relax\x01413,13408
-\let\appendixsubsec=\relax\x7fsubsec=\relax\x01414,13436
-\let\appendixsubsection=\relax\x7fsubsection=\relax\x01415,13463
-\let\appendixsubsubsec=\relax\x7fsubsubsec=\relax\x01416,13494
-\let\appendixsubsubsection=\relax\x7fsubsubsection=\relax\x01417,13524
-\def\ignore{\x7f\ignore\x01423,13626
-\long\def\ignorexxx #1\end ignore{\x7f\ignorexxx\x01427,13766
-\def\direntry{\x7f\direntry\x01429,13825
-\long\def\direntryxxx #1\end direntry{\x7f\direntryxxx\x01430,13864
-\def\ifset{\x7f\ifset\x01434,13974
-\def\ifsetxxx #1{\x7f\ifsetxxx\x01436,14032
-\def\Eifset{\x7f\Eifset\x01440,14159
-\def\ifsetfail{\x7f\ifsetfail\x01441,14173
-\long\def\ifsetfailxxx #1\end ifset{\x7f\ifsetfailxxx\x01442,14229
-\def\ifclear{\x7f\ifclear\x01444,14290
-\def\ifclearxxx #1{\x7f\ifclearxxx\x01446,14352
-\def\Eifclear{\x7f\Eifclear\x01450,14483
-\def\ifclearfail{\x7f\ifclearfail\x01451,14499
-\long\def\ifclearfailxxx #1\end ifclear{\x7f\ifclearfailxxx\x01452,14559
-\def\set{\x7f\set\x01456,14710
-\def\setxxx #1{\x7f\setxxx\x01457,14737
-\def\clear{\x7f\clear\x01460,14799
-\def\clearxxx #1{\x7f\clearxxx\x01461,14830
-\def\iftex{\x7f\iftex\x01466,14947
-\def\Eiftex{\x7f\Eiftex\x01467,14960
-\def\ifinfo{\x7f\ifinfo\x01468,14974
-\long\def\ifinfoxxx #1\end ifinfo{\x7f\ifinfoxxx\x01469,15024
-\long\def\menu #1\end menu{\x7f\menu\x01471,15083
-\def\asis#1{\x7f\asis\x01472,15112
-\def\math#1{\x7f\math\x01485,15655
-\def\node{\x7f\node\x01487,15699
-\def\nodezzz#1{\x7f\nodezzz\x01488,15737
-\def\nodexxx[#1,#2]{\x7f\nodexxx[\x01489,15768
-\def\donoderef{\x7f\donoderef\x01492,15830
-\def\unnumbnoderef{\x7f\unnumbnoderef\x01496,15951
-\def\appendixnoderef{\x7f\appendixnoderef\x01500,16082
+tex-src/texinfo.tex,55236
+\def\texinfoversion{\x7ftexinfoversion\x0126,1035
+\let\ptexlbrace=\{\x7fptexlbrace\x0135,1308
+\let\ptexrbrace=\}\x7fptexrbrace\x0136,1327
+\let\ptexdots=\dots\x7fptexdots\x0137,1346
+\let\ptexdot=\.\x7fptexdot\x0138,1366
+\let\ptexstar=\*\x7fptexstar\x0139,1382
+\let\ptexend=\end\x7fptexend\x0140,1399
+\let\ptexbullet=\bullet\x7fptexbullet\x0141,1417
+\let\ptexb=\b\x7fptexb\x0142,1441
+\let\ptexc=\c\x7fptexc\x0143,1455
+\let\ptexi=\i\x7fptexi\x0144,1469
+\let\ptext=\t\x7fptext\x0145,1483
+\let\ptexl=\l\x7fptexl\x0146,1497
+\let\ptexL=\L\x7fptexL\x0147,1511
+\def\tie{\x7ftie\x0149,1526
+\def\gloggingall{\x7fgloggingall\x0172,2276
+\def\loggingall{\x7floggingall\x0173,2345
+\def\onepageout#1{\x7fonepageout\x0199,3282
+\shipout\vbox{{\let\hsize=\pagewidth \makeheadline}\x7fhsize\x01103,3489
+{\let\hsize=\pagewidth \makefootline}\x7fhsize\x01104,3556
+\def\croppageout#1{\x7fcroppageout\x01115,4032
+			{\let\hsize=\pagewidth \makeheadline}\x7fhsize\x01126,4511
+			{\let\hsize=\pagewidth \makefootline}\x7fhsize\x01128,4569
+\def\cropmarks{\x7fcropmarks\x01142,5092
+\def\cropmarks{\let\onepageout=\croppageout }\x7fonepageout\x01142,5092
+\def\pagebody#1{\x7fpagebody\x01144,5139
+\gdef\pagecontents#1{\x7fpagecontents\x01146,5220
+\def\ewtop{\x7fewtop\x01157,5594
+\def\nstop{\x7fnstop\x01158,5658
+\def\ewbot{\x7fewbot\x01160,5741
+\def\nsbot{\x7fnsbot\x01161,5805
+\def\parsearg #1{\x7fparsearg\x01170,6104
+\def\parsearg #1{\let\next=#1\begingroup\obeylines\futurelet\temp\parseargx}\x7fnext\x01170,6104
+\def\parseargx{\x7fparseargx\x01172,6182
+\gdef\parseargdiscardspace {\x7fparseargdiscardspace\x01178,6321
+\gdef\obeyedspace{\x7fobeyedspace\x01180,6399
+\def\parseargline{\x7fparseargline\x01182,6422
+\gdef\parsearglinex #1^^M{\x7fparsearglinex\x01184,6493
+\def\flushcr{\x7fflushcr\x01186,6543
+\def\flushcr{\ifx\par\lisppar \def\next##1{\x7fnext\x01186,6543
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}\x7fnext\x01186,6543
+\newif\ifENV \ENVfalse \def\inENV{\x7finENV\x01190,6742
+\def\ENVcheck{\x7fENVcheck\x01191,6806
+\outer\def\begin{\x7fbegin\x01198,7053
+\def\beginxxx #1{\x7fbeginxxx\x01200,7091
+\def\end{\x7fend\x01208,7346
+\def\endxxx #1{\x7fendxxx\x01210,7374
+\def\errorE#1{\x7ferrorE\x01216,7563
+\def\singlespace{\x7fsinglespace\x01222,7757
+\def\@{\x7f@\x01232,7980
+\def\`{\x7f`\x01236,8080
+\def\'{\x7f'\x01237,8092
+\def\mylbrace {\x7fmylbrace\x01241,8140
+\def\myrbrace {\x7fmyrbrace\x01242,8173
+\let\{=\mylbrace\x7f{\x01243,8206
+\let\}=\myrbrace\x7f}\x01244,8223
+\def\:{\x7f:\x01247,8287
+\def\*{\x7f*\x01250,8341
+\def\.{\x7f.\x01253,8417
+\def\w#1{\x7fw\x01258,8648
+\def\group{\x7fgroup\x01268,9131
+  \def\Egroup{\x7fEgroup\x01273,9295
+\def\need{\x7fneed\x01289,9737
+\def\needx#1{\x7fneedx\x01300,10014
+\let\br = \par\x7fbr\x01335,11355
+\def\dots{\x7fdots\x01339,11400
+\def\page{\x7fpage\x01343,11464
+\def\exdent{\x7fexdent\x01353,11791
+\def\exdentyyy #1{\x7fexdentyyy\x01354,11824
+\def\nofillexdent{\x7fnofillexdent\x01357,11968
+\def\nofillexdentyyy #1{\x7fnofillexdentyyy\x01358,12013
+\def\include{\x7finclude\x01365,12197
+\def\includezzz #1{\x7fincludezzz\x01366,12232
+\def\includezzz #1{{\def\thisfile{\x7fthisfile\x01366,12232
+\def\thisfile{\x7fthisfile\x01369,12283
+\def\center{\x7fcenter\x01373,12346
+\def\centerzzz #1{\x7fcenterzzz\x01374,12379
+\def\sp{\x7fsp\x01380,12521
+\def\spxxx #1{\x7fspxxx\x01381,12546
+\def\comment{\x7fcomment\x01387,12720
+\def\commentxxx #1{\x7fcommentxxx\x01390,12817
+\let\c=\comment\x7fc\x01392,12883
+\def\ignoresections{\x7fignoresections\x01396,12986
+\let\chapter=\relax\x7fchapter\x01397,13008
+\let\unnumbered=\relax\x7funnumbered\x01398,13028
+\let\top=\relax\x7ftop\x01399,13051
+\let\unnumberedsec=\relax\x7funnumberedsec\x01400,13067
+\let\unnumberedsection=\relax\x7funnumberedsection\x01401,13093
+\let\unnumberedsubsec=\relax\x7funnumberedsubsec\x01402,13123
+\let\unnumberedsubsection=\relax\x7funnumberedsubsection\x01403,13152
+\let\unnumberedsubsubsec=\relax\x7funnumberedsubsubsec\x01404,13185
+\let\unnumberedsubsubsection=\relax\x7funnumberedsubsubsection\x01405,13217
+\let\section=\relax\x7fsection\x01406,13253
+\let\subsec=\relax\x7fsubsec\x01407,13273
+\let\subsubsec=\relax\x7fsubsubsec\x01408,13292
+\let\subsection=\relax\x7fsubsection\x01409,13314
+\let\subsubsection=\relax\x7fsubsubsection\x01410,13337
+\let\appendix=\relax\x7fappendix\x01411,13363
+\let\appendixsec=\relax\x7fappendixsec\x01412,13384
+\let\appendixsection=\relax\x7fappendixsection\x01413,13408
+\let\appendixsubsec=\relax\x7fappendixsubsec\x01414,13436
+\let\appendixsubsection=\relax\x7fappendixsubsection\x01415,13463
+\let\appendixsubsubsec=\relax\x7fappendixsubsubsec\x01416,13494
+\let\appendixsubsubsection=\relax\x7fappendixsubsubsection\x01417,13524
+\let\contents=\relax\x7fcontents\x01418,13558
+\let\smallbook=\relax\x7fsmallbook\x01419,13579
+\let\titlepage=\relax\x7ftitlepage\x01420,13601
+\def\ignore{\x7fignore\x01423,13626
+\long\def\ignorexxx #1\end ignore{\x7fignorexxx\x01427,13766
+\def\direntry{\x7fdirentry\x01429,13825
+\long\def\direntryxxx #1\end direntry{\x7fdirentryxxx\x01430,13864
+\def\ifset{\x7fifset\x01434,13974
+\def\ifsetxxx #1{\x7fifsetxxx\x01436,14032
+\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\ifsetfail\x7ftemp\x01437,14059
+\else \let\temp=\relax \fi\x7ftemp\x01438,14125
+\def\Eifset{\x7fEifset\x01440,14159
+\def\ifsetfail{\x7fifsetfail\x01441,14173
+\long\def\ifsetfailxxx #1\end ifset{\x7fifsetfailxxx\x01442,14229
+\def\ifclear{\x7fifclear\x01444,14290
+\def\ifclearxxx #1{\x7fifclearxxx\x01446,14352
+\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\relax\x7ftemp\x01447,14381
+\else \let\temp=\ifclearfail \fi\x7ftemp\x01448,14443
+\def\Eifclear{\x7fEifclear\x01450,14483
+\def\ifclearfail{\x7fifclearfail\x01451,14499
+\long\def\ifclearfailxxx #1\end ifclear{\x7fifclearfailxxx\x01452,14559
+\def\set{\x7fset\x01456,14710
+\def\setxxx #1{\x7fsetxxx\x01457,14737
+\expandafter\let\csname IF#1\endcsname=\set}\x7fcsname\x01458,14753
+\def\clear{\x7fclear\x01460,14799
+\def\clearxxx #1{\x7fclearxxx\x01461,14830
+\expandafter\let\csname IF#1\endcsname=\relax}\x7fcsname\x01462,14848
+\def\iftex{\x7fiftex\x01466,14947
+\def\Eiftex{\x7fEiftex\x01467,14960
+\def\ifinfo{\x7fifinfo\x01468,14974
+\long\def\ifinfoxxx #1\end ifinfo{\x7fifinfoxxx\x01469,15024
+\long\def\menu #1\end menu{\x7fmenu\x01471,15083
+\def\asis#1{\x7fasis\x01472,15112
+\let\implicitmath = $\x7fimplicitmath\x01484,15633
+\def\math#1{\x7fmath\x01485,15655
+\def\node{\x7fnode\x01487,15699
+\def\nodezzz#1{\x7fnodezzz\x01488,15737
+\def\nodexxx[#1,#2]{\x7fnodexxx\x01489,15768
+\def\nodexxx[#1,#2]{\gdef\lastnode{\x7flastnode\x01489,15768
+\let\lastnode=\relax\x7flastnode\x01490,15808
+\def\donoderef{\x7fdonoderef\x01492,15830
+\let\lastnode=\relax}\x7flastnode\x01494,15928
+\def\unnumbnoderef{\x7funnumbnoderef\x01496,15951
+\let\lastnode=\relax}\x7flastnode\x01498,16059
+\def\appendixnoderef{\x7fappendixnoderef\x01500,16082
 \expandafter\expandafter\expandafter\appendixsetref{\x7fsetref\x01501,16128
-\let\refill=\relax\x7fill=\relax\x01504,16217
-\def\setfilename{\x7f\setfilename\x01509,16431
-\outer\def\bye{\x7f\bye\x01518,16677
-\def\inforef #1{\x7f\inforef\x01520,16733
-\def\inforefzzz #1,#2,#3,#4**{\x7f\inforefzzz\x01521,16771
-\def\losespace #1{\x7f\losespace\x01523,16868
-\def\sf{\x7f\sf\x01532,17072
-\font\defbf=cmbx10 scaled \magstep1 %was 1314\x7fbf=cmbx10\x01558,17867
-\font\deftt=cmtt10 scaled \magstep1\x7ftt=cmtt10\x01559,17913
-\def\df{\x7f\df\x01560,17949
-\def\resetmathfonts{\x7f\resetmathfonts\x01635,20543
-\def\textfonts{\x7f\textfonts\x01648,21132
-\def\chapfonts{\x7f\chapfonts\x01653,21347
-\def\secfonts{\x7f\secfonts\x01658,21563
-\def\subsecfonts{\x7f\subsecfonts\x01663,21768
-\def\indexfonts{\x7f\indexfonts\x01668,21985
-\def\smartitalicx{\x7f\smartitalicx\x01691,22717
-\def\smartitalic#1{\x7f\smartitalic\x01692,22793
-\let\cite=\smartitalic\x7f=\smartitalic\x01698,22938
-\def\b#1{\x7f\b\x01700,22962
-\def\t#1{\x7f\t\x01703,22997
-\def\samp #1{\x7f\samp\x01706,23149
-\def\key #1{\x7f\key\x01707,23182
-\def\ctrl #1{\x7f\ctrl\x01708,23243
-\def\tclose#1{\x7f\tclose\x01716,23445
-\def\ {\x7f\\x01720,23611
-\def\xkey{\x7f\xkey\x01728,23880
-\def\kbdfoo#1#2#3\par{\x7f\kbdfoo\x01729,23896
-\def\dmn#1{\x7f\dmn\x01738,24197
-\def\kbd#1{\x7f\kbd\x01740,24224
-\def\l#1{\x7f\l\x01742,24281
-\def\r#1{\x7f\r\x01744,24310
-\def\sc#1{\x7f\sc\x01746,24378
-\def\ii#1{\x7f\ii\x01747,24421
-\def\titlefont#1{\x7f\titlefont\x01755,24654
-\def\titlepage{\x7f\titlepage\x01761,24757
-   \def\subtitlefont{\x7f\subtitlefont\x01766,24984
-   \def\authorfont{\x7f\authorfont\x01768,25068
-   \def\title{\x7f\title\x01774,25278
-   \def\titlezzz##1{\x7f\titlezzz\x01775,25313
-   \def\subtitle{\x7f\subtitle\x01783,25628
-   \def\subtitlezzz##1{\x7f\subtitlezzz\x01784,25669
-   \def\author{\x7f\author\x01787,25787
-   \def\authorzzz##1{\x7f\authorzzz\x01788,25824
-   \def\page{\x7f\page\x01794,26115
-\def\Etitlepage{\x7f\Etitlepage\x01804,26284
-\def\finishtitlepage{\x7f\finishtitlepage\x01817,26672
-\def\evenheading{\x7f\evenheading\x01846,27680
-\def\oddheading{\x7f\oddheading\x01847,27723
-\def\everyheading{\x7f\everyheading\x01848,27764
-\def\evenfooting{\x7f\evenfooting\x01850,27810
-\def\oddfooting{\x7f\oddfooting\x01851,27853
-\def\everyfooting{\x7f\everyfooting\x01852,27894
-\def\headings #1 {\x7f\headings\x01893,29586
-\def\HEADINGSoff{\x7f\HEADINGSoff\x01895,29635
-\def\HEADINGSdouble{\x7f\HEADINGSdouble\x01904,30062
-\def\HEADINGSsingle{\x7f\HEADINGSsingle\x01914,30382
-\def\HEADINGSon{\x7f\HEADINGSon\x01922,30603
-\def\HEADINGSafter{\x7f\HEADINGSafter\x01924,30637
-\def\HEADINGSdoublex{\x7f\HEADINGSdoublex\x01926,30732
-\def\HEADINGSsingleafter{\x7f\HEADINGSsingleafter\x01933,30920
-\def\HEADINGSsinglex{\x7f\HEADINGSsinglex\x01934,30981
-\def\today{\x7f\today\x01943,31256
-\def\thistitle{\x7f\thistitle\x01958,31801
-\def\settitle{\x7f\settitle\x01959,31826
-\def\settitlezzz #1{\x7f\settitlezzz\x01960,31863
-\def\internalBitem{\x7f\internalBitem\x01992,32793
-\def\internalBitemx{\x7f\internalBitemx\x01993,32843
-\def\internalBxitem "#1"{\x7f\internalBxitem\x01995,32888
-\def\internalBxitemx "#1"{\x7f\internalBxitemx\x01996,32968
-\def\internalBkitem{\x7f\internalBkitem\x01998,33043
-\def\internalBkitemx{\x7f\internalBkitemx\x01999,33095
-\def\kitemzzz #1{\x7f\kitemzzz\x011001,33142
-\def\xitemzzz #1{\x7f\xitemzzz\x011004,33244
-\def\itemzzz #1{\x7f\itemzzz\x011007,33347
-\def\item{\x7f\item\x011037,34418
-\def\itemx{\x7f\itemx\x011038,34469
-\def\kitem{\x7f\kitem\x011039,34522
-\def\kitemx{\x7f\kitemx\x011040,34575
-\def\xitem{\x7f\xitem\x011041,34630
-\def\xitemx{\x7f\xitemx\x011042,34683
-\def\description{\x7f\description\x011045,34793
-\def\table{\x7f\table\x011047,34843
-\def\ftable{\x7f\ftable\x011052,34987
-\def\Eftable{\x7f\Eftable\x011056,35133
-\def\vtable{\x7f\vtable\x011059,35202
-\def\Evtable{\x7f\Evtable\x011063,35348
-\def\dontindex #1{\x7f\dontindex\x011066,35417
-\def\fnitemindex #1{\x7f\fnitemindex\x011067,35437
-\def\vritemindex #1{\x7f\vritemindex\x011068,35482
-\def\tablez #1#2#3#4#5#6{\x7f\tablez\x011074,35631
-\def\Edescription{\x7f\Edescription\x011077,35689
-\def\itemfont{\x7f\itemfont\x011082,35890
-\def\Etable{\x7f\Etable\x011090,36116
-\def\itemize{\x7f\itemize\x011103,36440
-\def\itemizezzz #1{\x7f\itemizezzz\x011105,36476
-\def\itemizey #1#2{\x7f\itemizey\x011110,36571
-\def#2{\x7f1119,36817
-\def\itemcontents{\x7f\itemcontents\x011120,36858
-\def\bullet{\x7f\bullet\x011123,36906
-\def\minus{\x7f\minus\x011124,36933
-\def\frenchspacing{\x7f\frenchspacing\x011128,37041
-\def\splitoff#1#2\endmark{\x7f\splitoff\x011134,37266
-\def\enumerate{\x7f\enumerate\x011140,37496
-\def\enumeratezzz #1{\x7f\enumeratezzz\x011141,37535
-\def\enumeratey #1 #2\endenumeratey{\x7f\enumeratey\x011142,37588
-  \def\thearg{\x7f\thearg\x011146,37735
-  \ifx\thearg\empty \def\thearg{\x7f\thearg\x011147,37754
-\def\numericenumerate{\x7f\numericenumerate\x011184,39088
-\def\lowercaseenumerate{\x7f\lowercaseenumerate\x011190,39218
-\def\uppercaseenumerate{\x7f\uppercaseenumerate\x011203,39565
-\def\startenumeration#1{\x7f\startenumeration\x011219,40055
-\def\alphaenumerate{\x7f\alphaenumerate\x011227,40237
-\def\capsenumerate{\x7f\capsenumerate\x011228,40272
-\def\Ealphaenumerate{\x7f\Ealphaenumerate\x011229,40306
-\def\Ecapsenumerate{\x7f\Ecapsenumerate\x011230,40340
-\def\itemizeitem{\x7f\itemizeitem\x011234,40420
-\def\newindex #1{\x7f\newindex\x011259,41277
-\def\defindex{\x7f\defindex\x011268,41566
-\def\newcodeindex #1{\x7f\newcodeindex\x011272,41674
-\def\defcodeindex{\x7f\defcodeindex\x011279,41934
-\def\synindex #1 #2 {\x7f\synindex\x011283,42114
-\def\syncodeindex #1 #2 {\x7f\syncodeindex\x011292,42454
-\def\doindex#1{\x7f\doindex\x011309,43133
-\def\singleindexer #1{\x7f\singleindexer\x011310,43192
-\def\docodeindex#1{\x7f\docodeindex\x011313,43304
-\def\singlecodeindexer #1{\x7f\singlecodeindexer\x011314,43371
-\def\indexdummies{\x7f\indexdummies\x011316,43429
-\def\_{\x7f\_\x011317,43449
-\def\w{\x7f\w\x011318,43477
-\def\bf{\x7f\bf\x011319,43504
-\def\rm{\x7f\rm\x011320,43533
-\def\sl{\x7f\sl\x011321,43562
-\def\sf{\x7f\sf\x011322,43591
-\def\tt{\x7f\tt\x011323,43619
-\def\gtr{\x7f\gtr\x011324,43647
-\def\less{\x7f\less\x011325,43677
-\def\hat{\x7f\hat\x011326,43709
-\def\char{\x7f\char\x011327,43739
-\def\TeX{\x7f\TeX\x011328,43771
-\def\dots{\x7f\dots\x011329,43801
-\def\copyright{\x7f\copyright\x011330,43834
-\def\tclose##1{\x7f\tclose\x011331,43877
-\def\code##1{\x7f\code\x011332,43922
-\def\samp##1{\x7f\samp\x011333,43963
-\def\t##1{\x7f\t\x011334,44004
-\def\r##1{\x7f\r\x011335,44039
-\def\i##1{\x7f\i\x011336,44074
-\def\b##1{\x7f\b\x011337,44109
-\def\cite##1{\x7f\cite\x011338,44144
-\def\key##1{\x7f\key\x011339,44185
-\def\file##1{\x7f\file\x011340,44224
-\def\var##1{\x7f\var\x011341,44265
-\def\kbd##1{\x7f\kbd\x011342,44304
-\def\indexdummyfont#1{\x7f\indexdummyfont\x011347,44460
-\def\indexdummytex{\x7f\indexdummytex\x011348,44486
-\def\indexdummydots{\x7f\indexdummydots\x011349,44510
-\def\indexnofonts{\x7f\indexnofonts\x011351,44536
+\let\lastnode=\relax}\x7flastnode\x01502,16194
+\let\refill=\relax\x7frefill\x01504,16217
+\def\setfilename{\x7fsetfilename\x01509,16431
+   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.\x7fsetfilename\x01514,16562
+\outer\def\bye{\x7fbye\x01518,16677
+\def\inforef #1{\x7finforef\x01520,16733
+\def\inforefzzz #1,#2,#3,#4**{\x7finforefzzz\x01521,16771
+\def\losespace #1{\x7flosespace\x01523,16868
+\def\sf{\x7fsf\x01532,17072
+\let\li = \sf % Sometimes we call it \li, not \sf.\x7fli\x01533,17100
+\let\mainmagstep=\magstephalf\x7fmainmagstep\x01536,17201
+\let\mainmagstep=\magstep1\x7fmainmagstep\x01539,17250
+\font\defbf=cmbx10 scaled \magstep1 %was 1314\x7fbf\x01558,17867
+\font\deftt=cmtt10 scaled \magstep1\x7ftt\x01559,17913
+\def\df{\x7fdf\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftentt\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftt\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7ftenbf\x01560,17949
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}\x7fbf\x01560,17949
+\let\indsl=\indit\x7findsl\x01570,18310
+\let\indtt=\ninett\x7findtt\x01571,18328
+\let\indsf=\indrm\x7findsf\x01572,18347
+\let\indbf=\indrm\x7findbf\x01573,18365
+\let\indsc=\indrm\x7findsc\x01574,18383
+\let\chapbf=\chaprm\x7fchapbf\x01584,18643
+\let\authorrm = \secrm\x7fauthorrm\x01627,20193
+\def\resetmathfonts{\x7fresetmathfonts\x01635,20543
+\def\textfonts{\x7ftextfonts\x01648,21132
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftenrm\x01649,21149
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftenit\x01649,21149
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl\x7ftensl\x01649,21149
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7ftenbf\x01650,21208
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7ftentt\x01650,21208
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc\x7fsmallcaps\x01650,21208
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7ftensf\x01651,21271
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7fteni\x01651,21271
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy\x7ftensy\x01651,21271
+\def\chapfonts{\x7fchapfonts\x01653,21347
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftenrm\x01654,21364
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftenit\x01654,21364
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \x7ftensl\x01654,21364
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7ftenbf\x01655,21424
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7ftentt\x01655,21424
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc\x7fsmallcaps\x01655,21424
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7ftensf\x01656,21487
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7fteni\x01656,21487
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy\x7ftensy\x01656,21487
+\def\secfonts{\x7fsecfonts\x01658,21563
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftenrm\x01659,21579
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftenit\x01659,21579
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl\x7ftensl\x01659,21579
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7ftenbf\x01660,21635
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7ftentt\x01660,21635
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc\x7fsmallcaps\x01660,21635
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7ftensf\x01661,21695
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7fteni\x01661,21695
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy\x7ftensy\x01661,21695
+\def\subsecfonts{\x7fsubsecfonts\x01663,21768
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftenrm\x01664,21787
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftenit\x01664,21787
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl\x7ftensl\x01664,21787
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7ftenbf\x01665,21846
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7ftentt\x01665,21846
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc\x7fsmallcaps\x01665,21846
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7ftensf\x01666,21909
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7fteni\x01666,21909
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy\x7ftensy\x01666,21909
+\def\indexfonts{\x7findexfonts\x01668,21985
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftenrm\x01669,22003
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftenit\x01669,22003
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl\x7ftensl\x01669,22003
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7ftenbf\x01670,22059
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7ftentt\x01670,22059
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc\x7fsmallcaps\x01670,22059
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7ftensf\x01671,22119
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7fteni\x01671,22119
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy\x7ftensy\x01671,22119
+\def\smartitalicx{\x7fsmartitalicx\x01691,22717
+\def\smartitalic#1{\x7fsmartitalic\x01692,22793
+\let\i=\smartitalic\x7fi\x01694,22851
+\let\var=\smartitalic\x7fvar\x01695,22871
+\let\dfn=\smartitalic\x7fdfn\x01696,22893
+\let\emph=\smartitalic\x7femph\x01697,22915
+\let\cite=\smartitalic\x7fcite\x01698,22938
+\def\b#1{\x7fb\x01700,22962
+\let\strong=\b\x7fstrong\x01701,22981
+\def\t#1{\x7ft\x01703,22997
+\let\ttfont = \t\x7fttfont\x01704,23072
+\def\samp #1{\x7fsamp\x01706,23149
+\def\key #1{\x7fkey\x01707,23182
+\def\ctrl #1{\x7fctrl\x01708,23243
+\let\file=\samp\x7ffile\x01710,23285
+\def\tclose#1{\x7ftclose\x01716,23445
+\let\code=\tclose\x7fcode\x01722,23722
+\def\xkey{\x7fxkey\x01728,23880
+\def\kbdfoo#1#2#3\par{\x7fkbdfoo\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{\x7fone\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{\x7fthree\x01729,23896
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{\x7fthreex\x01729,23896
+\def\dmn#1{\x7fdmn\x01738,24197
+\def\kbd#1{\x7fkbd\x01740,24224
+\def\kbd#1{\def\look{\x7flook\x01740,24224
+\def\l#1{\x7fl\x01742,24281
+\def\r#1{\x7fr\x01744,24310
+\def\sc#1{\x7fsc\x01746,24378
+\def\ii#1{\x7fii\x01747,24421
+\def\titlefont#1{\x7ftitlefont\x01755,24654
+\def\titlepage{\x7ftitlepage\x01761,24757
+   \let\subtitlerm=\tenrm\x7fsubtitlerm\x01762,24810
+   \def\subtitlefont{\x7fsubtitlefont\x01766,24984
+   \def\authorfont{\x7fauthorfont\x01768,25068
+   \def\title{\x7ftitle\x01774,25278
+   \def\titlezzz##1{\x7ftitlezzz\x01775,25313
+   \def\subtitle{\x7fsubtitle\x01783,25628
+   \def\subtitlezzz##1{\x7fsubtitlezzz\x01784,25669
+   \def\author{\x7fauthor\x01787,25787
+   \def\authorzzz##1{\x7fauthorzzz\x01788,25824
+   \let\oldpage = \page\x7foldpage\x01793,26091
+   \def\page{\x7fpage\x01794,26115
+      \let\page = \oldpage\x7fpage\x01799,26206
+\def\Etitlepage{\x7fEtitlepage\x01804,26284
+\def\finishtitlepage{\x7ffinishtitlepage\x01817,26672
+\let\thispage=\folio\x7fthispage\x01825,26825
+\let\HEADINGShook=\relax\x7fHEADINGShook\x01837,27420
+\def\evenheading{\x7fevenheading\x01846,27680
+\def\oddheading{\x7foddheading\x01847,27723
+\def\everyheading{\x7feveryheading\x01848,27764
+\def\evenfooting{\x7fevenfooting\x01850,27810
+\def\oddfooting{\x7foddfooting\x01851,27853
+\def\everyfooting{\x7feveryfooting\x01852,27894
+\gdef\evenheadingxxx #1{\x7fevenheadingxxx\x01856,27958
+\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{\x7fevenheadingyyy\x01857,28017
+\gdef\oddheadingxxx #1{\x7foddheadingxxx\x01860,28126
+\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{\x7foddheadingyyy\x01861,28183
+\gdef\everyheadingxxx #1{\x7feveryheadingxxx\x01864,28290
+\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{\x7feveryheadingyyy\x01865,28351
+\gdef\evenfootingxxx #1{\x7fevenfootingxxx\x01869,28522
+\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{\x7fevenfootingyyy\x01870,28581
+\gdef\oddfootingxxx #1{\x7foddfootingxxx\x01873,28690
+\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{\x7foddfootingyyy\x01874,28747
+\gdef\everyfootingxxx #1{\x7feveryfootingxxx\x01877,28854
+\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{\x7feveryfootingyyy\x01878,28915
+\def\headings #1 {\x7fheadings\x01893,29586
+\def\HEADINGSoff{\x7fHEADINGSoff\x01895,29635
+\def\HEADINGSdouble{\x7fHEADINGSdouble\x01904,30062
+\def\HEADINGSsingle{\x7fHEADINGSsingle\x01914,30382
+\def\HEADINGSon{\x7fHEADINGSon\x01922,30603
+\def\HEADINGSafter{\x7fHEADINGSafter\x01924,30637
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}\x7fHEADINGShook\x01924,30637
+\let\HEADINGSdoubleafter=\HEADINGSafter\x7fHEADINGSdoubleafter\x01925,30692
+\def\HEADINGSdoublex{\x7fHEADINGSdoublex\x01926,30732
+\def\HEADINGSsingleafter{\x7fHEADINGSsingleafter\x01933,30920
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}\x7fHEADINGShook\x01933,30920
+\def\HEADINGSsinglex{\x7fHEADINGSsinglex\x01934,30981
+\def\today{\x7ftoday\x01943,31256
+\def\thistitle{\x7fthistitle\x01958,31801
+\def\settitle{\x7fsettitle\x01959,31826
+\def\settitlezzz #1{\x7fsettitlezzz\x01960,31863
+\def\settitlezzz #1{\gdef\thistitle{\x7fthistitle\x01960,31863
+\def\internalBitem{\x7finternalBitem\x01992,32793
+\def\internalBitemx{\x7finternalBitemx\x01993,32843
+\def\internalBxitem "#1"{\x7finternalBxitem\x01995,32888
+\def\internalBxitem "#1"{\def\xitemsubtopix{\x7fxitemsubtopix\x01995,32888
+\def\internalBxitemx "#1"{\x7finternalBxitemx\x01996,32968
+\def\internalBxitemx "#1"{\def\xitemsubtopix{\x7fxitemsubtopix\x01996,32968
+\def\internalBkitem{\x7finternalBkitem\x01998,33043
+\def\internalBkitemx{\x7finternalBkitemx\x01999,33095
+\def\kitemzzz #1{\x7fkitemzzz\x011001,33142
+\def\xitemzzz #1{\x7fxitemzzz\x011004,33244
+\def\itemzzz #1{\x7fitemzzz\x011007,33347
+\def\item{\x7fitem\x011037,34418
+\def\itemx{\x7fitemx\x011038,34469
+\def\kitem{\x7fkitem\x011039,34522
+\def\kitemx{\x7fkitemx\x011040,34575
+\def\xitem{\x7fxitem\x011041,34630
+\def\xitemx{\x7fxitemx\x011042,34683
+\def\description{\x7fdescription\x011045,34793
+\def\table{\x7ftable\x011047,34843
+\gdef\tablex #1^^M{\x7ftablex\x011049,34925
+\def\ftable{\x7fftable\x011052,34987
+\gdef\ftablex #1^^M{\x7fftablex\x011054,35071
+\def\Eftable{\x7fEftable\x011056,35133
+\let\Etable=\relax}\x7fEtable\x011057,35180
+\def\vtable{\x7fvtable\x011059,35202
+\gdef\vtablex #1^^M{\x7fvtablex\x011061,35286
+\def\Evtable{\x7fEvtable\x011063,35348
+\let\Etable=\relax}\x7fEtable\x011064,35395
+\def\dontindex #1{\x7fdontindex\x011066,35417
+\def\fnitemindex #1{\x7ffnitemindex\x011067,35437
+\def\vritemindex #1{\x7fvritemindex\x011068,35482
+\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\x7ftabley\x011071,35543
+\def\tablez #1#2#3#4#5#6{\x7ftablez\x011074,35631
+\def\Edescription{\x7fEdescription\x011077,35689
+\let\itemindex=#1%\x7fitemindex\x011078,35735
+\def\itemfont{\x7fitemfont\x011082,35890
+\def\Etable{\x7fEtable\x011090,36116
+\let\item = \internalBitem %\x7fitem\x011091,36162
+\let\itemx = \internalBitemx %\x7fitemx\x011092,36191
+\let\kitem = \internalBkitem %\x7fkitem\x011093,36222
+\let\kitemx = \internalBkitemx %\x7fkitemx\x011094,36253
+\let\xitem = \internalBxitem %\x7fxitem\x011095,36286
+\let\xitemx = \internalBxitemx %\x7fxitemx\x011096,36317
+\def\itemize{\x7fitemize\x011103,36440
+\def\itemizezzz #1{\x7fitemizezzz\x011105,36476
+\def\itemizey #1#2{\x7fitemizey\x011110,36571
+\def\itemcontents{\x7fitemcontents\x011120,36858
+\let\item=\itemizeitem}\x7fitem\x011121,36881
+\def\bullet{\x7fbullet\x011123,36906
+\def\minus{\x7fminus\x011124,36933
+\def\frenchspacing{\x7ffrenchspacing\x011128,37041
+\def\splitoff#1#2\endmark{\x7fsplitoff\x011134,37266
+\def\splitoff#1#2\endmark{\def\first{\x7ffirst\x011134,37266
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{\x7frest\x011134,37266
+\def\enumerate{\x7fenumerate\x011140,37496
+\def\enumeratezzz #1{\x7fenumeratezzz\x011141,37535
+\def\enumeratey #1 #2\endenumeratey{\x7fenumeratey\x011142,37588
+  \def\thearg{\x7fthearg\x011146,37735
+  \ifx\thearg\empty \def\thearg{\x7fthearg\x011147,37754
+\def\numericenumerate{\x7fnumericenumerate\x011184,39088
+\def\lowercaseenumerate{\x7flowercaseenumerate\x011190,39218
+\def\uppercaseenumerate{\x7fuppercaseenumerate\x011203,39565
+\def\startenumeration#1{\x7fstartenumeration\x011219,40055
+\def\alphaenumerate{\x7falphaenumerate\x011227,40237
+\def\capsenumerate{\x7fcapsenumerate\x011228,40272
+\def\Ealphaenumerate{\x7fEalphaenumerate\x011229,40306
+\def\Ecapsenumerate{\x7fEcapsenumerate\x011230,40340
+\def\itemizeitem{\x7fitemizeitem\x011234,40420
+{\let\par=\endgraf \smallbreak}\x7fpar\x011236,40460
+\gdef\newwrite{\x7fnewwrite\x011249,40841
+\def\newindex #1{\x7fnewindex\x011259,41277
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011262,41439
+\def\defindex{\x7fdefindex\x011268,41566
+\def\newcodeindex #1{\x7fnewcodeindex\x011272,41674
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011275,41840
+\def\defcodeindex{\x7fdefcodeindex\x011279,41934
+\def\synindex #1 #2 {\x7fsynindex\x011283,42114
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname\x7fexpandafter\x011284,42137
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo\x7fcsname\x011285,42217
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011286,42273
+\def\syncodeindex #1 #2 {\x7fsyncodeindex\x011292,42454
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname\x7fexpandafter\x011293,42481
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo\x7fcsname\x011294,42561
+\expandafter\xdef\csname#1index\endcsname{\x7fcsname\x011295,42617
+\def\doindex#1{\x7fdoindex\x011309,43133
+\def\doindex#1{\edef\indexname{\x7findexname\x011309,43133
+\def\singleindexer #1{\x7fsingleindexer\x011310,43192
+\def\singleindexer #1{\doind{\indexname}\x7fname\x011310,43192
+\def\docodeindex#1{\x7fdocodeindex\x011313,43304
+\def\docodeindex#1{\edef\indexname{\x7findexname\x011313,43304
+\def\singlecodeindexer #1{\x7fsinglecodeindexer\x011314,43371
+\def\singlecodeindexer #1{\doind{\indexname}\x7fname\x011314,43371
+\def\indexdummies{\x7findexdummies\x011316,43429
+\def\_{\x7f_\x011317,43449
+\def\w{\x7fw\x011318,43477
+\def\bf{\x7fbf\x011319,43504
+\def\rm{\x7frm\x011320,43533
+\def\sl{\x7fsl\x011321,43562
+\def\sf{\x7fsf\x011322,43591
+\def\tt{\x7ftt\x011323,43619
+\def\gtr{\x7fgtr\x011324,43647
+\def\less{\x7fless\x011325,43677
+\def\hat{\x7fhat\x011326,43709
+\def\char{\x7fchar\x011327,43739
+\def\TeX{\x7fTeX\x011328,43771
+\def\dots{\x7fdots\x011329,43801
+\def\copyright{\x7fcopyright\x011330,43834
+\def\tclose##1{\x7ftclose\x011331,43877
+\def\code##1{\x7fcode\x011332,43922
+\def\samp##1{\x7fsamp\x011333,43963
+\def\t##1{\x7ft\x011334,44004
+\def\r##1{\x7fr\x011335,44039
+\def\i##1{\x7fi\x011336,44074
+\def\b##1{\x7fb\x011337,44109
+\def\cite##1{\x7fcite\x011338,44144
+\def\key##1{\x7fkey\x011339,44185
+\def\file##1{\x7ffile\x011340,44224
+\def\var##1{\x7fvar\x011341,44265
+\def\kbd##1{\x7fkbd\x011342,44304
+\def\indexdummyfont#1{\x7findexdummyfont\x011347,44460
+\def\indexdummytex{\x7findexdummytex\x011348,44486
+\def\indexdummydots{\x7findexdummydots\x011349,44510
+\def\indexnofonts{\x7findexnofonts\x011351,44536
+\let\w=\indexdummyfont\x7fw\x011352,44556
 \let\w=\indexdummyfont\x7fdummyfont\x011352,44556
+\let\t=\indexdummyfont\x7ft\x011353,44579
 \let\t=\indexdummyfont\x7fdummyfont\x011353,44579
+\let\r=\indexdummyfont\x7fr\x011354,44602
 \let\r=\indexdummyfont\x7fdummyfont\x011354,44602
+\let\i=\indexdummyfont\x7fi\x011355,44625
 \let\i=\indexdummyfont\x7fdummyfont\x011355,44625
+\let\b=\indexdummyfont\x7fb\x011356,44648
 \let\b=\indexdummyfont\x7fdummyfont\x011356,44648
+\let\emph=\indexdummyfont\x7femph\x011357,44671
 \let\emph=\indexdummyfont\x7fdummyfont\x011357,44671
+\let\strong=\indexdummyfont\x7fstrong\x011358,44697
 \let\strong=\indexdummyfont\x7fdummyfont\x011358,44697
-\let\cite=\indexdummyfont\x7f=\indexdummyfont\x011359,44725
+\let\cite=\indexdummyfont\x7fcite\x011359,44725
+\let\cite=\indexdummyfont\x7fdummyfont\x011359,44725
+\let\sc=\indexdummyfont\x7fsc\x011360,44751
 \let\sc=\indexdummyfont\x7fdummyfont\x011360,44751
+\let\tclose=\indexdummyfont\x7ftclose\x011364,44923
 \let\tclose=\indexdummyfont\x7fdummyfont\x011364,44923
+\let\code=\indexdummyfont\x7fcode\x011365,44951
 \let\code=\indexdummyfont\x7fdummyfont\x011365,44951
+\let\file=\indexdummyfont\x7ffile\x011366,44977
 \let\file=\indexdummyfont\x7fdummyfont\x011366,44977
+\let\samp=\indexdummyfont\x7fsamp\x011367,45003
 \let\samp=\indexdummyfont\x7fdummyfont\x011367,45003
+\let\kbd=\indexdummyfont\x7fkbd\x011368,45029
 \let\kbd=\indexdummyfont\x7fdummyfont\x011368,45029
+\let\key=\indexdummyfont\x7fkey\x011369,45054
 \let\key=\indexdummyfont\x7fdummyfont\x011369,45054
+\let\var=\indexdummyfont\x7fvar\x011370,45079
 \let\var=\indexdummyfont\x7fdummyfont\x011370,45079
+\let\TeX=\indexdummytex\x7fTeX\x011371,45104
 \let\TeX=\indexdummytex\x7fdummytex\x011371,45104
+\let\dots=\indexdummydots\x7fdots\x011372,45128
 \let\dots=\indexdummydots\x7fdummydots\x011372,45128
-\let\indexbackslash=0  %overridden during \printindex.\x7fbackslash=0\x011382,45380
-\def\doind #1#2{\x7f\doind\x011384,45436
+\let\indexbackslash=0  %overridden during \printindex.\x7findexbackslash\x011382,45380
+\def\doind #1#2{\x7fdoind\x011384,45436
 {\indexdummies % Must do this here, since \bf, etc expand at this stage\x7fdummies\x011386,45479
-\def\rawbackslashxx{\x7f\rawbackslashxx\x011389,45619
+{\let\folio=0% Expand all macros now EXCEPT \folio\x7ffolio\x011388,45568
+\def\rawbackslashxx{\x7frawbackslashxx\x011389,45619
+\def\rawbackslashxx{\indexbackslash}\x7fbackslash\x011389,45619
 {\indexnofonts\x7fnofonts\x011394,45881
-\def\dosubind #1#2#3{\x7f\dosubind\x011405,46192
+\xdef\temp1{\x7ftemp1\x011395,45896
+\edef\temp{\x7ftemp\x011399,46068
+\def\dosubind #1#2#3{\x7fdosubind\x011405,46192
 {\indexdummies % Must do this here, since \bf, etc expand at this stage\x7fdummies\x011407,46240
-\def\rawbackslashxx{\x7f\rawbackslashxx\x011410,46344
+{\let\folio=0%\x7ffolio\x011409,46329
+\def\rawbackslashxx{\x7frawbackslashxx\x011410,46344
+\def\rawbackslashxx{\indexbackslash}\x7fbackslash\x011410,46344
 {\indexnofonts\x7fnofonts\x011414,46498
-\def\findex {\x7f\findex\x011443,47429
-\def\kindex {\x7f\kindex\x011444,47452
-\def\cindex {\x7f\cindex\x011445,47475
-\def\vindex {\x7f\vindex\x011446,47498
-\def\tindex {\x7f\tindex\x011447,47521
-\def\pindex {\x7f\pindex\x011448,47544
-\def\cindexsub {\x7f\cindexsub\x011450,47568
-\def\printindex{\x7f\printindex\x011462,47895
-\def\doprintindex#1{\x7f\doprintindex\x011464,47936
-  \def\indexbackslash{\x7f\indexbackslash\x011481,48421
+\xdef\temp1{\x7ftemp1\x011415,46513
+\edef\temp{\x7ftemp\x011419,46688
+\def\findex {\x7ffindex\x011443,47429
+\def\kindex {\x7fkindex\x011444,47452
+\def\cindex {\x7fcindex\x011445,47475
+\def\vindex {\x7fvindex\x011446,47498
+\def\tindex {\x7ftindex\x011447,47521
+\def\pindex {\x7fpindex\x011448,47544
+\def\cindexsub {\x7fcindexsub\x011450,47568
+\gdef\cindexsub "#1" #2^^M{\x7fcindexsub\x011452,47631
+\def\printindex{\x7fprintindex\x011462,47895
+\def\doprintindex#1{\x7fdoprintindex\x011464,47936
+  \def\indexbackslash{\x7findexbackslash\x011481,48421
   \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt\x7ffonts\rm\x011482,48460
-\def\initial #1{\x7f\initial\x011517,49532
-\def\entry #1#2{\x7f\entry\x011523,49739
+\def\initial #1{\x7finitial\x011517,49532
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7ftentt\x011518,49550
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7ftt\x011518,49550
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt\x7fsf\x011518,49550
+\def\entry #1#2{\x7fentry\x011523,49739
   \null\nobreak\indexdotfill % Have leaders before the page number.\x7fdotfill\x011540,50386
-\def\indexdotfill{\x7f\indexdotfill\x011549,50714
-\def\primary #1{\x7f\primary\x011552,50820
-\def\secondary #1#2{\x7f\secondary\x011556,50902
+\def\indexdotfill{\x7findexdotfill\x011549,50714
+\def\primary #1{\x7fprimary\x011552,50820
+\def\secondary #1#2{\x7fsecondary\x011556,50902
 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par\x7fdotfill\x011559,50984
 \newbox\partialpage\x7fialpage\x011566,51157
-\def\begindoublecolumns{\x7f\begindoublecolumns\x011572,51315
-  \output={\global\setbox\partialpage=\x7fialpage=\x011573,51351
-\def\enddoublecolumns{\x7f\enddoublecolumns\x011577,51539
-\def\doublecolumnout{\x7f\doublecolumnout\x011580,51624
+\def\begindoublecolumns{\x7fbegindoublecolumns\x011572,51315
+  \output={\global\setbox\partialpage=\x7fialpage\x011573,51351
+\def\enddoublecolumns{\x7fenddoublecolumns\x011577,51539
+\def\doublecolumnout{\x7fdoublecolumnout\x011580,51624
   \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage\x7fialpage\x011581,51693
-\def\pagesofar{\x7f\pagesofar\x011584,51871
-\def\balancecolumns{\x7f\balancecolumns\x011588,52108
+\def\pagesofar{\x7fpagesofar\x011584,51871
+\def\pagesofar{\unvbox\partialpage %\x7fialpage\x011584,51871
+\def\balancecolumns{\x7fbalancecolumns\x011588,52108
   \availdimen@=\pageheight \advance\availdimen@ by-\ht\partialpage\x7fialpage\x011594,52279
      \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage\x7fialpage\x011600,52540
 \newcount \appendixno  \appendixno = `\@\x7fno\x011627,53445
-\def\appendixletter{\x7f\appendixletter\x011628,53486
-\def\opencontents{\x7f\opencontents\x011632,53589
-\def\thischapter{\x7f\thischapter\x011637,53770
-\def\seccheck#1{\x7f\seccheck\x011638,53808
-\def\chapternofonts{\x7f\chapternofonts\x011643,53912
-\def\result{\x7f\result\x011646,53987
-\def\equiv{\x7f\equiv\x011647,54022
-\def\expansion{\x7f\expansion\x011648,54055
-\def\print{\x7f\print\x011649,54096
-\def\TeX{\x7f\TeX\x011650,54129
-\def\dots{\x7f\dots\x011651,54158
-\def\copyright{\x7f\copyright\x011652,54189
-\def\tt{\x7f\tt\x011653,54230
-\def\bf{\x7f\bf\x011654,54257
-\def\w{\x7f\w\x011655,54285
-\def\less{\x7f\less\x011656,54310
-\def\gtr{\x7f\gtr\x011657,54341
-\def\hat{\x7f\hat\x011658,54370
-\def\char{\x7f\char\x011659,54399
-\def\tclose##1{\x7f\tclose\x011660,54430
-\def\code##1{\x7f\code\x011661,54474
-\def\samp##1{\x7f\samp\x011662,54514
-\def\r##1{\x7f\r\x011663,54554
-\def\b##1{\x7f\b\x011664,54588
-\def\key##1{\x7f\key\x011665,54622
-\def\file##1{\x7f\file\x011666,54660
-\def\kbd##1{\x7f\kbd\x011667,54700
-\def\i##1{\x7f\i\x011669,54808
-\def\cite##1{\x7f\cite\x011670,54842
-\def\var##1{\x7f\var\x011671,54882
-\def\emph##1{\x7f\emph\x011672,54920
-\def\dfn##1{\x7f\dfn\x011673,54960
-\def\thischaptername{\x7f\thischaptername\x011676,55001
-\outer\def\chapter{\x7f\chapter\x011677,55040
-\def\chapterzzz #1{\x7f\chapterzzz\x011678,55081
-{\chapternofonts%\x7fnofonts%\x011687,55477
-\global\let\section = \numberedsec\x7f=\x011692,55630
-\global\let\subsection = \numberedsubsec\x7f=\x011693,55665
-\global\let\subsubsection = \numberedsubsubsec\x7f=\x011694,55706
-\outer\def\appendix{\x7f\appendix\x011697,55757
-\def\appendixzzz #1{\x7f\appendixzzz\x011698,55800
+\newcount \appendixno  \appendixno = `\@\x7fno\x011627,53445
+\def\appendixletter{\x7fappendixletter\x011628,53486
+\def\appendixletter{\char\the\appendixno}\x7fno\x011628,53486
+\def\opencontents{\x7fopencontents\x011632,53589
+\def\thischapter{\x7fthischapter\x011637,53770
+\def\thischapter{} \def\thissection{\x7fthissection\x011637,53770
+\def\seccheck#1{\x7fseccheck\x011638,53808
+\def\chapternofonts{\x7fchapternofonts\x011643,53912
+\let\rawbackslash=\relax%\x7frawbackslash\x011644,53934
+\let\frenchspacing=\relax%\x7ffrenchspacing\x011645,53960
+\def\result{\x7fresult\x011646,53987
+\def\equiv{\x7fequiv\x011647,54022
+\def\expansion{\x7fexpansion\x011648,54055
+\def\print{\x7fprint\x011649,54096
+\def\TeX{\x7fTeX\x011650,54129
+\def\dots{\x7fdots\x011651,54158
+\def\copyright{\x7fcopyright\x011652,54189
+\def\tt{\x7ftt\x011653,54230
+\def\bf{\x7fbf\x011654,54257
+\def\w{\x7fw\x011655,54285
+\def\less{\x7fless\x011656,54310
+\def\gtr{\x7fgtr\x011657,54341
+\def\hat{\x7fhat\x011658,54370
+\def\char{\x7fchar\x011659,54399
+\def\tclose##1{\x7ftclose\x011660,54430
+\def\code##1{\x7fcode\x011661,54474
+\def\samp##1{\x7fsamp\x011662,54514
+\def\r##1{\x7fr\x011663,54554
+\def\b##1{\x7fb\x011664,54588
+\def\key##1{\x7fkey\x011665,54622
+\def\file##1{\x7ffile\x011666,54660
+\def\kbd##1{\x7fkbd\x011667,54700
+\def\i##1{\x7fi\x011669,54808
+\def\cite##1{\x7fcite\x011670,54842
+\def\var##1{\x7fvar\x011671,54882
+\def\emph##1{\x7femph\x011672,54920
+\def\dfn##1{\x7fdfn\x011673,54960
+\def\thischaptername{\x7fthischaptername\x011676,55001
+\outer\def\chapter{\x7fchapter\x011677,55040
+\outer\def\chapter{\parsearg\chapterzzz}\x7fzzz\x011677,55040
+\def\chapterzzz #1{\x7fchapterzzz\x011678,55081
+\gdef\thissection{\x7fthissection\x011682,55246
+\gdef\thischaptername{\x7fthischaptername\x011683,55269
+\xdef\thischapter{\x7fthischapter\x011686,55410
+{\chapternofonts%\x7fnofonts\x011687,55477
+\edef\temp{\x7ftemp\x011688,55495
+\global\let\section = \numberedsec\x7fsection\x011692,55630
+\global\let\subsection = \numberedsubsec\x7fsubsection\x011693,55665
+\global\let\subsubsection = \numberedsubsubsec\x7fsubsubsection\x011694,55706
+\outer\def\appendix{\x7fappendix\x011697,55757
+\outer\def\appendix{\parsearg\appendixzzz}\x7fzzz\x011697,55757
+\def\appendixzzz #1{\x7fappendixzzz\x011698,55800
 \global\advance \appendixno by 1 \message{\x7fno\x011700,55877
+\global\advance \appendixno by 1 \message{Appendix \appendixletter}\x7fletter\x011700,55877
 \chapmacro {#1}{Appendix \appendixletter}\x7fletter\x011701,55946
+\gdef\thissection{\x7fthissection\x011702,55989
+\gdef\thischaptername{\x7fthischaptername\x011703,56012
+\xdef\thischapter{\x7fthischapter\x011704,56039
 \xdef\thischapter{Appendix \appendixletter: \noexpand\thischaptername}\x7fletter:\x011704,56039
-{\chapternofonts%\x7fnofonts%\x011705,56111
+{\chapternofonts%\x7fnofonts\x011705,56111
+\edef\temp{\x7ftemp\x011706,56129
   {#1}{Appendix \appendixletter}\x7fletter\x011707,56167
 \appendixnoderef %\x7fnoderef\x011710,56267
-\global\let\section = \appendixsec\x7f=\x011711,56286
-\global\let\subsection = \appendixsubsec\x7f=\x011712,56321
-\global\let\subsubsection = \appendixsubsubsec\x7f=\x011713,56362
-\outer\def\top{\x7f\top\x011716,56413
-\outer\def\unnumbered{\x7f\unnumbered\x011717,56453
-\def\unnumberedzzz #1{\x7f\unnumberedzzz\x011718,56500
-{\chapternofonts%\x7fnofonts%\x011722,56663
-\global\let\section = \unnumberedsec\x7f=\x011727,56813
-\global\let\subsection = \unnumberedsubsec\x7f=\x011728,56850
-\global\let\subsubsection = \unnumberedsubsubsec\x7f=\x011729,56893
-\outer\def\numberedsec{\x7f\numberedsec\x011732,56946
-\def\seczzz #1{\x7f\seczzz\x011733,56987
-{\chapternofonts%\x7fnofonts%\x011736,57143
-\outer\def\appendixsection{\x7f\appendixsection\x011745,57329
-\outer\def\appendixsec{\x7f\appendixsec\x011746,57386
-\def\appendixsectionzzz #1{\x7f\appendixsectionzzz\x011747,57439
+\global\let\section = \appendixsec\x7fsection\x011711,56286
+\global\let\section = \appendixsec\x7fsec\x011711,56286
+\global\let\subsection = \appendixsubsec\x7fsubsection\x011712,56321
+\global\let\subsection = \appendixsubsec\x7fsubsec\x011712,56321
+\global\let\subsubsection = \appendixsubsubsec\x7fsubsubsection\x011713,56362
+\global\let\subsubsection = \appendixsubsubsec\x7fsubsubsec\x011713,56362
+\outer\def\top{\x7ftop\x011716,56413
+\outer\def\unnumbered{\x7funnumbered\x011717,56453
+\def\unnumberedzzz #1{\x7funnumberedzzz\x011718,56500
+\gdef\thischapter{\x7fthischapter\x011721,56619
+\gdef\thischapter{#1}\gdef\thissection{\x7fthissection\x011721,56619
+{\chapternofonts%\x7fnofonts\x011722,56663
+\edef\temp{\x7ftemp\x011723,56681
+\global\let\section = \unnumberedsec\x7fsection\x011727,56813
+\global\let\subsection = \unnumberedsubsec\x7fsubsection\x011728,56850
+\global\let\subsubsection = \unnumberedsubsubsec\x7fsubsubsection\x011729,56893
+\outer\def\numberedsec{\x7fnumberedsec\x011732,56946
+\def\seczzz #1{\x7fseczzz\x011733,56987
+\gdef\thissection{\x7fthissection\x011735,57079
+{\chapternofonts%\x7fnofonts\x011736,57143
+\edef\temp{\x7ftemp\x011737,57161
+\outer\def\appendixsection{\x7fappendixsection\x011745,57329
+\outer\def\appendixsection{\parsearg\appendixsectionzzz}\x7fsectionzzz\x011745,57329
+\outer\def\appendixsec{\x7fappendixsec\x011746,57386
+\outer\def\appendixsec{\parsearg\appendixsectionzzz}\x7fsectionzzz\x011746,57386
+\def\appendixsectionzzz #1{\x7fappendixsectionzzz\x011747,57439
+\gdef\thissection{\x7fthissection\x011749,57551
 \gdef\thissection{#1}\secheading {#1}{\appendixletter}\x7fletter\x011749,57551
-{\chapternofonts%\x7fnofonts%\x011750,57619
+{\chapternofonts%\x7fnofonts\x011750,57619
+\edef\temp{\x7ftemp\x011751,57637
 {#1}{\appendixletter}\x7fletter\x011752,57675
 \appendixnoderef %\x7fnoderef\x011755,57775
-\outer\def\unnumberedsec{\x7f\unnumberedsec\x011759,57815
-\def\unnumberedseczzz #1{\x7f\unnumberedseczzz\x011760,57868
-{\chapternofonts%\x7fnofonts%\x011762,57963
-\outer\def\numberedsubsec{\x7f\numberedsubsec\x011770,58131
-\def\numberedsubseczzz #1{\x7f\numberedsubseczzz\x011771,58186
-{\chapternofonts%\x7fnofonts%\x011774,58365
-\outer\def\appendixsubsec{\x7f\appendixsubsec\x011783,58569
-\def\appendixsubseczzz #1{\x7f\appendixsubseczzz\x011784,58624
+\outer\def\unnumberedsec{\x7funnumberedsec\x011759,57815
+\def\unnumberedseczzz #1{\x7funnumberedseczzz\x011760,57868
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011761,57919
+{\chapternofonts%\x7fnofonts\x011762,57963
+\edef\temp{\x7ftemp\x011763,57981
+\outer\def\numberedsubsec{\x7fnumberedsubsec\x011770,58131
+\def\numberedsubseczzz #1{\x7fnumberedsubseczzz\x011771,58186
+\gdef\thissection{\x7fthissection\x011772,58235
+{\chapternofonts%\x7fnofonts\x011774,58365
+\edef\temp{\x7ftemp\x011775,58383
+\outer\def\appendixsubsec{\x7fappendixsubsec\x011783,58569
+\outer\def\appendixsubsec{\parsearg\appendixsubseczzz}\x7fsubseczzz\x011783,58569
+\def\appendixsubseczzz #1{\x7fappendixsubseczzz\x011784,58624
+\gdef\thissection{\x7fthissection\x011785,58677
 \subsecheading {#1}{\appendixletter}\x7fletter\x011786,58746
-{\chapternofonts%\x7fnofonts%\x011787,58811
+{\chapternofonts%\x7fnofonts\x011787,58811
+\edef\temp{\x7ftemp\x011788,58829
 {#1}{\appendixletter}\x7fletter\x011789,58870
 \appendixnoderef %\x7fnoderef\x011792,58985
-\outer\def\unnumberedsubsec{\x7f\unnumberedsubsec\x011796,59025
-\def\unnumberedsubseczzz #1{\x7f\unnumberedsubseczzz\x011797,59084
-{\chapternofonts%\x7fnofonts%\x011799,59185
-\outer\def\numberedsubsubsec{\x7f\numberedsubsubsec\x011807,59356
-\def\numberedsubsubseczzz #1{\x7f\numberedsubsubseczzz\x011808,59417
-{\chapternofonts%\x7fnofonts%\x011812,59614
-\outer\def\appendixsubsubsec{\x7f\appendixsubsubsec\x011823,59847
-\def\appendixsubsubseczzz #1{\x7f\appendixsubsubseczzz\x011824,59908
+\outer\def\unnumberedsubsec{\x7funnumberedsubsec\x011796,59025
+\def\unnumberedsubseczzz #1{\x7funnumberedsubseczzz\x011797,59084
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011798,59141
+{\chapternofonts%\x7fnofonts\x011799,59185
+\edef\temp{\x7ftemp\x011800,59203
+\outer\def\numberedsubsubsec{\x7fnumberedsubsubsec\x011807,59356
+\def\numberedsubsubseczzz #1{\x7fnumberedsubsubseczzz\x011808,59417
+\gdef\thissection{\x7fthissection\x011809,59472
+{\chapternofonts%\x7fnofonts\x011812,59614
+\edef\temp{\x7ftemp\x011813,59632
+\outer\def\appendixsubsubsec{\x7fappendixsubsubsec\x011823,59847
+\outer\def\appendixsubsubsec{\parsearg\appendixsubsubseczzz}\x7fsubsubseczzz\x011823,59847
+\def\appendixsubsubseczzz #1{\x7fappendixsubsubseczzz\x011824,59908
+\gdef\thissection{\x7fthissection\x011825,59967
   {\appendixletter}\x7fletter\x011827,60047
-{\chapternofonts%\x7fnofonts%\x011828,60113
+{\chapternofonts%\x7fnofonts\x011828,60113
+\edef\temp{\x7ftemp\x011829,60131
   {\appendixletter}\x7fletter\x011830,60178
 \appendixnoderef %\x7fnoderef\x011834,60312
-\outer\def\unnumberedsubsubsec{\x7f\unnumberedsubsubsec\x011838,60352
-\def\unnumberedsubsubseczzz #1{\x7f\unnumberedsubsubseczzz\x011839,60417
-{\chapternofonts%\x7fnofonts%\x011841,60524
-\def\infotop{\x7f\infotop\x011851,60853
-\def\infounnumbered{\x7f\infounnumbered\x011852,60891
-\def\infounnumberedsec{\x7f\infounnumberedsec\x011853,60936
-\def\infounnumberedsubsec{\x7f\infounnumberedsubsec\x011854,60987
-\def\infounnumberedsubsubsec{\x7f\infounnumberedsubsubsec\x011855,61044
-\def\infoappendix{\x7f\infoappendix\x011857,61108
-\def\infoappendixsec{\x7f\infoappendixsec\x011858,61149
-\def\infoappendixsubsec{\x7f\infoappendixsubsec\x011859,61196
-\def\infoappendixsubsubsec{\x7f\infoappendixsubsubsec\x011860,61249
-\def\infochapter{\x7f\infochapter\x011862,61309
-\def\infosection{\x7f\infosection\x011863,61348
-\def\infosubsection{\x7f\infosubsection\x011864,61387
-\def\infosubsubsection{\x7f\infosubsubsection\x011865,61432
-\global\let\section = \numberedsec\x7f=\x011870,61669
-\global\let\subsection = \numberedsubsec\x7f=\x011871,61704
-\global\let\subsubsection = \numberedsubsubsec\x7f=\x011872,61745
-\def\majorheading{\x7f\majorheading\x011886,62252
-\def\majorheadingzzz #1{\x7f\majorheadingzzz\x011887,62297
-\def\chapheading{\x7f\chapheading\x011893,62530
-\def\chapheadingzzz #1{\x7f\chapheadingzzz\x011894,62573
-\def\heading{\x7f\heading\x011899,62768
-\def\subheading{\x7f\subheading\x011901,62805
-\def\subsubheading{\x7f\subsubheading\x011903,62848
-\def\dobreak#1#2{\x7f\dobreak\x011910,63125
-\def\setchapterstyle #1 {\x7f\setchapterstyle\x011912,63203
-\def\chapbreak{\x7f\chapbreak\x011919,63458
-\def\chappager{\x7f\chappager\x011920,63508
-\def\chapoddpage{\x7f\chapoddpage\x011921,63546
-\def\setchapternewpage #1 {\x7f\setchapternewpage\x011923,63625
-\def\CHAPPAGoff{\x7f\CHAPPAGoff\x011925,63682
-\def\CHAPPAGon{\x7f\CHAPPAGon\x011929,63776
-\global\def\HEADINGSon{\x7f\HEADINGSon\x011932,63867
-\def\CHAPPAGodd{\x7f\CHAPPAGodd\x011934,63909
-\global\def\HEADINGSon{\x7f\HEADINGSon\x011937,64005
-\def\CHAPFplain{\x7f\CHAPFplain\x011941,64059
-\def\chfplain #1#2{\x7f\chfplain\x011945,64151
-\def\unnchfplain #1{\x7f\unnchfplain\x011956,64374
-\def\unnchfopen #1{\x7f\unnchfopen\x011964,64603
-\def\chfopen #1#2{\x7f\chfopen\x011970,64811
-\def\CHAPFopen{\x7f\CHAPFopen\x011975,64955
-\def\subsecheadingbreak{\x7f\subsecheadingbreak\x011982,65173
-\def\secheadingbreak{\x7f\secheadingbreak\x011985,65302
-\def\secheading #1#2#3{\x7f\secheading\x011993,65584
-\def\plainsecheading #1{\x7f\plainsecheading\x011994,65640
-\def\secheadingi #1{\x7f\secheadingi\x011995,65683
-\def\subsecheading #1#2#3#4{\x7f\subsecheading\x012006,66051
-\def\subsecheadingi #1{\x7f\subsecheadingi\x012007,66118
-\def\subsubsecfonts{\x7f\subsubsecfonts\x012014,66415
-\def\subsubsecheading #1#2#3#4#5{\x7f\subsubsecheading\x012017,66538
-\def\subsubsecheadingi #1{\x7f\subsubsecheadingi\x012018,66616
-\def\startcontents#1{\x7f\startcontents\x012032,67088
-   \unnumbchapmacro{#1}\def\thischapter{\x7f\thischapter\x012040,67361
-\outer\def\contents{\x7f\contents\x012049,67720
-\outer\def\summarycontents{\x7f\summarycontents\x012057,67864
-      \def\secentry ##1##2##3##4{\x7f\secentry\x012067,68235
-      \def\unnumbsecentry ##1##2{\x7f\unnumbsecentry\x012068,68270
-      \def\subsecentry ##1##2##3##4##5{\x7f\subsecentry\x012069,68305
-      \def\unnumbsubsecentry ##1##2{\x7f\unnumbsubsecentry\x012070,68346
-      \def\subsubsecentry ##1##2##3##4##5##6{\x7f\subsubsecentry\x012071,68384
-      \def\unnumbsubsubsecentry ##1##2{\x7f\unnumbsubsubsecentry\x012072,68431
-\def\chapentry#1#2#3{\x7f\chapentry\x012085,68865
-\def\shortchapentry#1#2#3{\x7f\shortchapentry\x012088,68982
+\outer\def\unnumberedsubsubsec{\x7funnumberedsubsubsec\x011838,60352
+\def\unnumberedsubsubseczzz #1{\x7funnumberedsubsubseczzz\x011839,60417
+\plainsecheading {#1}\gdef\thissection{\x7fthissection\x011840,60480
+{\chapternofonts%\x7fnofonts\x011841,60524
+\edef\temp{\x7ftemp\x011842,60542
+\def\infotop{\x7finfotop\x011851,60853
+\def\infounnumbered{\x7finfounnumbered\x011852,60891
+\def\infounnumberedsec{\x7finfounnumberedsec\x011853,60936
+\def\infounnumberedsubsec{\x7finfounnumberedsubsec\x011854,60987
+\def\infounnumberedsubsubsec{\x7finfounnumberedsubsubsec\x011855,61044
+\def\infoappendix{\x7finfoappendix\x011857,61108
+\def\infoappendix{\parsearg\appendixzzz}\x7fzzz\x011857,61108
+\def\infoappendixsec{\x7finfoappendixsec\x011858,61149
+\def\infoappendixsec{\parsearg\appendixseczzz}\x7fseczzz\x011858,61149
+\def\infoappendixsubsec{\x7finfoappendixsubsec\x011859,61196
+\def\infoappendixsubsec{\parsearg\appendixsubseczzz}\x7fsubseczzz\x011859,61196
+\def\infoappendixsubsubsec{\x7finfoappendixsubsubsec\x011860,61249
+\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}\x7fsubsubseczzz\x011860,61249
+\def\infochapter{\x7finfochapter\x011862,61309
+\def\infochapter{\parsearg\chapterzzz}\x7fzzz\x011862,61309
+\def\infosection{\x7finfosection\x011863,61348
+\def\infosection{\parsearg\sectionzzz}\x7fzzz\x011863,61348
+\def\infosubsection{\x7finfosubsection\x011864,61387
+\def\infosubsection{\parsearg\subsectionzzz}\x7fzzz\x011864,61387
+\def\infosubsubsection{\x7finfosubsubsection\x011865,61432
+\def\infosubsubsection{\parsearg\subsubsectionzzz}\x7fzzz\x011865,61432
+\global\let\section = \numberedsec\x7fsection\x011870,61669
+\global\let\subsection = \numberedsubsec\x7fsubsection\x011871,61704
+\global\let\subsubsection = \numberedsubsubsec\x7fsubsubsection\x011872,61745
+\def\majorheading{\x7fmajorheading\x011886,62252
+\def\majorheadingzzz #1{\x7fmajorheadingzzz\x011887,62297
+\def\chapheading{\x7fchapheading\x011893,62530
+\def\chapheadingzzz #1{\x7fchapheadingzzz\x011894,62573
+\def\heading{\x7fheading\x011899,62768
+\def\subheading{\x7fsubheading\x011901,62805
+\def\subsubheading{\x7fsubsubheading\x011903,62848
+\def\dobreak#1#2{\x7fdobreak\x011910,63125
+\def\setchapterstyle #1 {\x7fsetchapterstyle\x011912,63203
+\def\chapbreak{\x7fchapbreak\x011919,63458
+\def\chappager{\x7fchappager\x011920,63508
+\def\chapoddpage{\x7fchapoddpage\x011921,63546
+\def\setchapternewpage #1 {\x7fsetchapternewpage\x011923,63625
+\def\CHAPPAGoff{\x7fCHAPPAGoff\x011925,63682
+\global\let\pchapsepmacro=\chapbreak\x7fpchapsepmacro\x011926,63699
+\global\let\pagealignmacro=\chappager}\x7fpagealignmacro\x011927,63736
+\def\CHAPPAGon{\x7fCHAPPAGon\x011929,63776
+\global\let\pchapsepmacro=\chappager\x7fpchapsepmacro\x011930,63792
+\global\let\pagealignmacro=\chappager\x7fpagealignmacro\x011931,63829
+\global\def\HEADINGSon{\x7fHEADINGSon\x011932,63867
+\def\CHAPPAGodd{\x7fCHAPPAGodd\x011934,63909
+\global\let\pchapsepmacro=\chapoddpage\x7fpchapsepmacro\x011935,63926
+\global\let\pagealignmacro=\chapoddpage\x7fpagealignmacro\x011936,63965
+\global\def\HEADINGSon{\x7fHEADINGSon\x011937,64005
+\def\CHAPFplain{\x7fCHAPFplain\x011941,64059
+\global\let\chapmacro=\chfplain\x7fchapmacro\x011942,64076
+\global\let\unnumbchapmacro=\unnchfplain}\x7funnumbchapmacro\x011943,64108
+\def\chfplain #1#2{\x7fchfplain\x011945,64151
+\def\unnchfplain #1{\x7funnchfplain\x011956,64374
+\def\unnchfopen #1{\x7funnchfopen\x011964,64603
+\def\chfopen #1#2{\x7fchfopen\x011970,64811
+\def\CHAPFopen{\x7fCHAPFopen\x011975,64955
+\global\let\chapmacro=\chfopen\x7fchapmacro\x011976,64971
+\global\let\unnumbchapmacro=\unnchfopen}\x7funnumbchapmacro\x011977,65002
+\def\subsecheadingbreak{\x7fsubsecheadingbreak\x011982,65173
+\def\secheadingbreak{\x7fsecheadingbreak\x011985,65302
+\let\paragraphindent=\comment\x7fparagraphindent\x011988,65428
+\def\secheading #1#2#3{\x7fsecheading\x011993,65584
+\def\plainsecheading #1{\x7fplainsecheading\x011994,65640
+\def\secheadingi #1{\x7fsecheadingi\x011995,65683
+\def\subsecheading #1#2#3#4{\x7fsubsecheading\x012006,66051
+\def\subsecheadingi #1{\x7fsubsecheadingi\x012007,66118
+\def\subsubsecfonts{\x7fsubsubsecfonts\x012014,66415
+\def\subsubsecheading #1#2#3#4#5{\x7fsubsubsecheading\x012017,66538
+\def\subsubsecheadingi #1{\x7fsubsubsecheadingi\x012018,66616
+\def\startcontents#1{\x7fstartcontents\x012032,67088
+   \unnumbchapmacro{#1}\def\thischapter{\x7fthischapter\x012040,67361
+\outer\def\contents{\x7fcontents\x012049,67720
+\outer\def\summarycontents{\x7fsummarycontents\x012057,67864
+      \let\chapentry = \shortchapentry\x7fchapentry\x012060,67936
+      \let\unnumbchapentry = \shortunnumberedentry\x7funnumbchapentry\x012061,67975
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7frm\x012064,68098
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7fbf\x012064,68098
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl\x7fsl\x012064,68098
+      \def\secentry ##1##2##3##4{\x7fsecentry\x012067,68235
+      \def\unnumbsecentry ##1##2{\x7funnumbsecentry\x012068,68270
+      \def\subsecentry ##1##2##3##4##5{\x7fsubsecentry\x012069,68305
+      \def\unnumbsubsecentry ##1##2{\x7funnumbsubsecentry\x012070,68346
+      \def\subsubsecentry ##1##2##3##4##5##6{\x7fsubsubsecentry\x012071,68384
+      \def\unnumbsubsubsecentry ##1##2{\x7funnumbsubsubsecentry\x012072,68431
+\let\shortcontents = \summarycontents\x7fshortcontents\x012077,68530
+\def\chapentry#1#2#3{\x7fchapentry\x012085,68865
+\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}\x7fspace\x012085,68865
+\def\shortchapentry#1#2#3{\x7fshortchapentry\x012088,68982
     {#2\labelspace #1}\x7fspace\x012091,69092
-\def\unnumbchapentry#1#2{\x7f\unnumbchapentry\x012094,69146
-\def\shortunnumberedentry#1#2{\x7f\shortunnumberedentry\x012095,69193
-\def\secentry#1#2#3#4{\x7f\secentry\x012102,69357
-\def\unnumbsecentry#1#2{\x7f\unnumbsecentry\x012103,69416
-\def\subsecentry#1#2#3#4#5{\x7f\subsecentry\x012106,69477
-\def\unnumbsubsecentry#1#2{\x7f\unnumbsubsecentry\x012107,69547
-\def\subsubsecentry#1#2#3#4#5#6{\x7f\subsubsecentry\x012110,69621
+\def\unnumbchapentry#1#2{\x7funnumbchapentry\x012094,69146
+\def\shortunnumberedentry#1#2{\x7fshortunnumberedentry\x012095,69193
+\def\secentry#1#2#3#4{\x7fsecentry\x012102,69357
+\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}\x7fspace\x012102,69357
+\def\unnumbsecentry#1#2{\x7funnumbsecentry\x012103,69416
+\def\subsecentry#1#2#3#4#5{\x7fsubsecentry\x012106,69477
+\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}\x7fspace\x012106,69477
+\def\unnumbsubsecentry#1#2{\x7funnumbsubsecentry\x012107,69547
+\def\subsubsecentry#1#2#3#4#5#6{\x7fsubsubsecentry\x012110,69621
   \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}\x7fspace\x012111,69655
-\def\unnumbsubsubsecentry#1#2{\x7f\unnumbsubsubsecentry\x012112,69706
-\def\dochapentry#1#2{\x7f\dochapentry\x012123,70080
-\def\dosecentry#1#2{\x7f\dosecentry\x012138,70685
-\def\dosubsecentry#1#2{\x7f\dosubsecentry\x012145,70863
-\def\dosubsubsecentry#1#2{\x7f\dosubsubsecentry\x012152,71048
-\def\labelspace{\x7f\labelspace\x012160,71299
-\def\dopageno#1{\x7f\dopageno\x012162,71334
-\def\doshortpageno#1{\x7f\doshortpageno\x012163,71360
-\def\chapentryfonts{\x7f\chapentryfonts\x012165,71392
-\def\secentryfonts{\x7f\secentryfonts\x012166,71427
-\def\point{\x7f\point\x012192,72386
-\def\result{\x7f\result\x012194,72407
-\def\expansion{\x7f\expansion\x012195,72480
-\def\print{\x7f\print\x012196,72551
-\def\equiv{\x7f\equiv\x012198,72618
-\def\error{\x7f\error\x012218,73391
-\def\tex{\x7f\tex\x012224,73620
-\def\@{\x7f\@\x012242,74003
-\gdef\sepspaces{\def {\ }}}\x7f\\x012265,74735
-\def\aboveenvbreak{\x7f\aboveenvbreak\x012268,74817
-\def\afterenvbreak{\x7f\afterenvbreak\x012272,74983
-\def\ctl{\x7f\ctl\x012286,75494
-\def\ctr{\x7f\ctr\x012287,75566
-\def\cbl{\x7f\cbl\x012288,75605
-\def\cbr{\x7f\cbr\x012289,75645
-\def\carttop{\x7f\carttop\x012290,75684
-\def\cartbot{\x7f\cartbot\x012293,75792
-\long\def\cartouche{\x7f\cartouche\x012299,75932
-\def\Ecartouche{\x7f\Ecartouche\x012326,76720
-\def\lisp{\x7f\lisp\x012338,76855
-\def\Elisp{\x7f\Elisp\x012348,77202
-\def\next##1{\x7f\next\x012360,77528
-\def\Eexample{\x7f\Eexample\x012364,77570
-\def\Esmallexample{\x7f\Esmallexample\x012367,77617
-\def\smalllispx{\x7f\smalllispx\x012373,77795
-\def\Esmalllisp{\x7f\Esmalllisp\x012383,78149
+\def\unnumbsubsubsecentry#1#2{\x7funnumbsubsubsecentry\x012112,69706
+\def\dochapentry#1#2{\x7fdochapentry\x012123,70080
+\def\dosecentry#1#2{\x7fdosecentry\x012138,70685
+\def\dosubsecentry#1#2{\x7fdosubsecentry\x012145,70863
+\def\dosubsubsecentry#1#2{\x7fdosubsubsecentry\x012152,71048
+\def\labelspace{\x7flabelspace\x012160,71299
+\def\dopageno#1{\x7fdopageno\x012162,71334
+\def\doshortpageno#1{\x7fdoshortpageno\x012163,71360
+\def\chapentryfonts{\x7fchapentryfonts\x012165,71392
+\def\secentryfonts{\x7fsecentryfonts\x012166,71427
+\let\subsecentryfonts = \textfonts\x7fsubsecentryfonts\x012167,71458
+\let\subsubsecentryfonts = \textfonts\x7fsubsubsecentryfonts\x012168,71493
+\let\ptexequiv = \equiv\x7fptexequiv\x012180,71896
+\def\point{\x7fpoint\x012192,72386
+\def\result{\x7fresult\x012194,72407
+\def\expansion{\x7fexpansion\x012195,72480
+\def\print{\x7fprint\x012196,72551
+\def\equiv{\x7fequiv\x012198,72618
+\def\error{\x7ferror\x012218,73391
+\def\tex{\x7ftex\x012224,73620
+\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie\x7f~\x012227,73731
+\let\{=\ptexlbrace\x7f{\x012237,73912
+\let\}=\ptexrbrace\x7f}\x012238,73931
+\let\.=\ptexdot\x7f.\x012239,73950
+\let\*=\ptexstar\x7f*\x012240,73966
+\let\dots=\ptexdots\x7fdots\x012241,73983
+\def\@{\x7f@\x012242,74003
+\let\bullet=\ptexbullet\x7fbullet\x012243,74014
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fb\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fc\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fi\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7ft\x012244,74038
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl\x7fl\x012244,74038
+\let\L=\ptexL\x7fL\x012245,74108
+\let\Etex=\endgroup}\x7fEtex\x012247,74124
+\gdef\lisppar{\x7flisppar\x012259,74517
+\gdef\sepspaces{\x7fsepspaces\x012265,74735
+\def\aboveenvbreak{\x7faboveenvbreak\x012268,74817
+\def\afterenvbreak{\x7fafterenvbreak\x012272,74983
+\let\nonarrowing=\relax\x7fnonarrowing\x012276,75176
+\def\ctl{\x7fctl\x012286,75494
+\def\ctr{\x7fctr\x012287,75566
+\def\cbl{\x7fcbl\x012288,75605
+\def\cbr{\x7fcbr\x012289,75645
+\def\carttop{\x7fcarttop\x012290,75684
+\def\cartbot{\x7fcartbot\x012293,75792
+\long\def\cartouche{\x7fcartouche\x012299,75932
+	\let\nonarrowing=\comment\x7fnonarrowing\x012311,76404
+\def\Ecartouche{\x7fEcartouche\x012326,76720
+\def\lisp{\x7flisp\x012338,76855
+\let\par=\lisppar\x7fpar\x012347,77184
+\def\Elisp{\x7fElisp\x012348,77202
+\let\exdent=\nofillexdent\x7fexdent\x012355,77418
+\let\nonarrowing=\relax\x7fnonarrowing\x012356,77444
+\def\next##1{\x7fnext\x012360,77528
+\let\example=\lisp\x7fexample\x012363,77551
+\def\Eexample{\x7fEexample\x012364,77570
+\let\smallexample=\lisp\x7fsmallexample\x012366,77593
+\def\Esmallexample{\x7fEsmallexample\x012367,77617
+\def\smalllispx{\x7fsmalllispx\x012373,77795
+\let\par=\lisppar\x7fpar\x012382,78131
+\def\Esmalllisp{\x7fEsmalllisp\x012383,78149
+\let\exdent=\nofillexdent\x7fexdent\x012392,78436
+\let\nonarrowing=\relax\x7fnonarrowing\x012393,78462
 \obeyspaces \obeylines \ninett \indexfonts \rawbackslash\x7ffonts\x012396,78505
-\def\next##1{\x7f\next\x012397,78562
-\def\display{\x7f\display\x012401,78642
-\def\Edisplay{\x7f\Edisplay\x012410,78961
-\def\next##1{\x7f\next\x012422,79272
-\def\format{\x7f\format\x012426,79375
-\def\Eformat{\x7f\Eformat\x012434,79671
-\def\next##1{\x7f\next\x012437,79760
-\def\flushleft{\x7f\flushleft\x012441,79812
-\def\Eflushleft{\x7f\Eflushleft\x012451,80183
-\def\next##1{\x7f\next\x012454,80276
-\def\flushright{\x7f\flushright\x012456,80298
-\def\Eflushright{\x7f\Eflushright\x012466,80670
-\def\next##1{\x7f\next\x012470,80801
-\def\quotation{\x7f\quotation\x012474,80859
-\def\Equotation{\x7f\Equotation\x012480,81051
-\def\setdeffont #1 {\x7f\setdeffont\x012493,81449
+\def\next##1{\x7fnext\x012397,78562
+\def\display{\x7fdisplay\x012401,78642
+\let\par=\lisppar\x7fpar\x012409,78943
+\def\Edisplay{\x7fEdisplay\x012410,78961
+\let\exdent=\nofillexdent\x7fexdent\x012417,79180
+\let\nonarrowing=\relax\x7fnonarrowing\x012418,79206
+\def\next##1{\x7fnext\x012422,79272
+\def\format{\x7fformat\x012426,79375
+\let\par=\lisppar\x7fpar\x012433,79653
+\def\Eformat{\x7fEformat\x012434,79671
+\def\next##1{\x7fnext\x012437,79760
+\def\flushleft{\x7fflushleft\x012441,79812
+\let\par=\lisppar\x7fpar\x012450,80165
+\def\Eflushleft{\x7fEflushleft\x012451,80183
+\def\next##1{\x7fnext\x012454,80276
+\def\flushright{\x7fflushright\x012456,80298
+\let\par=\lisppar\x7fpar\x012465,80652
+\def\Eflushright{\x7fEflushright\x012466,80670
+\def\next##1{\x7fnext\x012470,80801
+\def\quotation{\x7fquotation\x012474,80859
+\def\Equotation{\x7fEquotation\x012480,81051
+\let\nonarrowing=\relax\x7fnonarrowing\x012487,81301
+\def\setdeffont #1 {\x7fsetdeffont\x012493,81449
+\newskip\defbodyindent \defbodyindent=.4in\x7fbodyindent\x012495,81495
 \newskip\defbodyindent \defbodyindent=.4in\x7fbodyindent\x012495,81495
 \newskip\defargsindent \defargsindent=50pt\x7fargsindent\x012496,81538
+\newskip\defargsindent \defargsindent=50pt\x7fargsindent\x012496,81538
 \newskip\deftypemargin \deftypemargin=12pt\x7ftypemargin\x012497,81581
+\newskip\deftypemargin \deftypemargin=12pt\x7ftypemargin\x012497,81581
+\newskip\deflastargmargin \deflastargmargin=18pt\x7flastargmargin\x012498,81624
 \newskip\deflastargmargin \deflastargmargin=18pt\x7flastargmargin\x012498,81624
-\def\activeparens{\x7f\activeparens\x012503,81822
-\def\opnr{\x7f\opnr\x012529,83034
-\def\lbrb{\x7f\lbrb\x012530,83099
-\def\defname #1#2{\x7f\defname\x012536,83300
+\def\activeparens{\x7factiveparens\x012503,81822
+\gdef\functionparens{\x7ffunctionparens\x012507,82016
+\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }\x7f&\x012507,82016
+\gdef\boldbrax{\x7fboldbrax\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f(\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f)\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f[\x012508,82074
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}\x7f]\x012508,82074
+\gdef\oprm#1 {\x7foprm\x012512,82250
+\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %\x7f(\x012512,82250
+\gdef\opnested{\x7fopnested\x012516,82407
+\gdef\clrm{\x7fclrm\x012518,82466
+\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi\x7f(\x012520,82602
+\gdef\amprm#1 {\x7famprm\x012523,82769
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }\x7f(\x012523,82769
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }\x7f)\x012523,82769
+\gdef\normalparens{\x7fnormalparens\x012525,82822
+\gdef\normalparens{\boldbrax\let&=\ampnr}\x7f&\x012525,82822
+\def\opnr{\x7fopnr\x012529,83034
+\def\opnr{{\sf\char`\(}} \def\clnr{\x7fclnr\x012529,83034
+\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\x7fampnr\x012529,83034
+\def\lbrb{\x7flbrb\x012530,83099
+\def\lbrb{{\bf\char`\[}} \def\rbrb{\x7frbrb\x012530,83099
+\def\defname #1#2{\x7fdefname\x012536,83300
 \advance\dimen2 by -\defbodyindent\x7fbodyindent\x012540,83418
 \advance\dimen3 by -\defbodyindent\x7fbodyindent\x012542,83472
 \setbox0=\hbox{\hskip \deflastargmargin{\x7flastargmargin\x012544,83526
+\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}\x7ftypemargin\x012544,83526
 \dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations\x7fargsindent\x012546,83668
 \parshape 2 0in \dimen0 \defargsindent \dimen1     %\x7fargsindent\x012547,83743
 \rlap{\rightline{{\rm #2}\hskip \deftypemargin}\x7ftypemargin\x012554,84112
 \advance\leftskip by -\defbodyindent\x7fbodyindent\x012557,84246
 \exdentamount=\defbodyindent\x7fbodyindent\x012558,84283
-\def\defparsebody #1#2#3{\x7f\defparsebody\x012568,84642
-\def#1{\x7f2572,84826
-\def#2{\x7f2573,84862
+\def\defparsebody #1#2#3{\x7fdefparsebody\x012568,84642
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012575,84934
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012575,84934
 \exdentamount=\defbodyindent\x7fbodyindent\x012576,85008
-\def\defmethparsebody #1#2#3#4 {\x7f\defmethparsebody\x012581,85112
-\def#1{\x7f2585,85273
-\def#2##1 {\x7f2586,85309
+\def\defmethparsebody #1#2#3#4 {\x7fdefmethparsebody\x012581,85112
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012588,85392
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012588,85392
 \exdentamount=\defbodyindent\x7fbodyindent\x012589,85466
-\def\defopparsebody #1#2#3#4#5 {\x7f\defopparsebody\x012592,85551
-\def#1{\x7f2596,85712
-\def#2##1 ##2 {\x7f2597,85748
+\def\defopparsebody #1#2#3#4#5 {\x7fdefopparsebody\x012592,85551
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012600,85848
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012600,85848
 \exdentamount=\defbodyindent\x7fbodyindent\x012601,85922
-\def\defvarparsebody #1#2#3{\x7f\defvarparsebody\x012608,86193
-\def#1{\x7f2612,86380
-\def#2{\x7f2613,86416
+\def\defvarparsebody #1#2#3{\x7fdefvarparsebody\x012608,86193
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012615,86475
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012615,86475
 \exdentamount=\defbodyindent\x7fbodyindent\x012616,86549
-\def\defvrparsebody #1#2#3#4 {\x7f\defvrparsebody\x012621,86640
-\def#1{\x7f2625,86799
-\def#2##1 {\x7f2626,86835
+\def\defvrparsebody #1#2#3#4 {\x7fdefvrparsebody\x012621,86640
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012628,86905
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012628,86905
 \exdentamount=\defbodyindent\x7fbodyindent\x012629,86979
-\def\defopvarparsebody #1#2#3#4#5 {\x7f\defopvarparsebody\x012632,87051
-\def#1{\x7f2636,87215
-\def#2##1 ##2 {\x7f2637,87251
+\def\defopvarparsebody #1#2#3#4#5 {\x7fdefopvarparsebody\x012632,87051
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012640,87338
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent\x7fbodyindent\x012640,87338
 \exdentamount=\defbodyindent\x7fbodyindent\x012641,87412
-\def\defunargs #1{\x7f\defunargs\x012664,88172
-\def\deftypefunargs #1{\x7f\deftypefunargs\x012676,88554
-\def\deffn{\x7f\deffn\x012690,88936
-\def\deffnheader #1#2#3{\x7f\deffnheader\x012692,88993
+\gdef\spacesplit#1#2^^M{\x7fspacesplit\x012652,87775
+\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{\x7fspacesplitfoo\x012653,87852
+\def\defunargs #1{\x7fdefunargs\x012664,88172
+\def\deftypefunargs #1{\x7fdeftypefunargs\x012676,88554
+\def\deffn{\x7fdeffn\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7fmethparsebody\Edeffn\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7ffnx\deffnheader\x012690,88936
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}\x7ffnheader\x012690,88936
+\def\deffnheader #1#2#3{\x7fdeffnheader\x012692,88993
 \begingroup\defname {\x7fname\x012693,89041
-\def\defun{\x7f\defun\x012699,89186
-\def\defunheader #1#2{\x7f\defunheader\x012701,89239
+\begingroup\defname {#2}{#1}\defunargs{\x7funargs\x012693,89041
+\def\defun{\x7fdefun\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7fparsebody\Edefun\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7funx\defunheader\x012699,89186
+\def\defun{\defparsebody\Edefun\defunx\defunheader}\x7funheader\x012699,89186
+\def\defunheader #1#2{\x7fdefunheader\x012701,89239
 \begingroup\defname {\x7fname\x012702,89314
 \defunargs {\x7funargs\x012703,89350
-\def\deftypefun{\x7f\deftypefun\x012709,89498
-\def\deftypefunheader #1#2{\x7f\deftypefunheader\x012712,89620
-\def\deftypefunheaderx #1#2 #3\relax{\x7f\deftypefunheaderx\x012714,89729
+\def\deftypefun{\x7fdeftypefun\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7fparsebody\Edeftypefun\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7ftypefunx\deftypefunheader\x012709,89498
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}\x7ftypefunheader\x012709,89498
+\def\deftypefunheader #1#2{\x7fdeftypefunheader\x012712,89620
+\def\deftypefunheader #1#2{\deftypefunheaderx{\x7ftypefunheaderx\x012712,89620
+\def\deftypefunheaderx #1#2 #3\relax{\x7fdeftypefunheaderx\x012714,89729
 \begingroup\defname {\x7fname\x012716,89821
 \deftypefunargs {\x7ftypefunargs\x012717,89867
-\def\deftypefn{\x7f\deftypefn\x012723,90038
-\def\deftypefnheader #1#2#3{\x7f\deftypefnheader\x012726,90187
-\def\deftypefnheaderx #1#2#3 #4\relax{\x7f\deftypefnheaderx\x012728,90323
+\def\deftypefn{\x7fdeftypefn\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7fmethparsebody\Edeftypefn\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7ftypefnx\deftypefnheader\x012723,90038
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}\x7ftypefnheader\x012723,90038
+\def\deftypefnheader #1#2#3{\x7fdeftypefnheader\x012726,90187
+\def\deftypefnheader #1#2#3{\deftypefnheaderx{\x7ftypefnheaderx\x012726,90187
+\def\deftypefnheaderx #1#2#3 #4\relax{\x7fdeftypefnheaderx\x012728,90323
 \begingroup\defname {\x7fname\x012730,90416
 \deftypefunargs {\x7ftypefunargs\x012731,90456
-\def\defmac{\x7f\defmac\x012737,90577
-\def\defmacheader #1#2{\x7f\defmacheader\x012739,90634
+\def\defmac{\x7fdefmac\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fparsebody\Edefmac\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fmacx\defmacheader\x012737,90577
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}\x7fmacheader\x012737,90577
+\def\defmacheader #1#2{\x7fdefmacheader\x012739,90634
 \begingroup\defname {\x7fname\x012740,90710
 \defunargs {\x7funargs\x012741,90743
-\def\defspec{\x7f\defspec\x012747,90867
-\def\defspecheader #1#2{\x7f\defspecheader\x012749,90928
+\def\defspec{\x7fdefspec\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fparsebody\Edefspec\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fspecx\defspecheader\x012747,90867
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}\x7fspecheader\x012747,90867
+\def\defspecheader #1#2{\x7fdefspecheader\x012749,90928
 \begingroup\defname {\x7fname\x012750,91005
 \defunargs {\x7funargs\x012751,91045
-\def\deffnx #1 {\x7f\deffnx\x012758,91240
-\def\defunx #1 {\x7f\defunx\x012759,91297
-\def\defmacx #1 {\x7f\defmacx\x012760,91354
-\def\defspecx #1 {\x7f\defspecx\x012761,91413
-\def\deftypefnx #1 {\x7f\deftypefnx\x012762,91474
-\def\deftypeunx #1 {\x7f\deftypeunx\x012763,91539
-\def\defop #1 {\x7f\defop\x012769,91685
-\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopparsebody\Edefop\defopx\defopheader\defoptype\x012770,91720
-\def\defopheader #1#2#3{\x7f\defopheader\x012772,91774
+\def\deffnx #1 {\x7fdeffnx\x012758,91240
+\def\defunx #1 {\x7fdefunx\x012759,91297
+\def\defmacx #1 {\x7fdefmacx\x012760,91354
+\def\defspecx #1 {\x7fdefspecx\x012761,91413
+\def\deftypefnx #1 {\x7fdeftypefnx\x012762,91474
+\def\deftypeunx #1 {\x7fdeftypeunx\x012763,91539
+\def\defop #1 {\x7fdefop\x012769,91685
+\def\defop #1 {\def\defoptype{\x7fdefoptype\x012769,91685
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopparsebody\Edefop\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopx\defopheader\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7fopheader\defoptype\x012770,91720
+\defopparsebody\Edefop\defopx\defopheader\defoptype}\x7foptype\x012770,91720
+\def\defopheader #1#2#3{\x7fdefopheader\x012772,91774
 \begingroup\defname {\x7fname\x012774,91863
+\begingroup\defname {#2}{\defoptype{\x7foptype\x012774,91863
 \defunargs {\x7funargs\x012775,91909
-\def\defmethod{\x7f\defmethod\x012780,91970
-\def\defmethodheader #1#2#3{\x7f\defmethodheader\x012782,92043
+\def\defmethod{\x7fdefmethod\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethparsebody\Edefmethod\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethodx\defmethodheader\x012780,91970
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}\x7fmethodheader\x012780,91970
+\def\defmethodheader #1#2#3{\x7fdefmethodheader\x012782,92043
 \begingroup\defname {\x7fname\x012784,92131
 \defunargs {\x7funargs\x012785,92171
-\def\defcv #1 {\x7f\defcv\x012790,92245
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype\x012791,92280
-\def\defcvarheader #1#2#3{\x7f\defcvarheader\x012793,92339
+\def\defcv #1 {\x7fdefcv\x012790,92245
+\def\defcv #1 {\def\defcvtype{\x7fdefcvtype\x012790,92245
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fopvarparsebody\Edefcv\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvx\defcvarheader\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvarheader\defcvtype\x012791,92280
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}\x7fcvtype\x012791,92280
+\def\defcvarheader #1#2#3{\x7fdefcvarheader\x012793,92339
 \begingroup\defname {\x7fname\x012795,92425
+\begingroup\defname {#2}{\defcvtype{\x7fcvtype\x012795,92425
 \defvarargs {\x7fvarargs\x012796,92471
-\def\defivar{\x7f\defivar\x012801,92544
-\def\defivarheader #1#2#3{\x7f\defivarheader\x012803,92607
+\def\defivar{\x7fdefivar\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fvrparsebody\Edefivar\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fivarx\defivarheader\x012801,92544
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}\x7fivarheader\x012801,92544
+\def\defivarheader #1#2#3{\x7fdefivarheader\x012803,92607
 \begingroup\defname {\x7fname\x012805,92693
 \defvarargs {\x7fvarargs\x012806,92744
-\def\defopx #1 {\x7f\defopx\x012812,92893
-\def\defmethodx #1 {\x7f\defmethodx\x012813,92950
-\def\defcvx #1 {\x7f\defcvx\x012814,93015
-\def\defivarx #1 {\x7f\defivarx\x012815,93072
-\def\defvarargs #1{\x7f\defvarargs\x012822,93343
-\def\defvr{\x7f\defvr\x012828,93487
-\def\defvrheader #1#2#3{\x7f\defvrheader\x012830,93542
+\def\defopx #1 {\x7fdefopx\x012812,92893
+\def\defmethodx #1 {\x7fdefmethodx\x012813,92950
+\def\defcvx #1 {\x7fdefcvx\x012814,93015
+\def\defivarx #1 {\x7fdefivarx\x012815,93072
+\def\defvarargs #1{\x7fdefvarargs\x012822,93343
+\def\defvr{\x7fdefvr\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrparsebody\Edefvr\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrx\defvrheader\x012828,93487
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}\x7fvrheader\x012828,93487
+\def\defvrheader #1#2#3{\x7fdefvrheader\x012830,93542
 \begingroup\defname {\x7fname\x012831,93590
-\def\defvar{\x7f\defvar\x012835,93675
-\def\defvarheader #1#2{\x7f\defvarheader\x012837,93735
+\begingroup\defname {#2}{#1}\defvarargs{\x7fvarargs\x012831,93590
+\def\defvar{\x7fdefvar\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarparsebody\Edefvar\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarx\defvarheader\x012835,93675
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}\x7fvarheader\x012835,93675
+\def\defvarheader #1#2{\x7fdefvarheader\x012837,93735
 \begingroup\defname {\x7fname\x012838,93806
 \defvarargs {\x7fvarargs\x012839,93842
-\def\defopt{\x7f\defopt\x012844,93908
-\def\defoptheader #1#2{\x7f\defoptheader\x012846,93968
+\def\defopt{\x7fdefopt\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7fvarparsebody\Edefopt\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7foptx\defoptheader\x012844,93908
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}\x7foptheader\x012844,93908
+\def\defoptheader #1#2{\x7fdefoptheader\x012846,93968
 \begingroup\defname {\x7fname\x012847,94039
 \defvarargs {\x7fvarargs\x012848,94078
-\def\deftypevar{\x7f\deftypevar\x012853,94135
-\def\deftypevarheader #1#2{\x7f\deftypevarheader\x012856,94251
+\def\deftypevar{\x7fdeftypevar\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7fvarparsebody\Edeftypevar\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7ftypevarx\deftypevarheader\x012853,94135
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}\x7ftypevarheader\x012853,94135
+\def\deftypevarheader #1#2{\x7fdeftypevarheader\x012856,94251
 \begingroup\defname {\x7fname\x012858,94334
-\def\deftypevr{\x7f\deftypevr\x012865,94508
-\def\deftypevrheader #1#2#3{\x7f\deftypevrheader\x012867,94579
+\def\deftypevr{\x7fdeftypevr\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7fvrparsebody\Edeftypevr\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7ftypevrx\deftypevrheader\x012865,94508
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}\x7ftypevrheader\x012865,94508
+\def\deftypevrheader #1#2#3{\x7fdeftypevrheader\x012867,94579
 \begingroup\defname {\x7fname\x012868,94631
-\def\defvrx #1 {\x7f\defvrx\x012876,94868
-\def\defvarx #1 {\x7f\defvarx\x012877,94925
-\def\defoptx #1 {\x7f\defoptx\x012878,94984
-\def\deftypevarx #1 {\x7f\deftypevarx\x012879,95043
-\def\deftypevrx #1 {\x7f\deftypevrx\x012880,95110
-\def\deftpargs #1{\x7f\deftpargs\x012885,95259
-\def\deftp{\x7f\deftp\x012889,95339
-\def\deftpheader #1#2#3{\x7f\deftpheader\x012891,95394
+\def\defvrx #1 {\x7fdefvrx\x012876,94868
+\def\defvarx #1 {\x7fdefvarx\x012877,94925
+\def\defoptx #1 {\x7fdefoptx\x012878,94984
+\def\deftypevarx #1 {\x7fdeftypevarx\x012879,95043
+\def\deftypevrx #1 {\x7fdeftypevrx\x012880,95110
+\def\deftpargs #1{\x7fdeftpargs\x012885,95259
+\def\deftpargs #1{\bf \defvarargs{\x7fvarargs\x012885,95259
+\def\deftp{\x7fdeftp\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7fvrparsebody\Edeftp\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7ftpx\deftpheader\x012889,95339
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}\x7ftpheader\x012889,95339
+\def\deftpheader #1#2#3{\x7fdeftpheader\x012891,95394
 \begingroup\defname {\x7fname\x012892,95442
-\def\deftpx #1 {\x7f\deftpx\x012897,95601
-\def\setref#1{\x7f\setref\x012908,95922
-\def\unnumbsetref#1{\x7f\unnumbsetref\x012913,96036
-\def\appendixsetref#1{\x7f\appendixsetref\x012918,96143
-\def\pxref#1{\x7f\pxref\x012929,96554
-\def\xref#1{\x7f\xref\x012930,96590
-\def\ref#1{\x7f\ref\x012931,96625
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\x7f\xrefX[\x012932,96655
-\def\printedmanual{\x7f\printedmanual\x012933,96698
-\def\printednodename{\x7f\printednodename\x012934,96736
-\def\printednodename{\x7f\printednodename\x012939,96861
-section ``\printednodename'' in \cite{\printedmanual}\x7f\printedmanual\x012954,97493
+\begingroup\defname {#2}{#1}\deftpargs{\x7ftpargs\x012892,95442
+\def\deftpx #1 {\x7fdeftpx\x012897,95601
+\def\setref#1{\x7fsetref\x012908,95922
+\def\unnumbsetref#1{\x7funnumbsetref\x012913,96036
+\def\appendixsetref#1{\x7fappendixsetref\x012918,96143
+\def\pxref#1{\x7fpxref\x012929,96554
+\def\xref#1{\x7fxref\x012930,96590
+\def\ref#1{\x7fref\x012931,96625
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\x7fxrefX\x012932,96655
+\def\printedmanual{\x7fprintedmanual\x012933,96698
+\def\printednodename{\x7fprintednodename\x012934,96736
+\def\printednodename{\x7fprintednodename\x012939,96861
+section ``\printednodename'' in \cite{\printedmanual}\x7fprintedmanual\x012954,97493
 \refx{\x7fx\x012957,97571
-\def\dosetq #1#2{\x7f\dosetq\x012965,97791
-\def\internalsetq #1#2{\x7f\internalsetq\x012973,98049
-\def\Ypagenumber{\x7f\Ypagenumber\x012977,98150
-\def\Ytitle{\x7f\Ytitle\x012979,98176
-\def\Ynothing{\x7f\Ynothing\x012981,98203
-\def\Ysectionnumberandtype{\x7f\Ysectionnumberandtype\x012983,98220
-\def\Yappendixletterandtype{\x7f\Yappendixletterandtype\x012992,98536
+\refx{#1-snt}{} [\printednodename], page\tie\refx{\x7fx\x012957,97571
+\def\dosetq #1#2{\x7fdosetq\x012965,97791
+\def\dosetq #1#2{{\let\folio=0 \turnoffactive%\x7ffolio\x012965,97791
+\edef\next{\x7fnext\x012966,97838
+\def\internalsetq #1#2{\x7finternalsetq\x012973,98049
+\def\Ypagenumber{\x7fYpagenumber\x012977,98150
+\def\Ytitle{\x7fYtitle\x012979,98176
+\def\Ynothing{\x7fYnothing\x012981,98203
+\def\Ysectionnumberandtype{\x7fYsectionnumberandtype\x012983,98220
+\def\Yappendixletterandtype{\x7fYappendixletterandtype\x012992,98536
 \ifnum\secno=0 Appendix\xreftie'char\the\appendixno{\x7fno\x012993,98566
-\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno %\x7fno.\the\secno\x012994,98621
-Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno %\x7fno.\the\secno.\the\subsecno\x012996,98725
-Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\x7fno.\the\secno.\the\subsecno.\the\subsubsecno\x012998,98796
-  \def\linenumber{\x7f\linenumber\x013009,99135
-\def\refx#1#2{\x7f\refx\x013015,99319
-\def\xrdef #1#2{\x7f\xrdef\x013037,99945
-\def\readauxfile{\x7f\readauxfile\x013040,100030
-\def\supereject{\x7f\supereject\x013110,101811
-\footstrut\parindent=\defaultparindent\hang\textindent{\x7faultparindent\hang\textindent\x013131,102496
-\def\openindices{\x7f\openindices\x013139,102682
+\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno %\x7fno.\the\x012994,98621
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno %\x7fno.\the\x012996,98725
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\x7fno.\the\x012998,98796
+\gdef\xreftie{\x7fxreftie\x013001,98891
+  \let\linenumber = \empty % Non-3.0.\x7flinenumber\x013007,99091
+  \def\linenumber{\x7flinenumber\x013009,99135
+\def\refx#1#2{\x7frefx\x013015,99319
+\def\xrdef #1#2{\x7fxrdef\x013037,99945
+{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {\x7fcsname\x013038,99962
+\def\readauxfile{\x7freadauxfile\x013040,100030
+\def\supereject{\x7fsupereject\x013110,101811
+\let\footnotestyle=\comment\x7ffootnotestyle\x013113,101918
+\let\ptexfootnote=\footnote\x7fptexfootnote\x013115,101947
+\long\gdef\footnote #1{\x7ffootnote\x013118,101993
+\edef\thisfootno{\x7fthisfootno\x013120,102060
+\let\@sf\empty\x7f@sf\x013121,102100
+\ifhmode\edef\@sf{\x7f@sf\x013122,102115
+\long\gdef\footnotezzz #1{\x7ffootnotezzz\x013126,102228
+\footstrut\parindent=\defaultparindent\hang\textindent{\x7faultparindent\hang\x013131,102496
+\def\openindices{\x7fopenindices\x013139,102682
+\newdimen\defaultparindent \defaultparindent = 15pt\x7faultparindent\x013151,102907
 \newdimen\defaultparindent \defaultparindent = 15pt\x7faultparindent\x013151,102907
 \parindent = \defaultparindent\x7faultparindent\x013152,102959
-\def\smallbook{\x7f\smallbook\x013175,103683
-\global\def\Esmallexample{\x7f\Esmallexample\x013192,104110
-\def\afourpaper{\x7f\afourpaper\x013196,104201
-\def\finalout{\x7f\finalout\x013224,105009
-\def\normaldoublequote{\x7f\normaldoublequote\x013235,105270
-\def\normaltilde{\x7f\normaltilde\x013236,105296
-\def\normalcaret{\x7f\normalcaret\x013237,105316
-\def\normalunderscore{\x7f\normalunderscore\x013238,105336
-\def\normalverticalbar{\x7f\normalverticalbar\x013239,105361
-\def\normalless{\x7f\normalless\x013240,105387
-\def\normalgreater{\x7f\normalgreater\x013241,105406
-\def\normalplus{\x7f\normalplus\x013242,105428
-\def\ifusingtt#1#2{\x7f\ifusingtt\x013253,105920
-\def\activedoublequote{\x7f\activedoublequote\x013261,106248
+\def\smallbook{\x7fsmallbook\x013175,103683
+\global\let\smalllisp=\smalllispx\x7fsmalllisp\x013190,104039
+\global\let\smallexample=\smalllispx\x7fsmallexample\x013191,104073
+\global\def\Esmallexample{\x7fEsmallexample\x013192,104110
+\def\afourpaper{\x7fafourpaper\x013196,104201
+\def\finalout{\x7ffinalout\x013224,105009
+\def\normaldoublequote{\x7fnormaldoublequote\x013235,105270
+\def\normaltilde{\x7fnormaltilde\x013236,105296
+\def\normalcaret{\x7fnormalcaret\x013237,105316
+\def\normalunderscore{\x7fnormalunderscore\x013238,105336
+\def\normalverticalbar{\x7fnormalverticalbar\x013239,105361
+\def\normalless{\x7fnormalless\x013240,105387
+\def\normalgreater{\x7fnormalgreater\x013241,105406
+\def\normalplus{\x7fnormalplus\x013242,105428
+\def\ifusingtt#1#2{\x7fifusingtt\x013253,105920
+\def\activedoublequote{\x7factivedoublequote\x013261,106248
+\let"=\activedoublequote\x7f"\x013262,106289
 \def~{\x7f~\x013264,106334
 \def^{\x7f^\x013267,106395
 \def_{\x7f_\x013270,106434
-\def\_{\x7f\_\x013272,106508
-\def\lvvmode{\x7f\lvvmode\x013279,106845
+\def\_{\x7f_\x013272,106508
+\def\lvvmode{\x7flvvmode\x013279,106845
 \def|{\x7f|\x013282,106895
 \def<{\x7f<\x013285,106958
 \def>{\x7f>\x013288,107015
 \def+{\x7f+\x013290,107053
-\def\turnoffactive{\x7f\turnoffactive\x013296,107214
+\def\turnoffactive{\x7fturnoffactive\x013296,107214
+\def\turnoffactive{\let"=\normaldoublequote\x7f"\x013296,107214
+\let~=\normaltilde\x7f~\x013297,107258
+\let^=\normalcaret\x7f^\x013298,107277
+\let_=\normalunderscore\x7f_\x013299,107296
+\let|=\normalverticalbar\x7f|\x013300,107320
+\let<=\normalless\x7f<\x013301,107345
+\let>=\normalgreater\x7f>\x013302,107363
+\let+=\normalplus}\x7f+\x013303,107384
 \global\def={\x7f=\x013307,107500
-\def\normalbackslash{\x7f\normalbackslash\x013321,107882
+\def\normalbackslash{\x7fnormalbackslash\x013321,107882
 \f
 merc-src/accumulator.m,4915
 :- interface\x7f146,5371
-- 
2.39.4


^ permalink raw reply related	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-06-10 13:29                                                                     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-07-27 15:39                                                                       ` Arash Esbati
  2024-07-28 23:57                                                                         ` Dmitry Gutov
  0 siblings, 1 reply; 106+ messages in thread
From: Arash Esbati @ 2024-07-27 15:39 UTC (permalink / raw)
  To: 53749; +Cc: ikumi, dgutov, dfussner, stefankangas, tsdh, eliz, monnier

David Fussner via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org> writes:

> Hi Dmitry, Stefan M and Stefan K,
>
> Here's the latest patch, with most of the modifications requested by
> Stefan K. The code populating `semantic-symref-filepattern-alist` I've
> left in tex-mode.el, because I wasn't sure how to adjudicate the
> differing opinions on where it should go. Moving it won't take any
> time, should that be the verdict. I've had a stab at a NEWS entry, and
> included the patches to the manual etags test files. The diffs for the
> test files are large, since we remove the TeX escape char from any tag
> names where it occurs, as discussed elsewhere on this thread.
>
> Please let me know if more changes are needed.

Ping!  Gents, is it possible to give David your comments?  There was
some effort behind this, maybe it's time to bring this to an end.  TIA.

Best, Arash





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-07-27 15:39                                                                       ` Arash Esbati
@ 2024-07-28 23:57                                                                         ` Dmitry Gutov
  2024-07-29 10:31                                                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-09-14 13:43                                                                           ` Stefan Kangas
  0 siblings, 2 replies; 106+ messages in thread
From: Dmitry Gutov @ 2024-07-28 23:57 UTC (permalink / raw)
  To: Arash Esbati, 53749; +Cc: ikumi, dfussner, monnier, tsdh, eliz, stefankangas

On 27/07/2024 18:39, Arash Esbati wrote:
> David Fussner via "Bug reports for GNU Emacs, the Swiss army knife of text editors"<bug-gnu-emacs@gnu.org>  writes:
> 
>> Hi Dmitry, Stefan M and Stefan K,
>>
>> Here's the latest patch, with most of the modifications requested by
>> Stefan K. The code populating `semantic-symref-filepattern-alist` I've
>> left in tex-mode.el, because I wasn't sure how to adjudicate the
>> differing opinions on where it should go. Moving it won't take any
>> time, should that be the verdict. I've had a stab at a NEWS entry, and
>> included the patches to the manual etags test files. The diffs for the
>> test files are large, since we remove the TeX escape char from any tag
>> names where it occurs, as discussed elsewhere on this thread.
>>
>> Please let me know if more changes are needed.
> Ping!  Gents, is it possible to give David your comments?  There was
> some effort behind this, maybe it's time to bring this to an end.  TIA.

It's good enough from my side, but I hope someone else could comment as 
well.

Additionally though, it might or might not be too big a change for Emacs 
30 (I'm not sure), and if we're talking about 31 only, then it could 
wait a little more for the review.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-07-28 23:57                                                                         ` Dmitry Gutov
@ 2024-07-29 10:31                                                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-09-14 13:43                                                                           ` Stefan Kangas
  1 sibling, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-07-29 10:31 UTC (permalink / raw)
  To: Dmitry Gutov
  Cc: 53749, ikumi, Arash Esbati, stefankangas, tsdh, eliz, monnier

Hi Dmitry and Arash,

> Additionally though, it might or might not be too big a change for Emacs
> 30 (I'm not sure), and if we're talking about 31 only, then it could
> wait a little more for the review.

Good point -- I'm OK either way. Getting it tested, even lightly, on
master for a while might make sense for a patch of its size, but
others will have a better sense of it.

Best, David.

On Mon, 29 Jul 2024 at 00:58, Dmitry Gutov <dgutov@yandex.ru> wrote:
>
> On 27/07/2024 18:39, Arash Esbati wrote:
> > David Fussner via "Bug reports for GNU Emacs, the Swiss army knife of text editors"<bug-gnu-emacs@gnu.org>  writes:
> >
> >> Hi Dmitry, Stefan M and Stefan K,
> >>
> >> Here's the latest patch, with most of the modifications requested by
> >> Stefan K. The code populating `semantic-symref-filepattern-alist` I've
> >> left in tex-mode.el, because I wasn't sure how to adjudicate the
> >> differing opinions on where it should go. Moving it won't take any
> >> time, should that be the verdict. I've had a stab at a NEWS entry, and
> >> included the patches to the manual etags test files. The diffs for the
> >> test files are large, since we remove the TeX escape char from any tag
> >> names where it occurs, as discussed elsewhere on this thread.
> >>
> >> Please let me know if more changes are needed.
> > Ping!  Gents, is it possible to give David your comments?  There was
> > some effort behind this, maybe it's time to bring this to an end.  TIA.
>
> It's good enough from my side, but I hope someone else could comment as
> well.
>
> Additionally though, it might or might not be too big a change for Emacs
> 30 (I'm not sure), and if we're talking about 31 only, then it could
> wait a little more for the review.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-07-28 23:57                                                                         ` Dmitry Gutov
  2024-07-29 10:31                                                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-09-14 13:43                                                                           ` Stefan Kangas
  2024-09-14 14:06                                                                             ` Eli Zaretskii
  1 sibling, 1 reply; 106+ messages in thread
From: Stefan Kangas @ 2024-09-14 13:43 UTC (permalink / raw)
  To: Dmitry Gutov, Arash Esbati, 53749; +Cc: ikumi, eliz, monnier, dfussner, tsdh

Dmitry Gutov <dgutov@yandex.ru> writes:

> It's good enough from my side, but I hope someone else could comment as
> well.
>
> Additionally though, it might or might not be too big a change for Emacs
> 30 (I'm not sure), and if we're talking about 31 only, then it could
> wait a little more for the review.

Are we happy to install this now, or are we still waiting for more
comments?





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-09-14 13:43                                                                           ` Stefan Kangas
@ 2024-09-14 14:06                                                                             ` Eli Zaretskii
  2024-09-14 15:02                                                                               ` Dmitry Gutov
  2024-09-14 15:08                                                                               ` Stefan Kangas
  0 siblings, 2 replies; 106+ messages in thread
From: Eli Zaretskii @ 2024-09-14 14:06 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: 53749, ikumi, dgutov, dfussner, arash, monnier, tsdh

> From: Stefan Kangas <stefankangas@gmail.com>
> Date: Sat, 14 Sep 2024 06:43:01 -0700
> Cc: ikumi@ikumi.que.jp, dfussner@googlemail.com, tsdh@gnu.org, eliz@gnu.org, 
> 	monnier@iro.umontreal.ca
> 
> Dmitry Gutov <dgutov@yandex.ru> writes:
> 
> > It's good enough from my side, but I hope someone else could comment as
> > well.
> >
> > Additionally though, it might or might not be too big a change for Emacs
> > 30 (I'm not sure), and if we're talking about 31 only, then it could
> > wait a little more for the review.
> 
> Are we happy to install this now, or are we still waiting for more
> comments?

We've waited long enough, I think.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-09-14 14:06                                                                             ` Eli Zaretskii
@ 2024-09-14 15:02                                                                               ` Dmitry Gutov
  2024-09-14 15:08                                                                               ` Stefan Kangas
  1 sibling, 0 replies; 106+ messages in thread
From: Dmitry Gutov @ 2024-09-14 15:02 UTC (permalink / raw)
  To: Eli Zaretskii, Stefan Kangas; +Cc: 53749, ikumi, dfussner, arash, monnier, tsdh

On 14/09/2024 17:06, Eli Zaretskii wrote:
>> From: Stefan Kangas<stefankangas@gmail.com>
>> Date: Sat, 14 Sep 2024 06:43:01 -0700
>> Cc:ikumi@ikumi.que.jp,dfussner@googlemail.com,tsdh@gnu.org,eliz@gnu.org,
>> 	monnier@iro.umontreal.ca
>>
>> Dmitry Gutov<dgutov@yandex.ru>  writes:
>>
>>> It's good enough from my side, but I hope someone else could comment as
>>> well.
>>>
>>> Additionally though, it might or might not be too big a change for Emacs
>>> 30 (I'm not sure), and if we're talking about 31 only, then it could
>>> wait a little more for the review.
>> Are we happy to install this now, or are we still waiting for more
>> comments?
> We've waited long enough, I think.

I also agree.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-09-14 14:06                                                                             ` Eli Zaretskii
  2024-09-14 15:02                                                                               ` Dmitry Gutov
@ 2024-09-14 15:08                                                                               ` Stefan Kangas
  2024-09-14 15:28                                                                                 ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 106+ messages in thread
From: Stefan Kangas @ 2024-09-14 15:08 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 53749-done, ikumi, dgutov, dfussner, arash, monnier, tsdh

Version: 31.1

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Stefan Kangas <stefankangas@gmail.com>
>> Date: Sat, 14 Sep 2024 06:43:01 -0700
>> Cc: ikumi@ikumi.que.jp, dfussner@googlemail.com, tsdh@gnu.org, eliz@gnu.org,
>> 	monnier@iro.umontreal.ca
>>
>> Dmitry Gutov <dgutov@yandex.ru> writes:
>>
>> > It's good enough from my side, but I hope someone else could comment as
>> > well.
>>
>> Are we happy to install this now, or are we still waiting for more
>> comments?
>
> We've waited long enough, I think.

Thanks, so I've now installed the patch on master.  Note that I broke
out the etags/ctags changes into a separate patch (in David's name) to
make the original patch a bit less unwieldy.

    3090b2304e7 Update the etags/ctags test files
    b44c00669ac Provide a modified xref backend for TeX buffers

And with that, I'm closing this bug report.  Congratulations to David
for landing his first contribution to Emacs, and thanks again.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-09-14 15:08                                                                               ` Stefan Kangas
@ 2024-09-14 15:28                                                                                 ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-09-14 15:28 UTC (permalink / raw)
  To: Stefan Kangas
  Cc: 53749-done, Ikumi Keita, Dmitry Gutov, Arash Esbati,
	Stefan Monnier, Tassilo Horn, Eli Zaretskii

[-- Attachment #1: Type: text/plain, Size: 1311 bytes --]

Many thanks to you all for your help and advice. I'm not subscribed to this
list, though I am a frequent lurker, so if I can be of any help fixing
issues with the patches please ping me if I'm being oblivious.

Best, David.

On Sat, 14 Sept 2024, 16:08 Stefan Kangas, <stefankangas@gmail.com> wrote:

> Version: 31.1
>
> Eli Zaretskii <eliz@gnu.org> writes:
>
> >> From: Stefan Kangas <stefankangas@gmail.com>
> >> Date: Sat, 14 Sep 2024 06:43:01 -0700
> >> Cc: ikumi@ikumi.que.jp, dfussner@googlemail.com, tsdh@gnu.org,
> eliz@gnu.org,
> >>      monnier@iro.umontreal.ca
> >>
> >> Dmitry Gutov <dgutov@yandex.ru> writes:
> >>
> >> > It's good enough from my side, but I hope someone else could comment
> as
> >> > well.
> >>
> >> Are we happy to install this now, or are we still waiting for more
> >> comments?
> >
> > We've waited long enough, I think.
>
> Thanks, so I've now installed the patch on master.  Note that I broke
> out the etags/ctags changes into a separate patch (in David's name) to
> make the original patch a bit less unwieldy.
>
>     3090b2304e7 Update the etags/ctags test files
>     b44c00669ac Provide a modified xref backend for TeX buffers
>
> And with that, I'm closing this bug report.  Congratulations to David
> for landing his first contribution to Emacs, and thanks again.
>

[-- Attachment #2: Type: text/html, Size: 2427 bytes --]

^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2022-02-03 15:09 bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
                   ` (2 preceding siblings ...)
  2022-02-25 20:16 ` Augusto Stoffel
@ 2024-09-14 17:26 ` Mattias Engdegård
  2024-09-16  8:33   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  3 siblings, 1 reply; 106+ messages in thread
From: Mattias Engdegård @ 2024-09-14 17:26 UTC (permalink / raw)
  To: David Fussner
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Arash Esbati, Stefan Kangas,
	Tassilo Horn, Eli Zaretskii, Stefan Monnier

Thanks for the contribution, David! My electronic servant complained about some regexps:

3881    (re-search-backward (concat "[]["
3882                                (mapconcat #'regexp-quote
3883                                           (mapcar #'char-to-string
3884                                                   tex-thingatpt-exclude-chars))
3885                                "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))

This is not a correct way to build a regexp; `regexp-quote` can only be used to quote strings that should match literally, not characters inside [...], where backslashes have no escaping power.

There are various ways of doing this properly. I would suggest something like

  (rx-to-string `(or (in "\"#$%&'()*,=[]`|" cntrl blank)
                     ,@tex-thingatpt-exclude-chars)
                t))

but it also depends on what you want that `tex-thingatpt-exclude-chars` variable to be. Should it be a user option (defcustom)? The variable's doc string is a wall of text that basically says that it can be set to whatever you want but things will stop working so you'd better not.






^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-09-14 17:26 ` Mattias Engdegård
@ 2024-09-16  8:33   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-09-16 13:30     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-09-17 12:35     ` Mattias Engdegård
  0 siblings, 2 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-09-16  8:33 UTC (permalink / raw)
  To: Mattias Engdegård
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Arash Esbati, Stefan Kangas,
	Tassilo Horn, Eli Zaretskii, Stefan Monnier

Hi Mattias,

Thanks for this, and of course you are quite right on both counts:

> but it also depends on what you want that `tex-thingatpt-exclude-chars` variable to be

I believe it's time I abandoned this piece of idiocy, already flagged
by several commentators before you. The basic motivation was to allow
using the new xref code in TeX files that used non-standard escape and
grouping characters. Both etags and AUCTeX address this possibility,
but the latter does it right by having three separate variables:
TeX-esc, TeX-grop, and TeX-grcl, so that these can be part of the
whole regular expression apparatus for syntax highlighting and
everything else. I had in the back of my mind to implement something
similar in tex-mode, but the half-measure of
`tex-thingatpt-exclude-chars` is the wrong way to go.

I propose, therefore, to eliminate this variable from tex-mode and
just hard code the standard escape and grouping characters for the
time being, as in the rest of tex-mode.el, then to submit later a
patch to implement something similar to what AUCTeX does, and one
interoperable with AUCTeX, also.

> This is not a correct way to build a regexp;

Given the above changes, would you and your electronic servant be OK
with code like the following?

(re-search-forward "[][\\{}\"*`'#=&()%,|$[:cntrl:][:blank:]]")

(I still, I'm ashamed to confess, find the traditional regexp syntax
easier to read than rx notation, but could overcome this if you think
rx is a better fit here.)

What do you think?

Best,  David.

On Sat, 14 Sept 2024 at 18:26, Mattias Engdegård
<mattias.engdegard@gmail.com> wrote:
>
> Thanks for the contribution, David! My electronic servant complained about some regexps:
>
> 3881    (re-search-backward (concat "[]["
> 3882                                (mapconcat #'regexp-quote
> 3883                                           (mapcar #'char-to-string
> 3884                                                   tex-thingatpt-exclude-chars))
> 3885                                "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))
>
> This is not a correct way to build a regexp; `regexp-quote` can only be used to quote strings that should match literally, not characters inside [...], where backslashes have no escaping power.
>
> There are various ways of doing this properly. I would suggest something like
>
>   (rx-to-string `(or (in "\"#$%&'()*,=[]`|" cntrl blank)
>                      ,@tex-thingatpt-exclude-chars)
>                 t))
>
> but it also depends on what you want that `tex-thingatpt-exclude-chars` variable to be. Should it be a user option (defcustom)? The variable's doc string is a wall of text that basically says that it can be set to whatever you want but things will stop working so you'd better not.
>





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-09-16  8:33   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-09-16 13:30     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-09-21  2:07       ` Stefan Kangas
  2024-09-17 12:35     ` Mattias Engdegård
  1 sibling, 1 reply; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-09-16 13:30 UTC (permalink / raw)
  To: Mattias Engdegård
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Arash Esbati, Stefan Kangas,
	Tassilo Horn, Eli Zaretskii, Stefan Monnier

[-- Attachment #1: Type: text/plain, Size: 3263 bytes --]

Hi Mattias, Arash,

Here's a patch to fix the regexps and delete the unnecessary variable.
Any thoughts?

I'll look at adding new vars for the TeX escape and grouping chars,
creating a new bug number when I have a working patch.

Thanks, David.

On Mon, 16 Sept 2024 at 09:33, David Fussner <dfussner@googlemail.com> wrote:
>
> Hi Mattias,
>
> Thanks for this, and of course you are quite right on both counts:
>
> > but it also depends on what you want that `tex-thingatpt-exclude-chars` variable to be
>
> I believe it's time I abandoned this piece of idiocy, already flagged
> by several commentators before you. The basic motivation was to allow
> using the new xref code in TeX files that used non-standard escape and
> grouping characters. Both etags and AUCTeX address this possibility,
> but the latter does it right by having three separate variables:
> TeX-esc, TeX-grop, and TeX-grcl, so that these can be part of the
> whole regular expression apparatus for syntax highlighting and
> everything else. I had in the back of my mind to implement something
> similar in tex-mode, but the half-measure of
> `tex-thingatpt-exclude-chars` is the wrong way to go.
>
> I propose, therefore, to eliminate this variable from tex-mode and
> just hard code the standard escape and grouping characters for the
> time being, as in the rest of tex-mode.el, then to submit later a
> patch to implement something similar to what AUCTeX does, and one
> interoperable with AUCTeX, also.
>
> > This is not a correct way to build a regexp;
>
> Given the above changes, would you and your electronic servant be OK
> with code like the following?
>
> (re-search-forward "[][\\{}\"*`'#=&()%,|$[:cntrl:][:blank:]]")
>
> (I still, I'm ashamed to confess, find the traditional regexp syntax
> easier to read than rx notation, but could overcome this if you think
> rx is a better fit here.)
>
> What do you think?
>
> Best,  David.
>
> On Sat, 14 Sept 2024 at 18:26, Mattias Engdegård
> <mattias.engdegard@gmail.com> wrote:
> >
> > Thanks for the contribution, David! My electronic servant complained about some regexps:
> >
> > 3881    (re-search-backward (concat "[]["
> > 3882                                (mapconcat #'regexp-quote
> > 3883                                           (mapcar #'char-to-string
> > 3884                                                   tex-thingatpt-exclude-chars))
> > 3885                                "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))
> >
> > This is not a correct way to build a regexp; `regexp-quote` can only be used to quote strings that should match literally, not characters inside [...], where backslashes have no escaping power.
> >
> > There are various ways of doing this properly. I would suggest something like
> >
> >   (rx-to-string `(or (in "\"#$%&'()*,=[]`|" cntrl blank)
> >                      ,@tex-thingatpt-exclude-chars)
> >                 t))
> >
> > but it also depends on what you want that `tex-thingatpt-exclude-chars` variable to be. Should it be a user option (defcustom)? The variable's doc string is a wall of text that basically says that it can be set to whatever you want but things will stop working so you'd better not.
> >

[-- Attachment #2: 0001-Fix-regexps-for-TeX-xref-backend-Bug-53749.patch --]
[-- Type: text/x-patch, Size: 3821 bytes --]

From 1c607543556a7b79615dbc5e8384e10d92d081d5 Mon Sep 17 00:00:00 2001
From: David Fussner <dfussner@googlemail.com>
Date: Mon, 16 Sep 2024 14:05:01 +0100
Subject: [PATCH] Fix regexps for TeX xref backend (Bug#53749)

* lisp/textmodes/tex-mode.el (tex-thingatpt-exclude-chars): Remove
var.
(tex-thingatpt--beginning-of-symbol, tex-thingatpt--end-of-symbol):
Use hard-coded chars instead of var.
---
 lisp/textmodes/tex-mode.el | 43 ++------------------------------------
 1 file changed, 2 insertions(+), 41 deletions(-)

diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index ec0c0c47a2d..6fc49800018 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -3814,37 +3814,6 @@ tex-chktex
 ;; Emacs and `etags' this way aims to improve the user experience "out
 ;; of the box."
 
-(defvar tex-thingatpt-exclude-chars '(?\\ ?\{ ?\})
-  "Exclude these chars by default from TeX thing-at-point.
-
-The TeX `xref-backend-identifier-at-point' method uses the characters
-listed in this variable to decide on the default search string to
-present to the user who calls an `xref' command.  These characters
-become part of a regexp which always excludes them from that default
-string.  For the `xref' commands to function properly in TeX buffers, at
-least the TeX escape and the two TeX grouping characters should be
-listed here.  Should your TeX documents contain other characters which
-you want to exclude by default, then you can add them to the list,
-though you may wish to consult the functions
-`tex-thingatpt--beginning-of-symbol' and `tex-thingatpt--end-of-symbol'
-to see what the regexp already contains.  If your documents contain
-non-standard escape and grouping characters, then you can replace the
-three listed here with your own, thereby allowing the three standard
-characters to appear by default in search strings.  Please be aware,
-however, that the `etags' program only recognizes `\\' (92) and `!' (33)
-as escape characters in TeX documents, and if it detects the latter it
-also uses `<>' as the TeX grouping construct rather than `{}'.  Setting
-the escape and grouping chars to anything other than `\\=\\{}' or `!<>'
-will not be useful without changes to `etags', at least for commands
-that search tags tables, such as \\[xref-find-definitions] and \
-\\[xref-find-apropos].
-
-Should you wish to change the defaults, please also be aware that,
-without further modifications to tex-mode.el, the usual text-parsing
-routines for `font-lock' and the like won't work correctly, as the
-default escape and grouping characters are currently hard coded in many
-places.")
-
 ;; Populate `semantic-symref-filepattern-alist' for the in-tree modes;
 ;; AUCTeX is doing the same for its modes.
 (with-eval-after-load 'semantic/symref/grep
@@ -3878,20 +3847,12 @@ tex--thing-at-point
 
 (defun tex-thingatpt--beginning-of-symbol ()
   (and
-   (re-search-backward (concat "[]["
-                               (mapconcat #'regexp-quote
-                                          (mapcar #'char-to-string
-                                                  tex-thingatpt-exclude-chars))
-                               "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))
+   (re-search-backward "[][\\{}\"*`'#=&()%,|$[:cntrl:][:blank:]]" nil t)
    (forward-char)))
 
 (defun tex-thingatpt--end-of-symbol ()
   (and
-   (re-search-forward (concat "[]["
-                              (mapconcat #'regexp-quote
-                                          (mapcar #'char-to-string
-                                                  tex-thingatpt-exclude-chars))
-                              "\"*`'#=&()%,|$[:cntrl:][:blank:]]"))
+   (re-search-forward "[][\\{}\"*`'#=&()%,|$[:cntrl:][:blank:]]" nil t)
    (backward-char)))
 
 (defun tex--bounds-of-symbol-at-point ()
-- 
2.39.4


^ permalink raw reply related	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-09-16  8:33   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-09-16 13:30     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-09-17 12:35     ` Mattias Engdegård
  1 sibling, 0 replies; 106+ messages in thread
From: Mattias Engdegård @ 2024-09-17 12:35 UTC (permalink / raw)
  To: David Fussner
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Arash Esbati, Stefan Kangas,
	Tassilo Horn, Eli Zaretskii, Stefan Monnier

16 sep. 2024 kl. 10.33 skrev David Fussner <dfussner@googlemail.com>:

> (re-search-forward "[][\\{}\"*`'#=&()%,|$[:cntrl:][:blank:]]")

Fine as far as I'm concerned.

> (I still, I'm ashamed to confess, find the traditional regexp syntax
> easier to read than rx notation, but could overcome this if you think
> rx is a better fit here.)

There is not a big difference in this case so stick to what you prefer.

Otherwise, I encourage you to try using rx from time to time – it's habit-forming!






^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-09-16 13:30     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-09-21  2:07       ` Stefan Kangas
  2024-09-21 16:44         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 106+ messages in thread
From: Stefan Kangas @ 2024-09-21  2:07 UTC (permalink / raw)
  To: David Fussner, Mattias Engdegård
  Cc: 53749, Ikumi Keita, Dmitry Gutov, Arash Esbati, Stefan Monnier,
	Tassilo Horn, Eli Zaretskii

David Fussner <dfussner@googlemail.com> writes:

> Hi Mattias, Arash,
>
> Here's a patch to fix the regexps and delete the unnecessary variable.
> Any thoughts?

Thanks, installed on master.

> I'll look at adding new vars for the TeX escape and grouping chars,
> creating a new bug number when I have a working patch.

Thanks in advance for this also.





^ permalink raw reply	[flat|nested] 106+ messages in thread

* bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers
  2024-09-21  2:07       ` Stefan Kangas
@ 2024-09-21 16:44         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 106+ messages in thread
From: David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-09-21 16:44 UTC (permalink / raw)
  To: Stefan Kangas
  Cc: 53749, Ikumi Keita, Mattias Engdegård, Dmitry Gutov,
	Arash Esbati, Stefan Monnier, Tassilo Horn, Eli Zaretskii

[-- Attachment #1: Type: text/plain, Size: 488 bytes --]

Thanks for installing it, Stefan.

On Sat, 21 Sept 2024, 03:07 Stefan Kangas, <stefankangas@gmail.com> wrote:

> David Fussner <dfussner@googlemail.com> writes:
>
> > Hi Mattias, Arash,
> >
> > Here's a patch to fix the regexps and delete the unnecessary variable.
> > Any thoughts?
>
> Thanks, installed on master.
>
> > I'll look at adding new vars for the TeX escape and grouping chars,
> > creating a new bug number when I have a working patch.
>
> Thanks in advance for this also.
>

[-- Attachment #2: Type: text/html, Size: 920 bytes --]

^ permalink raw reply	[flat|nested] 106+ messages in thread

end of thread, other threads:[~2024-09-21 16:44 UTC | newest]

Thread overview: 106+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-03 15:09 bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-02-21  2:11 ` Dmitry Gutov
2022-02-21  9:48   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-02-21 17:28     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-02-21 23:56       ` Dmitry Gutov
2022-02-22 15:19         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-02-23  2:21           ` Dmitry Gutov
2022-02-23 10:45             ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-02-24  2:23               ` Dmitry Gutov
2022-02-24 13:15                 ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-02-21 23:55     ` Dmitry Gutov
2022-09-08 13:25   ` Lars Ingebrigtsen
2022-09-08 13:34     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-09-08 13:39       ` Lars Ingebrigtsen
2022-09-08 15:50         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-03  9:08           ` Stefan Kangas
2023-09-03 10:03             ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-03 10:46               ` Stefan Kangas
2023-09-13 11:10                 ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-13 13:42                   ` Stefan Kangas
2023-09-13 15:23                   ` Dmitry Gutov
2023-09-13 17:01                     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-13 23:59                       ` Dmitry Gutov
2023-09-14  6:10                         ` Eli Zaretskii
2023-09-15 18:45                           ` Tassilo Horn
2023-09-16  5:53                             ` Ikumi Keita
2023-09-17  8:49                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-22 13:06                                 ` Arash Esbati
2024-04-22 14:56                                   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-22 16:15                                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-22 16:37                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-22 17:16                                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-22 17:25                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-24  0:09                                           ` Dmitry Gutov
2024-04-24  9:02                                             ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-23 12:04                                     ` Arash Esbati
2024-04-23 13:21                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-29 14:15                                   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-02  0:43                                     ` Dmitry Gutov
2024-05-02 13:32                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-03 13:42                                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-07  2:27                                           ` Dmitry Gutov
2024-05-09  3:00                                             ` Dmitry Gutov
2024-05-09  6:38                                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-09 10:49                                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-13 20:54                                               ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-14 21:24                                                 ` Dmitry Gutov
2024-05-16 18:18                                                   ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-20  0:21                                                     ` Dmitry Gutov
2024-05-20  2:38                                                       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-25  7:57                                                         ` Eli Zaretskii
2024-06-05  9:46                                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-06-08 12:38                                                             ` Eli Zaretskii
2024-06-08 20:54                                                               ` Dmitry Gutov
2024-06-09 11:10                                                             ` Stefan Kangas
2024-06-09 11:36                                                             ` Stefan Kangas
2024-06-09 18:42                                                               ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-06-09 18:45                                                               ` Dmitry Gutov
2024-06-09 21:03                                                                 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-06-09 22:13                                                                   ` Dmitry Gutov
2024-06-10 13:29                                                                     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-27 15:39                                                                       ` Arash Esbati
2024-07-28 23:57                                                                         ` Dmitry Gutov
2024-07-29 10:31                                                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-09-14 13:43                                                                           ` Stefan Kangas
2024-09-14 14:06                                                                             ` Eli Zaretskii
2024-09-14 15:02                                                                               ` Dmitry Gutov
2024-09-14 15:08                                                                               ` Stefan Kangas
2024-09-14 15:28                                                                                 ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-25 23:01                                                         ` Dmitry Gutov
2024-05-07  2:06                                         ` Dmitry Gutov
2024-05-02  6:47                                     ` Arash Esbati
2024-05-02 13:34                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-03 14:10                                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-04  8:26                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-04 14:32                                       ` Arash Esbati
2024-05-04 14:54                                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-04 21:15                                           ` Arash Esbati
2024-05-07 13:15                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-15 15:47                                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-05-16  7:53                                         ` Arash Esbati
2024-05-16 12:56                                           ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-14 16:11                         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-14 23:55                           ` Dmitry Gutov
2023-09-15  6:47                             ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-13 19:16                     ` Eli Zaretskii
2023-09-13 20:25                       ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-14  5:14                         ` Eli Zaretskii
2022-02-21 12:35 ` Arash Esbati
2022-02-21 14:03   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-02-25 20:16 ` Augusto Stoffel
2022-02-26  9:29   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-02-26 10:56     ` Augusto Stoffel
2022-02-27 18:42       ` Arash Esbati
2022-02-28  9:09         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-02-28 11:54           ` Arash Esbati
2022-02-28 13:11             ` Augusto Stoffel
2022-02-28 19:04               ` Arash Esbati
2022-03-01  8:46                 ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-02-28 13:05           ` Augusto Stoffel
2024-09-14 17:26 ` Mattias Engdegård
2024-09-16  8:33   ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-09-16 13:30     ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-09-21  2:07       ` Stefan Kangas
2024-09-21 16:44         ` David Fussner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-09-17 12:35     ` Mattias Engdegård

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).