i=WdZddlmZddlZddlZddlZddlZddlZddlZddl Z dZ dZ dddddddddd d d dd d Z e j e jze je je je jze je je je je jd Ze je jzZdZGddZGddZGddZGddZdZd&dZ d&dZ!e"dkr|e#ej$dkr-e%ee%e%de%ddSej$dZ&dej$vrde_'e%d e&ze e&Z(e(j)*D]8\Z+Z,e%d!e+e#e,fzeje,e%9e(j-*D]%\Z+Z.e%d"e+d#e.j/e%&e(j0*D] \Z+Z.e%d$e+d#e.e%!e(j1*D]"\Z+Z.e%d%e+d#e.e%!dSdS)'zs This is a parser for Windows .rc files, which are text files which define dialogs and other Windows UI resources. ) annotationsNz Adam Walkerz0.11 RichEdit20A) DEFPUSHBUTTON PUSHBUTTONButtonGROUPBOXStaticCTEXTRTEXTLTEXTLISTBOX SCROLLBARCOMBOBOXEDITTEXTICONRICHEDIT) rrrr r rrrrcJeZdZdZdZdZdZdZdZdZ dZ dZ dZ dZ dZdZdZdS) DialogDefrNz MS Sans SerifcL||_||_g|_g|_g|_dSN)nameidstylesstylesExcontrols)selfnis EC:\PYTHON\_runtimes\venv\Lib\site-packages\win32/lib/win32rcparser.py__init__zDialogDef.__init__Ms)    cd}|j|j|j|j|jf|j|j|j|jfgg|_ |j D].}|j | /|j Sr) captionxywhstylestyleExfontSizefonttemplater#appendcreateDialogTemplate)r$tcontrols r'r6zDialogDef.createDialogTemplateUs  0   *    } A AG M !=!=!?!? @ @ @ @}r))__name__ __module__ __qualname__rr r0r1r+r3r2r,r-r.r/r4r(r6r)r'rr?sn D B EGG DH A A A AHr)rcLeZdZdZdZdZdZeZe Z dZ dZ dZ dZdZdZdZdZdS) ControlDefrrc"g|_g|_dSr)r!r"r$s r'r(zControlDef.__init__ss  r)cd|jzdz|jzdz|jzdzt|jzdzt|jzdzt|jzdz|jzdzt|jzd zt|j zd zt|j zd zt|j zd z}|S) Nz ) r controlTypesubTypestridNumr0r!labelr,r-r.r/)r$ss r'toStringzControlDef.toStringws, g      l     $*oo  $*oo  $+  j  $&kk  ! "$&kk# $% &$&kk' () *$&kk+ ,-  2r)c|j}d|kr|j}|tvr t|}||j|j|j|j|j|jf|j |j g}|S)NCONTROL) rCrD _controlMaprGrFr,r-r.r/r0r1)r$ctr7s r'r6zControlDef.createDialogTemplatesg   ??B   RB  J J VTVTVTV , J L  r)N)r9r:r;r rCrDrFdefaultControlStyler0defaultControlStyleExr1rGr,r-r.r/r(rIr6r<r)r'r>r>fsx BKG E E#G E A A A A8r)r>ceZdZdZdZdS) StringDefc0||_||_||_dSrr rFvalue)r$r rFrTs r'r(zStringDef.__init__s  r)c8d|jd|jd|jdS)Nz StringDef(z, )rSr@s r'__repr__zStringDef.__repr__s)HDGHHHHHHHHr)N)r9r:r;r(rWr<r)r'rQrQs7 IIIIIr)rQceZdZUdZiZded<iZded<dZdZdZ d Z d Z d Z d Z d ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ d Z!d!Z"d"S)#RCParseriz?dict[str, list[list[str | int | None | tuple[str | int, ...]]]]dialogszdict[str, DialogDef]_dialogsFrcbd|_ddi|_ddi|_i|_i|_i|_dS)NF IDC_STATIC)ungotidsnamesbitmaps stringTableiconsr@s r'r(zRCParser.__init__s;  "%,'   r)c6|jrt|dSdSr) debugEnabledprint)r$argss r'debugzRCParser.debugs&    $KKKKK  r)c|jr)d|_|d|j|jS|j|_|d|j|jdkrd|_|jS)NFzgetToken returns (ungot):zgetToken returns:r)r_ritokenlex get_tokenr@s r'getTokenzRCParser.getTokensz : DJ JJ2DJ ? ? ?: X''))  & 333 :  DJzr)cd|_dS)NT)r_r@s r' ungetTokenzRCParser.ungetTokens  r)c\|}||ksJd|d|d|S)NzExpected token 'z', but got token 'z'!)rn)r$expectedtoks r' getCheckTokenzRCParser.getCheckTokens;mmooh V8 V Vs V V V r)c,|dS)N,)rtr@s r' getCommaTokenzRCParser.getCommaTokens!!#&&&r)cvd}|jdkrd}|t|j|zS)N-r^)rkrnint)r$mults r'currentNumberTokenzRCParser.currentNumberTokens9 :  D MMOOO4:%%r)c|jdsJ|j|jg} |}|ds|n||Td|dd}dD]\}}|||}|S)N"ryrr^))z""r)z\r )z\n )z\t )rk startswithrnrpr5joinreplace)r$bitsrssvalr&os r'currentQuotedStringzRCParser.currentQuotedStringsz$$S))554:55) | --//C>>#&& !!! KK      wwt}}QrT"M & &DAq<<1%%DD r)c||||j1|||j/dSdS)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)openrnrkparser$rcstreams r'loadz RCParser.loads[ ( j$ JJLLL MMOOOj$$$$$r)cPtj||_d|j_dS)Nz//#)shlexrl commentersrs r'rz RCParser.opens#;x((#r)cftj|}d|_d}||}|dks|d}nn|dkrh|}t|}||j|<||jvrn ||j|<|j|kr |dz|_|dSdS)Nz// rdefinery)rrrmr{r`ranext_id)r$filerlrkr%r&s r'parseHzRCParser.parseHsk$MMOOE{{emH$$ ACMMOO,,A"#DHQKDJ )* 1 |q(('(1u )r)cd|ji}|j|j|j|jd}d}|j}||}| |dS|j}||jdSd|jkrtd}|dkrf|ja||d|jd|jkr|dz }nd|jkr|dz}|dkr |j]dSdSdSdS||j}|+|d|jd ||dS|d |z|dS) N STRINGTABLE)DIALOGDIALOGEXBITMAPrrBEGINryz Zooming overENDz Dispatching ''zSkipping top-level '%s') parse_stringtable parse_dialog parse_bitmap parse_iconrkgetrnrirp)r$ noid_parsers id_parsersdeep base_tokenrp resource_ids r'rzRCParser.parses 41 ')'O   Z   j ) ) > BDDDDD *K MMOOOz!$*$$aiiDJ$:MMOOOJJ~tz:::$*,, $*,,  aiiDJ$:$:$:ii$:$:ii ^^DJ//>JJrCrrGrrEr}rrwr rFrDrN _addDefaultsrr!r0r{r,r-r.r/rOr1r"r#r5)r$r without_textr8thisDefaultStyles r'r#zRCParser.controlss : MMOOO HGG jE!! llG"&*G  MMOOO",66:ac?c))$($<$<$>$>GMMZ3&&$**<*<*>*>&$'(?(?(A(A$B$BGMM%( 4:(>(>$?$?GM""$$$ zS  DJ$6$6$8$8 !4466 '  "Z $ 7: 6 6    "i// "&*QrT"2#69I9IOQ::$ ""$$$ 04 B@P0Q0Q- w~~#69I9I'::$ !1 DMMOO,,GI    DMMOO,,GI    DMMOO,,GI    MMOOODJGI MMOOOzS   04 B@P0Q0Q- w~zS   48KK-551!1 L   ( ( (}jE!!!!!!r)N)#r9r:r;rrZ__annotations__r[rfrkr(rirnrprtrwr}rrrrrrrrrrrrrrrr!rrr#r<r)r'rYrYsGOQGQQQQ%'H''''L E    ''' &&&"   $$$---4/&/&/&b"    ' ' '===;;;"8"8"8HEEE777###J   G)G)G)G)G)r)rYc~t}|r|| ||n#t|dd}|rgt d|jt dt dD]%}t |d&t xYw|S)NrlzERROR parsing dialogs at linezNext 10 tokens are: r)end)rYrrrrglinenorangerm)rc_fileh_filercprlr&s r' ParseStreamsr7s **C  6  c5$''   13: > > > ' ( ( (2YY 0 0cmmoo3///// GGG Js =A=B:c<|rt|d}n|dddz} t|d}nq#t$rdtjtj|d} t|d}n#t$rd}YnwxYwYnwxYwt|d} t |||||S#|||wxYw)Nrr/z resource.h)rOSErrorospathrdirnamerclose)rc_nameh_namerrs r'ParserIs, fc"""# &#&&FF   W\\"'//'":":LIIF fc**      7C  GGV,,   LLNNN    LLNNN s@3AB!;B  B! BB!BB! B!5C//,Dct||}tj|}t|d}|d|z|d|z|dt z|d|tj|tjfz|d|d|d|d |d |d |d |d dD]S}|d|dtjt||||dT|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. wtz#%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: )rZr`rarbrdrcrz = \ rzdef Parse(s): z return FakeParser() N) rrstatrwrite __version__ST_SIZEST_MTIMEpprintrr)r output_namerrin_statoutrs r'GenerateFrozenResourcer bs  CggG {D ! !CIIg #$$$IIDwNOOOII ;.///II' 4< '$-"8 9 : II"###II9:::II"###II()))II()))II'(((IIRII#$$$L $t$$$%%% gc4((#... $II   II'(((IIKKKKKr)__main__ryz@See test_win32rcparser.py, and the win32rcparser directory (bothz9in the test suite) for an example of this module's usage.z-vTzDumping all resources in '%s'zDialog %s (%d controls)zString =zBitmap zIcon r)2__doc__ __future__rrr rrsysrr __author__rrL WS_BORDER WS_TABSTOP BS_GROUPBOXSS_LEFTBS_DEFPUSHBUTTON SS_CENTERSS_RIGHTSS_ICON LBS_NOTIFYrWS_CHILD WS_VISIBLErNrOrr>rQrYrrr r9rargvrgfilenamerf resourcesrZitemsr ddefrcsdefrTrbrdr<r)r'r%s  #"""""         ."X%88$  .1DD%      "   '(*==$$$$$$$$N<<<<<<<<~IIIIIIIIE)E)E)E)E)E)E)E)P $2%%%%P z s38}} g  PQQQ IJJJJJ8A; 38  $(H ! -8999E(OO !)//11  HB E+r33t99o= > > > FM$    EGGGG!-3355  HB E/B//// 0 0 0 EGGGG!)//11  HB E)B)))) * * * EGGGG!--//  HB E'"''t'' ( ( ( EGGGG1,  r)