[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freewnn:00580] Re: cpp for pubdicplus



> 永江と申します。
> FreeWnn 発足当時、autoconf 化や automake 化の作業に少し関係した者です。
> 
> From: aono@cc.osaka-kyoiku.ac.jp (Tomoki AONO)
> Subject: [freewnn:00568] cpp for pubdicplus (Re: cvs server for freewnn.org)
> Date: Fri, 18 May 2001 21:04:34 +0900 (JST)
> 
> > >> で,この,辞書ファイルの生成(という理解で良いのかどうか実は
> > >> 知らないのですが)に使われる cpp をどうするかに限っていうと,
> > >> 対処方法としては,以下のようなものが思いつきますが,いかがでしょうか?
> 
> これは、確かに当時も問題になっていました。
記憶が飛んでましたが,昔のメールを見たら確かに話題になってました.

> 例えば locale をサポートした環境の cpp だと、
> 想定した文字コード以外のファイルが入力だとエラーになるものがあります。
> 確か cWnn か tWnn かの辞書ファイルがエラーになる環境があったはずです。
> locale を "C" にすれば必ず解決するのかどうか、よくわかりません。
tWnn はよく分からないのですが,cWnn, kWnn の CPP の使われ方を
見てみると,

Xsi/kWnn/kdic/Makefile.in
	fzk.master を CPP で処理している.
	fzk.master は他の fzk.* を単に順番に #include しているだけ.
	fzk.master 以外の fzk.* では C プリプロセッサの機能を使っていない.
Xsi/cWnn/cdic/Makefile.in
	con.master, con.masterR を CPP で処理している.
	con.master, con.masterR は他の con.* を単に順番に #include して
        いるだけ.
 	con.master, con.masterR 以外の con.* では C プリプロセッサの
	機能を使っていない.

となっているので,locale の問題があるなら,CPP を使わずとも, 
*.master の代わりに, #include されているファイルを cat で集める
だけで充分と思います.

> > >> (4) そもそも cpp は C 言語向けなので,他のファイルに使うといらぬ
> > >>     副作用があるやもしれないので,もっと別の方法で辞書ファイルの
> > >>     生成を行なうようにする.
> > 
> > 個人的には(3)か(4)がよいと思います。しかしもしpubdic+の部
> > 分がas-isのままで取り込まれているのならば、変に追加・変更
> > するのがよいのかが少し気になります。(1)ベースのパッチを
> > (誰も手を上げなければ、叩き台として)作ってみましょうか?
> 
> GNU のガイドでは C 以外の入力には m4 を使うことが推奨されている
> という話だったと思います。
これも記憶に残ってなかったのですが,確かにそういう話が出てましたね.
(GNU Coding Standards の翻訳保守担当者でありながら,この話に
気づいていませんでした.しかし,今見てみると,見当たらない…)

> それなら m4 にしようかという話もあったのですが、
> やはり #ifdef 〜 #endif の記法の方が馴染みやすいのではないか
> という意見もありました。
> m4 だと (ifdef `XXX' `...' `...') ですね。
> 
> sed で /^#ifdef XXX/,/^#endif/d みたいに書けば対応できるかな
> という話もあったのですが、
> 何箇所か #ifdef 〜 #endif が入れ子になっている部分があって、
> これだけでは対応できませんでした。
Xsi/PubdicPlus/fzk.con ですね.確かに入れ子になってますね.
うーむ.
	#ifdef KOUGO
	...
	#ifdef KANSAI
	...
	#endif KANSAI
	...
	#endfi KOUGO
これって #ifdef KANSAI の部分を#ifdef KOUGO の外に出すのって
できないんでしょうかね?
(fzk.master の #if KANSAI && !KOUGO 〜 #define KOUGO 〜 #endif も
何やらわかりにくいですね.)

> 実際には、cpp を様々な設定ファイルの前処理に使うという例はあるわけで、
> C 以外で使うことも黙認されているとは思います。
> (例えば X の xrdb コマンド)
そうですね.

> それで、これは私のごく個人的な感想ですが、
> もしすべての環境に対応するのが難しく、なおかつ
> 実際に必要な機能が #ifdef 〜 #endif など限られたものであれば、
> いっそ cpp のサブセットとなるプログラムを
> ディストリビューション中に入れてしまって、
> それで辞書を生成しちゃうという手もあるかなと思います。
それもありますね.昔の X11 に imake 関連ツールとして cpp が
入れてあったなと思って探したんですが,記憶違いか見つけられませんでした.

個人的には,依然として CPP 使わない方向が良いと思ってますが.
--
矢吹洋一@SRA Linux ソリューション部


http://www.freewnn.org/ FreeWnn Project