T.Furukawa
「がらくたシリーズ」は, 使い捨てで作っていたツールを捨てるのは勿体無いと
の趣旨でパッケージ化したシリーズです。というか, 最近, 物忘れが激しくなっ
てきて, 昔のように捨てては作るといった事が出来なくなってしまいました。
zen2han.el
は, 元々は.emacs
に直接記述していたものを, 切り出
して作成したものです。
TeX でタイプセットしていると, テキストで頂いたファイルを TeX ファ イル用にマークアップする必要が生じたりワープロで作成した文書をテキストファ イルに変換(あるいは保存)したものを TeX ファイル用にマークアップする必 要が生じる場合があります。テキストファイルに TeX のコマンドをマークアッ プする処理は, それほど大変な作業ではありませんが, マークアップしていて困 る事は,
といった誤りが結構あるということです。このような誤り(必ずしも誤りとは言 えないかもしれませんが)をいちいち手で直す事に嫌気がさして
等の処理を行うツールを UNIX 上で作成していました。そのうち, 主に使用する プラットフォームが Windows になってきたので, UNIX で動作していたツールを Win32のコンソール(WIN32, djgpp) で動作するように修正しました。また, 機能 の一部を拡張して全角文字の変換テーブルを外部ファイルに持たせる事によって, ある程度柔軟な変換を行えるようにしました(例えば○の中に数字の入った文字 をTeXのマクロに置き換える等)。これが, 1997年の事です。
それと同時に, 当時覚えたての Emacs Lisp でも実現出来るといいな〜と思って,
.emacs
に直接記述して使用していました。Emacs は NEmacs の頃から使
用していたので, その当時でも Emacs 暦は長かったと思いますが, Elisp を書
いたのは, 初めてだったと思います(今も elisp はへなちょこですが, その当時
の elisp はとても見られたもんじゃありませんでした)。その Elisp を焼きな
おしたのが, 「がらくたシリーズ: ZEN2HAN」という事になります。
zen2han はバッファ中の特定のコードを変換する関数の集まりです。元々は全角 の英数字を半角に変換する為に UNIX 上で awk + csh のスクリプトで作成した ものです。そのため zenkaku to(2) hankaku という名前になっています。その 後, 半角カタカナを全角カタカナに変換する機能等を追加すると同時に C言語で 作り直したものをelispに移植しました。現在は概ね以下の機能を有しています。
,
の後に空白文字がない場合に空白文字を挿入する。この機能も TeX
ファイルに対して処理を行うと, 不具合が生じる2可能性があります
ので, カスタマイズ変数によって無効にする事が出来ます。
zen2han
のインストールzen2han
のインストールは非常に容易です。zen2han.el
をを環境
変数EMACSLOADPATH
に含まれるディレクトリにコピーするだけです。必ず
しも, このディレクトリにインストールする必要はありませんが, 他のディレク
トリにインストールした場合は, 後に説明する~/.emacs
の設定を読み替
えて下さい。
zen2han.el
のインストールが完了したら, ~/.emacs
のどこかに
(load "zen2han")
を追記して下さい。zen2han.el
をEMACSLOADPATH
以外のディレク
トリにインストールした場合は, パスを適切に指定して下さい。この設定ですと,
zen2han を使用しない場合でも, 常にメモリにzen2han.el
をロードしま
す。zen2han を使用する時だけ, ロードする場合は, 上記の代わりに
(autoload 'zen2han-region "zen2han" "全⇔半" t) (autoload 'zen2han-buffer "zen2han" "全⇔半" t) (autoload 'zen2han-all-fill-paragraph-region "zen2han" "全⇔半" t) (autoload 'zen2han-all-fill-paragraph-buffer "zen2han" "全⇔半" t) (autoload 'zen2han-chop-line-end-space "zen2han" "全⇔半" t)
と, 追記して下さい。
これが読めているという事は, info のインストールが終わっているという事の ような気がするのですが...
zen2han.info
ファイルをINFOPATH
に設定されているディレクトリに
コピーしてください。
dir
ファイルに以下の記述を追加してください。
* zen2han: (zen2han). Convert JIS X0201 to JIS X0208 etc.(ja)
また, install-info
でインストールする事も可能です。以下の例は, カ
レントディレクトリがINFOPATH
に設定されているディレクトリの場合の
例です。
install-info ./zen2han.info ./dir
zen2han の使用方法は, 至って簡単です。任意のバッファで, M-xに続い て関数名の入力を行うだけです。
文字列変換系の関数を以下に記述します。文字列変換の内容は, 機能概要 に記述している通りです。
zen2han-region start end | Function |
指定リージョンの文字列の変換を行います。当たり前の事ですが, 意図して, 半 角カナや, 全角英数字を記述している範囲にこの処理を行わないように注意して 下さい。 |
zen2han-buffer | Function |
カレントバッファの文字列の変換を行います。 |
zen2han には, 文字列変換とは全く関係ありませんが, 段落の文字詰めを行う関 数も用意しています。この関数は, 私の好みで, 本パッケージに入れています。 zen2han-regionで, 所謂全角英数字から ASCII 文字や, 所謂半角カタカ ナから全角カタカナに変換を行うと, 文字列長が変わるため, 段落の行長がバラ バラになります。段落毎にfill-paragraphを行うのが面倒なので, 以下の 関数を用意しています。
zen2han-all-fill-paragraph-region start end | Function |
指定リージョンの全ての段落の文字詰め(fill-paragraph)を行います。こ の関数を使用する場合は、「全て」の段落に対して処理を行う事に注意して下さ い。目視の「段落」とEmacsの「段落」は違う場合があります。 |
zen2han-all-fill-paragraph-buffer | Function |
カレントバッファの全ての段落の文字詰め(fill-paragraph)を行います。 その他は, zen2han-all-fill-paragraph-regionと同様です。 |
zen2han-chop-line-end-space | Function |
段落の文字詰めとは, 趣旨が異なりますが, 行末の空白文字(SPACE, TAB)を削除 します。対象は, カレントバッファ全体です。Emacs では, 改行マークが見えな い為, 行末に余分な空白があっても, 直ぐには判らない事があります。よっぽど の事がない限りは, 行末に意図して, 空白文字を置く事は無いと思います。 |
その他にzen2han.el
で定義している関数を以下に列挙します。
zen2han:rep-str from flen to tlen | Function |
zen2han-region, zen2han-bufferから呼び出され, カレントバッファ
の文字列の変換を行う下請け関数です。カレントバッファ全体に対して処理を行
いますので, 範囲を指定する場合は, 呼び出し元で, ナローイングしておく必要
があります。この関数はインタラクティブに呼び出す事は出来ません。引数の意
味は以下の通りです。
例えば, 全角文字列の (zen2han:rep-str "ハ゜ヒ゜フ゜ヘ゜ホ゜" (length "ハ゜") "パピプペポ" (length "パ")) と記述します。上記の例はハ行だけ記述していますが, 実際は全行記述すると思 います。 |
zen2han-version-show | Function |
zen2hanのヴァージョンをミニバッファに表示します。 |
zen2han-id-show | Function |
zen2hanのヴァージョンコントロールIDをミニバッファに表示します。 |
zen2han の文字列変換は, 全てカスタマイズ変数で制御する事が可能です。以下 に zen2han で用意しているカスタマイズ変数を列挙します。
zen2han-buffer, zen2han-regionは次に列挙する変数を zen2han-z2h-list, zen2han-h2z-list, zen2han-cnv-dullness-list, zen2han-cnv-kigou-list, zen2han-conv-other-alist, zen2han-conv-regexp-alistの順番に 処理しています。
zen2han-z2h-list | Variable |
所謂全角から半角へ変換する為のリストです。リストの要素は, 全角文字の集合,
全角文字の変換単位の長さ, 半角文字の集合, 半角文字の変換単位の長さです。
この値に'() を指定した場合は変換を行いません。このリストの初期値は
以下の通りです。
(list (concat "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789") (length "A") (concat "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789") (length "A")) |
zen2han-h2z-list | Variable |
半角から全角へ変換する為のリストです。リストの要素は, 半角文字の集合, 半
角文字の変換単位の長さ, 全角文字の集合, 全角文字の変換単位の長さです。こ
の値に'() を指定した場合は変換を行いません。このリストの初期値は以
下の通りです。
このリストには所謂半角カナが含まれています。 |
zen2han-cnv-dullness-list | Variable |
濁音及び, 半濁音を変換する為のリストです。リストの要素は, 変換元文字列の
集合, 変換元文字列の変換単位の長さ, 変換先文字列の集合, 変換先文字列の変
換単位の長さです。この値に '() を指定した場合は変換を行いません。
このリストの初期値は以下の通りです。
(list (concat "ハ゜ヒ゜フ゜ヘ゜ホ゜" "カ゛キ゛ク゛ケ゛コ゛サ゛シ゛ス゛セ゛ソ゛" "タ゛チ゛ツ゛テ゛ト゛ハ゛ヒ゛フ゛ヘ゛ホ゛") (length "ハ゜") (concat "パピプペポ" "ガギグゲゴザジズゼゾ" "ダヂヅデドバビブベボ") (length "パ")) この中には, 所謂半角カナ(JIS X0201)に対する変換は含まれていませんが, 先 に半角カナは全角カナ(JIS X0208)に変換されている為です。 |
zen2han-cnv-kigou-list | Variable |
全角記号から半角記号への変換リストです。リストの要素は
zen2han-z2h-listと同様です。この値に'() を指定した場合は変換
を行いません。このリストの初期値は以下の通りです。
(list (concat "!$|^@{[]}<>&/()" ":−#?+=.’*; 、,._`") (length "!") (concat "!$|^@{[]}<>&/()" ":-#?+=.'*; ,,._`") (length "!")) このリストには全角スペースが含まれています。 |
zen2han-conv-other-alist | Variable |
変換元文字列と, 変換先字列の連想リストです。今まで説明した以外の汎用文字
列の変換を行う為に使用します。例えば「(○の中に 1)」を「(1)」に変換す
る場合は,
と指定します。Emacs 上では文字が見えないかもしれません(見えなくて正解な のですが)。機種依存文字を変換する場合に有効だと思います。また, TeX用に '(("Σ" . "$\\displaystyle\\sum$") ("∫" . "$\\displaystyle\\int$")) 等と記述すると良いでしょう。なお, この連想リストの値が |
zen2han-conv-regexp-alist | Variable |
正規表現で変換する文字列の連想リストです。検索文字列と, 置換文字列
を指定します。この設定で,
このリストの初期値は以下の通りです。 '( ;; 意味的におかしい「ー」を「-」に変換する。意味的におかしいという判 ;; 断は全角の後の-,−と半角の後の「ー」等です。ASCII文字直後の"ー"は ;; "-"に変換し、カタカナの後の"-"は"ー"に変換する ("\\([ -~]\\)ー" . "\\1-") ("\\([ア-ン]\\)-" . "\\1ー") ;; 「,」の後に空白の無いものは空白を付加する (",\\([^ ]\\)" . ", \\1") ;; ASCII 文字の前後が漢字の場合はそれぞれスペースを挿入する ("\\([ -龠]\\)\\([A-Za-z0-9]\\)" . "\\1 \\2") ("\\([A-Za-z]\\)\\([ -龠]\\)" . "\\1 \\2") ;; 後ろに空白があると変な物と、前に空白が有ると変なものは空白を詰め ;; る。これは、判断が難しいので、空白が一個のものだけを対象にしてい ;; ます。 ("\\([〜「。]\\) \\([^ ]\\)" . "\\1\\2") ("\\([^ ]\\) \\([〜」]\\)" . "\\1\\2")) |
zen2han.el
と一致していない可能性
がありますの(勿論, 最初は一致しているんですが, メンテナンスを重ねると一
致しなくなる可能性があります・・・という意味です)で, 正確な初期値を知り
たい場合は, describe-variableで確認して下さい。これらの変数の値を
変更する事により, zen2han-region, zen2han-bufferの挙動を制御
する事が可能になります。
どうでも良い事ですが, 私の作成するソフトウエアには「がらくたシリーズ」と 「へなちょこシリーズ」とそれ以外に分類されます。ここでは, その定義(といっ ても, 私個人の主観なんですけど)について説明します。
がらくたシリーズとは, 所謂, 使い捨てのソフトウエアです。誰でも, 必要に応 じて「ちょちょい」と作成して, 後は捨ててしまうソフトウエアを作成する事が あると思います。よくあるのが, 「ちょっと試してみよう」的なソフトです。私 も過去に何度もそのようなソフトを作ってきました。気が付いてみると・・・ 「あれ, これって, 前にも作ったような・・・」と思う事がしばしばあります。 若い時はそれでも良かったのですが, 最近, 年齢と供にプログラミング速度も低 下してきて, 過去に自分で作成したソフトウエアのソースを追っていると「なん て凄いロジックなんだ・・・」って思う事があります。
そんなわけで, 使い捨ては勿体無いと思い始めるようになり, それまで使い捨て だったソフトウエアも消さずに残しておくように心がけています。それらのソフ トウエアを保存しておく場所を私は,
「がらくた置き場」
と, 呼んでいます。「がらくたシリーズ」は, これらのソフトウエアを少し焼き なおして作成されたものの総称なのです。
「へなちょこシリーズ」は, もうはっきりいって私の主観以外の何者でもありま せん。私は, Emacs Lisp を始めたのが, 年齢的に若くなかったので, 他の言語 (C 言語とか, X86 Assembler) と比較して, あまり得意ではありません。それで も何とか「こんなことを Emacs でやりたいよ〜」という思いが強く, なんとか 自分のやりたい事を実現する為に, 他の諸先輩方の Emacs Lisp を参考にして, それなりに扱えるようになりました。
しかし, lisp というものが良くわかっていない(自分ではわかっていないと思う) 為か,
な〜んか, へなちょこだな〜
と思ってしまうのです。しかも, 実際にへなちょこなのです。しかし,
へなちょこなもんは, へなちょこなんだ!!!。やりたい事が出来ているからい いじゃないか!!
と, 自分に逆切れして開き直っています(^_^;
。と, いうわけで「へなちょ
こシリーズ」が出来たわけです。
・・・どうでも良い事でした。
本プログラムはフリーソフトウェアです。本プログラムを使用して生じたいかな る結果に対しても作者は責任を負わないこととします。個人の責任に於いて使用 して下さい。入手したアーカイブのままの形式であれば, 再頒布, 転載は可能と します。常識的に扱ってください。
苦情, 希望, バグ報告, 感想等は歓迎いたします。以下迄お願い致します。