[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:04100] Re: Japanese characters count
In message "[debian-users:04084] Japanese characters count"
on 98/02/03, Ryuichi Arafune <arafune@xxxxxxxxxxxxxxxxxxxxxxxxx> writes:
> XEMACS または Muleで文字数をカウントするコマンドは存在するのか?
標準でありそうに思えたのですが、みあたらないですね。
> できれば,XEMACS(Mule) を用いて範囲を指定してその後にその範囲に含まれる文字数を
> 日本語と英語で区別して表示してくれるのが良いんですけど.
多分、誰かが作っていると思うのですが、書いてみました。改行も
わけてカウントするようになっています。
(defun count-characters-region (beginning end)
"Count characters in region."
(interactive "r")
(let (c (single-byte 0) (multibyte 0) (newline 0))
(message "Counting characters in region ...")
(save-excursion
(goto-char beginning)
(while (< (point) end)
(setq c (following-char))
(cond ((> c 255)
(setq multibyte (1+ multibyte)))
((= c ?\n)
(setq newline (1+ newline)))
(t
(setq single-byte (1+ single-byte))))
(forward-char)))
(message "single-byte: %d, multibyte: %d, newline: %d"
single-byte multibyte newline)))
> もっといえばTeX のコマンドを無視して数えてくれればいうことがありません.
これは、完璧を期そうとすると大変なので、外部コマンドに頼るの
がいいと思います。dselectで見たら、それらしいものとしてuntex
がありました。これは、LaTeXのコマンドを完全に削除してしまう
のではなく、(2個の?)空白に置き換えているようです。完全に削除
してくれた方がこの場合はいいと思うのですが、そういうツールは
ないのでしょうか。まあ、untexをいじるのも簡単でしょうけど。
で、こちらは次のような関数でいいと思います。untexに渡すオプ
ションを可変にした方がいいかもしれません。
(defun count-characters-region-untex (beginning end)
"Remove LaTeX commands and count characters in region."
(interactive "r")
(let ((buf (get-buffer-create " *count-characters-region*")))
(save-excursion
(set-buffer buf)
(erase-buffer))
(call-process-region beginning end "untex" nil buf nil "-ea" "-")
(save-excursion
(set-buffer buf)
(count-characters-region (point-min) (point-max)))))
--
川村 尚生 / 鳥取大学 工学部 知能情報工学科