]> code.delx.au - gnu-emacs/blobdiff - lisp/textmodes/texinfo.el
Add 2010 to copyright years.
[gnu-emacs] / lisp / textmodes / texinfo.el
index 8392e56dc00b47787fbfc0908dc75fac44f62d5f..7c71acd044b89d71dce3d9a5b3dc8f2d8ce9169c 100644 (file)
@@ -1,7 +1,8 @@
-;;; texinfo.el --- major mode for editing Texinfo files -*- coding: iso-2022-7bit -*-
+;;; texinfo.el --- major mode for editing Texinfo files -*- coding: utf-8 -*-
 
 ;; Copyright (C) 1985, 1988, 1989, 1990, 1991, 1992, 1993, 1996, 1997,
-;;   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+;;   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+;;   Free Software Foundation, Inc.
 
 ;; Author: Robert J. Chassell
 ;; Date:   [See date below for texinfo-version]
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; 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)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -21,9 +22,7 @@
 ;; GNU General Public License for more details.
 
 ;; 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., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; 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)
 
   :group 'docs)
 
 ;;;###autoload
-(defcustom texinfo-open-quote "``"
-  "*String inserted by typing \\[texinfo-insert-quote] to open a quotation."
+(defcustom texinfo-open-quote (purecopy "``")
+  "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."
+(defcustom texinfo-close-quote (purecopy "''")
+  "String inserted by typing \\[texinfo-insert-quote] to close a quotation."
   :type 'string
   :group 'texinfo)
 
@@ -296,21 +288,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'
@@ -349,8 +339,7 @@ Subexpression 1 is what goes into the corresponding `@end' statement.")
   '((t (:inherit font-lock-function-name-face)))
   "Face used for section headings in `texinfo-mode'."
   :group 'texinfo)
-;; backward-compatibility alias
-(put 'texinfo-heading-face 'face-alias 'texinfo-heading)
+(define-obsolete-face-alias 'texinfo-heading-face 'texinfo-heading "22.1")
 (defvar texinfo-heading-face 'texinfo-heading)
 
 (defvar texinfo-font-lock-keywords
@@ -399,7 +388,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.
 
@@ -420,65 +408,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
@@ -596,7 +584,7 @@ value of `texinfo-mode-hook'."
   (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)}]*")
+       "\\(@\\(end\\)?dots{}\\|[.?!]\\)[]\"')}]*")
   (make-local-variable 'adaptive-fill-mode)
   (setq adaptive-fill-mode nil)
   (make-local-variable 'fill-column)
@@ -694,7 +682,8 @@ With prefix argument or inside @code or @example, inserts a plain \"."
     (if (or arg
            (= (preceding-char) ?\\)
            (save-excursion
-             (backward-char (length texinfo-open-quote))
+              ;; Might be near the start of a (narrowed) buffer.
+              (ignore-errors (backward-char (length texinfo-open-quote)))
              (when (or (looking-at texinfo-open-quote)
                        (looking-at texinfo-close-quote))
                (delete-char (length texinfo-open-quote))
@@ -706,7 +695,8 @@ With prefix argument or inside @code or @example, inserts a plain \"."
                    (setq in-env t)))))
        (self-insert-command (prefix-numeric-value arg))
       (insert
-       (if (memq (char-syntax (preceding-char)) '(?\( ?> ?\s))
+       (if (or (bobp)
+               (memq (char-syntax (preceding-char)) '(?\( ?> ?\s)))
           texinfo-open-quote
         texinfo-close-quote)))))
 
@@ -947,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."