unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
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.

  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).