o a=@sdZddlZddlmZmZmZmZmZddlm Z m Z m Z m Z m Z mZmZmZmZmZdgZedZgdZGdddeZdS) z pygments.lexers.crystal ~~~~~~~~~~~~~~~~~~~~~~~ Lexer for Crystal. :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS. :license: BSD, see LICENSE for details. N)ExtendedRegexLexerincludebygroupsdefaultwords) TextCommentOperatorKeywordNameStringNumber PunctuationError Whitespace CrystalLexerz.*? )z!=z!~!%z&&&z***+-/z<=>z<=z>>>z[]=z[]?z[]^z|||~c@s"eZdZdZdZddgZdgZdgZej ej BZ ddZ d d Z gd ejfed d defeddd dejfdejfegdd dejfdeeeejfdeeeejdfdedfdeeeejdfeddd dejfdejjfeddd dejfdejjfde fde fd ejd!fd"eeejd#fd$ejd#fd%eeejd#fd&eejeefd'eej eefd(eej!eefd)eej"eefd*eej"eefd+eej"eefd,eej#eefd-ej$j%fd.ej$j&fd/ej$j'fd0ej$j'fd1ej$j'fd2efe(d3d4ej)fd5ejfd6ej*d7fd8ej*d9fd:eeeej+d;fee,deeefd?efd@efdAefdBe-fdCefdDeej%eej.dEfe/dEgdFej%fdGee-eej%ee-fe/dEgdHej*dIfdJej*dEfe(dKgdLej*dMfgdNej0fge(dOe(dPge(dOdQejfdRejfge(dOdQej1fdRej1fge(dOdSejfdTejfdQejfdUejfdVejdEfgdWejdEfgd6ej*dIfdXej*dEfdYefe(dKgd8ej*dIfdZej*dEfe(dKgd[edIfd\edEfe(dKgd]Z2e23e d^S)_rzZ For `Crystal `_ source code. .. versionadded:: 2.2 Crystalcrcrystalz*.crztext/x-crystalc cs|d}|t|dfV|dtj|dfV|dtj|dfV|dtj|dfV|jdg}t| }| |ddk|df|d|_ | d|_ t |dkrm|j |d EdHn |j tj|dfV| |_ |r|D]Z\}}g}t|j|j D]<}|r|} n|} | |kr|D] } | tj| fVq|tj|fV| |_ n| |q|D] } | t| fVqqt |j|_ |dd=dSdS) N heredocstackz<<-d)context)startr groupr Heredoc Delimiter__dict__ setdefaultboolappendposendlenget_tokens_unprocessedline_refinditertextstriprstripr) selfmatchctxr*r& outermosttoleranthdnamelinescheckamatchrD9/usr/lib/python3/dist-packages/pygments/lexers/crystal.pyheredoc_callback+sF           zCrystalLexer.heredoc_callbackc Cs`i}dtjfttddtjfdtjfdtjfdtjdfdttjtfd tjd fd tjd fg|d <dtjd fdtjd fdtjdffD] \}}}t |dkrMdndd||fd|f||dfg|d|<qAdD]\}}}}d|tj fg||k|tj dfg|tj dft dd|dtj fd|dtj fg||d<|d  d |tj |dfd!|dtj fg||k|tj dfg|tj dfd|dtj fd|dtj fg||d"<|d  d#|tj |d"fd!|dtj fg||k|tj dfg|d$tj dft d%d|dtj fd|dtj fg||d&<|d  d'|tj |d&fqd|S)(Nz \:\w+[!?]?z\:prefixz:'(\\\\|\\[^\\]|[^'\\])*'z'(\\\\|\\'|[^']|\\[^'\\]+)'z:"z simple-symz([a-zA-Z_]\w*)(:)(?!:)"z simple-stringz(?ab)\|r[r[piz\\#pushz[\\#]z[^\\#z]+z -intp-stringz%Q?z\\[\\z-stringz%[qwi]z[imsx]* string-intpz-regexz%r) r SymbolrCRYSTAL_OPERATORSCharrrDoubleBacktickrOtherr1Regex)statesnamettyper3lbracerbracebraceccrDrDrEgen_crystalstrings_rulesZs                    z%CrystalLexer.gen_crystalstrings_rulesz#.*?$z abstract asm begin break case do else elsif end ensure extend if in include next of private protected require rescue return select self super then unless until when while with yield z\b)suffixzz previous_def forall out uninitialized __DIR__ __FILE__ __LINE__ __END_LINE__ z(?=])zI(annotation|class|struct|union|type|alias|enum)(\s+)((?:[a-zA-Z_]\w*::)*) classnamezN instance_sizeof offsetof pointerof sizeof typeof z+(?~!:])|(?<=(?:\s|;)when\s)|(?<=(?:\s|;)or\s)|(?<=(?:\s|;)and\s)|(?<=\.index\s)|(?<=\.scan\s)|(?<=\.sub\s)|(?<=\.sub!\s)|(?<=\.gsub\s)|(?<=\.gsub!\s)|(?<=\.match\s)|(?<=(?:\s|;)if\s)|(?<=(?:\s|;)elsif\s)|(?<=^when\s)|(?<=^index\s)|(?<=^scan\s)|(?<=^sub\s)|(?<=^gsub\s)|(?<=^sub!\s)|(?<=^gsub!\s)|(?<=^match\s)|(?<=^if\s)|(?<=^elsif\s))(\s*)(/)multiline-regexz (?<=\(|,|\[)/z(\s+)(/)(?![\s=])z5(0o[0-7]+(?:_[0-7]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?zA(0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?z3(0b[01]+(?:_[01]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?zU((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)(?:e[+-]?[0-9]+)?(?:_?f[0-9]+)?)(\s*)([/?])?zU((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)?(?:e[+-]?[0-9]+)(?:_?f[0-9]+)?)(\s*)([/?])?zU((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)?(?:e[+-]?[0-9]+)?(?:_?f[0-9]+))(\s*)([/?])?z8(0\b|[1-9][\d]*(?:_\d+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?z@@[a-zA-Z_]\w*z @[a-zA-Z_]\w*z\$\w+z\$[!@&`\'+~=/\\,;.<>_*$?:"^-]z\$-[0adFiIlpvw]z::rJzi\?(\\[MC]-)*(\\([\\abefnrtv#"\']|[0-7]{1,3}|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|u\{[a-fA-F0-9 ]+\})|\S)(?!\w)z[A-Z][A-Z_]+\b(?!::|\.)z\{%in-macro-controlz\{\{ in-macro-exprz!(@\[)(\s*)([A-Z]\w*(::[A-Z]\w*)*)in-annotz(\.|::)rGz,(\.|::)([a-zA-Z_]\w*[!?]?|[*%&^`~+\-/\[<>=])z[a-zA-Z_]\w*(?:[!?](?!=))?z:(\[|\]\??|\*\*|<=>?|>=|<>?|=~|===|!~|&&?|\|\||\.{1,3})z[-+/*%=<>&!^|~]=?z [(){};,/?:\\]z\s+z\(?:([a-zA-Z_]\w*)(\.))?([a-zA-Z_]\w*[!?]?|\*\*?|[-+]@?|[/%&|^`~]|\[\]=?|<<|>>|<=?>|>=?|===?)rRz [A-Z_]\w*z(\()(\s*)([A-Z_]\w*)(\s*)(\))rSr]rTrootz#\{in-intpzR\\([\\abefnrtv#"\']|[0-7]{1,3}|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|u\{[a-fA-F0-9 ]+\})r_rOrQz[^\\#]+z\\\\z\\/z[^\\/#]+z/[imsx]*z.+z%\}z(for|verbatim)\bz\}\}rVrW)rzrrrsr{r_rOrPzinterpolated-regexzinterpolated-stringrvrurwrxryN)4__name__ __module__ __qualname____doc__rhaliases filenames mimetypesreDOTALL MULTILINEflagsrFrmrSinglersplitr PseudoConstantrrr NamespaceBuiltinPreprocr rfr Octr HexBinFloatIntegerVariableClassInstanceGlobalrrbInterpol DecoratorrarFunctionrEscaperetokensupdaterDrDrDrErs /I   #'* +-  F HR T V Z ] ` c  f g h i jklnr t uw { }          M)rrpygments.lexerrrrrrpygments.tokenrrr r r r r rrr__all__compiler6rarrDrDrDrEs 0