[cmail 8534] Re: Date & Message-id header

Yuh Ohmura yutopia @ t3.rim.or.jp
2000年 2月 10日 (木) 09:40:29 JST


おおむらです。

In message "[cmail 8534] Re: Date & Message-id header"
    on 00/02/09, 中川 誠 <Makoto.Nakagawa @ jp.compaq.com> writes:
>   >> APEL としては
>   >> (replace-match NEWTEXT &optional FIXEDCASE LITERAL STRING)
>   >> までにしとくべきかなあ...。
> 
> 第 5 引数が指定された時にはそれぞれのオリジナルが動作する、という作りに
> するのでしょうか。

どうやら他のコードを参考にしたもので検証してみたら、第 5 引数は
無視してしまうようです。
つまり、その引数の定義がちがうということは、動作を共通化できない
ということですから、移植性を考慮したアプリではそのような引数は
使用しないということなんでしょう。

> subexp をサポートしないなら、subexp や matched-data 絡みのコードを全て削除して、
> 
> (delete-region (1+ (match-beginning 0)) (1+ (match-end 0)))
> (goto-char (1+ (match-beginning 0)))
> 
> でいけるのではないでしょうか。動作は検証してません。

とりあえず、これでやってみました。
Emacs 20.5 では動作確認済みです。

やつさん、Mule for Windows での確認をお願いします。

あとどなたか他の Emacsen での動作確認もお願いします。

poe.el の適当なところに放りこめばいいと思いますが、
単独でも byte-compile して .elc を load-file して
いただいても OK です。

--------------- salve! -----------------
mailto:yutopia @ t3.rim.or.jp (Yuh Ohmura) 
Uri: http://www.t3.rim.or.jp/%7Eyutopia/
----------------------------------------

;; Emacs 19.28 and earlier
;;  (replace-match NEWTEXT &optional FIXEDCASE LITERAL)
;; Emacs 20.x (?) and later
;;  (replace-match NEWTEXT &optional FIXEDCASE LITERAL STRING SUBEXP)
;; XEmacs 21.2.28 and later(?)
;;  (replace-match NEWTEXT &optional FIXEDCASE LITERAL STRING STRBUFFER)
;;
;; Fix to
;;  (replace-match NEWTEXT &optional FIXEDCASE LITERAL STRING)
;;
(static-condition-case nil
    ;; compile-time check
    (progn
      (setq nostring "")
      (replace-match "-" nil nil nostring)
      (if (get 'replace-match 'defun-maybe)
	  (error "`replace-match' is already redefined")))
  (error
   ;; load-time check.
   (or (fboundp 'si:replace-match)
       (progn
	 (fset 'si:replace-match (symbol-function 'replace-match))
	 (put 'replace-match 'defun-maybe t)
	 (defun replace-match (newtext &optional fixedcase literal string)
	   "\
Replace text matched by last search with NEWTEXT.
If second arg FIXEDCASE is non-nil, do not alter case of replacement text.
Otherwise maybe capitalize the whole text, or maybe just word initials,
based on the replaced text.
If the replaced text has only capital letters
and has at least one multiletter word, convert NEWTEXT to all caps.
If the replaced text has at least one word starting with a capital letter,
then capitalize each word in NEWTEXT.

If third arg LITERAL is non-nil, insert NEWTEXT literally.
Otherwise treat `\' as special:
  `\&' in NEWTEXT means substitute original matched text.
  `\N' means substitute what matched the Nth `\(...\)'.
       If Nth parens didn't match, substitute nothing.
  `\\' means insert one `\'.
FIXEDCASE and LITERAL are optional arguments.
Leaves point at end of replacement text.

The optional fourth argument STRING can be a string to modify.
In that case, this function creates and returns a new string
which is made by replacing the part of STRING that was matched."
	   (if string
	       (let* ((matched-data (match-data))
		      (len (length matched-data)))
		 (setq matched-data (append matched-data '(-2 -2)))
		 (with-temp-buffer
		   (insert string)
		   (delete-region (1+ (match-beginning 0)) (1+ (match-end 0)))
		   (goto-char (1+ (match-beginning 0)))
		   (insert newtext)
		   (buffer-substring (point-min) (point-max))))
	     (si:replace-match newtext fixedcase literal)))))))




More information about the APEL-ja mailing list