(copyright-update-year): Fix subexpression numbering for the case when
[bpt/emacs.git] / lisp / textmodes / texinfo.el
index 048dfa9..779e99d 100644 (file)
@@ -1,7 +1,7 @@
-;;; texinfo.el --- major mode for editing Texinfo files
+;;; texinfo.el --- major mode for editing Texinfo files -*- coding: iso-2022-7bit -*-
 
 ;; Copyright (C) 1985, 1988, 1989, 1990, 1991, 1992, 1993, 1996, 1997,
-;;           2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
+;;   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 ;; Author: Robert J. Chassell
 ;; Date:   [See date below for texinfo-version]
@@ -12,7 +12,7 @@
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
 ;; any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
@@ -22,8 +22,8 @@
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Todo:
 
 
 ;;; Code:
 
-(or (fboundp 'defgroup)
-    (defmacro defgroup (&rest ignore) nil))
-
-(or (fboundp 'defcustom)
-    (defmacro defcustom (var value doc &rest ignore)
-      `(defvar ,var ,value ,doc)))
-
 (eval-when-compile (require 'tex-mode) (require 'cl))
+(defvar outline-heading-alist)
 
 (defgroup texinfo nil
   "Texinfo Mode."
+  :link '(custom-group-link :tag "Font Lock Faces group" font-lock-faces)
   :group 'docs)
 
 ;;;###autoload
 (defcustom texinfo-open-quote "``"
-  "*String inserted by typing \\[texinfo-insert-quote] to open a quotation."
+  "String inserted by typing \\[texinfo-insert-quote] to open a quotation."
   :type 'string
   :group 'texinfo)
 
 ;;;###autoload
 (defcustom texinfo-close-quote "''"
-  "*String inserted by typing \\[texinfo-insert-quote] to close a quotation."
+  "String inserted by typing \\[texinfo-insert-quote] to close a quotation."
   :type 'string
   :group 'texinfo)
 
@@ -294,21 +289,19 @@ chapter."
 
 ;;; Syntax table
 
-(defvar texinfo-mode-syntax-table nil)
-
-(if texinfo-mode-syntax-table
-    nil
-  (setq texinfo-mode-syntax-table (make-syntax-table))
-  (modify-syntax-entry ?\" "." texinfo-mode-syntax-table)
-  (modify-syntax-entry ?\\ "." texinfo-mode-syntax-table)
-  (modify-syntax-entry ?@ "\\" texinfo-mode-syntax-table)
-  (modify-syntax-entry ?\^q "\\" texinfo-mode-syntax-table)
-  (modify-syntax-entry ?\[ "(]" texinfo-mode-syntax-table)
-  (modify-syntax-entry ?\] ")[" texinfo-mode-syntax-table)
-  (modify-syntax-entry ?{ "(}" texinfo-mode-syntax-table)
-  (modify-syntax-entry ?} "){" texinfo-mode-syntax-table)
-  (modify-syntax-entry ?\n ">" texinfo-mode-syntax-table)
-  (modify-syntax-entry ?\' "w" texinfo-mode-syntax-table))
+(defvar texinfo-mode-syntax-table
+  (let ((st (make-syntax-table)))
+    (modify-syntax-entry ?\" "." st)
+    (modify-syntax-entry ?\\ "." st)
+    (modify-syntax-entry ?@ "\\" st)
+    (modify-syntax-entry ?\^q "\\" st)
+    (modify-syntax-entry ?\[ "(]" st)
+    (modify-syntax-entry ?\] ")[" st)
+    (modify-syntax-entry ?{ "(}" st)
+    (modify-syntax-entry ?} "){" st)
+    (modify-syntax-entry ?\n ">" st)
+    (modify-syntax-entry ?\' "w" st)
+    st))
 
 ;; Written by Wolfgang Bangerth <zcg51122@rpool1.rus.uni-stuttgart.de>
 ;; To override this example, set either `imenu-generic-expression'
@@ -397,7 +390,6 @@ Subexpression 1 is what goes into the corresponding `@end' statement.")
 
 \f
 ;;; Keybindings
-(defvar texinfo-mode-map nil)
 
 ;;; Keys common both to Texinfo mode and to TeX shell.
 
@@ -418,65 +410,65 @@ Subexpression 1 is what goes into the corresponding `@end' statement.")
 ;; Mode documentation displays commands in reverse order
 ;; from how they are listed in the texinfo-mode-map.
 
-(if texinfo-mode-map
-    nil
-  (setq texinfo-mode-map (make-sparse-keymap))
-
-  ;; bindings for `texnfo-tex.el'
-  (texinfo-define-common-keys texinfo-mode-map)
-
-  (define-key texinfo-mode-map "\"" 'texinfo-insert-quote)
-
-  ;; bindings for `makeinfo.el'
-  (define-key texinfo-mode-map "\C-c\C-m\C-k" 'kill-compilation)
-  (define-key texinfo-mode-map "\C-c\C-m\C-l"
-    'makeinfo-recenter-compilation-buffer)
-  (define-key texinfo-mode-map "\C-c\C-m\C-r" 'makeinfo-region)
-  (define-key texinfo-mode-map "\C-c\C-m\C-b" 'makeinfo-buffer)
-
-  ;; bindings for `texinfmt.el'
-  (define-key texinfo-mode-map "\C-c\C-e\C-r"    'texinfo-format-region)
-  (define-key texinfo-mode-map "\C-c\C-e\C-b"    'texinfo-format-buffer)
-
-  ;; AUCTeX-like bindings
-  (define-key texinfo-mode-map "\e\r"          'texinfo-insert-@item)
-
-  ;; bindings for updating nodes and menus
-
-  (define-key texinfo-mode-map "\C-c\C-um"   'texinfo-master-menu)
-
-  (define-key texinfo-mode-map "\C-c\C-u\C-m"   'texinfo-make-menu)
-  (define-key texinfo-mode-map "\C-c\C-u\C-n"   'texinfo-update-node)
-  (define-key texinfo-mode-map "\C-c\C-u\C-e"   'texinfo-every-node-update)
-  (define-key texinfo-mode-map "\C-c\C-u\C-a"   'texinfo-all-menus-update)
-
-  (define-key texinfo-mode-map "\C-c\C-s"     'texinfo-show-structure)
-
-  (define-key texinfo-mode-map "\C-c}"          'up-list)
-  (define-key texinfo-mode-map "\C-c]"          'up-list)
-  (define-key texinfo-mode-map "\C-c{"         'texinfo-insert-braces)
-
-  ;; bindings for inserting strings
-  (define-key texinfo-mode-map "\C-c\C-o"     'texinfo-insert-block)
-  (define-key texinfo-mode-map "\C-c\C-c\C-d" 'texinfo-start-menu-description)
-  (define-key texinfo-mode-map "\C-c\C-c\C-s" 'texinfo-insert-@strong)
-  (define-key texinfo-mode-map "\C-c\C-c\C-e" 'texinfo-insert-@emph)
-
-  (define-key texinfo-mode-map "\C-c\C-cv"    'texinfo-insert-@var)
-  (define-key texinfo-mode-map "\C-c\C-cu"    'texinfo-insert-@uref)
-  (define-key texinfo-mode-map "\C-c\C-ct"    'texinfo-insert-@table)
-  (define-key texinfo-mode-map "\C-c\C-cs"    'texinfo-insert-@samp)
-  (define-key texinfo-mode-map "\C-c\C-cq"    'texinfo-insert-@quotation)
-  (define-key texinfo-mode-map "\C-c\C-co"    'texinfo-insert-@noindent)
-  (define-key texinfo-mode-map "\C-c\C-cn"    'texinfo-insert-@node)
-  (define-key texinfo-mode-map "\C-c\C-cm"    'texinfo-insert-@email)
-  (define-key texinfo-mode-map "\C-c\C-ck"    'texinfo-insert-@kbd)
-  (define-key texinfo-mode-map "\C-c\C-ci"    'texinfo-insert-@item)
-  (define-key texinfo-mode-map "\C-c\C-cf"    'texinfo-insert-@file)
-  (define-key texinfo-mode-map "\C-c\C-cx"    'texinfo-insert-@example)
-  (define-key texinfo-mode-map "\C-c\C-ce"    'texinfo-insert-@end)
-  (define-key texinfo-mode-map "\C-c\C-cd"    'texinfo-insert-@dfn)
-  (define-key texinfo-mode-map "\C-c\C-cc"    'texinfo-insert-@code))
+(defvar texinfo-mode-map
+  (let ((map (make-sparse-keymap)))
+
+    ;; bindings for `texnfo-tex.el'
+    (texinfo-define-common-keys map)
+
+    (define-key map "\"" 'texinfo-insert-quote)
+
+    ;; bindings for `makeinfo.el'
+    (define-key map "\C-c\C-m\C-k" 'kill-compilation)
+    (define-key map "\C-c\C-m\C-l"
+      'makeinfo-recenter-compilation-buffer)
+    (define-key map "\C-c\C-m\C-r" 'makeinfo-region)
+    (define-key map "\C-c\C-m\C-b" 'makeinfo-buffer)
+
+    ;; bindings for `texinfmt.el'
+    (define-key map "\C-c\C-e\C-r"    'texinfo-format-region)
+    (define-key map "\C-c\C-e\C-b"    'texinfo-format-buffer)
+
+    ;; AUCTeX-like bindings
+    (define-key map "\e\r"             'texinfo-insert-@item)
+
+    ;; bindings for updating nodes and menus
+
+    (define-key map "\C-c\C-um"   'texinfo-master-menu)
+
+    (define-key map "\C-c\C-u\C-m"   'texinfo-make-menu)
+    (define-key map "\C-c\C-u\C-n"   'texinfo-update-node)
+    (define-key map "\C-c\C-u\C-e"   'texinfo-every-node-update)
+    (define-key map "\C-c\C-u\C-a"   'texinfo-all-menus-update)
+
+    (define-key map "\C-c\C-s"     'texinfo-show-structure)
+
+    (define-key map "\C-c}"          'up-list)
+    (define-key map "\C-c]"          'up-list)
+    (define-key map "\C-c{"            'texinfo-insert-braces)
+
+    ;; bindings for inserting strings
+    (define-key map "\C-c\C-o"     'texinfo-insert-block)
+    (define-key map "\C-c\C-c\C-d" 'texinfo-start-menu-description)
+    (define-key map "\C-c\C-c\C-s" 'texinfo-insert-@strong)
+    (define-key map "\C-c\C-c\C-e" 'texinfo-insert-@emph)
+
+    (define-key map "\C-c\C-cv"    'texinfo-insert-@var)
+    (define-key map "\C-c\C-cu"    'texinfo-insert-@uref)
+    (define-key map "\C-c\C-ct"    'texinfo-insert-@table)
+    (define-key map "\C-c\C-cs"    'texinfo-insert-@samp)
+    (define-key map "\C-c\C-cq"    'texinfo-insert-@quotation)
+    (define-key map "\C-c\C-co"    'texinfo-insert-@noindent)
+    (define-key map "\C-c\C-cn"    'texinfo-insert-@node)
+    (define-key map "\C-c\C-cm"    'texinfo-insert-@email)
+    (define-key map "\C-c\C-ck"    'texinfo-insert-@kbd)
+    (define-key map "\C-c\C-ci"    'texinfo-insert-@item)
+    (define-key map "\C-c\C-cf"    'texinfo-insert-@file)
+    (define-key map "\C-c\C-cx"    'texinfo-insert-@example)
+    (define-key map "\C-c\C-ce"    'texinfo-insert-@end)
+    (define-key map "\C-c\C-cd"    'texinfo-insert-@dfn)
+    (define-key map "\C-c\C-cc"    'texinfo-insert-@code)
+    map))
 
 (easy-menu-define texinfo-mode-menu
   texinfo-mode-map
@@ -592,6 +584,9 @@ value of `texinfo-mode-hook'."
        (concat "\b\\|@[a-zA-Z]*[ \n]\\|" paragraph-separate))
   (make-local-variable 'paragraph-start)
   (setq paragraph-start (concat "\b\\|@[a-zA-Z]*[ \n]\\|" paragraph-start))
+  (make-local-variable 'sentence-end-base)
+  (setq sentence-end-base
+       "\\(@\\(end\\)?dots{}\\|[.?!]\\)[]\"'\e$B!I\e$,1r}\e(B)}]*")
   (make-local-variable 'adaptive-fill-mode)
   (setq adaptive-fill-mode nil)
   (make-local-variable 'fill-column)
@@ -942,22 +937,22 @@ to jump to the corresponding spot in the Texinfo source file."
 ;;; The  tex  and  print  function definitions:
 
 (defcustom texinfo-texi2dvi-command "texi2dvi"
-  "*Command used by `texinfo-tex-buffer' to run TeX and texindex on a buffer."
+  "Command used by `texinfo-tex-buffer' to run TeX and texindex on a buffer."
   :type 'string
   :group 'texinfo)
 
 (defcustom texinfo-tex-command "tex"
-  "*Command used by `texinfo-tex-region' to run TeX on a region."
+  "Command used by `texinfo-tex-region' to run TeX on a region."
   :type 'string
   :group 'texinfo)
 
 (defcustom texinfo-texindex-command "texindex"
-  "*Command used by `texinfo-texindex' to sort unsorted index files."
+  "Command used by `texinfo-texindex' to sort unsorted index files."
   :type 'string
   :group 'texinfo)
 
 (defcustom texinfo-delete-from-print-queue-command "lprm"
-  "*Command string used to delete a job from the line printer queue.
+  "Command string used to delete a job from the line printer queue.
 Command is used by \\[texinfo-delete-from-print-queue] based on
 number provided by a previous \\[tex-show-print-queue]
 command."
@@ -1055,5 +1050,5 @@ You are prompted for the job number (use a number shown by a previous
 
 (provide 'texinfo)
 
-;;; arch-tag: 005d7c38-43b9-4b7d-aa1d-aea69bae73e1
+;; arch-tag: 005d7c38-43b9-4b7d-aa1d-aea69bae73e1
 ;;; texinfo.el ends here