[Mew-dist 12045] Re: mew-substring

Kazu Yamamoto ( 山本和彦 ) kazu at example.com
2000年 1月 12日 (水) 21:09:58 JST


From: Masaki KONUMA <konuma at example.com>
Subject: [Mew-dist 12039] mew-substring

> (mew-substring STR WIDTH) の、STR が WIDTH より短かい場合の値が変だと
> 思うのでパッチです。
> 
> たとえば、(mew-substring "abc" 79) は "ab" を返しますが、ではなくて
> "abc" を返して欲しいです。

以下のようにする方が、綺麗で素直じゃないでしょうか?

(defun mew-substring (str width)
  "Return multi-lingual-safe substring. The length of results
are less than or equal to width."
  ;; This code assumes that "str" is short enough.
  ;; The algorithm is not effective. O(N).
  (if (fboundp 'mew-string-to-list)
      (let ((char-list (mew-string-to-list str))
	    (i 0) (w 0))
	(catch 'loop
	  (while char-list
	    (setq w (+ w (mew-char-width (car char-list))))
	    (if (> w width) (throw 'loop nil))
	    (setq i (+ i (length (char-to-string (car char-list)))))
	    (setq char-list (cdr char-list))))
	(substring str 0 i))
    (substring str 0 width)))

--かず



Mew-dist メーリングリストの案内