89 |
89 |
<variable name="parentId" type="java.lang.Long" />
|
90 |
90 |
<variable name="defRef" type="com.goldencode.ast.Aast" />
|
91 |
91 |
|
|
92 |
<!-- Map menus, submenus, menu items to their javanames -->
|
|
93 |
<variable name="keys_jnames" type="java.util.Map" />
|
|
94 |
<variable name="menukey" type="java.lang.String" />
|
|
95 |
<variable name="jname" type="java.lang.String" />
|
|
96 |
|
92 |
97 |
<!--
|
93 |
98 |
Map of unqualified MENU-ITEMs to their resolved MENUs,
|
94 |
99 |
the map key is MENU-ITEM and the value is DEFINE MENU Ast
|
... | ... | |
119 |
124 |
<return name="cur" type="java.lang.String" />
|
120 |
125 |
|
121 |
126 |
<rule>true
|
122 |
|
<action>parnt = sm_menus.get(sm)</action>
|
|
127 |
<action>parnt = sm_menus.get(sm.toLowerCase())</action>
|
|
128 |
<action>printfln("find_sm_menu-> %s = sm_menus.get(%s)", parnt, sm)</action>
|
123 |
129 |
<action>cur = parnt</action>
|
124 |
130 |
<while>parnt != null and sm_menus.containsKey(parnt)
|
125 |
|
<!--<action>printfln("parnt: %s, sm_menus.get(parnt): %s", parnt, sm_menus.get(parnt))</action>-->
|
|
131 |
<action>printfln("parnt: %s, sm_menus.get(parnt): %s", parnt, sm_menus.get(parnt))</action>
|
126 |
132 |
<action>cur = sprintf("%s.%s", sm_menus.get(parnt), parnt)</action>
|
127 |
133 |
<action>parnt = sm_menus.get(parnt)</action>
|
128 |
134 |
</while>
|
... | ... | |
135 |
141 |
<return name="res" type="java.lang.Boolean" />
|
136 |
142 |
|
137 |
143 |
<rule>true
|
138 |
|
<action>sm = names.convert(smRef.text, names.variable)</action>
|
|
144 |
<action>sm = names.convert(smRef.text.toLowerCase(), names.variable)</action>
|
|
145 |
<action>printfln("is_submenu-> %s = names.convert(%s, names.variable)", sm, smRef.text)</action>
|
139 |
146 |
<action>res = sm_menus.containsKey(sm)</action>
|
140 |
147 |
</rule>
|
141 |
148 |
</function>
|
... | ... | |
143 |
150 |
|
144 |
151 |
<init-rules>
|
145 |
152 |
<rule>menu_defs = #(java.util.Map) create('java.util.HashMap')</rule>
|
|
153 |
<rule>keys_jnames = #(java.util.Map) create('java.util.HashMap')</rule>
|
146 |
154 |
<rule>sm_menus = #(java.util.Map) create('java.util.HashMap')</rule>
|
147 |
155 |
<rule>items = #(java.util.Map) create('java.util.HashMap')</rule>
|
148 |
156 |
<rule>items_subs = #(java.util.Map) create('java.util.HashMap')</rule>
|
... | ... | |
158 |
166 |
<walk-rules>
|
159 |
167 |
<rule>type == prog.define_menu
|
160 |
168 |
<action>menu_defs.put(getNoteString("name").toLowerCase(), this.id)</action>
|
|
169 |
<action>printfln("menu_defs.put(%s, %s)", getNoteString("name"), this.id)</action>
|
|
170 |
<action>keys_jnames.put(getNoteString("name").toLowerCase(), this.getAnnotation("javaname"))</action>
|
161 |
171 |
</rule>
|
162 |
172 |
<rule>type == prog.wid_menu and menu_defs.containsKey(this.text.toLowerCase())
|
163 |
173 |
<action>putNote("refid", #(long) menu_defs.get(this.text.toLowerCase()))</action>
|
... | ... | |
169 |
179 |
<rule>type == prog.wid_sub_menu and
|
170 |
180 |
parent.type == prog.kw_sub_menu
|
171 |
181 |
|
172 |
|
<action>submenu = names.convert(text, names.variable)</action>
|
173 |
|
|
|
182 |
<action>submenu = names.convert(text.toLowerCase(), names.variable)</action>
|
|
183 |
<action>printfln("%s = names.convert(%s, names.variable)", submenu, text)</action>
|
|
184 |
|
174 |
185 |
<rule>parent.parent != null and
|
175 |
186 |
(parent.parent.type == prog.define_menu or
|
176 |
187 |
parent.parent.type == prog.define_sub_menu) and
|
177 |
188 |
!sm_menus.containsKey(submenu)
|
178 |
189 |
<action>menu = parent.parent.getAnnotation("name")</action>
|
179 |
190 |
<action>menu = names.convert(menu, names.variable)</action>
|
180 |
|
<!--<action>printfln("adding %s to %s", submenu, menu)</action>-->
|
|
191 |
<action>printfln("adding %s to %s", submenu, menu)</action>
|
181 |
192 |
<action>sm_menus.put(submenu, menu)</action>
|
182 |
193 |
</rule>
|
183 |
194 |
|
... | ... | |
198 |
209 |
<action>ref = ref.getImmediateChild(wid_m_or_sm, null)</action>
|
199 |
210 |
<action>
|
200 |
211 |
putNote(sprintf("IN_%s", ref.getSymbolicTokenType()),
|
201 |
|
names.convert(ref.text, names.variable))
|
|
212 |
keys_jnames.get(ref.text))
|
202 |
213 |
</action>
|
203 |
214 |
<action>
|
204 |
215 |
putNote(sprintf("IN_%s_ID", ref.getSymbolicTokenType()), ref.id)
|
... | ... | |
206 |
217 |
</rule>
|
207 |
218 |
</rule>
|
208 |
219 |
|
|
220 |
<rule>type == prog.define_sub_menu
|
|
221 |
<action>menukey = getNoteString("name")</action>
|
|
222 |
<rule> menukey != null
|
|
223 |
<action>keys_jnames.put(menukey.toLowerCase(), this.getAnnotation("javaname"))</action>
|
|
224 |
</rule>
|
|
225 |
</rule>
|
|
226 |
|
209 |
227 |
<!--
|
210 |
228 |
MENU-ITEM and SUB-MENU with the same name can appear in multiple MENUs and/or SUB-MENUs. When
|
211 |
229 |
referencing unqualified MENU-ITEMs or SUB-MENUs (SUB-MENU and/or MENU qualifiers missing) in WAIT-FOR
|
... | ... | |
224 |
242 |
-->
|
225 |
243 |
<rule>type == prog.kw_menu_itm and parent.type == prog.define_menu
|
226 |
244 |
<action>item = names.convert(#(java.lang.String) this.getAnnotation("name"), names.variable)</action>
|
227 |
|
<action>items.put(item, parent)</action>
|
|
245 |
<action>items.put(item.toLowerCase(), parent)</action>
|
|
246 |
<action>printfln("items.put(%s, parent)", item)</action>
|
228 |
247 |
</rule>
|
229 |
248 |
|
|
249 |
|
230 |
250 |
<rule>type == prog.kw_menu_itm and parent.type == prog.define_sub_menu
|
231 |
251 |
<action>item = names.convert(#(java.lang.String) this.getAnnotation("name"), names.variable)</action>
|
232 |
|
<rule>!items.containsKey(item)
|
233 |
|
<action>list = items_subs.get(item)</action>
|
|
252 |
<action>printfln("%s= names.convert(%s, names.variable)", item, this.getAnnotation("name"))</action>
|
|
253 |
<action>keys_jnames.put(item.toLowerCase(), this.getAnnotation("javaname"))</action>
|
|
254 |
<rule>!items.containsKey(item.toLowerCase())
|
|
255 |
<action>list = items_subs.get(item.toLowerCase())</action>
|
234 |
256 |
<rule>list == null
|
235 |
257 |
<action>list = #(java.util.List) create("java.util.ArrayList")</action>
|
236 |
|
<action>items_subs.put(item, list)</action>
|
|
258 |
<action>items_subs.put(item.toLowerCase(), list)</action>
|
|
259 |
<action>printfln("items_subs.put(%s, list)", item)</action>
|
237 |
260 |
</rule>
|
238 |
261 |
<action>list.add(parent)</action>
|
239 |
262 |
</rule>
|
... | ... | |
263 |
286 |
<action>symToken = "wid_sub_menu"</action>
|
264 |
287 |
<action on="false">symToken = ref.getSymbolicTokenType()</action>
|
265 |
288 |
</rule>
|
|
289 |
<action>jname = keys_jnames.get(ref.text.toLowerCase())</action>
|
|
290 |
<rule>jname != null
|
|
291 |
<action>
|
|
292 |
putNote(sprintf("IN_%s", symToken), jname)
|
|
293 |
</action>
|
|
294 |
<action on="false">
|
|
295 |
putNote(sprintf("IN_%s", symToken), names.convert(ref.text, names.variable))
|
|
296 |
</action>
|
|
297 |
<action on="false">
|
|
298 |
printfln("putNote(%s, %s)", sprintf("IN_%s", symToken), names.convert(ref.text, names.variable))
|
|
299 |
</action>
|
|
300 |
</rule>
|
266 |
301 |
<action>
|
267 |
|
putNote(sprintf("IN_%s", symToken), names.convert(ref.text, names.variable))
|
|
302 |
printfln("putNote(sprintf('IN_ s', symToken), names.convert(%s, names.variable))", ref.text)
|
268 |
303 |
</action>
|
269 |
304 |
<action>
|
270 |
305 |
putNote(sprintf("IN_%s_ID", symToken), ref.id)
|
... | ... | |
272 |
307 |
</rule>
|
273 |
308 |
|
274 |
309 |
<rule>ref == null
|
275 |
|
<action>ref = items.get(names.convert(text, names.variable))</action>
|
|
310 |
<action>ref = items.get(names.convert(text.toLowerCase(), names.variable))</action>
|
|
311 |
<action>printfln("ref = items.get(names.convert(%s, names.variable))", text)</action>
|
276 |
312 |
</rule>
|
277 |
313 |
|
278 |
314 |
<rule>ref != null
|
... | ... | |
308 |
344 |
#(java.lang.Boolean) execLib("is_submenu", this))) and
|
309 |
345 |
parent.parent.type != prog.define_menu and
|
310 |
346 |
parent.parent.type != prog.define_sub_menu
|
311 |
|
<action>menu = execLib("find_sm_menu", names.convert(text, names.variable))</action>
|
|
347 |
<action>menu = execLib("find_sm_menu", names.convert(text.toLowerCase(), names.variable))</action>
|
|
348 |
<action>printfln("menu = execLib('find_sm_menu', names.convert(%s, names.variable))", text)</action>
|
312 |
349 |
<rule>menu != null
|
313 |
350 |
<action>putNote("first-menu-path", menu)</action>
|
314 |
351 |
<action>putNote("in_wid_menu", menu)</action>
|