zen2han

Table of Contents


Node: Top, Next: , Previous: (dir), Up: (dir)

がらくたシリーズ:ZEN2HAN

このドキュメントは, 「がらくたシリーズ:ZEN2HAN」について記述しています。 ZEN2HAN は所謂半角カタカナ(JIS X0201)から所謂全角カタカナ(JIS X0208)への 変換を目的として作成した elisp です。
Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003

T.Furukawa

このドキュメントの版数は $Revision: 1.6 $ です。


Node: 要旨, Next: , Previous: Top, Up: Top

要旨

「がらくたシリーズ」は, 使い捨てで作っていたツールを捨てるのは勿体無いと の趣旨でパッケージ化したシリーズです。というか, 最近, 物忘れが激しくなっ てきて, 昔のように捨てては作るといった事が出来なくなってしまいました。 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」という事になります。


Node: 機能概要, Next: , Previous: 要旨, Up: Top

機能概要

zen2han はバッファ中の特定のコードを変換する関数の集まりです。元々は全角 の英数字を半角に変換する為に UNIX 上で awk + csh のスクリプトで作成した ものです。そのため zenkaku to(2) hankaku という名前になっています。その 後, 半角カタカナを全角カタカナに変換する機能等を追加すると同時に C言語で 作り直したものをelispに移植しました。現在は概ね以下の機能を有しています。


Node: インストール, Next: , Previous: 機能概要, Up: Top

インストール


Node: zen2hanのインストール, Next: , Previous: インストール, Up: インストール

zen2hanのインストール

zen2hanのインストールは非常に容易です。zen2han.elをを環境 変数EMACSLOADPATHに含まれるディレクトリにコピーするだけです。必ず しも, このディレクトリにインストールする必要はありませんが, 他のディレク トリにインストールした場合は, 後に説明する~/.emacsの設定を読み替 えて下さい。

zen2han.elのインストールが完了したら, ~/.emacsのどこかに

     (load "zen2han")
     

を追記して下さい。zen2han.elEMACSLOADPATH以外のディレク トリにインストールした場合は, パスを適切に指定して下さい。この設定ですと, 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)
     

と, 追記して下さい。


Node: infoのインストール, Previous: zen2hanのインストール, Up: インストール

infoのインストール

これが読めているという事は, info のインストールが終わっているという事の ような気がするのですが...

  1. zen2han.infoファイルをINFOPATHに設定されているディレクトリに コピーしてください。
  2. そのディレクトリのdirファイルに以下の記述を追加してください。
              * zen2han: (zen2han).     Convert JIS X0201 to JIS X0208 etc.(ja)
              

    また, install-infoでインストールする事も可能です。以下の例は, カ レントディレクトリがINFOPATHに設定されているディレクトリの場合の 例です。

              install-info ./zen2han.info ./dir
              


Node: 使い方, Next: , Previous: インストール, Up: Top

使い方

zen2han の使用方法は, 至って簡単です。任意のバッファで, M-xに続い て関数名の入力を行うだけです。


Node: 文字列変換系, Next: , Previous: 使い方, Up: 使い方

文字列変換系

文字列変換系の関数を以下に記述します。文字列変換の内容は, 機能概要 に記述している通りです。

zen2han-region start end Function
指定リージョンの文字列の変換を行います。当たり前の事ですが, 意図して, 半 角カナや, 全角英数字を記述している範囲にこの処理を行わないように注意して 下さい。

zen2han-buffer Function
カレントバッファの文字列の変換を行います。


Node: 段落の文字詰め等, Next: , Previous: 文字列変換系, Up: 使い方

段落の文字詰め等

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 では, 改行マークが見えな い為, 行末に余分な空白があっても, 直ぐには判らない事があります。よっぽど の事がない限りは, 行末に意図して, 空白文字を置く事は無いと思います。


Node: その他, Previous: 段落の文字詰め等, Up: 使い方

その他

その他にzen2han.elで定義している関数を以下に列挙します。

zen2han:rep-str from flen to tlen Function
zen2han-region, zen2han-bufferから呼び出され, カレントバッファ の文字列の変換を行う下請け関数です。カレントバッファ全体に対して処理を行 いますので, 範囲を指定する場合は, 呼び出し元で, ナローイングしておく必要 があります。この関数はインタラクティブに呼び出す事は出来ません。引数の意 味は以下の通りです。
FROM
変換元文字列の文字列の集合を文字列で表します。文書で書くと意味が判らない と思いますが, 例えば, A, B, Cに変換する処理を考えた場合, この引数に,
               ABC
               

を指定します。

FLEN
変換元文字列の変換単位の文字列長を指定します。先と同じ変換を考えた場合こ の引数には
               (length "A")
               

等と指定します(即値で 1を指定しても良いですが, 過去に痛い目にあった事が あるので, 関数で文字列長を得た方が無難です)。つまり, この関数では, 異な る文字列長の集合を指定出来ないという事になります。

TO
変換先文字列の文字列の集合を文字列で現します。書式は, 変換元文字列と同様 です。先と同じ変換を考えた場合, この引数には,
               ABC
               

を指定する事になります。

TLEN
変換先文字列の変換単位の文字列長を指定します。先と同じ変換を考えた場合, この引数には
               (length "A")
               

等と指定する事になります。

例えば, 全角文字列のに変換する場合は,

          (zen2han:rep-str "ハ゜ヒ゜フ゜ヘ゜ホ゜"
                           (length "ハ゜")
                           "パピプペポ"
                           (length "パ"))
          

と記述します。上記の例はハ行だけ記述していますが, 実際は全行記述すると思 います。

zen2han-version-show Function
zen2hanのヴァージョンをミニバッファに表示します。

zen2han-id-show Function
zen2hanのヴァージョンコントロールIDをミニバッファに表示します。


Node: カスタマイズ変数, Next: , Previous: 使い方, Up: Top

カスタマイズ変数

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
半角から全角へ変換する為のリストです。リストの要素は, 半角文字の集合, 半 角文字の変換単位の長さ, 全角文字の集合, 全角文字の変換単位の長さです。こ の値に'()を指定した場合は変換を行いません。このリストの初期値は以 下の通りです。
          Fig:Init-h2z-list
          

このリストには所謂半角カナが含まれています。

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)」に変換す る場合は,
          Fig:Maru1
          

と指定します。Emacs 上では文字が見えないかもしれません(見えなくて正解な のですが)。機種依存文字を変換する場合に有効だと思います。また, TeX用に

          '(("Σ" . "$\\displaystyle\\sum$")
            ("∫" . "$\\displaystyle\\int$"))
          

等と記述すると良いでしょう。なお, この連想リストの値が'()の場合は, 変換を行いません。このリストの初期値は'()です。

zen2han-conv-regexp-alist Variable
正規表現で変換する文字列の連想リストです。検索文字列と, 置換文字列 を指定します。この設定で,
  1. 意味的におかしい-に変換しています。意味的におかしいと いう判断は全角の後の-, と半角の後の等です。 ASCII文字直後の-に変換し、カタカナの後の-に変換するしています。
  2. ,の後に空白の無いものは空白を付加する。
  3. ASCII 文字の前後が漢字の場合はそれぞれスペースを挿入する
  4. 後ろに空白があると変な物と, 前に空白が有ると変なものは空白を詰めます。こ れは, 判断が難しいので, 空白が一個のものだけを対象にしています。

このリストの初期値は以下の通りです。

          '(
            ;; 意味的におかしい「ー」を「-」に変換する。意味的におかしいという判
            ;; 断は全角の後の-,−と半角の後の「ー」等です。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の挙動を制御 する事が可能になります。


Node: 蛇足, Next: , Previous: カスタマイズ変数, Up: Top

蛇足

どうでも良い事ですが, 私の作成するソフトウエアには「がらくたシリーズ」と 「へなちょこシリーズ」とそれ以外に分類されます。ここでは, その定義(といっ ても, 私個人の主観なんですけど)について説明します。


Node: がらくたシリーズ, Next: , Previous: 蛇足, Up: 蛇足

がらくたシリーズ

がらくたシリーズとは, 所謂, 使い捨てのソフトウエアです。誰でも, 必要に応 じて「ちょちょい」と作成して, 後は捨ててしまうソフトウエアを作成する事が あると思います。よくあるのが, 「ちょっと試してみよう」的なソフトです。私 も過去に何度もそのようなソフトを作ってきました。気が付いてみると・・・ 「あれ, これって, 前にも作ったような・・・」と思う事がしばしばあります。 若い時はそれでも良かったのですが, 最近, 年齢と供にプログラミング速度も低 下してきて, 過去に自分で作成したソフトウエアのソースを追っていると「なん て凄いロジックなんだ・・・」って思う事があります。

そんなわけで, 使い捨ては勿体無いと思い始めるようになり, それまで使い捨て だったソフトウエアも消さずに残しておくように心がけています。それらのソフ トウエアを保存しておく場所を私は,

「がらくた置き場」

と, 呼んでいます。「がらくたシリーズ」は, これらのソフトウエアを少し焼き なおして作成されたものの総称なのです。


Node: へなちょこシリーズ, Previous: がらくたシリーズ, Up: 蛇足

へなちょこシリーズ

「へなちょこシリーズ」は, もうはっきりいって私の主観以外の何者でもありま せん。私は, Emacs Lisp を始めたのが, 年齢的に若くなかったので, 他の言語 (C 言語とか, X86 Assembler) と比較して, あまり得意ではありません。それで も何とか「こんなことを Emacs でやりたいよ〜」という思いが強く, なんとか 自分のやりたい事を実現する為に, 他の諸先輩方の Emacs Lisp を参考にして, それなりに扱えるようになりました。

しかし, lisp というものが良くわかっていない(自分ではわかっていないと思う) 為か,

な〜んか, へなちょこだな〜

と思ってしまうのです。しかも, 実際にへなちょこなのです。しかし,

へなちょこなもんは, へなちょこなんだ!!!。やりたい事が出来ているからい いじゃないか!!

と, 自分に逆切れして開き直っています(^_^;。と, いうわけで「へなちょ こシリーズ」が出来たわけです。

・・・どうでも良い事でした。


Node: 取り扱い, Next: , Previous: 蛇足, Up: Top

取り扱い

本プログラムはフリーソフトウェアです。本プログラムを使用して生じたいかな る結果に対しても作者は責任を負わないこととします。個人の責任に於いて使用 して下さい。入手したアーカイブのままの形式であれば, 再頒布, 転載は可能と します。常識的に扱ってください。

苦情, 希望, バグ報告, 感想等は歓迎いたします。以下迄お願い致します。

T.Furukawa <tfuruka1@nifty.com>


Node: 索引, Previous: 取り扱い, Up: Top

索引


Footnotes

  1. 私は NTT 系のTeXも使用するのですが, NTT の場合, 漢字とASCII の間に空白文字を入れないと Overfull hboxが多発する場合があるので, このようにしています。

  2. 例えば, TeXマク ロの引数で,をセパレータとして使用している場合。

  3. 私が 普段 書いている文書は英語と日本語が混在していますので, , で統一したほ うが見やすいからです。