[Go to BBS]
All articles in a thread
SubjectCase of Beam Line Element
Article No528
Date: 2008/02/06(Wed) 00:47:36
ContributorAkio 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)

SubjectRe: Case of Beam Line Element
Article No535
Date: 2008/02/14(Thu) 23:56:20
ContributorAkio Morita
amorita branchにて、PRSVCASE/CONVCASEというフラグを新設しました

PRSVCASE(Preserve Case/Default off)
FFSのコマンドラインパース時に、Element Name/Patternを扱う際に Caseを保存する

CONVCASE(Convert Case/Default on)
FFSのコマンドラインパース時に、入力文字列をUpper Caseへ変換する