• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

修订版4a042636e54143aa3a3295f1c5a20584c0187fa2 (tree)
时间2005-05-12 22:53:59
作者tfuruka1 <tfuruka1>
Commitertfuruka1

Log Message

zen2han-chop-line-end-space で, 復帰文字も対象にするようにしました。

hoge CR+LF
hoge LF
hoge CR+LF

のようなファイルを *-Unix で開いた時に行末に M が大量発生してしまう為
です。

更改概述

差异

--- a/src/zen2han.el
+++ b/src/zen2han.el
@@ -1,305 +1,315 @@
1-;;; -*- mode: Emacs-Lisp; coding: sjis-dos; -*-
2-;;; Time-stamp: <2003-05-25 21:59:06 tfuruka1>
3-;;;
4-;;; ガラクタシリーズ「全角半角文字変換パッケージ」 zen2han
5-;;; Copyright 1997-2003 By T.Furukawa <tfuruka1@nifty.com>
6-;;;
7-;;; ※ このファイル中には所謂「半角カタカナ」が含まれています。
8-;;;
9-;;; ※ このファイルにzen2han-bufferを実行してはいけません。正しく動作
10-;;; しなくなってしまいます。
11-;;;
12-;;; 所謂全角英数字をASCII文字に変換し,更に所謂半角カタカナを全角カタ
13-;;; カナに変換した後,意味的におかしい「ー」を「-」に変換する。このパッ
14-;;; ケージはEmacs 19.28の頃から使用しているのですが、現在は手元に19.28
15-;;; が存在していないので、もはや、動作保証は行えません。
16-;;;
17-;;; zen2han-region
18-;;; 指定範囲の変換を行います。
19-;;; zen2han-buffer
20-;;; カレントバッファの変換を行います。
21-;;; zen2han-all-fill-paragraph-region
22-;;; 指定範囲中の全ての段落を詰め込みます。全角⇔半角変換には関係あ
23-;;; りませんが、私の場合、良く使用するので、このファイルで定義して
24-;;; います。
25-;;; zen2han-all-fill-paragraph-buffer
26-;;; 対象範囲がカレントバッファ全体になる事を除いて
27-;;; zen2han-all-fill-paragraph-regionと同様です。
28-;;; zen2han-chop-line-end-space
29-;;; カレントバッファの行末の空白を削除します。
30-;;;
31-;;; ●インストール●
32-;;;
33-;;; 最も簡単な方法は、環境変数LOADPATHが張られている場所に、本ファイル
34-;;; (zen2han.el)をコピーか移動をして、.emacs の何処かに
35-;;;
36-;;; (load zen2han)
37-;;;
38-;;; と追記する事です。zen2hanを使わないのに、常にメモリが確保されるの
39-;;; が気にいらない場合は、
40-;;;
41-;;; (autoload 'zen2han-region "zen2han" "全⇔半" t)
42-;;; (autoload 'zen2han-buffer "zen2han" "全⇔半" t)
43-;;; (autoload 'zen2han-all-fill-paragraph-region "zen2han" "全⇔半" t)
44-;;; (autoload 'zen2han-all-fill-paragraph-buffer "zen2han" "全⇔半" t)
45-;;; (autoload 'zen2han-chop-line-end-space "zen2han" "全⇔半" t)
46-;;;
47-;;; とでも記述して下さい。キーバインドは一切行っていません。
48-;;;
49-;;; ●覚書●
50-;;;
51-;;; 全角文字と半角文字の長さ。元々は即値で記述していたが, Emacs 19.28
52-;;; とEmacs 20で長さが異なっていて,アタフタしてしまったので,サイズを
53-;;; 計算する事にした。つまり、このパッケージは元々個人的にEmacs 19.28
54-;;; で動作させていたのですが、今となっては、手元に19.28が存在しないの
55-;;; で、動作保証は出来ません。
56-
57-;;;
58-;;; $Id: zen2han.el,v 1.2 2003/05/25 14:47:59 tfuruka1 Exp $
1+;;; -*- mode: Emacs-Lisp; coding: sjis; -*-
2+;;; $Id: zen2han.el,v 1.3 2005/05/12 13:53:59 tfuruka1 Exp $
3+;;; $Name: $
4+;;;
5+;;; ガラクタシリーズ「全角半角文字変換パッケージ」 zen2han
6+;;; Copyright 1997-2003 By T.Furukawa <tfuruka1@nifty.com>
7+;;;
8+;;; ※ このファイル中には所謂「半角カタカナ」が含まれています。
9+;;;
10+;;; ※ このファイルにzen2han-bufferを実行してはいけません。正しく動作
11+;;; しなくなってしまいます。
12+;;;
13+;;; 所謂全角英数字をASCII文字に変換し,更に所謂半角カタカナを全角カタ
14+;;; カナに変換した後,意味的におかしい「ー」を「-」に変換する。このパッ
15+;;; ケージはEmacs 19.28の頃から使用しているのですが、現在は手元に19.28
16+;;; が存在していないので、もはや、動作保証は行えません。
17+;;;
18+;;; zen2han-region
19+;;; 指定範囲の変換を行います。
20+;;; zen2han-buffer
21+;;; カレントバッファの変換を行います。
22+;;; zen2han-all-fill-paragraph-region
23+;;; 指定範囲中の全ての段落を詰め込みます。全角⇔半角変換には関係あ
24+;;; りませんが、私の場合、良く使用するので、このファイルで定義して
25+;;; います。
26+;;; zen2han-all-fill-paragraph-buffer
27+;;; 対象範囲がカレントバッファ全体になる事を除いて
28+;;; zen2han-all-fill-paragraph-regionと同様です。
29+;;; zen2han-chop-line-end-space
30+;;; カレントバッファの行末の空白を削除します。
31+;;;
32+;;; ●インストール●
33+;;;
34+;;; 最も簡単な方法は、環境変数LOADPATHが張られている場所に、本ファイル
35+;;; (zen2han.el)をコピーか移動をして、.emacs の何処かに
36+;;;
37+;;; (load zen2han)
38+;;;
39+;;; と追記する事です。zen2hanを使わないのに、常にメモリが確保されるの
40+;;; が気にいらない場合は、
41+;;;
42+;;; (autoload 'zen2han-region "zen2han" "全⇔半" t)
43+;;; (autoload 'zen2han-buffer "zen2han" "全⇔半" t)
44+;;; (autoload 'zen2han-all-fill-paragraph-region "zen2han" "全⇔半" t)
45+;;; (autoload 'zen2han-all-fill-paragraph-buffer "zen2han" "全⇔半" t)
46+;;; (autoload 'zen2han-chop-line-end-space "zen2han" "全⇔半" t)
47+;;;
48+;;; とでも記述して下さい。キーバインドは一切行っていません。
49+;;;
50+;;; ●覚書●
51+;;;
52+;;; 全角文字と半角文字の長さ。元々は即値で記述していたが, Emacs 19.28
53+;;; とEmacs 20で長さが異なっていて,アタフタしてしまったので,サイズを
54+;;; 計算する事にした。つまり、このパッケージは元々個人的にEmacs 19.28
55+;;; で動作させていたのですが、今となっては、手元に19.28が存在しないの
56+;;; で、動作保証は出来ません。
57+
58+;;;
5959 ;;; $Log: zen2han.el,v $
60+;;; Revision 1.3 2005/05/12 13:53:59 tfuruka1
61+;;; zen2han-chop-line-end-space で, 復帰文字も対象にするようにしました。
62+;;;
63+;;; hoge CR+LF
64+;;; hoge LF
65+;;; hoge CR+LF
66+;;;
67+;;; のようなファイルを *-Unix で開いた時に行末に ^M が大量発生してしまう為
68+;;; です。
69+;;;
6070 ;;; Revision 1.2 2003/05/25 14:47:59 tfuruka1
6171 ;;; 後ろに空白があると変な物と、前に空白が有ると変なものは空白を詰める正規
6272 ;;; 表現を少し変更しました。
63-;;;
64-;;; Revision 1.1 2003/05/24 13:23:47 tfuruka1
65-;;; Initial revision
66-;;;
67-
68-;;
69-;; 定数の定義
70-;;
71-(defconst zen2han-id-string
72- "$Id: zen2han.el,v 1.2 2003/05/25 14:47:59 tfuruka1 Exp $"
73- "ヴァージョンコントロールのID")
74-(defconst zen2han-version-number "1.0"
75- "zen2hanのヴァージョン番号")
76-(defconst zen2han-version-string
77- (format "zen2han %s" zen2han-version-number)
78- "zen2hanのヴァージョン文字列")
79-
80-;;
81-;; 変換テーブル
82-;;
83-;; DBG: (makunbound 'zen2han-z2h-list)
84-(defvar zen2han-z2h-list
85- (list (concat "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
86- "abcdefghijklmnopqrstuvwxyz"
87- "0123456789")
88- (length "A")
89- (concat "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
90- "abcdefghijklmnopqrstuvwxyz"
91- "0123456789")
92- (length "A"))
93- "全角から半角へ変換する為のリストです。リストの要素は、全角文字の集
94-合、全角文字の変換単位の長さ、半角文字の集合、半角文字の変換単位の長さ
95-です。この値に '() を指定した場合は変換を行いません。")
96-
97-;; DBG: (makunbound 'zen2han-h2z-list)
98-(defvar zen2han-h2z-list
99- (list (concat "。「」、・ヲァィゥェォャュョッー"
100- "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ"
101- "マミムメモヤユヨラリルレロワン゙゚")
102- (length "ア")
103- (concat "。「」、・ヲァィゥェォャュョッー"
104- "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ"
105- "マミムメモヤユヨラリルレロワン゛゜")
106- (length "ア"))
107- "半角から全角へ変換する為のリストです。リストの要素は、半角文字の集
108-合、半角文字の変換単位の長さ、全角文字の集合、全角文字の変換単位の長さ
109-です。この値に '() を指定した場合は変換を行いません。")
110-
111-;; DBG: (makunbound 'zen2han-cnv-dullness-list)
112-(defvar zen2han-cnv-dullness-list
113- (list (concat "ハ゜ヒ゜フ゜ヘ゜ホ゜"
114- "カ゛キ゛ク゛ケ゛コ゛サ゛シ゛ス゛セ゛ソ゛"
115- "タ゛チ゛ツ゛テ゛ト゛ハ゛ヒ゛フ゛ヘ゛ホ゛")
116- (length "ハ゜")
117- (concat "パピプペポ"
118- "ガギグゲゴザジズゼゾ"
119- "ダヂヅデドバビブベボ")
120- (length "パ"))
121- "濁音及び、半濁音を変換する為のリストです。リストの要素は、変換元文
122-字列の集合、変換元文字列の変換単位の長さ、変換先文字列の集合、変換先文
123-字列の変換単位の長さです。この値に '() を指定した場合は変換を行いませ
124-ん。")
125-
126-;; DBG: (makunbound 'zen2han-cnv-kigou-list)
127-(defvar zen2han-cnv-kigou-list
128- (list (concat "!$|^@{[]}<>&/()"
129- ":−#?+=.’*; 、,._`")
130- (length "!")
131- (concat "!$|^@{[]}<>&/()"
132- ":-#?+=.'*; ,,._`")
133- (length "!"))
134- "全角記号から半角記号への変換リストです。リストの要素は
135-zen2han-z2h-list と同様です。この値に '() を指定した場合は変換を
136-行いません。")
137-
138-;; DBG: (makunbound 'zen2han-conv-regexp-alist)
139-(defvar zen2han-conv-other-alist '()
140- "変換元文字列と、変換先字列の連想リストです。全角←→半角以外の汎用
141-文字列の変換を行う為に使用します。例えば「?」(○の中に1)を「(1)」に変
142-換する場合は、
143-
144- '((\"?\" . \"(1)\"))
145-
146-と指定します。また、TeX用に
147-
148- '((\"Σ\" . \"$\\displaystyle\\sum$\")
149- (\"∫\" . \"$\\displaystyle\\int$\"))
150-
151-等と記述すると良いでしょう。なお、この連想リストの値がnilの場合は、変
152-換を行いません。")
153-
154-;; DBG: (makunbound 'zen2han-conv-regexp-alist)
155-(defvar zen2han-conv-regexp-alist
156- '(
157- ;; 意味的におかしい「ー」を「-」に変換する。意味的におかしいという
158- ;; 判断は全角の後の-,−と半角の後の「ー」等です。ASCII文字直後の"ー
159- ;; "は"-"に変換し、カタカナの後の"-"は"ー"に変換する
160- ("\\([ -~]\\)ー" . "\\1-")
161- ("\\([ア-ン]\\)-" . "\\1ー")
162-
163- ;; 「,」の後に空白の無いものは空白を付加する
164- (",\\([^ ]\\)" . ", \\1")
165-
166- ;; ASCII 文字の前後が漢字の場合はそれぞれスペースを挿入する
167- ("\\([ -龠]\\)\\([A-Za-z0-9]\\)" . "\\1 \\2")
168- ("\\([A-Za-z]\\)\\([ -龠]\\)" . "\\1 \\2")
169-
170- ;; 後ろに空白があると変な物と、前に空白が有ると変なものは空白を詰
171- ;; める。これは、判断が難しいので、空白が一個のものだけを対象にし
172- ;; ています。
173- ("\\([〜「。]\\) \\([^ ]\\)" . "\\1\\2")
174- ("\\([^ ]\\) \\([〜」]\\)" . "\\1\\2"))
175- "正規表現で変換する文字列の連想リストです。検索文字列と、置換文字列
176-を指定します。")
177-
178-
179-;;; ***********************
180-;;; 関数の定義(下請け関数)
181-;;; ***********************
182-
183-(defun zen2han:rep-str (from flen to tlen)
184- "カレントバッファの文字列をfromからtoへ変換する。バッファ全てに対し
185-て処理を行いますので、必要であれば、呼び出し元でナローイングする必要が
186-あります。正確には、from, to 共に同一長の文字列の集合で指定します。
187-flenがfromの一ユニットの長さ, tlenがtoの一ユニットの長さになります。こ
188-の関数はインタラクティブに呼び出す事は出来ません。下請け関数です。下請
189-け関数なので、ポイントの保存等は一切行わないので、必要であれば呼び出し
190-元で保存しておく必要があります。"
191- (let ((cnt 0))
192- (while (< cnt (/ (length from) flen))
193- (goto-char (point-min))
194- (while (search-forward
195- (substring from (* cnt flen)
196- (+ flen (* cnt flen))) nil t)
197- (replace-match (substring to (* cnt tlen) (+ tlen (* cnt tlen)))))
198- (setq cnt (1+ cnt)))))
199-
200-;;; --------------------------------------------------------------------
201-
202-;;; ****************************
203-;;; インタラクティブな関数の定義
204-;;; ****************************
205-(defun zen2han-version-show ()
206- "zen2hanのヴァージョンをミニバッファに表示する。"
207- (interactive)
208- (message zen2han-version-string))
209-;;; --------------------------------------------------------------------
210-(defun zen2han-id-show ()
211- "zen2hanのヴァージョンコントロールIDをミニバッファに表示する。"
212- (interactive)
213- (message zen2han-id-string))
214-;;; --------------------------------------------------------------------
215-(defun zen2han-region (b e)
216- "いわゆる全角英数字を ASCIIに変換し、更にいわゆる半角カタカナを全角
217-カタカナに変換した後に意味的におかしい「ー」を「-」に変換する関数です。
218-変換範囲は、指定リージョンです。"
219- (interactive "r")
220- (let ((cnv-lists (list zen2han-z2h-list
221- zen2han-h2z-list
222- zen2han-cnv-dullness-list
223- zen2han-cnv-kigou-list))
224- (cnv-list) (llen) (from-to-alist) (from-to))
225- (save-excursion
226- (save-restriction
227- (narrow-to-region b e)
228- ;;
229- ;; デフォルトの変換
230- ;;
231- (setq llen (length cnv-lists))
232- (while (< 0 llen)
233- (if (setq cnv-list (car cnv-lists))
234- (zen2han:rep-str (nth 0 cnv-list)
235- (nth 1 cnv-list)
236- (nth 2 cnv-list)
237- (nth 3 cnv-list)))
238- (setq cnv-lists (cdr cnv-lists)
239- llen (1- llen)))
240- ;;
241- ;; 汎用文字列変換
242- ;;
243- (if zen2han-conv-other-alist
244- (progn
245- (setq from-to-alist zen2han-conv-other-alist)
246- (while (setq from-to (car from-to-alist))
247- (goto-char (point-min))
248- (while (search-forward (car from-to) nil t)
249- (replace-match (cdr from-to) nil t))
250- (setq from-to-alist (cdr from-to-alist)))))
251- ;;
252- ;; 汎用文字列変換(正規表現)
253- ;;
254- (if zen2han-conv-regexp-alist
255- (progn
256- (setq from-to-alist zen2han-conv-regexp-alist)
257- (while (setq from-to (car from-to-alist))
258- (goto-char (point-min))
259- (while (re-search-forward (car from-to) nil t)
260- (replace-match (cdr from-to) nil nil))
261- (setq from-to-alist (cdr from-to-alist)))))
262- ))))
263-
264-;;; --------------------------------------------------------------------
265-(defun zen2han-buffer ()
266- "いわゆる全角英数字を ASCIIに変換し、更にいわゆる半角カタカナを全角
267-カタカナに変換した後に意味的におかしい「ー」を「-」に変換する関数です。
268-変換範囲は、カレントバッファ全体です。"
269- (interactive)
270- (zen2han-region (point-min) (point-max)))
271-
272-;;; --------------------------------------------------------------------
273-(defun zen2han-all-fill-paragraph-region (start end)
274- "指定リージョンの全ての段落を詰め(四角く整形)ます。全角←→半角の
275-処理とは全く関係ないのですが、双方共にテキストファイルを編集する時に、
276-使用する事が多いので、同じパッケージに入れています。"
277- (interactive "r")
278- (save-excursion
279- (save-restriction
280- (narrow-to-region start end)
281- (goto-char (point-min))
282- (while (not (eobp))
283- (fill-paragraph nil)
284- (forward-paragraph)))))
285-;;; --------------------------------------------------------------------
286-(defun zen2han-all-fill-paragraph-buffer ()
287- "カレントバッファ全ての段落を詰め(四角く整形)ます。全角←→半角の
288-処理とは全く関係ないのですが、双方共にテキストファイルを編集する時に、
289-使用する事が多いので、同じパッケージに入れています。"
290- (interactive)
291- (zen2han-all-fill-paragraph-region (point-min) (point-max)))
292-;;; --------------------------------------------------------------------
293-(defun zen2han-chop-line-end-space ()
294- "行末の空白(SPACE, TAB)を削除します。全角←→半角の処理とは全く関係
295-ないのですが、双方共にテキストファイルを編集する時に、使用する事が多い
296-ので、同じパッケージに入れています。"
297- (interactive)
298- (save-excursion
299- (let ((cnt 0))
300- (goto-char (point-min))
301- (while (re-search-forward "[ \t]+$" nil t)
302- (replace-match "")
303- (setq cnt (1+ cnt)))
304- (message "%d行の行末の空白を切りました。" cnt))))
305-
73+;;;
74+;;; Revision 1.1 2003/05/24 13:23:47 tfuruka1
75+;;; Initial revision
76+;;;
77+
78+;;
79+;; 定数の定義
80+;;
81+(defconst zen2han-id-string
82+ "$Id: zen2han.el,v 1.3 2005/05/12 13:53:59 tfuruka1 Exp $"
83+ "ヴァージョンコントロールのID")
84+(defconst zen2han-version-number "1.0"
85+ "zen2hanのヴァージョン番号")
86+(defconst zen2han-version-string
87+ (format "zen2han %s" zen2han-version-number)
88+ "zen2hanのヴァージョン文字列")
89+
90+;;
91+;; 変換テーブル
92+;;
93+;; DBG: (makunbound 'zen2han-z2h-list)
94+(defvar zen2han-z2h-list
95+ (list (concat "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
96+ "abcdefghijklmnopqrstuvwxyz"
97+ "0123456789")
98+ (length "A")
99+ (concat "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
100+ "abcdefghijklmnopqrstuvwxyz"
101+ "0123456789")
102+ (length "A"))
103+ "全角から半角へ変換する為のリストです。リストの要素は、全角文字の集
104+合、全角文字の変換単位の長さ、半角文字の集合、半角文字の変換単位の長さ
105+です。この値に '() を指定した場合は変換を行いません。")
106+
107+;; DBG: (makunbound 'zen2han-h2z-list)
108+(defvar zen2han-h2z-list
109+ (list (concat "。「」、・ヲァィゥェォャュョッー"
110+ "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ"
111+ "マミムメモヤユヨラリルレロワン゙゚")
112+ (length "ア")
113+ (concat "。「」、・ヲァィゥェォャュョッー"
114+ "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ"
115+ "マミムメモヤユヨラリルレロワン゛゜")
116+ (length "ア"))
117+ "半角から全角へ変換する為のリストです。リストの要素は、半角文字の集
118+合、半角文字の変換単位の長さ、全角文字の集合、全角文字の変換単位の長さ
119+です。この値に '() を指定した場合は変換を行いません。")
120+
121+;; DBG: (makunbound 'zen2han-cnv-dullness-list)
122+(defvar zen2han-cnv-dullness-list
123+ (list (concat "ハ゜ヒ゜フ゜ヘ゜ホ゜"
124+ "カ゛キ゛ク゛ケ゛コ゛サ゛シ゛ス゛セ゛ソ゛"
125+ "タ゛チ゛ツ゛テ゛ト゛ハ゛ヒ゛フ゛ヘ゛ホ゛")
126+ (length "ハ゜")
127+ (concat "パピプペポ"
128+ "ガギグゲゴザジズゼゾ"
129+ "ダヂヅデドバビブベボ")
130+ (length "パ"))
131+ "濁音及び、半濁音を変換する為のリストです。リストの要素は、変換元文
132+字列の集合、変換元文字列の変換単位の長さ、変換先文字列の集合、変換先文
133+字列の変換単位の長さです。この値に '() を指定した場合は変換を行いませ
134+ん。")
135+
136+;; DBG: (makunbound 'zen2han-cnv-kigou-list)
137+(defvar zen2han-cnv-kigou-list
138+ (list (concat "!$|^@{[]}<>&/()"
139+ ":−#?+=.’*; 、,._`")
140+ (length "!")
141+ (concat "!$|^@{[]}<>&/()"
142+ ":-#?+=.'*; ,,._`")
143+ (length "!"))
144+ "全角記号から半角記号への変換リストです。リストの要素は
145+zen2han-z2h-list と同様です。この値に '() を指定した場合は変換を
146+行いません。")
147+
148+;; DBG: (makunbound 'zen2han-conv-regexp-alist)
149+(defvar zen2han-conv-other-alist '()
150+ "変換元文字列と、変換先字列の連想リストです。全角←→半角以外の汎用
151+文字列の変換を行う為に使用します。例えば「?」(○の中に1)を「(1)」に変
152+換する場合は、
153+
154+ '((\"?\" . \"(1)\"))
155+
156+と指定します。また、TeX用に
157+
158+ '((\"Σ\" . \"$\\displaystyle\\sum$\")
159+ (\"∫\" . \"$\\displaystyle\\int$\"))
160+
161+等と記述すると良いでしょう。なお、この連想リストの値がnilの場合は、変
162+換を行いません。")
163+
164+;; DBG: (makunbound 'zen2han-conv-regexp-alist)
165+(defvar zen2han-conv-regexp-alist
166+ '(
167+ ;; 意味的におかしい「ー」を「-」に変換する。意味的におかしいという
168+ ;; 判断は全角の後の-,−と半角の後の「ー」等です。ASCII文字直後の"ー
169+ ;; "は"-"に変換し、カタカナの後の"-"は"ー"に変換する
170+ ("\\([ -~]\\)ー" . "\\1-")
171+ ("\\([ア-ン]\\)-" . "\\1ー")
172+
173+ ;; 「,」の後に空白の無いものは空白を付加する
174+ (",\\([^ ]\\)" . ", \\1")
175+
176+ ;; ASCII 文字の前後が漢字の場合はそれぞれスペースを挿入する
177+ ("\\([ -龠]\\)\\([A-Za-z0-9]\\)" . "\\1 \\2")
178+ ("\\([A-Za-z]\\)\\([ -龠]\\)" . "\\1 \\2")
179+
180+ ;; 後ろに空白があると変な物と、前に空白が有ると変なものは空白を詰
181+ ;; める。これは、判断が難しいので、空白が一個のものだけを対象にし
182+ ;; ています。
183+ ("\\([〜「。]\\) \\([^ ]\\)" . "\\1\\2")
184+ ("\\([^ ]\\) \\([〜」]\\)" . "\\1\\2"))
185+ "正規表現で変換する文字列の連想リストです。検索文字列と、置換文字列
186+を指定します。")
187+
188+
189+;;; ***********************
190+;;; 関数の定義(下請け関数)
191+;;; ***********************
192+
193+(defun zen2han:rep-str (from flen to tlen)
194+ "カレントバッファの文字列をfromからtoへ変換する。バッファ全てに対し
195+て処理を行いますので、必要であれば、呼び出し元でナローイングする必要が
196+あります。正確には、from, to 共に同一長の文字列の集合で指定します。
197+flenがfromの一ユニットの長さ, tlenがtoの一ユニットの長さになります。こ
198+の関数はインタラクティブに呼び出す事は出来ません。下請け関数です。下請
199+け関数なので、ポイントの保存等は一切行わないので、必要であれば呼び出し
200+元で保存しておく必要があります。"
201+ (let ((cnt 0))
202+ (while (< cnt (/ (length from) flen))
203+ (goto-char (point-min))
204+ (while (search-forward
205+ (substring from (* cnt flen)
206+ (+ flen (* cnt flen))) nil t)
207+ (replace-match (substring to (* cnt tlen) (+ tlen (* cnt tlen)))))
208+ (setq cnt (1+ cnt)))))
209+
210+;;; --------------------------------------------------------------------
211+
212+;;; ****************************
213+;;; インタラクティブな関数の定義
214+;;; ****************************
215+(defun zen2han-version-show ()
216+ "zen2hanのヴァージョンをミニバッファに表示する。"
217+ (interactive)
218+ (message zen2han-version-string))
219+;;; --------------------------------------------------------------------
220+(defun zen2han-id-show ()
221+ "zen2hanのヴァージョンコントロールIDをミニバッファに表示する。"
222+ (interactive)
223+ (message zen2han-id-string))
224+;;; --------------------------------------------------------------------
225+(defun zen2han-region (b e)
226+ "いわゆる全角英数字を ASCIIに変換し、更にいわゆる半角カタカナを全角
227+カタカナに変換した後に意味的におかしい「ー」を「-」に変換する関数です。
228+変換範囲は、指定リージョンです。"
229+ (interactive "r")
230+ (let ((cnv-lists (list zen2han-z2h-list
231+ zen2han-h2z-list
232+ zen2han-cnv-dullness-list
233+ zen2han-cnv-kigou-list))
234+ (cnv-list) (llen) (from-to-alist) (from-to))
235+ (save-excursion
236+ (save-restriction
237+ (narrow-to-region b e)
238+ ;;
239+ ;; デフォルトの変換
240+ ;;
241+ (setq llen (length cnv-lists))
242+ (while (< 0 llen)
243+ (if (setq cnv-list (car cnv-lists))
244+ (zen2han:rep-str (nth 0 cnv-list)
245+ (nth 1 cnv-list)
246+ (nth 2 cnv-list)
247+ (nth 3 cnv-list)))
248+ (setq cnv-lists (cdr cnv-lists)
249+ llen (1- llen)))
250+ ;;
251+ ;; 汎用文字列変換
252+ ;;
253+ (if zen2han-conv-other-alist
254+ (progn
255+ (setq from-to-alist zen2han-conv-other-alist)
256+ (while (setq from-to (car from-to-alist))
257+ (goto-char (point-min))
258+ (while (search-forward (car from-to) nil t)
259+ (replace-match (cdr from-to) nil t))
260+ (setq from-to-alist (cdr from-to-alist)))))
261+ ;;
262+ ;; 汎用文字列変換(正規表現)
263+ ;;
264+ (if zen2han-conv-regexp-alist
265+ (progn
266+ (setq from-to-alist zen2han-conv-regexp-alist)
267+ (while (setq from-to (car from-to-alist))
268+ (goto-char (point-min))
269+ (while (re-search-forward (car from-to) nil t)
270+ (replace-match (cdr from-to) nil nil))
271+ (setq from-to-alist (cdr from-to-alist)))))
272+ ))))
273+
274+;;; --------------------------------------------------------------------
275+(defun zen2han-buffer ()
276+ "いわゆる全角英数字を ASCIIに変換し、更にいわゆる半角カタカナを全角
277+カタカナに変換した後に意味的におかしい「ー」を「-」に変換する関数です。
278+変換範囲は、カレントバッファ全体です。"
279+ (interactive)
280+ (zen2han-region (point-min) (point-max)))
281+
282+;;; --------------------------------------------------------------------
283+(defun zen2han-all-fill-paragraph-region (start end)
284+ "指定リージョンの全ての段落を詰め(四角く整形)ます。全角←→半角の
285+処理とは全く関係ないのですが、双方共にテキストファイルを編集する時に、
286+使用する事が多いので、同じパッケージに入れています。"
287+ (interactive "r")
288+ (save-excursion
289+ (save-restriction
290+ (narrow-to-region start end)
291+ (goto-char (point-min))
292+ (while (not (eobp))
293+ (fill-paragraph nil)
294+ (forward-paragraph)))))
295+;;; --------------------------------------------------------------------
296+(defun zen2han-all-fill-paragraph-buffer ()
297+ "カレントバッファ全ての段落を詰め(四角く整形)ます。全角←→半角の
298+処理とは全く関係ないのですが、双方共にテキストファイルを編集する時に、
299+使用する事が多いので、同じパッケージに入れています。"
300+ (interactive)
301+ (zen2han-all-fill-paragraph-region (point-min) (point-max)))
302+;;; --------------------------------------------------------------------
303+(defun zen2han-chop-line-end-space ()
304+ "行末の空白(SPACE, TAB)を削除します。全角←→半角の処理とは全く関係
305+ないのですが、双方共にテキストファイルを編集する時に、使用する事が多い
306+ので、同じパッケージに入れています。"
307+ (interactive)
308+ (save-excursion
309+ (let ((cnt 0))
310+ (goto-char (point-min))
311+ (while (re-search-forward "[ \t\r]+$" nil t)
312+ (replace-match "")
313+ (setq cnt (1+ cnt)))
314+ (message "%d行の行末の空白を切りました。" cnt))))
315+