]> git.eshelyaron.com Git - emacs.git/commitdiff
(latexenc-find-file-coding-system): Avoid `re-search-forward' when
authorLute Kamstra <lute@gnu.org>
Wed, 11 May 2005 23:04:08 +0000 (23:04 +0000)
committerLute Kamstra <lute@gnu.org>
Wed, 11 May 2005 23:04:08 +0000 (23:04 +0000)
looking for input encoding because of speed and safety.  Better
regular expressions for recognizing input encoding.  Limit a search
for TeX-master/tex-main-file to the local variable section.

lisp/international/latexenc.el

index 1fd04b559194f4479550f68069fddc0d608942d9..39acbb33dfdfb5df8ff2fa488a8e1b43ddcdd4f9 100644 (file)
@@ -120,24 +120,32 @@ coding system names is determined from `latex-inputenc-coding-alist'."
       (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)