Mercurial > emacs
view lisp/international/latexenc.el @ 99602:c94ec53df9d8
* net/ange-ftp.el (ange-ftp-multi-msgs, ange-ftp-good-msgs)
(ange-ftp-try-passive-mode, ange-ftp-data-buffer-name)
(ange-ftp-account-hashtable, ange-ftp-ls-cache-lsargs)
(ange-ftp-ls-cache-file, ange-ftp-ls-cache-res, ange-ftp-get-user)
(ange-ftp-ftp-name-component, ange-ftp-kill-ftp-process)
(ange-ftp-quote-string, ange-ftp-process-handle-line)
(ange-ftp-start-process, ange-ftp-send-cmd, ange-ftp-add-dumb-unix-host)
(ange-ftp-before-parse-ls-hook, ange-ftp-after-parse-ls-hook)
(ange-ftp-ls, ange-ftp-add-dl-dir, ange-ftp-get-file-entry)
(ange-ftp-set-binary-mode, ange-ftp-set-ascii-mode, ange-ftp-get-pwd)
(ange-ftp-file-name-as-directory-alist, ange-ftp-reread-dir)
(ange-ftp-vms-filename-regexp, ange-ftp-bs2000-fix-name-regexp-reverse)
(ange-ftp-bs2000-fix-name-regexp): Fix typos in docstrings.
(ange-ftp-name-format, ange-ftp-gateway-fatal-msgs)
(ange-ftp-xfer-size-msgs, ange-ftp-tmp-name-template)
(ange-ftp-netrc-filename, ange-ftp-disable-netrc-security-check)
(ange-ftp-default-user, ange-ftp-default-password)
(ange-ftp-default-account, ange-ftp-netrc-default-password)
(ange-ftp-netrc-default-account, ange-ftp-dumb-unix-host-regexp)
(ange-ftp-binary-file-name-regexp, ange-ftp-gateway-host)
(ange-ftp-gateway-prompt-pattern, ange-ftp-smart-gateway-port)
(ange-ftp-send-hash, ange-ftp-binary-hash-mark-size)
(ange-ftp-ascii-hash-mark-size, ange-ftp-process-verbose)
(ange-ftp-ftp-program-name, ange-ftp-gateway-ftp-program-name)
(ange-ftp-ftp-program-args, ange-ftp-nslookup-program)
(ange-ftp-make-backup-files, ange-ftp-retry-time)
(ange-ftp-bs2000-special-prefix): Remove * from defcustom docstrings.
(ange-ftp-skip-msgs, ange-ftp-potential-error-msgs)
(ange-ftp-gateway-tmp-name-template)
(ange-ftp-generate-anonymous-password, ange-ftp-local-host-regexp)
(ange-ftp-gateway-program-interactive, ange-ftp-smart-gateway)
(ange-ftp-raw-login): Remove * from defcustom docstrings; fix typos.
(ange-ftp-fatal-msgs): Remove * from defcustom docstring; doc fix.
(ange-ftp-gateway-program): Remove * from docstring and reflow.
(ange-ftp-hash-entry-exists-p, ange-ftp-hash-table-keys)
(ange-ftp-raw-send-cmd, ange-ftp-get-files, ange-ftp-canonize-filename)
(ange-ftp-file-name-as-directory, ange-ftp-directory-file-name):
(ange-ftp-copy-files-async, ange-ftp-rename-remote-to-remote):
(ange-ftp-rename-local-to-remote): Doc fixes.
(ange-ftp-set-xfer-size, ange-ftp-call-cont, ange-ftp-process-filter):
Use `when', `unless'.
(ange-ftp-set-passwd): Rename arg PASSWD to PASSWORD.
(ange-ftp-process-handle-hash): Rename arg STR to STRING.
(ange-ftp-nslookup-host): Rename arg HOST to HOSTNAME.
(ange-ftp-smart-login): Rename arg PASS to PASSWORD.
(ange-ftp-normal-login): Rename arg PASS to PASSWORD. Fix typo.
(ange-ftp-process-sentinel): Use `when'. Fix typo.
(ange-ftp-gwp-start): Use `let', not `let*'; use `when'. Fix typo.
(ange-ftp-fix-name-func-alist, ange-ftp-fix-dir-name-func-alist)
(ange-ftp-parse-list-func-alist, ange-ftp-add-file-entry-alist)
(ange-ftp-delete-file-entry-alist): Fix typos and reflow docstring.
(ange-ftp-dumb-unix-host, ange-ftp-binary-file)
(ange-ftp-directory-files, ange-ftp-file-modtime, ange-ftp-vms-host)
(ange-ftp-mts-host, ange-ftp-cms-host, ange-ftp-bs2000-host)
(ange-ftp-bs2000-posix-host): Use `string-match-p' instead of
`(save-match-data (string-match ...))'.
(ange-ftp-use-gateway-p, ange-ftp-use-smart-gateway-p)
(ange-ftp-file-name-directory, ange-ftp-file-name-nondirectory):
Use `string-match-p' instead of `(save-match-data (string-match ...))'.
Doc fixes.
author | Juanma Barranquero <lekktu@gmail.com> |
---|---|
date | Sun, 16 Nov 2008 05:50:23 +0000 |
parents | c3512b2085a0 |
children | a9dc0e7c3f2b |
line wrap: on
line source
;;; latexenc.el --- guess correct coding system in LaTeX files -*-coding: iso-2022-7bit -*- ;; Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc. ;; Author: Arne J,Ax(Brgensen <arne@arnested.dk> ;; Keywords: mule, coding system, latex ;; This file is part of GNU Emacs. ;; 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 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 ;; 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 GNU Emacs. If not, see <http://www.gnu.org/licenses/>. ;;; Commentary: ;; This code tries to guess the correct coding system of a LaTeX file. ;; First it searches for a \inputencoding{...} or ;; \usepackage[...]{inputenc} line in the file and looks up the ... in ;; `latex-inputenc-coding-alist' to find the corresponding coding ;; system. ;; If this fails it will search for AUCTeX's TeX-master or tex-mode's ;; tex-main-file variable in the local variables section and visit ;; that file to get the coding system from the master file. This check ;; can be disabled by setting `latexenc-dont-use-TeX-master-flag' to ;; t. ;; If we have still not found a coding system we will try to use the ;; standard tex-mode's `tex-guess-main-file' and get the coding system ;; from the main file. This check can be disabled by setting ;; `latexenc-dont-use-tex-guess-main-file-flag' to t. ;; The functionality is enabled by adding the function ;; `latexenc-find-file-coding-system' to `file-coding-system-alist' ;; like this ;; (add-to-list 'file-coding-system-alist ;; '("\\.\\(tex\\|ltx\\|dtx\\|drv\\)\\'" . latexenc-find-file-coding-system)) ;;; Code: ;;;###autoload (defcustom latex-inputenc-coding-alist '(("ansinew" . windows-1252) ; MS Windows ANSI encoding, extension of Latin-1 ("applemac" . mac-roman) ("ascii" . us-ascii) ("cp1250" . windows-1250) ; MS Windows encoding, codepage 1250 ("cp1252" . windows-1252) ; synonym of ansinew ("cp1257" . cp1257) ("cp437de" . cp437) ; IBM code page 437 (German version): 225 is \ss ("cp437" . cp437) ; IBM code page 437: 225 is \beta ("cp850" . cp850) ; IBM code page 850 ("cp852" . cp852) ; IBM code page 852 ("cp858" . cp858) ; IBM code page 850 but with a euro symbol ("cp865" . cp865) ; IBM code page 865 ("latin1" . iso-8859-1) ("latin2" . iso-8859-2) ("latin3" . iso-8859-3) ("latin4" . iso-8859-4) ("latin5" . iso-8859-5) ("latin9" . iso-8859-15) ;; ("latin10" . undecided) ;; ("macce" . undecided) ; Apple Central European ("next" . next) ; The Next encoding ("utf8" . utf-8) ("utf8x" . utf-8)) ; used by the Unicode LaTeX package "Mapping from LaTeX encodings in \"inputenc.sty\" to Emacs coding systems. LaTeX encodings are specified with \"\\usepackage[encoding]{inputenc}\". Used by the function `latexenc-find-file-coding-system'." :group 'files :group 'mule :type '(alist :key-type (string :tag "LaTeX input encoding") :value-type (coding-system :tag "Coding system"))) ;;;###autoload (defun latexenc-inputenc-to-coding-system (inputenc) "Return the corresponding coding-system for the specified input encoding. Return nil if no matching coding system can be found." (cdr (assoc inputenc latex-inputenc-coding-alist))) ;;;###autoload (defun latexenc-coding-system-to-inputenc (cs) "Return the corresponding input encoding for the specified coding system. Return nil if no matching input encoding can be found." (let (result) (catch 'result (dolist (elem latex-inputenc-coding-alist result) (let ((elem-cs (cdr elem))) (when (and (coding-system-p elem-cs) (coding-system-p cs) (eq (coding-system-base cs) (coding-system-base elem-cs))) (setq result (car elem)) (throw 'result result))))))) (defvar latexenc-dont-use-TeX-master-flag nil "Non-nil means don't follow TeX-master to find the coding system.") (defvar latexenc-dont-use-tex-guess-main-file-flag nil "Non-nil means don't use tex-guessmain-file to find the coding system.") ;;;###autoload (defun latexenc-find-file-coding-system (arg-list) "Determine the coding system of a LaTeX file if it uses \"inputenc.sty\". The mapping from LaTeX's \"inputenc.sty\" encoding names to Emacs coding system names is determined from `latex-inputenc-coding-alist'." (if (eq (car arg-list) 'insert-file-contents) (save-excursion ;; try to find the coding system in this file (goto-char (point-min)) (if (catch 'cs (let ((case-fold-search nil)) (while (search-forward "inputenc" nil t) (goto-char (match-beginning 0)) (beginning-of-line) (if (or (looking-at "[^%\n]*\\\\usepackage\\[\\([^]]*\\)\\]{\\([^}]*,\\)?inputenc\\(,[^}]*\\)?}") (looking-at "[^%\n]*\\\\inputencoding{\\([^}]*\\)}")) (throw 'cs t) (goto-char (match-end 0)))))) (let* ((match (match-string 1)) (sym (or (latexenc-inputenc-to-coding-system match) (intern match)))) (cond ((coding-system-p sym) sym) ((and (require 'code-pages nil t) (coding-system-p sym)) sym) (t 'undecided))) ;; else try to find it in the master/main file ;; Fixme: If the current file is in an archive (e.g. tar, ;; zip), we should find the master file in that archive. ;; But, that is not yet implemented. -- K.Handa (let ((default-directory (if (stringp (nth 1 arg-list)) (file-name-directory (nth 1 arg-list)) default-directory)) latexenc-main-file) ;; Is there a TeX-master or tex-main-file in the local variables ;; section? (unless latexenc-dont-use-TeX-master-flag (goto-char (point-max)) (search-backward "\n\^L" (max (- (point-max) 3000) (point-min)) 'move) (search-forward "Local Variables:" nil t) (when (re-search-forward "^%+ *\\(TeX-master\\|tex-main-file\\): *\"\\(.+\\)\"" nil t) (let ((file (match-string 2))) (dolist (ext `("" ,(if (boundp 'TeX-default-extension) (concat "." TeX-default-extension) "") ".tex" ".ltx" ".dtx" ".drv")) (if (and (null latexenc-main-file) ;Stop at first. (file-exists-p (concat file ext))) (setq latexenc-main-file (concat file ext))))))) ;; try tex-modes tex-guess-main-file (when (and (not latexenc-dont-use-tex-guess-main-file-flag) (not latexenc-main-file)) ;; Use a separate `when' so the byte-compiler sees the fboundp. (when (fboundp 'tex-guess-main-file) (let ((tex-start-of-header "\\\\document\\(style\\|class\\)")) (setq latexenc-main-file (tex-guess-main-file))))) ;; if we found a master/main file get the coding system from it (if (and latexenc-main-file (file-regular-p latexenc-main-file) (file-readable-p latexenc-main-file)) (let* ((latexenc-dont-use-tex-guess-main-file-flag t) (latexenc-dont-use-TeX-master-flag t) (latexenc-main-buffer (find-file-noselect latexenc-main-file t))) (coding-system-base ;Disregard the EOL part of the CS. (with-current-buffer latexenc-main-buffer (or coding-system-for-write buffer-file-coding-system 'undecided)))) 'undecided)))) 'undecided)) (provide 'latexenc) ;; arch-tag: f971bc3e-1fec-4609-8f2f-73dd41ab22e1 ;;; latexenc.el ends here