a „oeŽ#ã@sXdZddlZddlZddlZddlZddlmZddlmZddl m Z ddl m Z m Z iZd ¡D] Zdee<qdGd d „d ƒZGd d „d eƒZed k�rTddlZej d¡ddlZeeƒZe ¡ZdZeD]*ZeeƒedƒkrðeedZqÎedZqÎe ¡Zeeeƒk�r$e deeeƒfƒe de !d¡ƒe de !d¡ƒe de !d¡ƒdS)zÄA utility class for a code container. A code container is a class which holds source code for a debugger. It knows how to color the text, and also how to translate lines into offsets, and back. éN)Úaxdebug)Ú Exceptioné)Úcontexts)Ú RaiseNotImplÚ_wrapz› and assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try while c@sžeZdZd(dd„Zdd„Zdd „Zd d „Zd d „Zdd„Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„ZdS))ÚSourceCodeContainerú rNcCs@||_||_|r| ¡d|_||_i|_||_||_d|_dS©Nr) Ú sourceContextÚtextÚ _buildlinesÚ nextLineNoÚfileNameÚ codeContextsÚsiteÚstartLineNumberÚ debugDocument)Úselfr rr rrr©rúBC:\Program Files\Certbot\pkgs\win32comext\axdebug\codecontainer.pyÚ__init__s zSourceCodeContainer.__init__cCs.d|_|_|_d|_d|_d|_d|_dS©N)r ÚlinesÚ lineOffsetsrrrr ©rrrrÚ_Close0s zSourceCodeContainer._ClosecCs|jSr)r rrrrÚGetText7szSourceCodeContainer.GetTextcCsds Jdƒ‚dS)NrzYou must subclass thisr)rÚdntrrrÚGetName:szSourceCodeContainer.GetNamecCs|jSr)rrrrrÚ GetFileName=szSourceCodeContainer.GetFileNamecCs8| ¡z |j|WSty2ttjd�‚Yn0dS)N©Zscode)rrÚ IndexErrorrÚwinerrorÚS_FALSE)rZ cLineNumberrrrÚGetPositionOfLine@s   z%SourceCodeContainer.GetPositionOfLinecCsT| ¡d}d}|jdd…D]}||kr.qH|}|d}qttjd�‚|||fS)Nrrr!)rrrr#r$)rÚcharPosZ lastOffsetÚlineNoZ lineOffsetrrrÚGetLineOfPositionGs  z%SourceCodeContainer.GetLineOfPositioncCs6|jt|jƒkrd|_dS|j|j}|jd|_|S)NrÚr)rÚlenr)rÚrcrrrÚ GetNextLineVs   zSourceCodeContainer.GetNextLinecCs| ¡|j|Sr)rr)rZnumrrrÚGetLine^szSourceCodeContainer.GetLinecCs t| ¡ƒSr)r*rrrrrÚ GetNumCharsbszSourceCodeContainer.GetNumCharscCs| ¡t|jƒSr)rr*rrrrrÚ GetNumLineseszSourceCodeContainer.GetNumLinescCs@|j d|¡}|dkr"t|jƒ}n|d}|j||…}||fS)NÚ rr)r Úfindr*)rÚposÚiZnewposÚrrrrÚ _buildlineis  zSourceCodeContainer._buildlinecCsLg|_dg|_| d¡\}}|rH|j |¡|j |¡| |¡\}}qdSr )rrr5Úappend)rÚliner2rrrr rs  zSourceCodeContainer._buildlinescCs|\}}|\}} | ¡|d} |j| |} | |j} | dkrBn*| dkrZ|j tj¡n|j tj| f¡t|ƒ} | | |_d}|tj krœ|t vrâtj }nF|tj kr®tj }n4|tjkrÀtj}n"|tjkrÒtj}n|tjkrâtj}| dkrìn(| dk�r|j |¡n|j || f¡dS)Nrr)rrÚlastPosÚattrsr6rÚSOURCETEXT_ATTR_COMMENTr*ÚtokenizeÚNAMEÚ _keywordsZSOURCETEXT_ATTR_KEYWORDÚSTRINGZSOURCETEXT_ATTR_STRINGÚNUMBERZSOURCETEXT_ATTR_NUMBERÚOPZSOURCETEXT_ATTR_OPERATORÚCOMMENT)rÚtypeÚtokenÚsposÚeposr7ZsrowZscolZerowZecolZlinenumZ realCharPosZ numskippedZkwSizeÚattrrrrÚ _ProcessToken{s<        z!SourceCodeContainer._ProcessTokencCsdd|_g|_zt |j|j¡Wntjy4Yn0t| ¡ƒ|j}|r^|j t j |f¡|jSr ) r8r9r;r,rGÚ TokenErrorr*rr6rr:)rZnumAtEndrrrÚGetSyntaxColorAttributesŸsz,SourceCodeContainer.GetSyntaxColorAttributescCstt |||||j¡tjƒSr)rrZDebugCodeContextrrZIID_IDebugCodeContext)rr'r&r*rrrÚ_MakeDebugCodeContext¬sþz)SourceCodeContainer._MakeDebugCodeContextcCsH| |¡\}}z| |d¡}Wn|}Yn0| ||||¡}|S)Nr)r(r%rJ)rr&r'ÚoffsetZendPosZ codecontextrrrÚ_MakeContextAtPosition³s z*SourceCodeContainer._MakeContextAtPositioncCsR| |¡\}}| |¡}z|j|}Wn&tyL| |¡}||j|<Yn0|Sr)r(r%rÚKeyErrorrL)rr&r'rKZccrrrÚGetCodeContextAtPosition½s   z,SourceCodeContainer.GetCodeContextAtPosition)r rrNN)Ú__name__Ú __module__Ú __qualname__rrrrr r%r(r,r-r.r/r5r rGrIrJrLrNrrrrrs.ù   $  rc@s$eZdZdd„Zdd„Zdd„ZdS)ÚSourceModuleContainercCs�||_t|dƒrV|jj}|ddvr0|dd…}zt |¡}Wq~tjyRYq~0n(|jdkrzttj ƒdkrztj d}nd}t   |d|¡dS)NÚ__file__éÿÿÿÿ)ÚOÚoÚCÚcÚSÚsÚ__main__rz ) ÚmoduleÚhasattrrSÚwin32apiÚGetFullPathNameÚerrorrOr*ÚsysÚargvrr)rr\ÚfnamerrrrÌs    zSourceModuleContainer.__init__c Csz|jdurt| ¡}|r`zt|dƒ ¡|_Wqlty\}zdt|ƒ|_WYd}~qld}~00n d|j|_| ¡|jS)Nr4z# Exception opening file # %sz## No file available for module '%s')r r ÚopenÚreadÚIOErrorÚreprr\r )rrcZdetailsrrrrÞs & zSourceModuleContainer.GetTextcCs®|jj}zt |jj¡}Wn0tjy6|jj}YntyJ|}Yn0|tjkrd|  d¡dS|tj krr|S|tj krŒt j   |¡dS|tjkržd|Sttjd�‚dS)NÚ.rTrzfile:%sr!)r\rOr^r_rSr`ÚAttributeErrorrZDOCUMENTNAMETYPE_APPNODEÚsplitZDOCUMENTNAMETYPE_TITLEZDOCUMENTNAMETYPE_FILE_TAILÚosÚpathZDOCUMENTNAMETYPE_URLrr#Z E_UNEXPECTED)rrÚnamercrrrrës        zSourceModuleContainer.GetNameN)rOrPrQrrrrrrrrRËs rRr[rhrzLengths dont match!!! (%d/%d)z GetLineOfPos=éé )"Ú__doc__rar;r^r#Zwin32com.axdebugrZwin32com.server.exceptionrr)rÚutilrrr=rjrmrrRrOrlr6ZttestZscrIr9ZattrlenrFrBrr r*Úprintr(rrrrÚs>     14