17db96d56Sopenharmony_ciimport re 27db96d56Sopenharmony_ciimport textwrap 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_cifrom ._regexes import _ind, STRING_LITERAL 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_cidef parse(text, anon_name): 87db96d56Sopenharmony_ci context = None 97db96d56Sopenharmony_ci data = None 107db96d56Sopenharmony_ci for m in DELIMITER_RE.find_iter(text): 117db96d56Sopenharmony_ci before, opened, closed = m.groups() 127db96d56Sopenharmony_ci delim = opened or closed 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci handle_segment = HANDLERS[context][delim] 157db96d56Sopenharmony_ci result, context, data = handle_segment(before, delim, data) 167db96d56Sopenharmony_ci if result: 177db96d56Sopenharmony_ci yield result 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_ciDELIMITER = textwrap.dedent(rf''' 217db96d56Sopenharmony_ci ( 227db96d56Sopenharmony_ci (?: 237db96d56Sopenharmony_ci [^'"()\[\]{};]* 247db96d56Sopenharmony_ci {_ind(STRING_LITERAL, 3)} 257db96d56Sopenharmony_ci }* 267db96d56Sopenharmony_ci [^'"()\[\]{};]+ 277db96d56Sopenharmony_ci )? # <before> 287db96d56Sopenharmony_ci (?: 297db96d56Sopenharmony_ci ( 307db96d56Sopenharmony_ci [(\[{] 317db96d56Sopenharmony_ci ) # <open> 327db96d56Sopenharmony_ci | 337db96d56Sopenharmony_ci ( 347db96d56Sopenharmony_ci [)\]};] 357db96d56Sopenharmony_ci ) # <close> 367db96d56Sopenharmony_ci )? 377db96d56Sopenharmony_ci ''') 387db96d56Sopenharmony_ciDELIMITER_RE = re.compile(DELIMITER, re.VERBOSE) 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci_HANDLERS = { 417db96d56Sopenharmony_ci None: { # global 427db96d56Sopenharmony_ci # opened 437db96d56Sopenharmony_ci '{': ..., 447db96d56Sopenharmony_ci '[': None, 457db96d56Sopenharmony_ci '(': None, 467db96d56Sopenharmony_ci # closed 477db96d56Sopenharmony_ci '}': None, 487db96d56Sopenharmony_ci ']': None, 497db96d56Sopenharmony_ci ')': None, 507db96d56Sopenharmony_ci ';': ..., 517db96d56Sopenharmony_ci }, 527db96d56Sopenharmony_ci '': { 537db96d56Sopenharmony_ci }, 547db96d56Sopenharmony_ci} 55