U :e@sddlmZddlZddlZddlmZddlZGdddeZGdddeZ Gdd d eZ Gd d d eZ Gd d d e Z GdddZ e ZeZddZGdddeZddZedkrddlmZedddddS)) ConfigParserN)Fontc@s eZdZdS)InvalidConfigTypeN__name__ __module__ __qualname__r r 3/usr/local/python38/lib/python3.8/idlelib/config.pyr#src@s eZdZdS)InvalidConfigSetNrr r r r r $sr c@s eZdZdS) InvalidThemeNrr r r r r %sr c@s0eZdZd ddZd ddZddZd d ZdS) IdleConfParserNcCs||_tj||dddS)NF)defaultsstrict)filer__init__)selfcfgFileZ cfgDefaultsr r r r+szIdleConfParser.__init__FcCsL|||s|S|dkr$|||S|dkr8|||S|j|||dSdS)Nboolintraw) has_optionZ getbooleanZgetintget)rsectionoptiontypedefaultrr r r Get2s   zIdleConfParser.GetcCs||r||SgSdSN) has_sectionoptionsrrr r r GetOptionListCs  zIdleConfParser.GetOptionListcCs|jr||jdSr)rreadrr r r LoadJszIdleConfParser.Load)N)NNF)rrrrrr#r&r r r r r 's  r c@s<eZdZddZddZddZddZd d Zd d Zd S)IdleUserConfParsercCs^|||r4||||kr dS||||dSn&||sH||||||dSdS)NFT)rrsetr add_section)rrrvaluer r r SetOptionTs   zIdleUserConfParser.SetOptioncCs||r|||SdS)NF)r Z remove_option)rrrr r r RemoveOptiones  zIdleUserConfParser.RemoveOptioncCs||s||dSr)r r)r"r r r AddSectionns zIdleUserConfParser.AddSectioncCs&|D]}||s||qdSr)sectionsr#remove_sectionr"r r r RemoveEmptySectionsss  z&IdleUserConfParser.RemoveEmptySectionscCs|| Sr)r0r.r%r r r IsEmptyyszIdleUserConfParser.IsEmptyc Cs|j}|r|ddkr|srzt|d}Wn(tk rTt|t|d}YnX|||W5QRXntj|jrt |jdS)Nr#w) rr1openOSErrorosunlinkwritepathexistsremove)rZfnamerr r r Save~s zIdleUserConfParser.SaveN) rrrr+r,r-r0r1r<r r r r r'Os  r'c @seZdZdEddZddZddZdFd d Zd d ZddZddZ ddZ ddZ ddZ ddZ eddZdGddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1d2d3d4d5d6d7d8h ZdHd9d:Zd;d<Zd=d>Zd?d@ZdAdBZdCdDZ dS)IIdleConfFcCs0d|_i|_i|_i|_|s,||dS)N)main highlightkeys extensions) config_types defaultCfguserCfgcfgCreateConfigHandlers LoadCfgFiles)rZ_utestr r r rszIdleConf.__init__cCsxtjt}tjrdn||_}|jD]H}t tj |d|d|j |<t tj |p\dd|d|j |<q*dS)Nzconfig-z.defr2z.cfg)r6r9dirname__file__idlelibtesting GetUserCfgDiruserdirrBr joinrCr'rD)rZidledirrNZcfg_typer r r rFs   zIdleConf.CreateConfigHandlersc Csd}tjd}|dkrbtj|sbtjs^d|d}zt|tjdWnt k r\YnXd}|dkrrt }tj ||}tj|szt |WnRt k rtjsd|d}zt|tjdWnt k rYnXt 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! )r6r9 expanduserr:rKrLprintsysstderrr5getcwdrOmkdir SystemExit)rZcfgDirZuserDirwarnr r r rMsD    zIdleConf.GetUserCfgDirNTc Csz0|j|||r.|j|j||||dWSWnDtk rtd||||j|j|||df}t||||YnXz0|j|||r|j|j||||dWSWntk rYnX|rd|||f}t|||||S)N)rrzn Warning: config.py - IdleConf.GetOption - invalid %r value for configuration option %r from section %r: %rrz Warning: config.py - IdleConf.GetOption - problem retrieving configuration option %r from section %r. returning default value: %r)rDrr ValueError_warnrC) r configTyperrrrwarn_on_defaultrwarningr r r GetOptions:    zIdleConf.GetOptioncCs|j||||dSr)rDr+)rr\rrr*r r r r+szIdleConf.SetOptioncCsJ||jkrtd|dkr&|j|}n|dkr:|j|}ntd|S)NzInvalid configType specifieduserrInvalid configSet specified)rBrrDrCr r.)r configSetr\ cfgParserr r r GetSectionLists   zIdleConf.GetSectionListcCsR|jd|rdnd}|||}||d}|dkr|jd|d d d }|sT|jd|d d d }|rz|rb|jn|j}|||rz|S|dkrd S|S)Nrlr?r@r>rrTrrrHZname2rjnamez IDLE Classic)r_rCrDr default_keys)rrZcfgnamerrrsourcer r r rnms z IdleConf.current_colors_and_keyscCs,tjdddkrdStjdkr$dSdSdS)NwinzIDLE Classic WindowsdarwinzIDLE Classic OSXzIDLE Modern Unix)rTplatformr r r r rss  zIdleConf.default_keysc Cs||dd}||dd}|D]}||kr(||q(dD]}||qD|rg}|D]Z}|jd|ddddr`|s|r|rd }nd }|jd||ddd d r||q`||q`|S|SdS) NrrAr`)Z AutoCompleteZ CodeContextZFormatParagraphZ ParenMatchenableTrrrZ enable_editorZ enable_shellF)rrr])RemoveKeyBindNamesrdappendr;r_) r active_onlyZ editor_onlyZ shell_onlyZextnsZ userExtnsextn activeExtnsrr r r GetExtensionss<        zIdleConf.GetExtensionscCsdd|DS)NcSsg|]}|ds|qS)) _bindings _cfgBindings)endswith).0nr r r s z/IdleConf.RemoveKeyBindNames..r )rZ extnNameListr r r r{szIdleConf.RemoveKeyBindNamescCsBd}d|d}|jddD] }||D]}||kr*|}q*q|S)N<<>>rr})rGetExtensionKeys)r virtualEventZextNameZvEventr~eventr r r GetExtnNameForEvents zIdleConf.GetExtnNameForEventc Cs^|d}|}i}|jd|rZ|jd|}|D] }d|d}||}|||<q8|S)NrrArr)GetCurrentKeySetrCr r#) r extensionNamekeysNameZ activeKeysextKeys eventNames eventNamerbindingr r r rs  zIdleConf.GetExtensionKeyscCsd|d}i}|jd|r`|jd|}|D].}|jd||dd}d|d}|||<q0|S)NrrArHrjrr)rCr r#r_split)rrrrrrrrr r r Z__GetRawExtensionKeyss   zIdleConf.__GetRawExtensionKeyscCsj|d}||}|jd|rf|jd|}|D].}|jd||dd}d|d}|||<q6|S)NrrArHrjrr)rrCr r#r_r)rrZ bindsNameZextBindsrrrrr r r GetExtensionBindingss    zIdleConf.GetExtensionBindingscCs(|dd}|jd||ddd}|S)Nr@rHF)rr])r_r)r keySetNameZeventStrrrr r r GetKeyBindings    zIdleConf.GetKeyBindingcCsL||}tjdkrH|D]&\}}dd|D}||kr |||<q |S)NrwcSsg|]}|ddqS)z.) GetKeySetrprTrxitems)rresultkvZv2r r r rs  zIdleConf.GetCurrentKeySetcCs`||}|jdd}|D]@}||}|r|D](}|||krLd||<||||<q0q|S)NrrH) GetCoreKeysr_IdleConf__GetRawExtensionKeysvalues)rrZkeySetrr~rrr r r r+s   zIdleConf.GetKeySetcCsd|d|kS)Nrr)r)rrr r r IsCoreBinding=szIdleConf.IsCoreBinding<><><><><><><><><>c;Csddgddgddgddgd 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<>rrrrrrrrrr@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)rDr rCr[rformer_extension_events)rrZ keyBindingsr^rrr r r rOs =    zIdleConf.GetCoreKeysc Csg}|dkr|jd}n|dkr,|jd}ntd|d}|D]f}|jd|dd}|ddkrnd }d }n"|d}|d }|d }|rB|rB||||fqB|j d d d|S)Nr`r>rra HelpFiles;rjrHrrcSs|dS)Nrr )rr r r z1IdleConf.GetExtraHelpSourceList..)key) rDrCr r#rfindrstripr|sort) rrbZ helpSourcesrcr!rr*ZmenuItemZhelpPathr r r GetExtraHelpSourceLists&       zIdleConf.GetExtraHelpSourceListcCs|d|d}|S)Nrr`)r)rZallHelpSourcesr r r GetAllExtraHelpSourcesListsz#IdleConf.GetAllExtraHelpSourcesListc Cs|j||ddd}|j||dddd}|j||dd d d }|d krtd d |d}t|}|d}|d}|d krvd}|ddk}|||rdndfS)NZfontZcourierrjz font-sizerZ10rqz font-boldrrrzZ TkFixedFontT)rrr:rootfamilysize Zweightboldre)r_ractual) rrr\rrrrfZ actualFontr r r GetFonts     zIdleConf.GetFontcCs,|jD] }|j||j|qdSr)rCr&rDrrr r r rGs zIdleConf.LoadCfgFilescCs|jD]}|j|qdSr)rDr<rr r r SaveUserCfgFiless zIdleConf.SaveUserCfgFiles)F)NNTF)TFF)N)!rrrrrFrMr_r+rdrirfrorprn staticmethodrsrr{rrrrrrrrrrrrrrGrr r r r r=sZ  $ (D&  )   `  r=cGsH|f|}|tkrDzt|tjdWntk r8YnXt|dS)NrQ)_warnedrSrTrUr5add)msgrr r r r[s r[c@s@eZdZddZddZeddZddZd d Zd d Z d S) ConfigChangescCs.g|_tjD]}i||<|j||q dSr)pagesidleConfrBr|)r config_typer r r rs zConfigChanges.__init__cCs0||}t|}||kr i||<||||<dSr)str)rrritemr*pager r r add_option%s zConfigChanges.add_optioncCsNtj|||r:tj||||kr:tj|||Stj||||Sr)rrCrrrDr,r+)rrrr*r r r save_option-szConfigChanges.save_optionc Cstjdd}|D]v}d}||}|D]J}|dkrJtjddd}||D]\}}|||||rVd}qVq*|rtj|d}qdD]}tj|q||S)Nr>FrT)r@r?)rrDr<r/rrclear)rchangedrZcfg_type_changedrrrr*r r r save_all:s&zConfigChanges.save_allcCs6|||kr|||=tj|}|||dSr)rrDr/r<)rrrZ configpager r r delete_sectionXs     zConfigChanges.delete_sectioncCs|jD] }|qdSr)rr)rrr r r rcs zConfigChanges.clearN) rrrrrrrrrrr r r r r s  rcsVddlmd\}}fddfdd}|tj|tjtd|d |d d dS) Nrcrc32)rrcs.t|}td7a|jddtat|dS)Nrzutf-8)encoding)rlineencodecrcrS)objZtxtrr r sprintrsz_dump..sprintc std|dt|D]n}||}|||D]H}|||}|||D] }|d||||qbq.dumpCfgz lines = z, crc = rH)sep)zlibrrrCrDrS)rrrr )rrr _dumpns    r__main__)r>zidlelib.idle_test.test_configrF) verbosityexit) configparserrr6rTZ tkinter.fontrrK Exceptionrr r r r'r=rr(rr[dictrrrZunittestr>r r r r s,  (Bq c