-;;; 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 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]
;; 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,
;; 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"
+ "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)
;;; 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'
"Regexp for environment-like Texinfo list commands.
Subexpression 1 is what goes into the corresponding `@end' statement.")
-(defface texinfo-heading-face
+(defface texinfo-heading
'((t (:inherit font-lock-function-name-face)))
- "Face used for section headings in `texinfo-mode'.")
-(defvar texinfo-heading-face 'texinfo-heading-face)
+ "Face used for section headings in `texinfo-mode'."
+ :group 'texinfo)
+;; backward-compatibility alias
+(put 'texinfo-heading-face 'face-alias 'texinfo-heading)
+(defvar texinfo-heading-face 'texinfo-heading)
(defvar texinfo-font-lock-keywords
`(;; All but the first had an OVERRIDE of t.
\f
;;; Keybindings
-(defvar texinfo-mode-map nil)
;;; Keys common both to Texinfo mode and to TeX shell.
;; 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
(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)
(setq in-env t)))))
(self-insert-command (prefix-numeric-value arg))
(insert
- (if (memq (char-syntax (preceding-char)) '(?\( ?> ?\ ))
+ (if (memq (char-syntax (preceding-char)) '(?\( ?> ?\s))
texinfo-open-quote
texinfo-close-quote)))))
(texinfo-last-unended-begin)
(match-string 1)))
"table")
- ? ;space
+ ?\s
?\n)))
(defun texinfo-insert-@kbd (&optional arg)
;;; 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."
(provide 'texinfo)
-;;; arch-tag: 005d7c38-43b9-4b7d-aa1d-aea69bae73e1
+;; arch-tag: 005d7c38-43b9-4b7d-aa1d-aea69bae73e1
;;; texinfo.el ends here