B 0‘c•ã@sàddlmZddlZddlZddlmZddlZGdd„deƒZGdd„deƒZ Gdd „d eƒZ Gd d „d eƒZ Gd d „d e ƒZ Gdd„dƒZ e ƒZeƒZdd„ZGdd„deƒZdd„ZedkrÜddlmZedddddS)é)Ú ConfigParserN)ÚFontc@s eZdZdS)ÚInvalidConfigTypeN)Ú__name__Ú __module__Ú __qualname__©rrú3/opt/alt/python37/lib64/python3.7/idlelib/config.pyr#src@s eZdZdS)ÚInvalidConfigSetN)rrrrrrr r $sr c@s eZdZdS)Ú InvalidThemeN)rrrrrrr r %sr c@s0eZdZd dd„Zd dd„Zdd„Zd d „ZdS) ÚIdleConfParserNcCs||_tj||dddS)NF)ÚdefaultsÚstrict)ÚfilerÚ__init__)ÚselfÚcfgFileZ cfgDefaultsrrr r+szIdleConfParser.__init__FcCsL| ||¡s|S|dkr$| ||¡S|dkr8| ||¡S|j|||dSdS)NÚboolÚint)Úraw)Ú has_optionZ getbooleanZgetintÚget)rÚsectionÚoptionÚtypeÚdefaultrrrr ÚGet2s   zIdleConfParser.GetcCs| |¡r| |¡SgSdS)N)Ú has_sectionÚoptions)rrrrr Ú GetOptionListCs  zIdleConfParser.GetOptionListcCs|jr| |j¡dS)N)rÚread)rrrr ÚLoadJszIdleConfParser.Load)N)NNF)rrrrrrr!rrrr r 's  r c@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)ÚIdleUserConfParsercCs^| ||¡r4| ||¡|kr dS| |||¡dSn&| |¡sH| |¡| |||¡dSdS)NFT)rrÚsetrÚ add_section)rrrÚvaluerrr Ú SetOptionTs   zIdleUserConfParser.SetOptioncCs| |¡r| ||¡SdS)NF)rZ remove_option)rrrrrr Ú RemoveOptiones  zIdleUserConfParser.RemoveOptioncCs| |¡s| |¡dS)N)rr$)rrrrr Ú AddSectionns zIdleUserConfParser.AddSectioncCs*x$| ¡D]}| |¡s | |¡q WdS)N)ÚsectionsrÚremove_section)rrrrr ÚRemoveEmptySectionsss z&IdleUserConfParser.RemoveEmptySectionscCs| ¡| ¡ S)N)r+r))rrrr ÚIsEmptyyszIdleUserConfParser.IsEmptyc Cs|j}|rŒ|ddkrŒ| ¡sryt|dƒ}Wn(tk rTt |¡t|dƒ}YnX|| |¡WdQRXntj |j¡rŒt  |j¡dS)Nrú#Úw) rr,ÚopenÚOSErrorÚosÚunlinkÚwriteÚpathÚexistsÚremove)rZfnamerrrr ÚSave~s zIdleUserConfParser.SaveN) rrrr&r'r(r+r,r7rrrr r"Os  r"c @seZdZdEdd„Zdd„Zdd„ZdFd d „Zd d „Zdd„Zdd„Z dd„Z dd„Z dd„Z dd„Z edd„ƒZdGdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1d2d3d4d5d6d7d8h ZdHd9d:„Zd;d<„Zd=d>„Zd?d@„ZdAdB„ZdCdD„Z dS)IÚIdleConfFcCs0d|_i|_i|_i|_|s,| ¡| ¡dS)N)ÚmainÚ highlightÚkeysÚ extensions)Ú config_typesÚ defaultCfgÚuserCfgÚcfgÚCreateConfigHandlersÚ LoadCfgFiles)rZ_utestrrr rœszIdleConf.__init__cCs|tj t¡}tjrdn| ¡|_}xR|jD]H}t tj  |d|›d¡ƒ|j |<t tj  |p^dd|›d¡ƒ|j |<q,WdS)NÚzconfig-z.defr-z.cfg)r1r4ÚdirnameÚ__file__ÚidlelibÚtestingÚ GetUserCfgDirÚuserdirr=r Újoinr>r"r?)rZidledirrIZcfg_typerrr rA¨s  zIdleConf.CreateConfigHandlersc Csòd}tj d¡}|dkrbtj |¡sbtjs^d|d}yt|tjdWnt k r\YnXd}|dkrrt  ¡}tj  ||¡}tj |¡sîyt  |¡WnRt k rìtjsäd|d}yt|tjdWnt k râYnXt ‚YnX|S)Nz.idlercú~z. Warning: os.path.expanduser("~") points to z, but the path does not exist.)rz2 Warning: unable to create user config directory z( Check path and permissions. Exiting! )r1r4Ú expanduserr5rFrGÚprintÚsysÚstderrr0ÚgetcwdrJÚmkdirÚ SystemExit)rZcfgDirZuserDirÚwarnrrr rH²s4      zIdleConf.GetUserCfgDirNTc CsÜy.|j| ||¡r,|j|j||||dSWnDtk rrd||||j|j|||df}t||||ƒYnXy.|j| ||¡r |j|j||||dSWntk r¶YnX|rØd|||f}t||||ƒ|S)N)rrzn Warning: config.py - IdleConf.GetOption - invalid %r value for configuration option %r from section %r: %r)rz† Warning: config.py - IdleConf.GetOption - problem retrieving configuration option %r from section %r. returning default value: %r)r?rrÚ ValueErrorÚ_warnr>) rÚ configTyperrrrÚwarn_on_defaultrÚwarningrrr Ú GetOptionÖs(   zIdleConf.GetOptioncCs|j| |||¡dS)N)r?r&)rrVrrr%rrr r&þszIdleConf.SetOptioncCsJ||jkrtdƒ‚|dkr&|j|}n|dkr:|j|}ntdƒ‚| ¡S)NzInvalid configType specifiedÚuserrzInvalid configSet specified)r=rr?r>r r))rÚ configSetrVÚ cfgParserrrr ÚGetSectionLists   zIdleConf.GetSectionListcCsR|jd |¡rdnd}| ||¡}||d}|dkrrÚ GetThemeDict)rÚthemeÚelementr@Z theme_dictZforeZbackrrr Ú GetHighlights   zIdleConf.GetHighlightc CsÔ|dkr|jd}n|dkr(|jd}ntdƒ‚ddddddddddddddddddddddddddddddddœ}xZ|D]R}| ||¡s´| d ¡s´d ||||f}t|d||ƒ|j||||d ||<qzW|S) NrZr:rzInvalid theme type specifiedz#000000z#ffffffZgray)znormal-foregroundznormal-backgroundzkeyword-foregroundzkeyword-backgroundzbuiltin-foregroundzbuiltin-backgroundzcomment-foregroundzcomment-backgroundzstring-foregroundzstring-backgroundzdefinition-foregroundzdefinition-backgroundzhilite-foregroundzhilite-backgroundzbreak-foregroundzbreak-backgroundzhit-foregroundzhit-backgroundzerror-foregroundzerror-backgroundzcontext-foregroundzcontext-backgroundzlinenumber-foregroundzlinenumber-backgroundzcursor-foregroundzstdout-foregroundzstdout-backgroundzstderr-foregroundzstderr-backgroundzconsole-foregroundzconsole-background)zcontext-z linenumber-z{ Warning: config.IdleConf.GetThemeDict - problem retrieving theme element %r from theme %r. returning default color: %r)r)r?r>r rÚ startswithrUr)rrZ themeNamer\r`rarXrrr r_!sZ     zIdleConf.GetThemeDictcCs | d¡S)NÚTheme)Úcurrent_colors_and_keys)rrrr Ú CurrentThemeeszIdleConf.CurrentThemecCs | d¡S)NZKeys)re)rrrr Ú CurrentKeysiszIdleConf.CurrentKeyscCsŽ|dkr dnd}|jd|dddd}d }|r>|jd|d d d }|sT|jd|d d d }|rz|rb|jn|j}|| |¡rz|S|dkr†d S| ¡S)Nrdr:r;r9rrT)rrrCZname2)rÚnamez IDLE Classic)rYr>r?rÚ default_keys)rrZcfgnamerrhÚsourcerrr rems  z IdleConf.current_colors_and_keyscCs,tjdd…dkrdStjdkr$dSdSdS)NéÚwinzIDLE Classic WindowsÚdarwinzIDLE Classic OSXzIDLE Modern Unix)rNÚplatformrrrr ri“s  zIdleConf.default_keysc CsÔ| | dd¡¡}| | dd¡¡}x|D]}||kr*| |¡q*WxdD]}| |¡qJW|rÌg}xb|D]Z}|jd|ddddrj|sŠ|rº|r”d }nd }|jd||ddd d rÄ| |¡qj| |¡qjW|S|SdS) Nrr<rZ)Z AutoCompleteZ CodeContextZFormatParagraphZ ParenMatchZenableTr)rrZ enable_editorZ enable_shellF)rrrW)ÚRemoveKeyBindNamesr]Úappendr6rY) rÚ active_onlyZ editor_onlyZ shell_onlyZextnsZ userExtnsÚextnÚ activeExtnsrrrr Ú GetExtensionsœs2      zIdleConf.GetExtensionscCsdd„|DƒS)NcSsg|]}| d¡s|‘qS))Ú _bindingsÚ _cfgBindings)Úendswith)Ú.0Únrrr ú Çsz/IdleConf.RemoveKeyBindNames..r)rZ extnNameListrrr roÅszIdleConf.RemoveKeyBindNamescCsJd}d|d}x4|jddD]$}x| |¡D]}||kr.|}q.WqW|S)Nz<>r)rq)rtÚGetExtensionKeys)rÚ virtualEventZextNameZvEventrrÚeventrrr ÚGetExtnNameForEventÉs  zIdleConf.GetExtnNameForEventc Csb|d}| ¡}i}|jd |¡r^|jd |¡}x(|D] }d|d}||}|||<q:W|S)Nrvr<z<>)ÚGetCurrentKeySetr>rr) rÚ extensionNameÚkeysNameZ activeKeysÚextKeysÚ eventNamesÚ eventNamer}Úbindingrrr r{×s   zIdleConf.GetExtensionKeyscCsh|d}i}|jd |¡rd|jd |¡}x6|D].}|jd||dd ¡}d|d}|||<q2W|S)Nrvr<rC)rz<>)r>rrrYÚsplit)rr€rr‚rƒr„r…r}rrr Z__GetRawExtensionKeysés   zIdleConf.__GetRawExtensionKeyscCsn|d}| |¡}|jd |¡rj|jd |¡}x6|D].}|jd||dd ¡}d|d}|||<q8W|S)Nrur<rC)rz<>)r{r>rrrYr†)rr€Z bindsNameZextBindsrƒr„r…r}rrr ÚGetExtensionBindingsûs    zIdleConf.GetExtensionBindingscCs(|dd…}|jd||ddd ¡}|S)Nééþÿÿÿr;rCF)rrW)rYr†)rÚ keySetNameZeventStrr„r…rrr Ú GetKeyBindings   zIdleConf.GetKeyBindingcCsP| | ¡¡}tjdkrLx2| ¡D]&\}}dd„|Dƒ}||kr"|||<q"W|S)NrmcSsg|]}| dd¡‘qS)z.)Ú GetKeySetrgrNrnÚitems)rÚresultÚkÚvZv2rrr rs  zIdleConf.GetCurrentKeySetcCsh| |¡}|jdd}xL|D]D}| |¡}|rx0|D](}||| ¡krPd||<||||<q4WqW|S)Né)rqrC)Ú GetCoreKeysrtÚ_IdleConf__GetRawExtensionKeysÚvalues)rrŠZkeySetrsrrr‚r}rrr rŽ+s     zIdleConf.GetKeySetcCsd|d| ¡kS)Nz<>)r”)rr|rrr Ú IsCoreBinding=szIdleConf.IsCoreBindingz<>z<>z<>z<>z<>z<>z<>z<>z<>c;Cs˜ddgddgddgddgd gd gd gdgd gd gdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgdgd gd!d"gd#gd$gd%gd&gd'gd(gd)d*gd+gd,gd-gd.gd/gd0gd1gd2gd3gd4gd5gd6gd7gd8gd9gd:gd;gdgd?œ:}|r”|jd@ |¡s<|jd@ |¡sz z z z z z zz z zz zz zzzz zzz z z z z zz zz zzz z zzz z z zzz zz zzz z z z z z zzzzzzz zzz z ):z<>z<>z <>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z <>z <>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>z<>r;za Warning: config.py - IdleConf.GetCoreKeys - key set %r is not defined, using default bindings.z‰ Warning: config.py - IdleConf.GetCoreKeys - problem retrieving key binding for event %r from key set %r. returning default value: %r)r?rr>rUr‹Úformer_extension_events)rrŠZ keyBindingsrXr}r…rrr r”Os’      zIdleConf.GetCoreKeysc CsÂg}|dkr|jd}n|dkr,|jd}ntdƒ‚| d¡}xn|D]f}|jd|dd}| d¡dkrpd }d }n"| d¡}|d  ¡}|d  ¡}|rD|rD| |||f¡qDW|j d d „d|S)NrZr9rzInvalid configSet specifiedÚ HelpFilesú;)réÿÿÿÿrCrr“cSs|dS)Nrˆr)rrrr ÚÌóz1IdleConf.GetExtraHelpSourceList..)Úkey) r?r>r rrÚfindr†ÚstriprpÚsort) rr[Z helpSourcesr\rrr%ZmenuItemZhelpPathrrr ÚGetExtraHelpSourceList¯s&        zIdleConf.GetExtraHelpSourceListcCs| d¡| d¡}|S)NrrZ)r¢)rZallHelpSourcesrrr ÚGetAllExtraHelpSourcesListÏs z#IdleConf.GetAllExtraHelpSourcesListc Cs”|j||ddd}|j||dddd}|j||dd d d }|d kr‚td d |d}t |¡}|d}|d}|d krvd}|ddk}|||rŽdndfS)NZfontZcourier)rz font-sizerZ10)rrz font-boldrr)rrZ TkFixedFontT)rhr5ÚrootÚfamilyÚsizeé ZweightÚboldr^)rYrÚactual) rr¤rVrr¥r¦r¨ÚfZ actualFontrrr ÚGetFontØs     zIdleConf.GetFontcCs0x*|jD] }|j| ¡|j| ¡qWdS)N)r>r!r?)rržrrr rBòs zIdleConf.LoadCfgFilescCs"x|jD]}|j| ¡qWdS)N)r?r7)rržrrr ÚSaveUserCfgFilesøs zIdleConf.SaveUserCfgFiles)F)NNTF)TFF)N)!rrrrrArHrYr&r]rbr_rfrgreÚ staticmethodrirtror~r{r•r‡r‹rrŽr—r˜r”r¢r£r«rBr¬rrrr r8‘sD  $ 'D&  (   `  r8cGsH|f|}|tkrDyt|tjdWntk r8YnXt |¡dS)N)r)Ú_warnedrMrNrOr0Úadd)Úmsgržrrr rUs rUc@s@eZdZdd„Zdd„Zedd„ƒZdd„Zd d „Zd d „Z d S)Ú ConfigChangescCs2g|_x&tjD]}i||<|j ||¡qWdS)N)ÚpagesÚidleConfr=rp)rÚ config_typerrr rs zConfigChanges.__init__cCs0||}t|ƒ}||kr i||<||||<dS)N)Ústr)rr´rÚitemr%Úpagerrr Ú add_option%s zConfigChanges.add_optioncCsNtj| ||¡r:tj| ||¡|kr:tj| ||¡Stj| |||¡S)N)r³r>rrr?r'r&)r´rr¶r%rrr Ú save_option-szConfigChanges.save_optionc CsÂtjd ¡d}x†|D]~}d}||}xV|D]N}|dkrNtjd d¡d}x,|| ¡D]\}}| ||||¡r\d}q\Wq.W|rtj| ¡d}qWxdD]}tj| ¡q W| ¡|S)Nr9Fr™T)r;r:)r³r?r7r*rr¹Úclear)rZchangedr´Zcfg_type_changedr·rr¶r%rrr Úsave_all:s&    zConfigChanges.save_allcCs6|||kr|||=tj|}| |¡| ¡dS)N)r³r?r*r7)rr´rZ configpagerrr Údelete_sectionXs     zConfigChanges.delete_sectioncCsx|jD] }| ¡qWdS)N)r²rº)rr·rrr rºcs zConfigChanges.clearN) rrrrr¸r­r¹r»r¼rºrrrr r± s   r±csVddlm‰d\}}‡fdd„‰‡fdd„}|tjƒ|tjƒtd|d |d d dS) Nr)Úcrc32)rrcs.t|ƒ}td7aˆ|jddtƒat|ƒdS)Nr“zutf-8)Úencoding)rµÚlineÚencodeÚcrcrM)ÚobjZtxt)r½rr Úsprintrsz_dump..sprintc s˜td|dƒx†t| ¡ƒD]v}|| ¡}ˆ|ƒˆ|ƒxT|D]L}|| |¡}ˆ|ƒˆ|ƒx(|D] }ˆ|d|| ||¡ƒqhWq@WqWdS)NÚ z = )rMÚsortedr;r)rr)r@ržr)rrr)rÃrr ÚdumpCfgzs    z_dump..dumpCfgz lines = z, crc = rC)Úsep)Úzlibr½r³r>r?rM)r¿rÁrÆr)r½rÃr Ú_dumpns    rÉÚ__main__)r9zidlelib.idle_test.test_configrˆF)Ú verbosityÚexit)Z configparserrr1rNZ tkinter.fontrrFÚ Exceptionrr r r r"r8r³r#r®rUÚdictr±rÉrZunittestr9rrrr Ús,  (Bq c