修订版 | 4a042636e54143aa3a3295f1c5a20584c0187fa2 (tree) |
---|---|
时间 | 2005-05-12 22:53:59 |
作者 | tfuruka1 <tfuruka1> |
Commiter | tfuruka1 |
zen2han-chop-line-end-space で, 復帰文字も対象にするようにしました。
のようなファイルを *-Unix で開いた時に行末に M が大量発生してしまう為
です。
@@ -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 | +;;; | |
59 | 59 | ;;; $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 | +;;; | |
60 | 70 | ;;; Revision 1.2 2003/05/25 14:47:59 tfuruka1 |
61 | 71 | ;;; 後ろに空白があると変な物と、前に空白が有ると変なものは空白を詰める正規 |
62 | 72 | ;;; 表現を少し変更しました。 |
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 | + |