[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: latexenc-find-file-coding-system is slow.
From: |
Arne Jørgensen |
Subject: |
Re: latexenc-find-file-coding-system is slow. |
Date: |
Wed, 11 May 2005 19:21:24 +0200 |
User-agent: |
Gnus/5.110004 (No Gnus v0.4) Emacs/22.0.50 (gnu/linux) |
Lute Kamstra <address@hidden> writes:
> [For some reason, I didn't see your message on emacs-devel.]
Neither did I. It got lost again as most of my mail to @gnu.org
addresses do. This is posted through Gmane instead.
> Arne Jørgensen <address@hidden> writes:
[...]
> I think there a some minor problems with the details of the
> implementation:
>
>> 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 4 May 2005 18:12:23 -0000
>> @@ -120,24 +120,33 @@ 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\\(,.*\\)?}")
>
> That also matches something like:
>
> \usepackage[opt]{package} % don't use {package,inputenc}
Right. I should be fixed now.
>> + (looking-at "[^%\n]*\\\\inputencoding{\\(.*\\)}"))
>> + (throw 'cs (match-string 1))
>
> Why throw (match-string 1) instead of t?
You're right.
>> + (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)
>> + (let (latexenc-main-file
>> + bound)
>> ;; 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)
>> + (setq bound (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)
>
> You don't seem to use the variable bound.
No. It's gone now. (I was probably tired).
> Could you also write a ChangeLog entry for your patch?
Done.
New patch attached.
Thanks and kind regard,
--
Arne Jørgensen <http://arnested.dk/>
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 <address@hidden>
+
+ * 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 <address@hidden>
* 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)