Subject | : Case of Beam Line Element |
Article No | : 528 |
Date | : 2008/02/06(Wed) 00:47:36 |
Contributor | : Akio Morita |
MAINレベルでの Beam Lineの定義とLINE[]/Element[]関数経由のアクセスでは、 Beam Line Element名は、Case Sensitive(大文字・小文字を区別する)ですが、 FIT/FIX/FREE等のコマンドの引数は、Case Insensitiveもどき(引数を全て大文字に 変換してから Beam Lineと Case Sensitiveに照合する)で実装されている(csinitの 第二引数iconvが 1が指定されているので、getwrd()/getwdl()関数が、upper caseな 文字列を返している)。 このために、小文字を含む Beam Line Elementを定義すると、そうした Elementを マッチング条件や変数に指定できないという問題があります。
実装バグなのか仕様なのか、はっきりしませんが...改修案を3種提案します で、あるべき正しい仕様の姿はどうあるべきでしょうか? #個人的には、C(1 + 2b)が一番すっきりしていると思うのですが、後方互換性を考えると #Cの場合はC(1+2a)でないとまずい気がします(``fit all''とか書いている人がいるに違いない)
A. Beam Line Element名は Case Insensitive 1a. FFSコマンドラインやLINE[]/Element[]等での文字列比較を Case Insensitiveで実装する 1b. MAINレベルパーサーやLINE[]/Element[]等の入力部で Caseを正規化する
B. Beam Line Element名は Case PreserveかつCase Insensitive Match 1. FFSコマンドラインやLINE[]/Element[]等での文字列比較を Case Insensitiveで実装する 2. Case Insensitiveに同名な Element定義をどうするかを決める必要あり a. 同名の Elementの再定義と見なす(Case Insensitive Matchを優先) b. 別の Elementだと見なす(Case Preserveを優先) -> この場合、Case Insensitive Matchの際に Caseの一致度が高い方を優先しないと 個別のアクセスが出来ない(FFSコマンドライン部に関しても Case Preserveな扱いが必要)
C. Beam Line Element名は Case Sensitive 1. FFSコマンドラインパーサーで要素名を Case Preserveな状態で getwrd()するよう改修する (関数を新設するか自前で iconv global変数を制御する) 2. FIT等で `ALL'等の要素名と同格の構文要素に関する Caseの扱いを定義する必要あり a. オプション文字列は Case Insensitive Match(``FIT all''は ``FIT ALL''と等しい) b. オプション文字列は Case Sensitive Match(``FIT all''は、``all'' Elementへの FIT)
|