From: Lute Kamstra <Lute.Kamstra.lists@xs4all.nl>
Cc: Thien-Thi Nguyen <ttn@gnu.org>,
Stefan Monnier <monnier@iro.umontreal.ca>,
Richard Stallman <rms@gnu.org>,
emacs-devel@gnu.org
Subject: Re: latexenc-find-file-coding-system is slow.
Date: Wed, 11 May 2005 13:48:18 +0200 [thread overview]
Message-ID: <87psvykmpp.fsf@xs4all.nl> (raw)
In-Reply-To: <871x8m96p6.fsf@arnested.dk> (Arne Jørgensen's message of "Wed, 04 May 2005 20:39:17 +0200")
[For some reason, I didn't see your message on emacs-devel.]
Arne Jørgensen <arne@arnested.dk> writes:
> Lute Kamstra <Lute.Kamstra.lists@xs4all.nl> writes:
>
>> I guess the re-searching in latexenc-find-file-coding-system needs to
>> be improved.
>
> I have made a try at speeding up the search for input encoding.
Thanks.
> What is does now is search for "inputenc" with `search-forward' until
> the first match also matches (with `looking-at') an
> \inputencoding{...} or \usepackage[...]{inputenc} (that is not inside
> a comment).
That should speed things up.
> For now I have not added a limit for how far to search for this
> because I still see no way to decide this for all common cases. And
> then I would like to hear if the change has any effect on the speed as
> it is.
It's probably fast enough now.
> I limitied the search for a TeX-master/tex-main-file in the local
> variables section though. The limit is borrowed from
> `hack-local-variables'.
That should work.
[...]
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}
> + (looking-at "[^%\n]*\\\\inputencoding{\\(.*\\)}"))
> + (throw 'cs (match-string 1))
Why throw (match-string 1) instead of 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)
> + (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.
Could you also write a ChangeLog entry for your patch?
Lute.
next prev parent reply other threads:[~2005-05-11 11:48 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <E1D7MTJ-0002Jj-BJ@fencepost.gnu.org>
2005-04-26 12:07 ` Your Emacs changes Arne Jørgensen
2005-04-28 11:58 ` Thien-Thi Nguyen
2005-04-29 12:11 ` latexenc-find-file-coding-system is slow. (was: Your Emacs changes) Lute Kamstra
2005-04-29 14:57 ` latexenc-find-file-coding-system is slow Arne Jørgensen
2005-04-29 15:48 ` Lute Kamstra
2005-04-29 16:13 ` Stefan Monnier
[not found] ` <877jil8rz5.fsf@arnested.dk>
2005-04-29 17:19 ` Lute Kamstra
2005-04-30 8:08 ` David Kastrup
2005-05-01 11:08 ` Lute Kamstra
2005-05-01 12:07 ` latexenc-find-file-coding-system is slow. (was: Your Emacs changes) Richard Stallman
[not found] ` <871x8m96p6.fsf@arnested.dk>
2005-05-11 11:48 ` Lute Kamstra [this message]
2005-05-11 17:21 ` latexenc-find-file-coding-system is slow Arne Jørgensen
2005-05-11 23:07 ` Lute Kamstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87psvykmpp.fsf@xs4all.nl \
--to=lute.kamstra.lists@xs4all.nl \
--cc=emacs-devel@gnu.org \
--cc=monnier@iro.umontreal.ca \
--cc=rms@gnu.org \
--cc=ttn@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).