だから私はこれを自分で解決することができます。答えは、いわゆるレジスタを使用して、現在のオブジェクトを通過したかどうかをマークすることです。例えば:
lib.menu = HMENU
lib.menu {
1 = TMENU {
NO = 1
NO = {
# Render using Common Object Array (COA)
stdWrap.cObject = COA
stdWrap.cObject {
# Normal Case (However the an item should normally be rendered
10 = TEXT
10 {
if {
isTrue.data = register:cid
value = NORMAL RENDERING
}
}
20 = TEXT
20 {
if {
isTrue.data = register:data
value = RENDERING (IMMEDIATELY) AFTER THE CURRENT ITEM
}
}
# Unset the register (after we've done with our special formatting)
30 = LOAD_REGISTER
30.cid= 0
}
}
...
# The currently selected item
CUR = 1
CUR {
# Render using Common Object Array (COA)
stdWrap.cObject = COA
stdWrap.cObject {
# However the Current item should normally be rendered
10 = TEXT
10.field = title
# Mark that we've reached the current item
20 = LOAD_REGISTER
20.cid= 1
}
}
}
}
LOAD_REGISTERを使用して設定されるレジスタは、基本的に実行時変数の一種であり、メニュー項目(またはその他)を反復処理する過程で設定およびリセットできます。そのため、メニュー項目の進行状況を記録するために使用できます。特に、現在のメニュー項目(CUR)を通過したかどうかを記録するために使用できます。
rant beginタイプミスがドメイン固有言語であり、主にメニューなどのこの標準化に使用されることを考えると、エレガントなソリューションはほとんどありません。/ rant end