Index: lisp/ChangeLog =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/ChangeLog,v retrieving revision 1.7484 diff -u -p -r1.7484 ChangeLog --- lisp/ChangeLog 11 May 2005 16:42:40 -0000 1.7484 +++ lisp/ChangeLog 11 May 2005 17:14:03 -0000 @@ -1,3 +1,11 @@ +2005-05-11 Arne J,Ax(Brgensen + + * international/latexenc.el (latexenc-find-file-coding-system): + Avoid `re-search-forward' when looking for input encoding because + of speed and safety. Better regexp's for recognizing input + encoding. Limit a search for TeX-master/tex-main-file to the local + variable section. + 2005-05-11 Stefan Monnier * files.el (executable-find): Move from executable.el. Use locate-file. Index: lisp/international/latexenc.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/international/latexenc.el,v retrieving revision 1.3 diff -u -p -r1.3 latexenc.el --- lisp/international/latexenc.el 1 May 2005 11:01:49 -0000 1.3 +++ lisp/international/latexenc.el 11 May 2005 17:14:03 -0000 @@ -120,24 +120,32 @@ coding system names is determined from ` (save-excursion ;; try to find the coding system in this file (goto-char (point-min)) - (if (or - (re-search-forward "^[^%\n]*\\\\inputencoding{\\(.*\\)}" nil t) - (re-search-forward "^[^%\n]*\\\\usepackage\\[\\(.*\\)\\]{inputenc}" nil t)) - (let* ((match (match-string 1)) - (sym (intern match))) - (when (latexenc-inputenc-to-coding-system match) - (setq sym (latexenc-inputenc-to-coding-system match)) - (when (coding-system-p sym) - sym - (if (and (require 'code-pages nil t) (coding-system-p sym)) - sym - 'undecided)))) + (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 (intern match))) + (when (latexenc-inputenc-to-coding-system match) + (setq sym (latexenc-inputenc-to-coding-system match))) + (when (coding-system-p sym) + sym + (if (and (require 'code-pages nil t) (coding-system-p sym)) + sym + 'undecided))) ;; else try to find it in the master/main file (let (latexenc-main-file) ;; is there a TeX-master or tex-main-file in the local variable section (unless latexenc-dont-use-TeX-master-flag (goto-char (point-max)) - (when (re-search-backward "^%+ *\\(TeX-master\\|tex-main-file\\): *\"\\(.+\\)\"" nil t) + (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 (concat (file-name-directory (nth 1 arg-list)) (match-string 2)))) (if (file-exists-p file) (setq latexenc-main-file file)