異体字と一口に云っても、様々な立場が存在する事であろう。所謂旧字や正字・表外字を入力したい場合、人名地名の特殊な字体を入力したい場合等である。
旧字を入力する最も簡単な方法は IM(Input Method) のことえりを別の IM に変えたり入力変換辞書を改変する事である。 この目的では Windows においては契冲等の IME の処理系が既に存在しているが、 Mac OS 向けの IM の処理系は寡聞にして知らず、高機能な国語入力環境の登場が期待される。 但し現状のことえりにおいても辞書だけで「ハ行四段活用」と「五段活用未然形オ段音」以外は割合に対応できているので、対応辞書の用意の変更は困難ではなく、変換精度の問題が残る程度であろう。
図:InDesign の字形パネル(異体字入力)所変わって DTP の世界では異体字の問題は死活問題である。彼らの目標は旧字を含む正字や異体字を完全に網羅する事にある。 我が国における標準的な印刷字体である康熙字典体に対応するだけでも大変らしいのであるが、この様な煩瑣な組版を支援する目的として InDesign には異体字の入力パネルが存在する (Adobe-Japan1 等の CID、IVD 規格を策定サポートしてきた Adobe 製のソフトウェアなので当然といえば当然である)。 この異体字パネルは、漢字以外の文字であっても、その異体字を検索して表示してくれるなかなか便利な機能である。
我々が目標とするのはこの異体字パネルと似た機能を実現する事である。以下で具体的な実装の例を挙げて検討しよう。
異体字セレクタ Variation Selector とは主に IVS: Ideographic Variation Sequence で用いられる符号である。IVS の実際を、巷間賑わせた「葛」の字を例にとって示す。 若し今ここで示す二字形「葛󠄀」「葛󠄁」が異なる字体になっているならば、その PC は IVS 対応の環境である。 若し今ここで示した二字形が相等しいのだとしたら、その環境(少なくともブラウザ)は IVS には対応していない。
図:ヒラギノ明朝の字体。Pro と ProN とで字形が変化する。この様な葛の字体の差異は、JIS における表外字の例字体変更に伴った混乱であり、所謂 JIS 90[JIS X 0208:1990] から JIS 2004[JIS X 0213:2004] への移行問題に起因している。 この表外字に関する問題は根の深い問題で、漢字字体の JIS 規格策定の揺籃にまで溯る事ができる。喩えば森鷗外の「鷗」、冒瀆の「瀆」等の 旧JIS 78[JIS C 6226:1978], 新JIS 83[JIS C 6226:1983後JIS X 0208:1983] の問題が有名である。
IVS とは、この様な字体の差異を Unicode の理念の範疇で解決しようとする試みであり、Adobe-Japan1 の CID もまた IVS で表現できる。
Mac OS X 10.6 Snow Leopard までは、ことえりの文字ビューアを利用して、異体字を入力する事ができた。
図:ことえりの文字ビューア(Snow Leopard 以前)一方 10.7 Lion 以降では、文字ビューアの機能は制限され、異体字を入力する事ができない。
図:ことえりの文字ビューア(Lion 以降)この改変が施された主な理由は、技術的な問題、CID から IVS への過渡期にある為であると考えられる。 10.6 までは、NSGlyphInfo 等の Cocoa API や Carbon API により、与えられた CID からグリフ情報を参照・変更し、異体字を表示していたらしく、NSTextStorage の内容を完全に保存する必要性があつた。 ここでもしテキストデータを txt ファイル等の Unicode で書き出した場合、その字体情報は、 Cocoa 独自の機能で保持されているので、結果として散逸する事になり汎用性がない。 10.6 から導入された字体情報の IVS 異体字セレクタは、従来の Unicode の枠組みの範囲内の文字コードに新しいコード・異体字セレクタを付加する物で、目に見えない改行コード等の制御コードに似ている。 我々は、エディタを利用する事で、改行コード LF や CR の違いを意識せずにテキストを展開する事が出来る。異体字セレクタは目に見えないが、異なるセレクタを与える事で異なる字体を表示する目印になる。 異体字セレクタは、従来の枠組みでは無視されるコード領域に該当し、互換性があるので、対応・未対応によらず同じ書類を開く事が可能となる。
異体字入力支援プラグインは、ことえり・文字ビューアの機能を補完し、InDesign や Illustrator の字形パネルと同機能を実現する事を目指す物である。
異体字入力支援プラグインは Mac OS X 用ビルトインプラグインで、実装コード上は Mac OS X 10.5 以上で稼働する筈であるが、IVS は 10.6 以降に対応している。 若し 10.5 で稼働させた場合は、IVS の入力は可能であるが、まともな表示はなされないと考えられる。
図:プラグインの使用例異体字を入力したい文字を選択すると、自動的に内蔵データベース(Property List Editor で編集可能)から異体字を検索し、その内容を表示する。またクリック操作によって、選択範囲を認識した異体字とで置換する。 CID に該当するコードは全て Unicode IVS による異体字セレクタを用いて入力される(IVS に依らずに NSTextView 等で CID を利用するには Carbon のコードで書く必要があった憶えがある上、そもそも環境が限定される問題がある)。
IVS 入力支援プラグイン v.1.0.0[SHA-1: c3909c15649e7b955455aed82129bcf5d97b3c2e]
IVS 入力支援プラグイン (ファイル準備中) v.1.0.1
対応した Cocoa アプリケーションが必要である。実はこのままでは稼働しない。故に自作のエディタやオープンソースのエディタで使用する事を前提としている。 クローズドソースのエディタで対応するには、開発者に依頼する必要がある。詳しくは添付の READ ME を参照して欲しい。
これはアプリケーションプラグインである。詳しくは添付の READ ME を参照して欲しい。 NSTextView 等を利用したアプリケーションの場合、起動中に適当なタイミングで読み込めば、そのまま使用する事ができる。 ATOK 等の様に一から IM を作る事を目的とはしていないので、役割としてはことえりのプラグインとするのが望ましい。 ところが現行ことえりのプラグインの作り方はよくわからないので、アプリケーションプラグインとして作製している。
-(void)awakeFromNib { // IVC Panel Load NSString *path = [[[NSBundle mainBundle] builtInPlugInsPath] stringByAppendingString:@"/IVCPanelPlugIns.bundle"]; NSBundle *bundle = [NSBundle bundleWithPath:path]; if(![bundle isLoaded]) [bundle load]; }
想定している対応方法を上記に示す。インストールはビルトインプラグイン(.app/Contents/PlugIns/IVCPanelPlugIns.bundle)を仮定する。 多くの Cocoa アプリケーションは AppDelegate や類似のコントローラを有しているから、そのコントローラクラスに awakeFromNib を追記すれば十分である。
字体のデータベースは plist として整理しているので、後から追加する事も可能である。詳しくは添付の READ ME を参照して欲しい。 現在 IVD: IVS Database には Adobe の Adobe-Japan1 と IPA の Hanyo-Denshi が登録され、最近 IPA が Moji_Joho を追加した様である。 プラグイン内蔵のデータベースは、Adobe-Japan1、Hanyo-Denshi の異体字セレクタによる物と、Unicode 異体字を整理した物である。 実装上どのデータベースにどの字体情報を追加してもよい作りになっているが、便宜上区別する事で検索範囲を制限できる様にしている。
Ref. Ideographic Variation Database
使用フォントに制限は無く、そのデータベースは plist として整理しているので、後から追加する事も可能。詳しくは添付の READ ME を参照して欲しい。
このプラグインは個人利用を想定し、二次配布は想定していないが、二次配布は禁じていない。添付 READ ME の連絡先に一報頂ければ幸いである。
履歴機能と置換機能を実装したいと思っている。また Moji_Joho にも対応する。
Mac OS X 10.6 以降の全ての Cocoa Application に対応している筈である。
任意のアプリケーションにおいて NSBundle により load してやることで、メニューバー > ウィンドウから選択して使用できる様になる。 内蔵のデータベースを任意に追加・編集する事で、そのままプラグインの機能を拡張できる。
編集中(Key Window)の NSDocument か NSTextView の NSUndoManager を捕捉できないと Undo 機能は実現できない。優先度は NSDocument の方が高い。
NSTextView を捕捉できない場合は異体字パネルには何も表示されない。
ウィンドウメニュー(右から二番目)の最下部に追加する。これは下記 TeXShop で使用するプラグインとして作成する事を念頭においていたため。 開発者は NSMenu を書き換えてしまったり、メソッドを取り出す事で、容易にフックでき、好みのスタイルに変更できる筈である。
標準では ヒラギノ明朝 ProN を字体例として例示するフォントに指定している。字体例を示すフォントはインストール済フォントを検索して利用。 検索対象は Fonts.plist に記述しており、これを書き換えれば検索対象が変化する。検索には PostScript 名を利用し、表示するフォント名は Fonts.plist に記述した物である。 フォントによって準拠する規格が異なり、表示される字体に差が出る事がある。ヒラギノ StdN は Adobe-Japan 1-3、ヒラギノ ProN は Adobe-Japan 1-5、游及󠄁び小塚は Adobe-Japan 1-6 に準拠する。
譬えば、ヒラギノでは同じ字形に見えても、別々の CID や異体字セレクタが割り当てられている様な場合、游や小塚 Pr6N 等では別の字形になっていたりする事がある。ex. 明朝書体の「梗」の筆押え。ゴシック書体では区別できない。
TeX の導入で大変参考になる一連の記事Mac OS X 上のLaTeXで外字、異体字を使う方法をみると、 コード表を辞書を引くが如く参照し、手入力で CID を入力するという殺人的な入力方法が紹介されている。人名の特殊な字形に対応する程度なら十分であるが、本文で異体字を使うには、InDesign ユーザからすると、とても実用に適さない。 一般に異体字入力支援プラグインは全ての Mac OS X アプリケーションにおいてその様な問題を解決する事が可能であり、この TeXShop 対応バイナリはプラグインをロードする機能を付け足した利用例の一つである。
図:異体字パネルを追加した TeXShopTeXShop 3.26, 2.47 に IVS 入力支援プラグインを組み込むためのバイナリである。 このバイナリを使用すると、メニューバーから IVS 入力パネルを呼び出して使用できる。 入力パネルでは、テキストの選択範囲を解析してその異体字を一覧に表示する。実際に使用している画面は以下。
図:異体字パネルの使用例(辺)IVD として Adobe-Japan1 及び Hanyo-Denshi の IVS に対応するので、CID コードや IPA の文字コード上の文字も選択できる。
図:異体字パネルの使用例(尊)TeXShop はタイプセット時に \CID 等を用いたソースへと自動的に変換してくれるので、可読性を担保したまま異体字セレクタが使用できる。勿論 XeTeX 環境では zxotf packege、pTeX 環境では otf packege 等が必要󠄁になる。
TeXShop バイナリ [SHA-1: 42db9c3d814c7b53242637546a9ced049fb146df]
配布或いは自作の TeXShop.app を用意し、バンドルを開き、TeXShop.app/Contents/MacOS/TeXShop を差し替えるとよい。 但し異体字入力支援プラグインは別途ダウンロードして追加すること。改変した事を示したい場合は Info.plist 等を好みで書き換えて欲しい。
TeX Live 等のインストールをおすすめする。CID に対応する必要があり、その方法は色々あるが、自環境 pLaTeX では \usepackage[deluxe]{otf} を使用している。 パネルから適当な文字を入力したら、最後に環境設定 > 詳細 > pTeX 拡張機能の「uft パッケージ対応」を入にして上書き保存、タイプセットする。 上書き保存する意味は、pLaTeX は Unicode を受け付けないので、\CID や \UTF へと自動的に置換させてタイプセットできる様にしている。 ファイルを閉じずに設定を切にして再保存すれば、自動的な置換が元に戻るので、可読性が担保されて便利である。
書いてる時に何度かやってしまったので救済策を。最新の Mac OS X はファイルパスにたいしてバージョン履歴が残る。 メニューからファイル > バージョンを戻す > すべてのバージョンをブラウズ…を選べば復元できる。
最新の XeTeX は IVS にちゃんと対応しているらしいので、\CID を使う必要は無いであろう。エスケープ等の業もあるらしいが。
pTeX 系対応にしておくと、CID や UTF の処理は楽になるが、保存されるファイルは CID, UTF の文字が踊る事になる。 pTeX への対応を外して保存すると、生のコードがそのまま書き込まれて保存される(保存時の処理を上書きしたバイナリを作成する予定)。 タイプセットする際、pdflatex 等の理解できる内容でなければならないので、保存時には \CID や \UTF へと上書きしてくれる様である。 これはこれで便利ではあるが、一旦書類を閉じてからもう一度展開すると、何が何やらわからなくなるため、環境設定を何度も往復する面倒が生じる。 LaTeXiT の様に、Temporary File を作成してタイプセットする方式の方が現実的に思える。
# Open x.tex in Current Directory Copy to /tmp/x.tex cd Current Directory pdflatex /tmp/x.tex
pdflatex がゴミ(log)を作る動作を残したい場合は cd を指定すれば上手くいくかもしれない(NSTask の setCurrentDirectory 等)。 TeXShop と pdflatex の仕様には詳しくない(ログをどこから拾っているか等の問題)ので、検討事項は多そうである。