o a @sldZddlZddlmZddlmZddlmZddlmZe dZ edZ dd Z d d Z dd dZdS)a pygments.regexopt ~~~~~~~~~~~~~~~~~ An algorithm that generates optimized regexes for matching long lists of literal strings. :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS. :license: BSD, see LICENSE for details. N)escape) commonprefix)groupby) itemgetterz [\[\^\\\-\]]cCsdtddd|dS)N[cSs d|S)N\)group)mr 3/usr/lib/python3/dist-packages/pygments/regexopt.pys zmake_charset..]) CS_ESCAPEsubjoin)lettersr r r make_charsetsrc s|rdpd}|s dS|dt|dkr|t|Ss-|t|dddd|Stdkrlg}g}|D]}t|dkrG||q9||q9t|dkrl|rd|t|ddt||S|t||St|}|rt||t|tfd d |Dd|Sd d |D}t|}|rt||ttfd d |Ddt|ddd|S|ddd t|fddD|S)zEReturn a regex that matches any string in the sorted list of strings.)r rNz(?:?|csg|]}|dqSNr .0s)plenr r ?sz#regex_opt_inner..cSsg|] }|dddqS)Nr rr r r rBsc3s|] }|d VqdSrr r)slenr r Hsz"regex_opt_inner..rcss"|] }tt|ddVqdS)rr N)regex_opt_innerlist)rrr r r r Mscs|ddkS)Nrr )r)firstr r r Nsz!regex_opt_inner..) lenrr!appendrrsortedrr) strings open_paren close_paren oneletterrestrprefix strings_revsuffixr )r#rrr r!sj         r!r cCst|}|t|d|S)zReturn a compiled regex that matches any string in the given list. The strings to match must be literal strings, not regexes. They will be regex-escaped. *prefix* and *suffix* are pre- and appended to the final regex. ()r&r!)r'r,r.r r r regex_optRsr0)r r )__doc__reros.pathr itertoolsroperatorrcompiler FIRST_ELEMENTrr!r0r r r r s     8