aboutsummaryrefslogtreecommitdiff
path: root/x-symbol/lisp/x-symbol-hooks.el
diff options
context:
space:
mode:
Diffstat (limited to 'x-symbol/lisp/x-symbol-hooks.el')
-rw-r--r--x-symbol/lisp/x-symbol-hooks.el1356
1 files changed, 0 insertions, 1356 deletions
diff --git a/x-symbol/lisp/x-symbol-hooks.el b/x-symbol/lisp/x-symbol-hooks.el
deleted file mode 100644
index 22d82460..00000000
--- a/x-symbol/lisp/x-symbol-hooks.el
+++ /dev/null
@@ -1,1356 +0,0 @@
-;;; x-symbol-hooks.el --- pre-loaded stuff for package x-symbol
-
-;; Copyright (C) 1996-1999, 2001-2003 Free Software Foundation, Inc.
-;;
-;; Author: Christoph Wedler <wedler@users.sourceforge.net>
-;; Maintainer: (Please use `M-x x-symbol-package-bug' to contact the maintainer)
-;; Version: 4.5.X
-;; Keywords: WYSIWYG, LaTeX, HTML, wp, math, internationalization
-;; X-URL: http://x-symbol.sourceforge.net/
-
-;; This program 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.
-;;
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with this program; if not, write to the Free Software
-;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-;;; Commentary:
-
-;; If you want to use package x-symbol, please visit the URL (use
-;; \\[x-symbol-package-web]) and read the info (use \\[x-symbol-package-info]).
-
-;; This file provides `autoload's for package x-symbol, adds functions to hooks
-;; for the automatic conversion and defines variables which control the
-;; conversion.
-
-;;; Code:
-
-(provide 'x-symbol-hooks)
-(require 'font-lock)
-(eval-when-compile (require 'cl))
-(eval-when-compile
- (defvar x-symbol-coding-name-alist) ; in "x-symbol-vars"
- (defvar x-symbol-image-colormap-allocation) ; here
- (defvar x-symbol-image-convert-colormap) ; here
- (defvar x-symbol-cstring-table) ; in x-symbol.el, only needed if loaded
- )
-(eval-when-compile
- (defvar lazy-shot-minimum-size)
- (defvar comint-input-sender)
- (defvar comint-last-input-end)
- (defvar comint-last-output-start)
- (defvar fast-lock-save-faces)
- (defvar latex-mode-hook)
- (defvar LaTeX-mode-hook)
- (defvar LaTeX-math-insert-function)
- (defvar orig-buffer)
- (defvar reftex-translate-to-ascii-function)
-)
-
-(put 'x-symbol-define-user-options 'lisp-indent-function 2)
-(put 'x-symbol-dolist-delaying 'lisp-indent-function 2)
-(put 'x-symbol-do-plist 'lisp-indent-function 1)
-(put 'x-symbol-while-charsym 'lisp-indent-function 1)
-(put 'x-symbol-encode-for-charsym 'lisp-indent-function 1)
-(put 'x-symbol-decode-for-charsym 'lisp-indent-function 2)
-(put 'x-symbol-ignore-property-changes 'lisp-indent-function 0)
-
-(defvar x-symbol-warn-of-old-emacs t
- "If non-nil, issue warning when using a old/buggy XEmacs.
-XEmacs-21.0 to XEmacs-21.1.8 has been reported to core when using input
-method token.")
-
-;; CW: if possible, back to x-symbol.el, do not load too many files at init
-(require (if (featurep 'xemacs) 'x-symbol-xmacs 'x-symbol-emacs))
-
-
-
-;;;;##########################################################################
-;;;; Variables
-;;;;##########################################################################
-
-
-(defvar x-symbol-data-directory
- (or (locate-data-directory "x-symbol")
- (progn (warn "X-Symbol is not installed at the proper place")
- nil))
- "Directory of data files that come with package X-Symbol.")
-
-(defvar x-symbol-font-directory
- (and x-symbol-data-directory
- (expand-file-name "pcf/" x-symbol-data-directory))
- "Directory for additional X-Symbol fonts.
-If non-nil, used in function `x-symbol-initialize'.")
-
-
-;;;===========================================================================
-;;; Functions to set user options
-;;;===========================================================================
-
-(defun x-symbol-define-user-options (var options &optional after-set set-fn)
- "Define options and setting behavior for user option VAR.
-OPTIONS has the form (FALLBACK . ALIST) where ALIST has elements of the
-form (OPTION . MENU-TEXT). If ALIST is non-nil, one OPTION should be
-equal to FALLBACK, its MENU-TEXT is used for any values not being keys
-in ALIST. OPTIONS can also be a function which should return the form
-mention above.
-
-If ALIST is nil, `x-symbol-submenu-filter', which is used by
-`x-symbol-menu', uses a toggle button with FALLBACK as the non-nil value
-and \\[set-variable] offers completion with matches nil and FALLBACK.
-Otherwise, the menu uses radio buttons for all OPTIONs, where MENU-TEXT
-is the name of the menu item, and \\[set-variable] offers completion
-over all OPTIONs.
-
-`x-symbol-set-variable', which is invoked by the menu callbacks, uses
-SET-FN instead `set' to set the value of VAR if SET-FN is non-nil.
-Otherwise, all functions in AFTER-SET are invoked after `set'ting VAR."
- (put var 'x-symbol-options options)
- (put var 'variable-interactive
- (list 'x-symbol-variable-interactive (list 'quote var)))
- (while after-set
- (pushnew (pop after-set) (get var 'x-symbol-after-set-hook) :test 'equal))
- (if set-fn (put var 'x-symbol-set-function set-fn)))
-
-;; CW: autoload important if var `x-symbol-auto-mode-suffixes' is saved by
-;; custom
-;;;###autoload
-(defun x-symbol-auto-mode-suffixes (&optional suffixes)
- "Return REGEXPs of three-value elements in `auto-mode-alist'.
-These REGEXPs are added to SUFFIXES."
- (setq suffixes (reverse suffixes))
- (let ((alist auto-mode-alist))
- (while alist
- (and (consp (cdar alist))
- (null (member (caar alist) suffixes))
- (push (caar alist) suffixes))
- (setq alist (cdr alist)))
- (nreverse suffixes)))
-
-
-;;;===========================================================================
-;;; Initialization
-;;;===========================================================================
-
-(defcustom x-symbol-initialize t
- "Whether to do an extended initialization of package X-Symbol.
-If t, do full initialization. Otherwise, the value should be a list
-with element. To enable, include
-
- * `languages' to register all supported token languages,
- * `global' to turn on X-Symbol's global mode, i.e., as files are
- loaded, execute `turn-on-x-symbol-conditionally',
- * `keys' to set up the usual X-Symbol key bindings in `global-map',
- * `font-path' to add `x-symbol-font-directory' to the font-path,
- * `comint' to make X-Symbol work with comint,
- * `fast-lock' to make X-Symbol work with fast-lock,
- * `auctex' to make X-Symbol optimally work with AucTeX 9.8a+, it
- changes AucTeX's `TeX-region-hook', `TeX-translate-location-hook',
- and `LaTeX-math-insert-function',
- * `reftex' to make X-Symbol optimally work with RefTeX 3.26+,
- * `bib-cite' to make X-Symbol not overwriting bib-cite's highlighting.
-
-You do not have to install the packages whose initialization is
-enabled."
- :group 'x-symbol-mode
- :type '(choice (const :tag "All" t)
- (set :value (languages global keys font-path comint
- fast-lock auctex reftex bib-cite)
- (const :tag "Token languages" languages)
- (const :tag "Global mode" global)
- (const :tag "Key bindings" keys)
- (const :tag "Font path" font-path)
- (const :tag "Package comint" comint)
- (const :tag "Package fast-lock" fast-lock)
- (const :tag "Package AucTeX" auctex)
- (const :tag "Package RefTeX" reftex)
- (const :tag "Package bib-cite" bib-cite))))
-
-(defvar x-symbol-orig-comint-input-sender 'comint-simple-send
- "Original function which sends a string to the comint process.")
-
-
-;;;===========================================================================
-;;; Determine Locale
-;;;===========================================================================
-
-(defun x-symbol-coding-system-from-locale ()
- ;; See also EMACS/lisp/international/mule-cmds.el, `set-locale-environment'.
- "Get value for `x-symbol-default-coding' from locale.
-Use \"locale -ck code_set_name charmap\" and search for the value of
-\"code_set_name\" or \"charmap\"."
- (save-excursion
- (set-buffer (get-buffer-create " *x-symbol-coding-system-from-locale*"))
- (erase-buffer)
- (call-process shell-file-name nil t nil shell-command-switch
- "locale -ck code_set_name charmap")
- (goto-char (point-min))
-
- (let* ((case-fold-search t)
- ;; The GNU recode manual (www-find "recode charset iso646"), lists a
- ;; lot of aliases, there are a bit less on
- ;; http://mail.nl.linux.org/linux-utf8/2001-10/msg00072.html, I
- ;; added some. But this function shouldn't exceed 40 lines...
- (map '((iso-8859-1
- "iso-8859-1" "iso8859-1" "iso88591" ; HP: iso88591
- ;; vendor-specific, supersets of ascii
- ;; "roman8" ; HP: roman8 is not latin1
- ;; ascii
- "ascii" "us-ascii" "ansi_x3.4-1968" "646" "iso646"
- "iso_646.irv")
- (iso-8859-2
- "iso-8859-2" "iso8859-2" "iso88592") ; HP: iso88592
- (iso-8859-3
- "iso-8859-3" "iso8859-3" "iso88593") ; HP: iso88593
- (iso-8859-9
- "iso-8859-9" "iso8859-9" "iso88599")
- (iso-8859-15
- "iso-8859-15" "iso8859-15" "iso885915"))) ; HP: iso885915
- (charmap (and (re-search-forward "^[ \t]*\\(code_set_name\\|charmap\\)[ \t]*=[ \t]*\"\\([^\n\"]+\\)\"" nil t)
- (find (downcase (match-string 2)) map
- :test 'member))))
- (kill-buffer (current-buffer))
- (car charmap))))
-
-(defun x-symbol-buffer-coding (&optional system)
- ;; nil = unknown, iso-8859-N otherwise
- (let (name)
- (if (featurep 'xemacs)
- (if (featurep 'mule)
- (let* ((sy (or system buffer-file-coding-system))
- (cs (if (symbolp sy) (find-coding-system sy) sy)))
- (when (coding-system-p cs)
- (setq name (cdr (assq (coding-system-name
- (coding-system-base cs))
- '((raw-text . iso-8859-1)
- (binary . iso-8859-1)
- (escape-quoted . iso-8859-1)
- (iso-2022-8 . iso-8859-1)
- (iso-2022-8bit-ss2 . iso-8859-1)
- (iso-2022-lock . iso-8859-1)
- (iso-8859-2 . iso-8859-2)
- (iso-8859-3 . iso-8859-3)
- (iso-8859-9 . iso-8859-9)
- (iso-8859-15 . iso-8859-15)
- (ctext . iso-8859-1)))))))
- (setq name x-symbol-default-coding))
- (let ((cs (or system buffer-file-coding-system 'no-conversion)))
- (when (coding-system-p cs)
- (setq name (cdr (assq (coding-system-base cs)
- '((raw-text . iso-8859-1) ; console
- ;; (undecided . iso-8859-1) "-i" is correct
- ;; here, see
- ;; `x-symbol-set-coding-system-if-undecided'
- (iso-latin-1 . iso-8859-1)
- (iso-latin-1-with-esc . iso-8859-1)
- (iso-latin-2 . iso-8859-2)
- (iso-latin-2-with-esc . iso-8859-2)
- (iso-latin-3 . iso-8859-3)
- (iso-latin-3-with-esc . iso-8859-3)
- (iso-latin-9 . iso-8859-9)
- (iso-latin-9-with-esc . iso-8859-9)
- (iso-latin-15 . iso-8859-15)
- (iso-latin-15-with-esc . iso-8859-15)
- (compound-text . iso-8859-1))))))))
- (if (or (null (boundp 'x-symbol-fchar-tables))
- (assq name x-symbol-fchar-tables))
- name)))
-
-(unless window-system
- (warn "X-Symbol: only limited support on a character terminal")
- (unless (and (boundp 'x-symbol-latin-force-use)
- (eq x-symbol-latin-force-use 'console-user))
- (setq x-symbol-latin1-fonts nil)
- (setq x-symbol-latin2-fonts nil)
- (setq x-symbol-latin3-fonts nil)
- (setq x-symbol-latin5-fonts nil)
- (setq x-symbol-latin9-fonts nil)
- (setq x-symbol-xsymb0-fonts nil)
- (setq x-symbol-xsymb1-fonts nil)))
-
-(defvar x-symbol-default-coding
- ;; TODO: make much nicer (do not use `x-symbol-buffer-coding' directly)
- (cond (noninteractive 'iso-8859-1)
- ((featurep 'mule)
- (let* ((cs (default-value 'buffer-file-coding-system))
- (val (cond (cs
- (x-symbol-buffer-coding cs))
- ((member (downcase current-language-environment)
- '("english" "ascii"))
- 'iso-8859-1)))
- (loc (x-symbol-coding-system-from-locale)))
- (and loc
- (not (eq loc val))
- (warn "X-Symbol: Emacs language environment and system locale specify different encoding, I'll assume `%s'" val))
- val))
- ((x-symbol-coding-system-from-locale))
- (t
- (warn "X-Symbol: cannot deduce default encoding, I'll assume `iso-8859-1'")
- 'iso-8859-1))
- "Default coding used for 8bit characters in buffers.
-Supported values are `iso-8859-1', `iso-8859-2', `iso-8859-3',
-`iso-8859-9', `iso-8859-15', and nil. Value nil is the same as
-`iso-8859-1', while disabling some uses of `x-symbol-coding'.
-
-Without Mule support, the value determines the coding in all buffers
-with value nil for `x-symbol-coding'. With Mule support, Emacs
-recognizes the coding itself.
-
-This value is also used to determine the canoncial character if a
-character is supported by various latin charsets, see
-\\[x-symbol-unalias].")
-
-(unless (or (memq x-symbol-default-coding
- '(nil iso-8859-1 iso-8859-2 iso-8859-3 iso-8859-9))
- (and (eq x-symbol-default-coding 'iso-8859-15)
- (or (not (featurep 'xemacs))
- (not (featurep 'mule))
- (fboundp 'emacs-version>=) (emacs-version>= 21 5))))
- (warn "X-Symbol: illegal `x-symbol-default-coding', I'll use nil")
- (setq x-symbol-default-coding nil))
-
-
-;;;===========================================================================
-;;; General Configuration
-;;;===========================================================================
-
-(defcustom x-symbol-compose-key '(control ?\=)
- "Key used to access command `x-symbol-map'.
-By default, pressing this key twice invokes the GRID: \\[x-symbol-grid].
-This is a list, no vector!"
- :group 'x-symbol-input-init
- :type '(x-symbol-key :tag "Prefix key"))
-
-(defcustom x-symbol-auto-key-autoload t
- "*If non-nil, pressing `x-symbol-compose-key' initialize x-symbol.
-The binding of `x-symbol-compose-key' is redefined after initialization.
-With value nil, you must provide a prefix argument to initialize package
-X-Symbol."
- :group 'x-symbol-input-init
- :type 'boolean)
-
-(defvar x-symbol-auto-conversion-method 'auto-slow
- ;;(if (featurep 'crypt) 'slow 'fast)
- "Non-nil means, set up hooks for auto conversion.
-Fast methods are used if this variable has value `fast'. Otherwise,
-slower methods are used and \\[vc-register] or \\[vc-next-action] will
-fail to decode the buffer contents.
-
-You should set this variable to value `slowest' if, for example, the
-symbol for \\alpha looks like \\233a after \\[save-buffer] (this happens
-on some systems). Value `fast' should not be used, if some other
-package, e.g., crypt, adds a function to `write-file-hooks' which does
-not inspect the remaining functions in this hook.
-
-Default value `auto-slow' is set to `fast' after the initialization of
-XEmacs if package crypt has not been loaded by then.")
-
-
-;;;===========================================================================
-;;; Known Token Languages
-;;;===========================================================================
-
-(defvar x-symbol-language-alist nil
- "Alist of currently registered token languages.
-Elements look like (LANGUAGE . NAME) where LANGUAGE is the symbol
-representing and NAME is the name normally presented to the user,
-see `x-symbol-language-text'.
-
-You should not set this variable directly, use
-`x-symbol-register-language' instead!")
-
-(defcustom x-symbol-charsym-name "x-symbol charsym"
- "Standard name of the pseudo token language x-symbol charsym.
-See language access `x-symbol-LANG-name'. The pseudo language
-corresponds to `x-symbol-language' having value nil and is only used for
-input methods. See `x-symbol-language-text'."
- :group 'x-symbol-miscellaneous
- :type 'string)
-
-(defcustom x-symbol-tex-name "TeX macro"
- "Standard name of token language `tex'.
-See language access `x-symbol-LANG-name'."
- :group 'x-symbol-tex
- :type 'string)
-
-(defcustom x-symbol-tex-modes
- '(tex-mode latex-mode plain-tex-mode noweb-mode)
- "Major modes typically using X-Symbol with token language `tex'.
-See language access `x-symbol-LANG-modes'."
- :group 'x-symbol-tex
- :group 'x-symbol-mode
- :type '(repeat function))
-
-(defcustom x-symbol-sgml-name "SGML entity"
- "Standard name of token language `sgml'.
-See language access `x-symbol-LANG-name'."
- :group 'x-symbol-sgml
- :type 'string)
-
-(defcustom x-symbol-sgml-modes
- ;;'(sgml-mode xml-mode html-mode hm--html-mode html-helper-mode)
- '(html-mode hm--html-mode html-helper-mode)
- "Major modes typically using X-Symbol with language `sgml'.
-See language access `x-symbol-LANG-modes'."
- :group 'x-symbol-sgml
- :group 'x-symbol-mode
- :type '(repeat function))
-
-(defcustom x-symbol-bib-name "BibTeX macro"
- "Standard name of token language `bib'.
-See language access `x-symbol-LANG-name'."
- :group 'x-symbol-bib
- :type 'string)
-
-(defcustom x-symbol-bib-modes '(bibtex-mode)
- "Major modes typically using X-Symbol with language `bib'.
-See language access `x-symbol-LANG-modes'."
- :group 'x-symbol-bib
- :group 'x-symbol-mode
- :type '(repeat function))
-
-(defcustom x-symbol-texi-name "TeXinfo command"
- "Standard name of token language `texi'.
-See language access `x-symbol-LANG-name'."
- :group 'x-symbol-texi
- :type 'string)
-
-(defcustom x-symbol-texi-modes '(texinfo-mode)
- "Major modes typically using X-Symbol with language `texi'.
-See language access `x-symbol-LANG-modes'."
- :group 'x-symbol-texi
- :group 'x-symbol-mode
- :type '(repeat function))
-
-
-;;;===========================================================================
-;;; Buffer-locals
-;;;===========================================================================
-
-(defvar x-symbol-mode nil
- "Non-nil if X-Symbol minor mode is enabled.")
-
-(make-variable-buffer-local 'x-symbol-mode)
-(x-symbol-define-user-options 'x-symbol-mode '(t)
- nil (lambda (dummy arg) (x-symbol-mode (if arg 1 0))))
-
-(defvar x-symbol-language nil
- "*Token language used in current buffer.
-A valid value is required to turn on `x-symbol-mode' which also sets
-this variable to a reasonable value if the variable is not yet
-buffer-local. The value influences the conversion, i.e., decoding and
-encoding of X-Symbol characters, input methods TOKEN and READ-TOKEN,
-fontification of super- and subscripts, image command recognition, the
-info in the echo area, etc.")
-
-(make-variable-buffer-local 'x-symbol-language)
-(put 'x-symbol-language 'permanent-local t)
-(x-symbol-define-user-options 'x-symbol-language
- (lambda () (list* nil '(nil . "None") x-symbol-language-alist))
- '(x-symbol-update-modeline))
-
-(defvar x-symbol-coding nil
- "*Coding of 8bit characters in a file.
-Determines which characters are considered to be 8bit characters for
-file operations. Supported values are `iso-8859-1', `iso-8859-2',
-`iso-8859-3', `iso-8859-9', and `iso-8859-15'. Value nil means a value
-according to `buffer-file-coding-system' with Mule support, or the value
-of `x-symbol-default-coding' without Mule support.
-
-With Mule support, any value other than `nil' is considered invalid if
-encoding according to `buffer-file-coding-system' is neither the same as
-this value nor the same as `x-symbol-default-coding'.
-
-Function `x-symbol-mode' sets this variable to a reasonable value if the
-variable is not yet buffer-local.
-
-During decoding, e.g., when visiting a file, the value is always
-important for the interpretation of 8bit characters, an invalid value is
-considered to be equivalent to value nil. During encoding, e.g., when
-saving a buffer, 8bit characters are not encoded to tokens if the value
-is valid and `x-symbol-8bits' is non-nil.")
-
-(make-variable-buffer-local 'x-symbol-coding)
-(put 'x-symbol-coding 'permanent-local t)
-(x-symbol-define-user-options 'x-symbol-coding
- (lambda () (cons x-symbol-default-coding x-symbol-coding-name-alist))
- '(x-symbol-update-modeline))
-
-(defvar x-symbol-8bits nil
- "*If non-nil, do not encode 8bit characters.
-Variable `x-symbol-coding' determines which characters are assumed to be
-8bit characters. Note that tokens representing 8bit characters are
-always decoded, except if `x-symbol-unique' is non-nil.
-
-Function `x-symbol-mode' sets this variable to a reasonable value if the
-variable is not yet buffer-local.")
-;; TODO: link to `x-symbol-unique'
-
-(make-variable-buffer-local 'x-symbol-8bits)
-(put 'x-symbol-8bits 'permanent-local t)
-(x-symbol-define-user-options 'x-symbol-8bits '(t)
- '(x-symbol-update-modeline))
-
-(defvar x-symbol-unique nil
- "*If non-nil, only decode canonical tokens.
-Canonical tokens are those which are produced when X-Symbol encodes the
-corresponding character. If `x-symbol-8bits' is non-nil, do not decode
-tokens which would be decoded to 8bit characters according to
-`x-symbol-coding'.
-
-Function `x-symbol-mode' sets this variable to a reasonable value if the
-variable is not yet buffer-local.")
-
-(make-variable-buffer-local 'x-symbol-unique)
-(put 'x-symbol-unique 'permanent-local t)
-(x-symbol-define-user-options 'x-symbol-unique '(t)
- '(x-symbol-update-modeline))
-
-(defvar x-symbol-subscripts nil
- "*If non-nil, use special fonts to display super- and subscripts.
-This feature must be supported by the token language via language access
-`x-symbol-LANG-subscript-matcher'. Some parts of the text might be
-invisible, see also variable `x-symbol-reveal-invisible'.
-
-Function `x-symbol-mode' sets this variable to a reasonable value if the
-variable is not yet buffer-local.")
-
-(make-variable-buffer-local 'x-symbol-subscripts)
-(x-symbol-define-user-options 'x-symbol-subscripts '(t)
- '(x-symbol-update-modeline x-symbol-fontify))
-
-(defvar x-symbol-image nil
- "*If non-nil, show little glyphs after image insertion commands.
-This feature must be supported by the token language via language access
-`x-symbol-LANG-image-keywords'.
-
-Function `x-symbol-mode' sets this variable to a reasonable value if the
-variable is not yet buffer-local.")
-
-(make-variable-buffer-local 'x-symbol-image)
-(x-symbol-define-user-options 'x-symbol-image '(t)
- '(x-symbol-update-modeline) 'x-symbol-set-image)
-
-
-;;;===========================================================================
-;;; Minor mode control
-;;;===========================================================================
-
-(defcustom x-symbol-auto-mode-suffixes (x-symbol-auto-mode-suffixes)
- "*Regexps matching file suffixes not to be considered.
-All suffixes from a file name matching these regexps are deleted before
-the file name is used for `x-symbol-auto-mode-alist'. The default value
-includes the REGEXP in all three-valued elements of `auto-mode-alist',
-at definition time, of course."
- :group 'x-symbol-mode
- :type '(repeat regexp))
-
-(defcustom x-symbol-auto-8bit-search-limit nil
- "*Limits search for 8bit characters in the file.
-Used when finding an appropriate value for `x-symbol-8bits'. See also
-`x-symbol-mode'."
- :group 'x-symbol-mode
- :type '(choice (const :tag "No limit" nil) (integer :tag "Limit")))
-
-(defcustom x-symbol-auto-style-alist nil
- ;; TODO: docstring outdated
- "*Alist to setup X-Symbol values for buffers visiting files.
-Elements look like
- (MATCH LANGUAGE MODE-ON CODING 8BITS UNIQUE SUBSCRIPTS IMAGE)
-or
- (MATCH LANGUAGE . VARIABLE)
-
-If MATCH matches a buffer in which command `x-symbol-mode' is invoked,
-the rest of the element is used to setup some buffer-local x-symbol
-specific variables. If no element matches, set `x-symbol-language' to
-the symbol property `x-symbol-language' of the major mode symbol if the
-variable is not already buffer-local.
-
-If `x-symbol-mode' is not already buffer-local, MODE-ON determines
-whether to turn the mode on with `turn-on-x-symbol-conditionally'.
-LANGUAGE, CODING, 8BITS, UNIQUE, SUBSCRIPTS and IMAGE are used to set
-`x-symbol-language', `x-symbol-coding', `x-symbol-8bits',
-`x-symbol-unique', `x-symbol-subscripts' and `x-symbol-image' if these
-values are not already buffer-local.
-
-MATCH is either a list of major modes which must include the mode of the
-current buffer or a regexp matching the file name ignoring some
-suffixes, see `x-symbol-auto-mode-suffixes', or a value used directly.
-
-MODE-ON, LANGUAGE, CODING, 8BITS, UNIQUE, SUBSCRIPTS and IMAGE are
-`eval'ed in that order. During the evaluation, `x-symbol-mode' is
-non-nil according to MODE-ON.
-
-VARIABLE is a symbol whose value contains the above mentioned values,
-see the language access `x-symbol-LANG-auto-style'."
- :group 'x-symbol-mode
- :type '(repeat (cons :format "%v"
- (choice (repeat :tag "In major modes"
- :menu-tag "In major modes"
- (function :value text-mode))
- (regexp :tag "When matched by")
- (function :tag "Predicate"))
- (cons :format "%v"
- (symbol :tag "Token language")
- ;;(x-symbol-auto-style :inline t))))
- (choice (x-symbol-auto-style
- :menu-tag "Values"
- :format "\n%v")
- (variable :tag "Like variable"))))))
-
-(defvar x-symbol-mode-disable-alist nil)
-;; just a `defvar' people should know what they are doing...
-
-
-;;;===========================================================================
-;;; Images
-;;;===========================================================================
-
-(defun x-symbol-image-set-colormap (var value)
- "Set VAR's value to VALUE.
-Custom set function of `x-symbol-image-colormap-allocation' and
-`x-symbol-image-convert-colormap'."
- (if var (set var value))
- (if (boundp 'x-symbol-image-convert-colormap)
- (put 'x-symbol-image-convert-colormap 'x-symbol-image-instance
- (and (boundp 'x-symbol-image-colormap-allocation)
- x-symbol-image-colormap-allocation
- x-symbol-image-convert-colormap
- (if (featurep 'xemacs)
- (make-image-instance
- (vector x-symbol-image-colormap-allocation
- :file x-symbol-image-convert-colormap)
- nil nil t)
- (create-image x-symbol-image-convert-colormap
- x-symbol-image-colormap-allocation))))))
-
-(defcustom x-symbol-image-colormap-allocation 'xpm
- "If non-nil, prevent colors in colormap to be de-allocated.
-The non-nil value should be an image format. See
-`x-symbol-image-convert-colormap'."
- :group 'x-symbol-image-general
- :initialize 'custom-initialize-default
- :set 'x-symbol-image-set-colormap
- :type '(choice (const :tag "Colors can be de-allocated" nil)
- (const :tag "Colormap is xpm file" xpm)
- (symbol :tag "Other image format")))
-
-(defcustom x-symbol-image-convert-colormap
- (and x-symbol-data-directory
- (expand-file-name "colormap138.xpm" x-symbol-data-directory))
- "File name of colormap files.
-Used by `x-symbol-image-start-convert-colormap' for image cache file
-names not matched by `x-symbol-image-convert-mono-regexp'. See also
-`x-symbol-image-colormap-allocation'."
- :group 'x-symbol-image-general
- :initialize 'custom-initialize-default
- :set 'x-symbol-image-set-colormap
- :type '(choice (const :tag "No map" nil) file))
-
-
-
-;;;;##########################################################################
-;;;; Code
-;;;;##########################################################################
-
-
-(defalias 'x-symbol-cset-registry 'caaar)
-(defalias 'x-symbol-cset-coding 'cdaar)
-(defalias 'x-symbol-cset-leading 'cadar)
-(defalias 'x-symbol-cset-score 'caddar)
-(defalias 'x-symbol-cset-left 'cadr)
-(defalias 'x-symbol-cset-right 'cddr)
-
-(defvar x-symbol-input-initialized nil
- "Internal. If non-nil, the input methods are initialized.")
-
-
-;;;===========================================================================
-;;; Key autoload
-;;;===========================================================================
-
-;;;###autoload
-(defun x-symbol-key-autoload (&optional arg)
- "Initialize package x-symbol and use the keys for this command again.
-Package x-symbol and the functions in `x-symbol-load-hook' should
-re-bind all key-sequence which invoke this command. You should provide
-a prefix argument ARG to this command if `x-symbol-auto-key-autoload' is
-nil."
- (interactive "P")
- (when x-symbol-input-initialized
- (error "%s should be rebound in `x-symbol-init-input-hook'"
- (key-description (this-command-keys))))
- (unless (or arg x-symbol-auto-key-autoload)
- (error "Use %s with prefix argument to initialize the input methods"
- (key-description (this-command-keys))))
- (let ((this (append (this-command-keys) nil)))
- ;; for some reason this loop is necessary...
- (while (and this (null (eq (key-binding (vector (car this))) this-command)))
- (setq this (cdr this)))
- (setq prefix-arg arg)
- (setq unread-command-events this))
- (x-symbol-init-input))
-
-;;;###autoload
-(defalias 'x-symbol-map-autoload 'x-symbol-key-autoload)
-
-
-;;;===========================================================================
-;;; Minor mode, fontification
-;;;===========================================================================
-
-(defun x-symbol-buffer-file-name ()
- (when buffer-file-name
- (let ((name (file-name-sans-versions buffer-file-name))
- (case-fold-search (eq system-type 'vax-vms))
- (suffixes x-symbol-auto-mode-suffixes))
- (while suffixes
- (and (string-match (pop suffixes) name)
- (< (match-beginning 0) (length name))
- ; protect against stupid regexp
- (setq name (substring name 0 (match-beginning 0))
- suffixes x-symbol-auto-mode-suffixes)))
- name)))
-
-(defun x-symbol-auto-set-variable (symbol form)
- "Set SYMBOL's value to evaluated FORM if SYMBOL is not buffer-local."
- (or (local-variable-p symbol (current-buffer))
- (set symbol (eval form))))
-
-;;;###autoload
-(defun x-symbol-mode (&optional arg special)
- "Toggle X-Symbol mode.
-Toggle X-Symbol mode. If provided with a prefix argument, turn X-Symbol
-mode on if the numeric value of the argument is positive, else turn it
-off. If no token language can be deduced, ask for a token language; if
-provided with a non-numeric prefix argument, always ask.
-
-By default, X-Symbol mode is disabled in special major-modes visiting a
-file, e.g., `vm-mode'. Use a prefix argument to be asked whether to
-turn in on anyway.
-
-When not already defined, various buffer-local variables are set when
-turning on X-Symbol. See `x-symbol-auto-style-alist' and the language
-access `x-symbol-LANG-modes'.
-
-Turning X-Symbol mode on requires a valid `x-symbol-language' and also
-decodes tokens if the mode was turned off before, see
-\\[x-symbol-decode-recode]. Turning X-Symbol mode off also encodes
-x-symbol characters if the mode was turned on before, see
-\\[x-symbol-encode-recode]. If optional argument SPECIAL has value
-`init', the old mode status is assumed to be off."
- (interactive (list current-prefix-arg 'interactive))
- (if (eq special 'init) (setq x-symbol-mode nil))
- (let* ((old-mode (if (eq special 'init) nil x-symbol-mode))
- (new-mode (if arg (> (prefix-numeric-value arg) 0) (not old-mode)))
- (disabled0 (assq major-mode x-symbol-mode-disable-alist))
- (disabled1 (if disabled0
- (cdr disabled0)
- (get major-mode 'x-symbol-mode-disable)))
- (disabled (cond (old-mode nil)
- ((null new-mode) nil)
- ((null disabled1)
- (and buffer-file-name (get major-mode 'mode-class) t))
- ((eq disabled1 'error))
- ((stringp disabled1) disabled1)
- ((functionp disabled1) (funcall disabled1)))))
- (setq x-symbol-mode nil)
- (when disabled
- (if (and (eq special 'interactive)
- arg
- (yes-or-no-p
- (format "Cannot use X-Symbol with %s Mode. Turn on anyway? "
- mode-name)))
- (setq disabled nil)
- (or (stringp disabled)
- (setq disabled (format "%s Mode does not allow to turn on X-Symbol"
- mode-name)))
- (setq new-mode nil)))
- (when new-mode
- (let* ((buffer-file-name (x-symbol-buffer-file-name))
- (buffer-name (or buffer-file-name (buffer-name)))
- (alist x-symbol-auto-style-alist)
- (style (get major-mode 'x-symbol-style))
- ;; WARNING: `values' is a global variable which is set during GC
- ;; (and we have dynamic scoping)! major-modes can set a specific
- ;; language
- matcher)
- (while alist
- (setq matcher (caar alist))
- (if (cond ((stringp matcher) (string-match matcher buffer-name))
- ((consp matcher) (memq major-mode matcher))
- ((functionp matcher) (funcall matcher)))
- (setq style (cdar alist)
- alist nil)
- (setq alist (cdr alist))))
- (unless style
- (let ((langs x-symbol-language-alist))
- (while langs
- (if (memq major-mode
- (symbol-value (get (caar langs) 'x-symbol-LANG-modes)))
- (setq style (cons (caar langs) t)
- langs nil)
- (setq langs (cdr langs))))))
- (if (car style)
- (or (local-variable-p 'x-symbol-language (current-buffer))
- (setq x-symbol-language (car style))))
- ;; check language ----------------------------------------------------
- (if (and x-symbol-language
- (symbolp x-symbol-language)
- (get x-symbol-language 'x-symbol-LANG-feature))
- (when (and (eq special 'interactive) (consp arg))
- (setq x-symbol-language
- (x-symbol-read-language
- (format "Token Language for X-Symbol mode (default %s): "
- (x-symbol-language-text))
- x-symbol-language 'cdr)))
- (if (eq special 'interactive)
- (or (setq x-symbol-language
- (x-symbol-read-language
- "Token Language for X-Symbol mode: " nil 'cdr))
- (setq disabled
- "A valid token language is required to turn on X-Symbol"))
- ;; no simple `setq': prevent making `x-symbol-language' buffer-local
- (if x-symbol-language (setq x-symbol-language nil)))
- (setq style nil))
- (when x-symbol-language
- (require (get x-symbol-language 'x-symbol-LANG-feature))
- (setq style
- (cond ((or (null style) (eq (cdr style) t)
- (not (eq (car style) x-symbol-language)))
- (symbol-value (get x-symbol-language
- 'x-symbol-LANG-auto-style)))
- ((and (symbolp (cdr style)) (boundp (cdr style)))
- (symbol-value (cdr style)))
- (t
- (cdr style))))
- (setq x-symbol-mode (eval (car style)))
- (x-symbol-auto-set-variable 'x-symbol-coding (cadr style))
- (or (local-variable-p 'x-symbol-8bits (current-buffer))
- (setq x-symbol-8bits (or (eval (caddr style))
- (x-symbol-auto-8bit-search
- x-symbol-auto-8bit-search-limit))
- ;; use value `null' to disable 8bit char search
- x-symbol-8bits (and (not (eq x-symbol-8bits 'null))
- x-symbol-8bits)))
- (x-symbol-auto-set-variable 'x-symbol-unique (cadddr style))
- (x-symbol-auto-set-variable 'x-symbol-subscripts (nth 4 style))
- (x-symbol-auto-set-variable 'x-symbol-image (nth 5 style))
- (or (and (eq special 'init) (null arg))
- (setq x-symbol-mode new-mode)))))
- (if (eq special 'init)
- (if x-symbol-mode (x-symbol-mode-internal t))
- (x-symbol-mode-internal (and x-symbol-language
- (eq (null old-mode) (and x-symbol-mode t))))
- (and disabled
- (eq special 'interactive)
- (error (if (stringp disabled)
- disabled
- "Cannot turn on X-Symbol mode"))))))
-
-;;;###autoload
-(defun turn-on-x-symbol-conditionally ()
- "Turn on x-symbol mode conditionally, see `x-symbol-mode'.
-Call `x-symbol-mode' with SPECIAL having value `init'."
- (x-symbol-mode (and (local-variable-p 'x-symbol-mode (current-buffer))
- (if x-symbol-mode 1 0))
- 'init))
-
-;;;###autoload
-(defun x-symbol-fontify (&optional beg end)
- "Re-fontify region between BEG and END."
- (interactive (and (region-active-p) (list (region-beginning) (region-end))))
- (cond ((not font-lock-mode) (turn-on-font-lock))
- ((and (featurep 'xemacs) (boundp 'lazy-shot-mode) lazy-shot-mode)
- ;; copied from lazy-shot:
- (setq font-lock-fontified
- (and lazy-shot-minimum-size
- (>= (buffer-size) lazy-shot-minimum-size)))
- (lazy-shot-install-extents (point-min) (point-max)
- font-lock-fontified))
- ((and (featurep 'xemacs) (boundp 'lazy-lock-mode) lazy-lock-mode)
- ;; copied from lazy-lock:
- (let ((modified (buffer-modified-p)) (inhibit-read-only t)
- (buffer-undo-list t)
- ;;deactivate-mark
- buffer-file-name buffer-file-truename)
- (remove-text-properties (or beg 1) (or end (1+ (buffer-size)))
- '(fontified nil))
- (or modified (set-buffer-modified-p nil))))
- (t
- (font-lock-fontify-buffer))))
-
-
-;;;===========================================================================
-;;; comint support
-;;;===========================================================================
-
-(defun x-symbol-comint-output-filter (dummy)
- ;; checkdoc-params: (dummy)
- "Decode output of comint's process.
-Used as value in `comint-output-filter-functions'."
- (and x-symbol-mode x-symbol-language
- (x-symbol-decode-region
- (if (interactive-p) comint-last-input-end comint-last-output-start)
- (process-mark (get-buffer-process (current-buffer))))))
-
-(defun x-symbol-comint-send (proc string)
- "Encode STRING and send it to process PROC.
-Used as value of `comint-input-sender', uses
-`x-symbol-orig-comint-input-sender'."
- (and x-symbol-mode x-symbol-language
- (setq string (x-symbol-encode-string string (current-buffer))))
- (funcall x-symbol-orig-comint-input-sender proc string))
-
-
-;;;===========================================================================
-;;; Hooks for automatic conversion
-;;;===========================================================================
-
-;; TODO: for format fns: check whether read-only stuff is still necessary...
-;; TODO: check the narrow-to-region stuff
-
-(defun x-symbol-format-decode (start end)
- (if (and x-symbol-mode x-symbol-language)
- (save-restriction
- (narrow-to-region start end)
- (let ((modified (buffer-modified-p)) ; t if `recover-file'!
- ;;(buffer-undo-list t) ; do not record changes
- ;; we cannot set buffer-undo-list to t even if the previous
- ;; value is nil because M-x insert-file as the first command
- ;; after reading a file would set the old insert-region
- ;; boundaries into the undo-list
- (buffer-read-only nil) ; always allow conversion
- (inhibit-read-only t)
- (first-change-hook nil) ; no `flyspell-mode' here
- (after-change-functions nil)) ; no fontification
-;;; (and orig-buffer
-;;; (not (eq (current-buffer) orig-buffer))
-;;; (x-symbol-inherit-from-buffer orig-buffer))
- (x-symbol-decode-all)
- (or modified (set-buffer-modified-p nil))
- (point-max)))
- end))
-
-(defun x-symbol-format-encode (start end orig-buffer)
- (let ((new-buffer (current-buffer)))
- (if (eq new-buffer orig-buffer)
- (and x-symbol-mode x-symbol-language
- (save-restriction
- (narrow-to-region start end)
- (x-symbol-encode-all)))
- (set-buffer orig-buffer)
- (and x-symbol-mode x-symbol-language
- (if (featurep 'mule)
- (let ((cs buffer-file-coding-system))
- (x-symbol-encode-all new-buffer)
- (setq buffer-file-coding-system cs))
- (x-symbol-encode-all new-buffer))))))
-
-(defun x-symbol-after-insert-file (len)
- ;; checkdoc-params: (len)
- "Decode tokens, e.g., after \\[vc-register] or \\[vc-next-action].
-Added to `after-insert-file-functions' if
-`x-symbol-auto-conversion-method' has value `fast'."
- ;; TODO (outdated?, dropped coding): in old XEmacsen, there is no way to know
- ;; the start position of the region. If `insert-file-contents' is called
- ;; with argument REPLACE being non-nil, it is not always point. Thus, we use
- ;; `point-min', except when called from `M-x insert-file'.
-
- ;; The docstring of `after-insert-file-functions' talks about bytes, but that
- ;; seems to be nonsense and doesn't match the coding in lisp/format.el,
- ;; must be checked with src/fileio.c.
- (and x-symbol-mode x-symbol-language
- (if (<= (+ (point) len) (point-max))
- (save-restriction
- (narrow-to-region (point) (+ (point) len))
- (let ((origpos (point))
- (modified (buffer-modified-p)) ; t if `recover-file'!
- ;;(buffer-undo-list t) ; do not record changes
- ;; we cannot set buffer-undo-list to t even if the previous
- ;; value is nil because M-x insert-file as the first command
- ;; after reading a file would set the old insert-region
- ;; boundaries into the undo-list
- (buffer-read-only nil) ; always allow conversion
- (inhibit-read-only t)
- (first-change-hook nil) ; no `flyspell-mode' here
- (after-change-functions nil)) ; no fontification
- (x-symbol-decode-all)
- (goto-char origpos)
- (or modified (set-buffer-modified-p nil))
- (setq len (- (point-max) (point-min)))))
- (lwarn 'x-symbol 'warning
- ;; might leed to quite a few warnings with old XEmacs, get those
- "Wrong point position %d (len: %d, max: %d) provided by Emacs for functions in `after-insert-file-functions'" (point) len (point-max))))
- len)
-
-(defun x-symbol-write-region-annotate-function (start end)
- ;; checkdoc-params: (start end)
- "Encode x-symbol characters using another buffer.
-Added to `write-region-annotate-functions' if
-`x-symbol-auto-conversion-method' has value `fast'."
- (and x-symbol-mode x-symbol-language
- (not (equal start "")) ; kludgy feature of `write-region'
- ;; Without the test, "x-symbol.el" is loaded twice, the initialization
- ;; done twice (resulting in warnings about charsym redefinitions).
- ;; Reason: in Emacs, `make-temp-name', used for the value of some var in
- ;; "x-symbol-vars.el", required by "x-symbol.el", calls `write-region'.
- (let ((selective selective-display))
- ;; at least in XEmacs, this function might be called with both args
- ;; nil
- (x-symbol-encode-all (get-buffer-create " x-symbol conversion")
- (or start (point-min)) (or end (point-max)))
- ;; set `selective-display' according to orig buffer
- (setq selective-display selective)))
- nil)
-
-(defun x-symbol-write-file-hook ()
- "Encode x-symbol characters in current buffer.
-Added to `write-file-hooks' if `x-symbol-auto-conversion-method' has a
-value other than nil or `fast'. Refontifies buffer if
-`x-symbol-auto-conversion-method' has value `slowest'."
- (and x-symbol-mode x-symbol-language
- (let ((buffer-read-only nil)
- ;; `buffer-read-only' is only dec/ if `inhibit-read-only' doesn't
- ;; exist. TODO: check whether still nec/ in XEmacs-21.1
- (inhibit-read-only t)
- (inhibit-modification-hooks t) ; Emacs only: then
- ; `after-change-functions' not nec/
- (first-change-hook nil) ; no `flyspell-mode' here
- (after-change-functions nil)) ; no fontification!
- (widen) ;; Called inside `save-recursion' and `save-restriction'.
- ;; TODO: define a common macro in x-symbol-macs.el instead, which can
- ;; also be used in `x-symbol-tex-translate-locations', it has an
- ;; addition argument for the var `changed' there, with that arg: no
- ;; `unwind-protect'
- (if (featurep 'xemacs)
- (call-with-transparent-undo
- (lambda ()
- (x-symbol-encode-all)
- (continue-save-buffer)))
- ;; not called inside `save-excursion' in Emacs >= 20.3
- (save-excursion
- (let ((buffer-undo-list nil)
- ;; Kludge to prevent undo list truncation:
- (undo-limit most-positive-fixnum) ; Emacs
- (undo-strong-limit most-positive-fixnum) ; Emacs
- (undo-high-threshold -1) ; XEmacs
- (undo-threshold -1)) ; XEmacs
- (unwind-protect
- (let ((file-hooks (cdr (memq 'x-symbol-write-file-hook
- (default-value
- 'write-file-hooks))))
- setmodes)
- (x-symbol-encode-all)
- (or (run-hook-with-args-until-success 'file-hooks)
- (setq setmodes (basic-save-buffer-1)))
- ;; See `basic-save-buffer'. TODO: do I also have to set the
- ;; coding system and `buffer-file-number'?
- (if setmodes
- (condition-case ()
- (set-file-modes buffer-file-name setmodes)
- (error nil))))
- (let ((tail buffer-undo-list))
- (setq buffer-undo-list t)
- (while tail
- (setq tail (primitive-undo (length tail) tail))))))))
- (and (eq x-symbol-auto-conversion-method 'slowest)
- font-lock-mode
- (x-symbol-fontify))
- (set-buffer-modified-p nil)
- 'x-symbol-write-file-hook))) ; do not write again
-
-
-;;;===========================================================================
-;;; Init
-;;;===========================================================================
-
-(defvar x-symbol-modeline-string ""
- "String that should appear in the modeline when `x-symbol-mode' is on.
-Its value is set by `x-symbol-update-modeline'.")
-(make-variable-buffer-local 'x-symbol-modeline-string)
-
-(defvar x-symbol-mode-map
- (let ((m (make-sparse-keymap)))
- ;; (substitute-key-definition 'x-symbol-map-autoload 'x-symbol-map
- ;; m global-map)
- m))
-
-(add-minor-mode 'x-symbol-mode 'x-symbol-modeline-string x-symbol-mode-map)
-(put 'x-symbol-mode :menu-tag "X-Symbol")
-
-(defconst x-symbol-early-language-access-alist
- '((x-symbol-LANG-name "name" nil stringp)
- (x-symbol-LANG-modes "modes" t listp) ; TODO: non-optional
- (x-symbol-LANG-auto-style "auto-style" require)))
-
-(defun x-symbol-init-language-accesses (language alist)
- "Initialize accesses for token language LANGUAGE according to ALIST.
-The symbol property `x-symbol-feature' of LANGUAGE must be set before.
-See also `x-symbol-language-access-alist'."
- ;;If optional NO-TEST is nil, accesses which do not point to a bound
- ;;variable are not set.
- (let ((feature (get language 'x-symbol-LANG-feature))
- (ok t)
- symbol)
- (dolist (item alist)
- (setq symbol (intern (format "%s-%s" feature (cadr item))))
- (if (not (or (boundp symbol) (eq (caddr item) 'require)))
- (or (eq (caddr item) t) ; optional access
- (and (caddr item) (not (get language (caddr item))))
- (progn
- (lwarn feature 'error
- "Token language `%s' does not define `%s'" language symbol)
- (setq ok nil))
- (put language (car item) symbol))
- (or (null (cadddr item))
- (caddr item) ; optional access: value nil always ok
- (funcall (cadddr item) (symbol-value symbol))
- (progn
- (lwarn feature 'error
- "Token language `%s' uses illegal type for value of `%s'"
- language symbol)
- (setq ok nil)))
- (put language (car item) symbol)))
- ok))
-
-;;;###autoload
-(defun x-symbol-register-language (language feature &optional modes)
- "Register token language LANGUAGE.
-FEATURE is a feature which `provide's LANGUAGE. MODES are major modes
-which typically use LANGUAGE. Using LANGUAGE's accesses will initialize
-LANGUAGE, see `x-symbol-language-value'."
- (unless (get language 'x-symbol-LANG-feature)
- (put language 'x-symbol-LANG-feature feature))
- (unless
- (x-symbol-init-language-accesses language
- x-symbol-early-language-access-alist)
- (error "Registration of X-Symbol language `%s' has failed" language))
- (dolist (mode modes) (put mode 'x-symbol-style (cons language t)))
- (unless (assq language x-symbol-language-alist)
- (setq x-symbol-language-alist
- (nconc x-symbol-language-alist
- (list (cons language
- (symbol-value
- (get language 'x-symbol-LANG-name))))))))
-
-;;;###autoload
-(defun x-symbol-initialize (&optional arg)
- "Initialize package X-Symbol.
-See variable `x-symbol-initialize' and function `x-symbol-after-init'.
-Also allocate colormap, see `x-symbol-image-colormap-allocation'.
-Unless optional argument ARG is non-nil, do not initialize package
-X-Symbol twice."
- (interactive "P")
- (unless (and (get 'x-symbol 'x-symbol-initialized) (null arg))
- (put 'x-symbol 'x-symbol-initialized t)
- ;; X-Symbol doesn't make sense without the following. `ctl-arrow' is a
- ;; boolean in Emacs, but not in XEmacs: despite its docstring, value t
- ;; means the same as 256 (and 255 sometimes, which is probably wrong).
- (or (default-value 'ctl-arrow) (setq-default ctl-arrow 'iso-8859/1))
- ;; Token languages -------------------------------------------------------
- (when (or (eq x-symbol-initialize t)
- (memq 'languages x-symbol-initialize))
- (x-symbol-register-language 'tex 'x-symbol-tex)
- (x-symbol-register-language 'sgml 'x-symbol-sgml)
- (x-symbol-register-language 'bib 'x-symbol-bib)
- (x-symbol-register-language 'texi 'x-symbol-texi))
- ;; Global mode -----------------------------------------------------------
- (when (or (eq x-symbol-initialize t)
- (memq 'global x-symbol-initialize))
- (add-hook 'hack-local-variables-hook 'turn-on-x-symbol-conditionally))
- ;; Key bindings ----------------------------------------------------------
- (when (or (eq x-symbol-initialize t)
- (memq 'keys x-symbol-initialize))
- (global-set-key (vector x-symbol-compose-key) 'x-symbol-map-autoload)
- (unless (featurep 'xemacs)
- (define-key isearch-mode-map (vector x-symbol-compose-key) nil)
- ;;(define-key isearch-mode-map [mouse-2] 'isearch-mouse-2)
- (define-key isearch-mode-map [menu-bar X-Symbol] nil))
- (global-set-key [(control ?\,)] 'x-symbol-modify-key)
- (global-set-key [(control ?\.)] 'x-symbol-rotate-key))
- ;; Font path -------------------------------------------------------------
- (and (or (eq x-symbol-initialize t)
- (memq 'font-path x-symbol-initialize))
- x-symbol-font-directory
- (file-accessible-directory-p x-symbol-font-directory)
- ;; by Jim Radford <radford@robby.caltech.edu>:
- (memq (console-type) '(x gtk))
- (if (fboundp 'x-set-font-path) ; XEmacs >= 21.4
- (let ((font-path (x-get-font-path)))
- (condition-case nil
- (unless (or (member (file-name-as-directory
- x-symbol-font-directory) font-path)
- (member (directory-file-name
- x-symbol-font-directory) font-path))
- (x-set-font-path (nconc font-path
- (list x-symbol-font-directory)))
- nil)
- (t
- (lwarn 'x-symbol 'error
- "Couldn't add %s to X font path" x-symbol-font-directory)
- t))) ; (error t) doesn't work (XEmacs bug?)
- ;; This should be commented out until I can figure out how to
- ;; get the display name into the -display arg for xset.
- (with-temp-buffer
- (call-process "xset" nil t nil "q")
- (goto-char (point-min))
- (unless (search-forward (directory-file-name
- x-symbol-font-directory) nil t)
- (not (eq 0 (call-process "xset" nil nil nil "fp+"
- x-symbol-font-directory))))))
- ;; one cause: other dir with X-Symbol fonts already exists (old
- ;; installation)
- (lwarn 'x-symbol 'error
- "Couldn't add %s to X font path" x-symbol-font-directory))
- ;; Package fast-lock -----------------------------------------------------
- (when (or (eq x-symbol-initialize t)
- (memq 'fast-lock x-symbol-initialize))
- (setq fast-lock-save-faces nil))
- ;; Package AucTeX ----------------------------------------------------------
- (when (or (eq x-symbol-initialize t)
- (memq 'auctex x-symbol-initialize))
- (or (fboundp 'x-symbol-tex-error-location) ; esp for preview-latex
- (fset 'x-symbol-tex-error-location 'ignore))
- (add-hook 'TeX-translate-location-hook 'x-symbol-tex-error-location)
- (add-hook 'TeX-region-hook 'x-symbol-inherit-from-buffer) ; v9.8a+
- (setq LaTeX-math-insert-function 'x-symbol-auctex-math-insert)) ; v9.8a+
- ;; Package RefTeX --------------------------------------------------------
- (when (or (eq x-symbol-initialize t)
- (memq 'reftex x-symbol-initialize))
- (unless (and (boundp 'reftex-translate-to-ascii-function)
- (fboundp reftex-translate-to-ascii-function)
- (not (eq reftex-translate-to-ascii-function
- 'reftex-latin1-to-ascii)))
- (setq reftex-translate-to-ascii-function 'x-symbol-translate-to-ascii))
- (add-hook 'reftex-pre-refontification-functions
- 'x-symbol-inherit-from-buffer)
- (unless (featurep 'mule)
- ;; RefTeX might be invoked from a TeX buffer without X-Symbol
- (or (fboundp 'x-symbol-nomule-fontify-cstrings)
- (fset 'x-symbol-nomule-fontify-cstrings 'ignore))
- (add-hook 'reftex-display-copied-context-hook
- 'x-symbol-nomule-fontify-cstrings)))
- ;; Miscellaneous ---------------------------------------------------------
- (x-symbol-image-set-colormap nil nil)
- (if init-file-loaded
- (x-symbol-after-init)
- (add-hook 'after-init-hook 'x-symbol-after-init))))
-
-(defun x-symbol-after-init ()
- "Late initialization for package X-Symbol.
-See function `x-symbol-initialize' and variables `x-symbol-initialize'
-and `x-symbol-auto-conversion-method'. Also add elements to
-`x-symbol-auto-mode-suffixes' if necessary."
- (when x-symbol-auto-conversion-method
- (and (eq x-symbol-auto-conversion-method 'auto-slow)
- (null (featurep 'crypt))
- (setq x-symbol-auto-conversion-method 'fast))
- (cond ((eq x-symbol-auto-conversion-method 'format)
- (or (assq 'x-symbol format-alist)
- (push '(x-symbol "X-Symbol" nil
- x-symbol-format-decode x-symbol-format-encode
- t x-symbol-mode t)
- format-alist)))
- ((eq x-symbol-auto-conversion-method 'fast)
- (add-hook 'after-insert-file-functions
- 'x-symbol-after-insert-file t)
- ;; If we don't use APPEND for the hook below, we must use APPEND for
- ;; the hook above (and v/v). For Emacs-21.2, using APPEND when
- ;; inserting is the only correct one, because function
- ;; `after-insert-file-set-buffer-file-coding-system', which has been
- ;; added to the hook, must run first (BTW, also for format.el...).
- (add-hook 'write-region-annotate-functions
- 'x-symbol-write-region-annotate-function))
- ((and (not (featurep 'xemacs))
- (local-variable-p 'write-file-hooks))
- (error "Cannot use X-Symbol with crypt.el/crypt++.el and local `write-file-hooks'"))
- (t
- (add-hook 'write-file-hooks 'x-symbol-write-file-hook))))
- ;; misc user additions to `auto-mode-alist':
- (setq x-symbol-auto-mode-suffixes (x-symbol-auto-mode-suffixes
- x-symbol-auto-mode-suffixes))
- ;; Package comint ----------------------------------------------------------
- (when (or (eq x-symbol-initialize t)
- (memq 'comint x-symbol-initialize))
- (add-hook 'comint-output-filter-functions 'x-symbol-comint-output-filter)
- (and (boundp 'comint-input-sender)
- (not (eq comint-input-sender 'x-symbol-comint-send))
- (setq x-symbol-orig-comint-input-sender comint-input-sender))
- (setq comint-input-sender 'x-symbol-comint-send))
- ;; Package bib-cite: X-Symbol decoding would overwrite cite highlighting with
- ;; normal installation of bib-cite -----------------------------------------
- (when (and (or (eq x-symbol-initialize t)
- (memq 'bib-cite x-symbol-initialize))
- (or (and (boundp 'LaTeX-mode-hook)
- (memq 'turn-on-bib-cite LaTeX-mode-hook))
- (and (boundp 'latex-mode-hook)
- (memq 'turn-on-bib-cite latex-mode-hook))))
- (remove-hook 'LaTeX-mode-hook 'turn-on-bib-cite)
- (remove-hook 'latex-mode-hook 'turn-on-bib-cite)
- (add-hook 'find-file-hooks 'x-symbol-turn-on-bib-cite)))
-
-
-;;;===========================================================================
-;;; Support for other packages
-;;;===========================================================================
-
-(defun x-symbol-inherit-from-buffer (&optional parent action)
- "Inherit X-Symbol's buffer-local variables from buffer PARENT.
-Inherit `x-symbol-mode', `x-symbol-coding', `x-symbol-8bits',
-`x-symbol-language', and `x-symbol-subscripts' from PARENT and set
-`x-symbol-image' to nil. If PARENT is nil, `orig-buffer' is used if
-it is bound. ACTION is ignored."
- (and (null parent) (boundp 'orig-buffer) (setq parent orig-buffer))
- ;; I don't care too much that people who use X-Symbol in the master buffer,
- ;; but not in the buffer where they invoke M-x TeX-command-region from, won't
- ;; have the X-Symbol characters in the "master envelope" decoded...
- (if (buffer-live-p (get-buffer parent))
- (let (mode-on coding 8bits unique language subscripts)
- (save-excursion
- (set-buffer parent)
- (setq mode-on x-symbol-mode
- coding x-symbol-coding
- 8bits x-symbol-8bits
- unique x-symbol-unique
- language x-symbol-language
- subscripts x-symbol-subscripts))
- (setq x-symbol-mode mode-on)
- (if (local-variable-p 'x-symbol-coding parent)
- (setq x-symbol-coding coding))
- (if (local-variable-p 'x-symbol-8bits parent)
- (setq x-symbol-8bits 8bits))
- (if (local-variable-p 'x-symbol-unique parent)
- (setq x-symbol-unique unique))
- (if (local-variable-p 'x-symbol-language parent)
- (setq x-symbol-language language))
- (if (local-variable-p 'x-symbol-subscripts parent)
- (setq x-symbol-subscripts subscripts))
- (setq x-symbol-image nil))))
-
-(defun x-symbol-auctex-math-insert (string)
- "Insert the character for \\STRING.
-Used as value for `LaTeX-math-insert-function'."
- (let ((cstring (and x-symbol-mode x-symbol-language
- (x-symbol-decode-single-token (concat "\\" string)))))
- (if cstring
- (insert cstring)
- (TeX-insert-macro string))))
-
-(defun x-symbol-turn-on-bib-cite ()
- "Run `turn-on-bib-cite' if we are in `latex-mode'.
-Added to `find-file-hooks' if the initialization for X-Symbol has
-removed `turn-on-bib-cite' from `LaTeX-mode-hook' or `latex-mode-hook'.
-See variable `x-symbol-initialize'."
- (if (eq major-mode 'latex-mode) (turn-on-bib-cite)))
-
-;;; Local IspellPersDict: .ispell_xsymb
-;;; x-symbol-hooks.el ends here