a „oeuTã@s6dZdZdZddlZddlZddlZddlZddlZddlZddl Z ddddddddddd d dd d œZ e j e j Be j e je je j Be j e je je je jd œ Ze je jBZdZGdd„dƒZGdd„dƒZGdd„dƒZGdd„dƒZdd„Zd&dd„Zd'dd„Ze dkr2e!ej"ƒdkr:e#eƒe#ƒe#dƒe#dƒnøddlZej"dZ$d ej"vr^de_%e#d!e$ƒee$ƒZ&e&j' (¡D].\Z)Z*e#d"e)e!e*ƒfƒe e*¡e#ƒq|e&j+ (¡D]"\Z)Z,e#d#e)e,j-fƒe#ƒq¶e&j. (¡D] \Z)Z,e#d$e)e,fƒe#ƒqäe&j/ (¡D] \Z)Z,e#d%e)e,fƒe#ƒqdS)(zs This is a parser for Windows .rc files, which are text files which define dialogs and other Windows UI resources. z Adam Walkerz0.11éNé€é‚éƒé„é…éZ RichEdit20A)Ú DEFPUSHBUTTONÚ PUSHBUTTONZButtonÚGROUPBOXZStaticÚCTEXTÚRTEXTÚLTEXTÚLISTBOXÚ SCROLLBARÚCOMBOBOXÚEDITTEXTÚICONZRICHEDIT) rr r rr r r rrc@sLeZdZdZdZdZdZdZdZdZ dZ dZ dZ dZ dZdd„Zdd „ZdS) Ú DialogDefÚrNz MS Sans SerifécCs"||_||_g|_g|_g|_dS©N)ÚnameÚidÚstylesÚstylesExÚcontrols)ÚselfÚnÚi©rú8C:\Program Files\Certbot\pkgs\win32\lib\win32rcparser.pyÚ__init__Js zDialogDef.__init__cCsVd}|j|j|j|j|jf|j|j|j|jfgg|_ |j D]}|j   |  ¡¡q:|j Sr) ÚcaptionÚxÚyÚwÚhÚstyleÚstyleExÚfontSizeÚfontÚtemplaterÚappendÚcreateDialogTemplate)rÚtÚcontrolrrr r-Rs ûÿ zDialogDef.createDialogTemplate)Ú__name__Ú __module__Ú __qualname__rrr'r(r"r*r)r#r$r%r&r+r!r-rrrr r<src@sPeZdZdZdZdZdZeZe Z dZ dZ dZ dZdZdd„Zdd„Zdd„Zd S) Ú ControlDefrrcCsg|_g|_dSr)rr©rrrr r!pszControlDef.__init__cCs’d|jd|jd|jdt|jƒdt|jƒdt|jƒd|jdt|jƒd t|j ƒd t|j ƒd t|j ƒd }|S) Nz ) rÚ controlTypeÚsubTypeÚstrÚidNumr'rÚlabelr#r$r%r&)rÚsrrr ÚtoStringts^ÿþýüûúùø ÷ ö õ ô óòñðïîíìëêÿzControlDef.toStringcCsP|j}d|kr|j}|tvr$t|}||j|j|j|j|j|jf|j |j g}|S)NÚCONTROL) r6r7Ú _controlMapr:r9r#r$r%r&r'r()rZctr.rrr r-sú zControlDef.createDialogTemplateN)r0r1r2rr6r7r9ÚdefaultControlStyler'ÚdefaultControlStyleExr(r:r#r$r%r&r!r<r-rrrr r3csr3c@seZdZdd„Zdd„ZdS)Ú StringDefcCs||_||_||_dSr©rr9Úvalue)rrr9rCrrr r!£szStringDef.__init__cCsd|j|j|jfS)NzStringDef(%r, %r, %r)rBr4rrr Ú__repr__¨szStringDef.__repr__N)r0r1r2r!rDrrrr rA¢srAc@sðeZdZdZiZiZdZdZdd„Zdd„Z dd „Z d d „Z d d „Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Z d6d7„Z!d8S)9ÚRCParseriéFrcCs0d|_ddi|_ddi|_i|_i|_i|_dS)NFZ IDC_STATICéÿÿÿÿ)ÚungotÚidsÚnamesÚbitmapsÚ stringTableÚiconsr4rrr r!³s   zRCParser.__init__cGs|jrt|ƒdSr)Ú debugEnabledÚprint)rÚargsrrr Údebug»szRCParser.debugcCsP|jr d|_| d|j¡|jS|j ¡|_| d|j¡|jdkrJd|_|jS)NFzgetToken returns (ungot):zgetToken returns:r)rGrPÚtokenÚlexÚ get_tokenr4rrr ÚgetToken¿s  zRCParser.getTokencCs d|_dS)NT)rGr4rrr Ú ungetTokenÊszRCParser.ungetTokencCs$| ¡}||ks Jd||fƒ‚|S)Nz(Expected token '%s', but got token '%s'!)rT)rZexpectedÚtokrrr Ú getCheckTokenÍs  þzRCParser.getCheckTokencCs | d¡S)Nú,)rWr4rrr Ú getCommaTokenÕszRCParser.getCommaTokencCs(d}|jdkrd}| ¡t|jƒ|S)Néú-rF)rQrTÚint)rZmultrrr ÚcurrentNumberTokenÚs  zRCParser.currentNumberTokencCsv|j d¡sJ|jƒ‚|jg}| ¡}| d¡s:| ¡qF| |¡qd |¡dd…}dD]\}}| ||¡}q\|S)Nú"rrZrF))z""r^)z\rú )z\nÚ )z\tú )rQÚ startswithrTrUr,ÚjoinÚreplace)rÚbitsrVZsvalrÚorrr ÚcurrentQuotedStringãs   zRCParser.currentQuotedStringcCs2| |¡| ¡|jdkr.| ¡| ¡qdS)aM RCParser.loadDialogs(rcFileName) -> None Load the dialog information into the parser. Dialog Definations can then be accessed using the "dialogs" dictionary member (name->DialogDef). The "ids" member contains the dictionary of id->name. The "names" member contains the dictionary of name->id N)ÚopenrTrQÚparse©rZrcstreamrrr Úloadôs   z RCParser.loadcCst |¡|_d|j_dS)Nz//#)ÚshlexrRÚ commentersrjrrr rhs z RCParser.opencCst |¡}d|_d}|durŒ| ¡}|dks4|dur:d}q|dkr| ¡}t| ¡ƒ}||j|<||jvrln ||j|<|j|kr|d|_qdS)Nz//ú rZdefinerZ)rlrmrSr\rHrIÚnext_id)rÚfilerRrQrrrrr ÚparseHs       zRCParser.parseHcCs d|ji}|j|j|j|jdœ}d}|j}| |¡}|durD|ƒnÂ|j}| ¡|jdur`dSd|jkrÀd}|dkr¾|jdur¾| ¡| d|j¡d|jkrª|d7}qnd|jkrn|d8}qnnF| |j¡}|durð| d|jf¡||ƒn| d |¡| ¡dS) NZ STRINGTABLE)ZDIALOGZDIALOGEXZBITMAPrrÚBEGINrZz Zooming overÚENDzDispatching '%s'zSkipping top-level '%s') Úparse_stringtableÚ parse_dialogÚ parse_bitmapÚ parse_iconrQÚgetrTrPrU)rZ noid_parsersZ id_parsersZdeepZ base_tokenZrpZ resource_idrrr ris>ÿû         zRCParser.parsecCsz||jvr|j|}n`dD]2}||krtt|ƒ}||j|<||j|<|Sq|j}|jd7_||j|<||j|<|S)N)ZIDOKZIDCANCELZIDYESZIDNOZIDABORTrZ)rHÚgetattrÚwin32conrIro)rZid_namerrÚvrrr ÚaddIdPs        zRCParser.addIdcCs<|jdd…dks.|jdd…dks.|jdkr8| ¡qdS)NréÚLANGéZSUBLANGrX)rQrTr4rrr Úlangasÿþýz RCParser.langcCs(| ¡dkrq|jdkrq$| ¡}qdS©Nrrrs)rTrQ)rZres_idr;rrr Úparse_textincludeis   zRCParser.parse_textincludecCsV| ¡dkrq| ¡|jdkr"qR|j}| ¡t|| |¡| ¡ƒ}||j|<qdSr)rTrQrAr|rgrK)rZsidÚsdrrr rtqs  zRCParser.parse_stringtablecCs| ||j¡Sr)Úparse_bitmap_or_iconrJ©rrrrr rv}szRCParser.parse_bitmapcCs| ||j¡Sr)r„rLr…rrr rw€szRCParser.parse_iconcCs8| ¡|j d¡s| ¡q|jdd…}|||<dS)Nr^rZrF)rTrQrb)rrZdicZbmfrrr r„ƒs   zRCParser.parse_bitmap_or_iconcCs‚t|| |¡ƒ}t|jƒdks"J‚||j|<g}| ¡|j ¡sf| d|j¡|  |j¡| ¡q8t |jƒ|_ |  ¡| ¡t |jƒ|_ |  ¡| ¡t |jƒ|_|  ¡| ¡t |jƒ|_| ¡|jdksp|jdksp|jdksp|jdkr | |¡qÎ|jdkr"| |¡qÎ|jdkr:| |¡qÎ|jdkrR| |¡qÎ|jd krp| |¡qÎqpqÎ| ¡|j|<dS) NrZextrarrsÚSTYLEZEXSTYLEÚCAPTIONÚFONTrr)rr|ÚlenrÚ_dialogsrTrQÚisdigitrPr,r\r#rYr$r%r&Ú dialogStyleÚ dialogExStyleÚ dialogCaptionÚ dialogFontr-Údialogs)rrÚdlgÚextrasrrr ruŠsB        $          zRCParser.parse_dialogcCs| gtj¡\|_|_dSr)rrzZ DS_SETFONTr'©rr‘rrr rŒ®szRCParser.dialogStylecCs | ¡| gd¡\|_|_dS)Nr)rTrr(rr“rrr r±szRCParser.dialogExStylecCs4|}|}d|jkr| ¡d}d}|ddkrBd|jksPd|jksP|ddkr |jdks d}d|jkrvd}| ¡|d7}|jdkr|jtjvr¤tt|jƒ}n|jtjvr¾tt|jƒ}nd}|rò| d |j¡| d |j|¡||M}n$| |j¡| d |j|¡||O}| ¡q"| d |¡||fS) Nr†rFérZú|ZNOTTzNOT zstyles add Notz styles addz style is )rQrTrzÚ__dict__ryÚcommctrlr,rP)rÚdefaultsZ defaultStyleÚlistr'rZNotrCrrr rµsJ  ÿÿÿ ÿþ        zRCParser.stylescCsDd|jkr| ¡|jdd…|_| d|j¡|j|_| ¡dS)Nr‡rZrFz Caption is:)rQrTrPr"r“rrr rŽÚs  zRCParser.dialogCaptioncCs^d|jkr| ¡t|jƒ|_| ¡| ¡|jdd…|_| ¡d|jkrZ| ¡qFdS)NrˆrZrFrr)rQrTr\r)rYr*r“rrr râs   zRCParser.dialogFontcCs$|jdkr| ¡gd¢}|jdkr tƒ}|j|_| ¡|j|vrª|jdd…dkrd| ¡|_n6|jdksx|j ¡rˆt| ¡ƒ|_nt|  |j¡ƒ|_|  ¡| ¡|jdks¾|j ¡rÒ| ¡|_ |j |_ n|j|_ |  |j ¡|_ |  ¡|jdkrL| ¡|jdd …|_ tt |j d¡B}|  ¡| ¡| g|¡\|_|_ntt |jd¡B}||_t| ¡ƒ|_|  ¡t| ¡ƒ|_|  ¡t| ¡ƒ|_|  ¡| ¡t|jƒ|_| ¡|jd krê| ¡| g|¡\|_|_|jd kr| ¡| gt¡\|_|_|j |¡qdS) Nrr)rrrrrsrrZr^r[r=rFrX)rQrTr3r6rgr:r‹r8r]r|rYrr9r7r?Ú _addDefaultsrxrr'r\r#r$r%r&r@r(rrr,)rr‘Z without_textr/ZthisDefaultStylerrr rísh       ÿÿ   ÿ zRCParser.controlsN)"r0r1r2rorrŠrMrQr!rPrTrUrWrYr]rgrkrhrqrir|r€r‚rtrvrwr„rurŒrrrŽrrrrrr rE¬s>   1 $% rEcCs~tƒ}|r| |¡z| |¡WnVt|ddƒ}|rrtd|jƒtdƒtdƒD]}t| ¡ddqVtƒ‚Yn0|S)NrRzERROR parsing dialogs at linezNext 10 tokens are:é rn)Úend)rErqrkryrNÚlinenoÚrangerS)Úrc_fileÚh_fileÚrcprRrrrr Ú ParseStreams7s    r¢c CsÖ|rt|dƒ}nn|dd…d}zt|dƒ}WnNty|tj tj |¡d¡}zt|dƒ}Wntyvd}Yn0Yn0t|dƒ}z.t||ƒW|dur¤| ¡| ¡S| ¡n|durÈ| ¡| ¡0tS)NÚréþÿÿÿr&z resource.h) rhÚIOErrorÚosÚpathrcÚdirnamer¢Úcloser¡)Úrc_nameÚh_namer rŸrrr ÚParseIs2     ü þ r¬cCs t||ƒ}t |¡}t|dƒ}| d|¡| d|¡| dt¡| d|tj|tjf¡| d¡| d¡| d¡| d ¡| d ¡| d ¡| d ¡| d ¡dD]0}| d|f¡t t ||ƒ|¡| d¡qº| d¡| d¡|  ¡dS)aConverts an .rc windows resource source file into a python source file with the same basic public interface as the rest of this module. Particularly useful for py2exe or other 'freeze' type solutions, where a frozen .py file can be used inplace of a real .rc file. Zwtz#%s z3#This is a generated file. Please edit %s instead. z__version__=%r z_rc_size_=%d _rc_mtime_=%d zclass StringDef: z' def __init__(self, id, idNum, value): z self.id = id z self.idNum = idNum z self.value = value z def __repr__(self): zE return "StringDef(%r, %r, %r)" % (self.id, self.idNum, self.value) zclass FakeParser: )rrHrIrJrLrKz %s = \ r`zdef Parse(s): z return FakeParser() N) r¬r¦ÚstatrhÚwriteÚ __version__ÚST_SIZEÚST_MTIMEÚpprintryr©)rªZ output_namer«r¡Zin_statÚoutrrrr ÚGenerateFrozenResourcecs8   ÿÿ      ÿ    r´Ú__main__rZz@See test_win32rcparser.py, and the win32rcparser directory (bothz9in the test suite) for an example of this module's usage.z-vzDumping all resources in '%s'zDialog %s (%d controls)z String %s=%rz Bitmap %s=%rz Icon %s=%r)N)N)0Ú__doc__Ú __author__r¯r¦r²rlr­Úsysr—rzr>Z WS_BORDERZ WS_TABSTOPZ BS_GROUPBOXZSS_LEFTZBS_DEFPUSHBUTTONZ SS_CENTERZSS_RIGHTZSS_ICONZ LBS_NOTIFYršZWS_CHILDZ WS_VISIBLEr?r@rr3rArEr¢r¬r´r0r‰ÚargvrNÚfilenamerMZ resourcesrÚitemsrZddefrKZsdefrCrJrLrrrr ÚsŽò  ÷ '?   (