-;;; 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, 2006, 2007 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 3, 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
;; 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 "``"
+(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 "''"
+(defcustom texinfo-close-quote (purecopy "''")
"String inserted by typing \\[texinfo-insert-quote] to close a quotation."
:type 'string
:group 'texinfo)
("Chapters" "^@chapter[ \t]+\\(.*\\)$" 1))
"Imenu generic expression for Texinfo mode. See `imenu-generic-expression'.")
-(defvar texinfo-font-lock-syntactic-keywords
- '(("\\(@\\)c\\(omment\\)?\\>" (1 "<"))
- ("^\\(@\\)ignore\\>" (1 "< b"))
- ("^@end ignore\\(\n\\)" (1 "> b")))
+(defconst texinfo-syntax-propertize-function
+ (syntax-propertize-rules
+ ("\\(@\\)c\\(omment\\)?\\>" (1 "<"))
+ ("^\\(@\\)ignore\\>" (1 "< b"))
+ ("^@end ignore\\(\n\\)" (1 "> b")))
"Syntactic keywords to catch comment delimiters in `texinfo-mode'.")
(defconst texinfo-environments
'((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
(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)
(setq imenu-case-fold-search nil)
(make-local-variable 'font-lock-defaults)
(setq font-lock-defaults
- '(texinfo-font-lock-keywords nil nil nil backward-paragraph
- (font-lock-syntactic-keywords
- . texinfo-font-lock-syntactic-keywords)))
+ '(texinfo-font-lock-keywords nil nil nil backward-paragraph))
+ (set (make-local-variable 'syntax-propertize-function)
+ texinfo-syntax-propertize-function)
(set (make-local-variable 'parse-sexp-lookup-properties) t)
;; Outline settings.
(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))
(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)))))