[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 メーリングリストの案内