all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Kenichi Handa <handa@m17n.org>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: cyd@stupidchicken.com, emacs-devel@gnu.org
Subject: Re: faster unicode character name completion
Date: Tue, 08 Dec 2009 10:45:56 +0900	[thread overview]
Message-ID: <tl7hbs2fdbf.fsf@m17n.org> (raw)
In-Reply-To: <jwvk4wyj22f.fsf-monnier+emacs@gnu.org> (message from Stefan Monnier on Mon, 07 Dec 2009 09:57:46 -0500)

In article <jwvk4wyj22f.fsf-monnier+emacs@gnu.org>, Stefan Monnier <monnier@iro.umontreal.ca> writes:

>>> I don't understand what ucs-name-filter is trying to do.

> > ?? It simply filters out elements that doesn't match with
> > STR from NAMES (alist).

> But then why is it needed?
> Doesn't `completion-table-dynamic' take care of that already?

I don't know.  The info says this:

 -- Function: completion-table-dynamic function
     This function is a convenient way to write a function that can act
     as programmed completion function.  The argument FUNCTION should be
     a function that takes one argument, a string, and returns an alist
     of possible completions of it.  You can think of
     `completion-table-dynamic' as a transducer between that interface
     and the interface for programmed completion functions.

I thought that FUNCTION should return an alist that contains
ONLY valid completions.

> But I have a better idea: most of the time is not spent building the
> completion table, but rather just weeding out all the "chars" that don't
> have names, or should I say, looking for the few rare chars that do
> have a name.

> So the patch below seems to eb a good compromise: it uses up just about
> 1000K cons cells (i.e. 16KB on 64bit systems) to keep the precomputed
> set of ~34K chars that do have a name, so that building the completion
> table takes only a couple seconds.

Ah, interesting approach.  But, I've just found that
dotimes-with-progress-reporter of the original code didn't
exclude the big unused range U+30000..U+DFFFF (about 75% of
the range currently checked).  Just excluding that part in
the original code achieves almost the same performance as
your patch.   Attached is that simpler version.

---
Kenichi Handa
handa@m17n.org

(defun ucs-names ()
  "Return alist of (CHAR-NAME . CHAR-CODE) pairs cached in `ucs-names'."
  (or ucs-names
      (let ((ranges
	     '((#x00000 . #x033FF)
	       ;; (#x03400 . #x04DBF) CJK Ideograph Extension A
	       (#x04DC0 . #x04DFF)
	       ;; (#x04E00 . #x0x09FFF) CJK Ideograph
	       (#x0A000 . #x0D7FF)
	       ;; (#x0D800 . #x0FAFF) Surrogate/Private
	       (#x0FB00 . #x1FFFF)
	       ;; (#x20000 . #xDFFFF) CJK Ideograph Extension A, B, etc, unsed
	       (#xE0000 . #xE01EF)))
	    c end name names)
        (dolist (range ranges)
          (setq c (car range)
                end (cdr range))
	  (while (<= c end)
	    (if (setq name (get-char-code-property c 'name))
		(push (cons name c) names))
	    (if (setq name (get-char-code-property c 'old-name))
		(push (cons name c) names))
	    (setq c (1+ c))))
        (setq ucs-names names))))




  parent reply	other threads:[~2009-12-08  1:45 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-30 19:55 Emacs 23.2 pretest freeze? Karl Fogel
2009-11-30 22:48 ` Chong Yidong
2009-11-30 23:05   ` Karl Fogel
2009-12-02 13:34   ` Alan Mackenzie
2009-12-03 21:35 ` Emacs 23.2 Pretest next week Chong Yidong
2009-12-04 11:23   ` faster unicode character name completion Kenichi Handa
2009-12-04 12:08     ` Deniz Dogan
2009-12-04 13:04     ` Juanma Barranquero
2009-12-04 13:26     ` Florian Beck
2009-12-04 15:07     ` Stefan Monnier
2009-12-04 22:38       ` Miles Bader
2009-12-07  2:00       ` Kenichi Handa
2009-12-07  8:13         ` Kenichi Handa
2009-12-07 14:57         ` Stefan Monnier
2009-12-07 20:28           ` Juri Linkov
2009-12-07 21:42             ` Stefan Monnier
2009-12-08  1:59               ` Miles Bader
2009-12-08  1:45           ` Kenichi Handa [this message]
2009-12-08  2:29             ` Stefan Monnier
2009-12-09  0:12             ` Chong Yidong
2009-12-09  0:57               ` Kenichi Handa
2009-12-09  9:02                 ` Deniz Dogan
2009-12-04 19:04   ` Emacs 23.2 Pretest next week Dan Nicolaescu
2009-12-04 21:15     ` Chong Yidong

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=tl7hbs2fdbf.fsf@m17n.org \
    --to=handa@m17n.org \
    --cc=cyd@stupidchicken.com \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /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 external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.