Function: latexenc-find-file-coding-system
latexenc-find-file-coding-system is an autoloaded and byte-compiled
function defined in latexenc.el.gz.
Signature
(latexenc-find-file-coding-system ARG-LIST)
Documentation
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.
Source Code
;; Defined in /usr/src/emacs/lisp/international/latexenc.el.gz
;;;###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 or is it globally set to a constant
;; string?
(unless latexenc-dont-use-TeX-master-flag
(goto-char (point-max))
(search-backward "\n\^L" (max (- (point-max) 3000) (point-min))
'move)
(re-search-forward "^%+ *Local Variables:" nil t)
(let ((file (if (re-search-forward
"^%+ *\\(TeX-master\\|tex-main-file\\): *\"\\(.+\\)\""
nil t)
(match-string 2)
(or (and (bound-and-true-p TeX-master)
(stringp TeX-master)
TeX-master)
(bound-and-true-p tex-main-file)))))
;; Decode the main file name, assuming it's in UTF-8.
(if (stringp file)
(setq file (decode-coding-string file 'utf-8)))
(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))