« プログラミングを始めるには(29) | Main | プログラミングを始めるには(31) »

August 26, 2014

プログラミングを始めるには(30)

あらら、テキトーなことを書いているうちにもう30囘になってしまった。タグを入れるコマンドがあるなら、タグを取り外すコマンドもないと不便かもしれない。

(defun htm-delete-tag (beg end)
  (interactive "r")
  (save-excursion
    (save-restriction
      (narrow-to-region beg end)
      (goto-char (point-min))
      (while (re-search-forward "</*\\(span\\|strong\\|em\\|br\\)[^>]*>" nil t)
	(replace-match "")))))

こっちは至って簡單。正規表現を閒違えなければ、re-search-forwardreplace-patchの繰り返しでタグが消えてくれる。前囘は說明しなかったが、htm-insert-stronghtm-insert-spanhtm-delete-tag3つのコマンドではナローイング(バッファのある部分だけに焦點を當て、殘りの部分を一時的に參照できなくすること)を使用している。そしてナローイングを使うコマンドは必然的に適用範圍をコマンド起動時に受け取る必要がある。それをやってくれるのが(interactive "r")という式だ。これに對應するarglistは(beg end)になる。パラメータの名前はbegendでなくても良い。一應(interactive (list (region-beginning) (region-end)))と書いても良いが、他にもパラメータが必要な場合を除いて、そんなことをしているプログラムは見たことがない。

ナローイングする場合は必ずsave-excursionsave-restrictionを常套句的に使用する。これにより、このフォームを拔けるときにナローイングが解除される(widenされる)。ナローイングのおかげで、關係ないテキストまで變更してしまう心配をせずに濟むのは、精神衞生上素晴らしいことではないだろうか。

|

« プログラミングを始めるには(29) | Main | プログラミングを始めるには(31) »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/74224/60209873

Listed below are links to weblogs that reference プログラミングを始めるには(30):

« プログラミングを始めるには(29) | Main | プログラミングを始めるには(31) »