@@ -198,7 +198,7 @@ def guard_of(text, pat):
198198 usval [T ] = re .sub (r'\s*\n\s*' , ' ' , _tvm .group (2 )) if _tvm else '""'
199199 m2 = re .search (r'MSG_HASH\(\s*\n?\s*MENU_ENUM_SUBLABEL_%s,\s*\n?\s*(%s)\s*\n?\s*\)\n?' % (T , CSTR ), us )
200200 if m2 :
201- ussub [T ] = re .sub (r'\s*\n\s*' , ' ' , m2 .group (1 )); usspan .append ((m2 .start (), m2 .end ()))
201+ ussub [T ] = re .sub (r'\s*\n\s*' , ' ' , m2 .group (1 )); usspan .append ((m2 .start (), m2 .end (), T ))
202202 continue
203203 m = re .search (r'MSG_HASH\(\s*(/\*.*?\*/)?\s*\n?\s*MENU_ENUM_LABEL_VALUE_%s,\s*\n?\s*(%s)\s*\n?\s*\)\n?' % (T , CSTR ), us )
204204 if not m :
@@ -207,34 +207,28 @@ def guard_of(text, pat):
207207 ref_tokens .add (T )
208208 continue
209209 assert m , ('VALUE' , T )
210- usval [T ] = re .sub (r'\s*\n\s*' , ' ' , m .group (2 )); usspan .append ((m .start (), m .end ()))
210+ usval [T ] = re .sub (r'\s*\n\s*' , ' ' , m .group (2 )); usspan .append ((m .start (), m .end (), T ))
211211 if m .group (1 ):
212212 uscmt [T ] = m .group (1 )
213213 m = re .search (r'MSG_HASH\(\s*(/\*.*?\*/)?\s*\n?\s*MENU_ENUM_SUBLABEL_%s,\s*\n?\s*(%s)\s*\n?\s*\)\n?' % (T , CSTR ), us )
214214 if m :
215- ussub [T ] = re .sub (r'\s*\n\s*' , ' ' , m .group (2 )); usspan .append ((m .start (), m .end ()))
215+ ussub [T ] = re .sub (r'\s*\n\s*' , ' ' , m .group (2 )); usspan .append ((m .start (), m .end (), T ))
216216 if m .group (1 ):
217217 uscmt [T ] = (uscmt .get (T , '' ) + ' ' + m .group (1 )).strip ()
218- if ref_tokens :
219- _tail = [r for r in rows if r [2 ] in ref_tokens ]
220- _ref_literals = {}
221- for _k3 , _f3 , _t3 , _a3 in _tail :
222- _head3 = (r'\s*%s,\s*%s,' % (_f3 , _t3 )) if _f3 else (r'\s*%s,' % _t3 )
223- _rm3 = re .search (r'[ \t]*SDESC_\w+_ROW(?:_P|_DS|_EX|_LV)?\(%s(?:[^()]|\((?:[^()]|\([^()]*\))*\))*\),?' % _head3 , body )
224- assert _rm3 , _t3
225- _rl3 = _rm3 .group (0 ).strip ()
226- for _g3 in reversed (guards .get (_f3 or _t3 , ())):
227- _rl3 = _g3 + '\n ' + _rl3 + '\n #endif'
228- _ref_literals [_t3 ] = _rl3
229- print (' note: %d reference row(s) carried literal inside the def' % len (_ref_literals ))
230- else :
231- _ref_literals = {}
218+
232219lblstr = open ('msg_hash_lbl_str.h' ).read ()
233220names , lblstr_span = {}, []
234221for k , f , T , a in rows :
235222 if T in ref_tokens :
236223 continue
237224 m = re .search (r'#define MENU_ENUM_LABEL_%s_STR (%s)\n' % (T , CSTR ), lblstr )
225+ if not m and run ("grep -lE 'S_\\ w*\\ ((\\ w+, *)?%s,' settings/*.h" % T ).stdout .strip ():
226+ # the label already lives in a migrated def (a level-variant twin
227+ # took it); this row becomes a reference
228+ ref_tokens .add (T )
229+ usval .pop (T , None ); ussub .pop (T , None )
230+ usspan = [sp for sp in usspan if sp [2 ] != T ]
231+ continue
238232 assert m , T
239233 names [T ] = m .group (1 ); lblstr_span .append ((m .start (), m .end ()))
240234 ext = run ('grep -rl "MENU_ENUM_LABEL_%s_STR\\ b" --include=*.h --include=*.c . | grep -v msg_hash_lbl' % T ).stdout .strip ()
@@ -343,6 +337,21 @@ def guard_of(text, pat):
343337_mh_text = open ('msg_hash.h' ).read ()
344338_h_used = set ()
345339enum_rows = []
340+ if ref_tokens :
341+ _tail = [r for r in rows if r [2 ] in ref_tokens ]
342+ _ref_literals = {}
343+ for _k3 , _f3 , _t3 , _a3 in _tail :
344+ _head3 = (r'\s*%s,\s*%s,' % (_f3 , _t3 )) if _f3 else (r'\s*%s,' % _t3 )
345+ _rm3 = re .search (r'[ \t]*SDESC_\w+_ROW(?:_P|_DS|_EX|_LV)?\(%s(?:[^()]|\((?:[^()]|\([^()]*\))*\))*\),?' % _head3 , body )
346+ assert _rm3 , _t3
347+ _rl3 = _rm3 .group (0 ).strip ()
348+ for _g3 in reversed (guards .get (_f3 or _t3 , ())):
349+ _rl3 = _g3 + '\n ' + _rl3 + '\n #endif'
350+ _ref_literals [_t3 ] = _rl3
351+ print (' note: %d reference row(s) carried literal inside the def' % len (_ref_literals ))
352+ else :
353+ _ref_literals = {}
354+
346355for k , f , T , a in rows :
347356 if T in ref_tokens :
348357 out .append ('/* Row referencing %s; strings owned by another def file. */\n '
@@ -456,8 +465,8 @@ def _cond(g):
456465open (os .path .join ('settings' , DEF ), 'w' ).write ('\n ' .join (out ) + '\n ' )
457466
458467if usspan :
459- first = min (s for s , e in usspan )
460- for s , e in sorted (usspan , reverse = True ): us = us [:s ] + us [e :]
468+ first = min (s for s , e , _sT in usspan )
469+ for s , e , _sT in sorted (usspan , reverse = True ): us = us [:s ] + us [e :]
461470else :
462471 # nothing consumed from the base language (a pure-reference
463472 # level-variant row without a sublabel): anchor the region at the
0 commit comments