B 억ˣ!@sddlmZddlZddlZddlmZddlZGdddeZGdddeZ Gdd d eZ Gd d d eZ Gd d d e Z GdddZ e ZeZddZGdddeZddZedkrddlmZedddddS)) ConfigParserN)Fontc@s eZdZdS)InvalidConfigTypeN)__name__ __module__ __qualname__rr1/opt/alt/python37/lib/python3.7/idlelib/config.pyr#src@s eZdZdS)InvalidConfigSetN)rrrrrrr r $sr c@s eZdZdS) InvalidThemeN)rrrrrrr r %sr c@s0eZdZd ddZd ddZddZd d ZdS) IdleConfParserNcCs||_tj||dddS)NF)defaultsstrict)filer__init__)selfcfgFileZ cfgDefaultsrrr r+szIdleConfParser.__init__FcCsL|||s|S|dkr$|||S|dkr8|||S|j|||dSdS)Nboolint)raw) has_optionZ getbooleanZgetintget)rsectionoptiontypedefaultrrrr Get2s   zIdleConfParser.GetcCs||r||SgSdS)N) has_sectionoptions)rrrrr GetOptionListCs  zIdleConfParser.GetOptionListcCs|jr||jdS)N)rread)rrrr LoadJszIdleConfParser.Load)N)NNF)rrrrrrr!rrrr r 's  r c@s<eZdZddZddZddZddZd d Zd d Zd S)IdleUserConfParsercCs^|||r4||||kr dS||||dSn&||sH||||||dSdS)NFT)rrsetr add_section)rrrvaluerrr 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)sectionsrremove_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|jrt |jdS)Nr#w) rr,openOSErrorosunlinkwritepathexistsremove)rZfnamerrrr Save~s zIdleUserConfParser.SaveN) rrrr&r'r(r+r,r7rrrr 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_utestrrr rszIdleConf.__init__cCs|tjt}tjrdn||_}xR|jD]H}t tj |d|d|j |<t tj |p^dd|d|j |<q,WdS)Nzconfig-z.defr-z.cfg)r1r4dirname__file__idlelibtesting GetUserCfgDiruserdirr=r joinr>r"r?)rZidledirrIZcfg_typerrr rAs  zIdleConf.CreateConfigHandlersc Csd}tjd}|dkrbtj|sbtjs^d|d}yt|tjdWnt k r\YnXd}|dkrrt }tj ||}tj|syt |WnRt k rtjsd|d}yt|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! )r1r4 expanduserr5rFrGprintsysstderrr0getcwdrJmkdir SystemExit)rZcfgDirZuserDirwarnrrr rHs4      zIdleConf.GetUserCfgDirNTc Csy.|j|||r,|j|j||||dSWnDtk rrd||||j|j|||df}t||||YnXy.|j|||r|j|j||||dSWntk rYnX|rd|||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 configTyperrrrwarn_on_defaultrwarningrrr GetOptions(   zIdleConf.GetOptioncCs|j||||dS)N)r?r&)rrVrrr%rrr r&szIdleConf.SetOptioncCsJ||jkrtd|dkr&|j|}n|dkr:|j|}ntd|S)NzInvalid configType specifieduserrzInvalid configSet specified)r=rr?r>r r))r configSetrV cfgParserrrr GetSectionLists   zIdleConf.GetSectionListcCsR|jd|rdnd}|||}||d}|dkrr GetThemeDict)rthemeelementr@Z theme_dictZforeZbackrrr GetHighlights   zIdleConf.GetHighlightc Cs|dkr|jd}n|dkr(|jd}ntddddddddddddddddddddddddddddddddd}xZ|D]R}|||s|d sd ||||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 |dS)NTheme)current_colors_and_keys)rrrr CurrentThemeeszIdleConf.CurrentThemecCs |dS)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|dkrd S|S)Nrdr:r;r9rrT)rrrCZname2)rnamez IDLE Classic)rYr>r?r default_keys)rrZcfgnamerrhsourcerrr rems  z IdleConf.current_colors_and_keyscCs,tjdddkrdStjdkr$dSdSdS)NwinzIDLE Classic WindowsdarwinzIDLE Classic OSXzIDLE Modern Unix)rNplatformrrrr ris  zIdleConf.default_keysc Cs||dd}||dd}x|D]}||kr*||q*WxdD]}||qJW|rg}xb|D]Z}|jd|ddddrj|s|r|rd }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 userExtnsextn activeExtnsrrrr GetExtensionss2      zIdleConf.GetExtensionscCsdd|DS)NcSsg|]}|ds|qS)) _bindings _cfgBindings)endswith).0nrrr sz/IdleConf.RemoveKeyBindNames..r)rZ extnNameListrrr roszIdleConf.RemoveKeyBindNamescCsJd}d|d}x4|jddD]$}x||D]}||kr.|}q.WqW|S)Nz<>r)rq)rtGetExtensionKeys)r virtualEventZextNameZvEventrreventrrr GetExtnNameForEvents  zIdleConf.GetExtnNameForEventc Csb|d}|}i}|jd|r^|jd|}x(|D] }d|d}||}|||<q:W|S)Nrvr<z<>)GetCurrentKeySetr>rr) r extensionNamekeysNameZ activeKeysextKeys eventNames eventNamer}bindingrrr r{s   zIdleConf.GetExtensionKeyscCsh|d}i}|jd|rd|jd|}x6|D].}|jd||dd}d|d}|||<q2W|S)Nrvr<rC)rz<>)r>rrrYsplit)rrrrrrrr}rrr Z__GetRawExtensionKeyss   zIdleConf.__GetRawExtensionKeyscCsn|d}||}|jd|rj|jd|}x6|D].}|jd||dd}d|d}|||<q8W|S)Nrur<rC)rz<>)r{r>rrrYr)rrZ bindsNameZextBindsrrrr}rrr GetExtensionBindingss    zIdleConf.GetExtensionBindingscCs(|dd}|jd||ddd}|S)Nr;rCF)rrW)rYr)r keySetNameZeventStrrrrrr GetKeyBindings   zIdleConf.GetKeyBindingcCsP||}tjdkrLx2|D]&\}}dd|D}||kr"|||<q"W|S)NrmcSsg|]}|ddqS)z.) GetKeySetrgrNrnitems)rresultkvZv2rrr rs  zIdleConf.GetCurrentKeySetcCsh||}|jdd}xL|D]D}||}|rx0|D](}|||krPd||<||||<q4WqW|S)N)rqrC) GetCoreKeysrt_IdleConf__GetRawExtensionKeysvalues)rrZkeySetrsrrrr}rrr r+s     zIdleConf.GetKeySetcCsd|d|kS)Nz<>)r)rr|rrr IsCoreBinding=szIdleConf.IsCoreBindingz<>z<>z<>z<>z<>z<>z<>z<>z<>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<>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>rUrformer_extension_events)rrZ keyBindingsrXr}rrrr rOs      zIdleConf.GetCoreKeysc Csg}|dkr|jd}n|dkr,|jd}ntd|d}xn|D]f}|jd|dd}|ddkrpd }d }n"|d}|d }|d }|rD|rD||||fqDW|j d d d|S)NrZr9rzInvalid configSet specified HelpFiles;)rrCrrcSs|dS)Nrr)rrrr z1IdleConf.GetExtraHelpSourceList..)key) r?r>r rrfindrstriprpsort) rr[Z helpSourcesr\rrr%ZmenuItemZhelpPathrrr GetExtraHelpSourceLists&        zIdleConf.GetExtraHelpSourceListcCs|d|d}|S)NrrZ)r)rZallHelpSourcesrrr GetAllExtraHelpSourcesLists z#IdleConf.GetAllExtraHelpSourcesListc Cs|j||ddd}|j||dddd}|j||dd d d }|d krtd d |d}t|}|d}|d}|d krvd}|ddk}|||rdndfS)NZfontZcourier)rz font-sizerZ10)rrz font-boldrr)rrZ TkFixedFontT)rhr5rootfamilysize Zweightboldr^)rYractual) rrrVrrrrfZ actualFontrrr GetFonts     zIdleConf.GetFontcCs0x*|jD] }|j||j|qWdS)N)r>r!r?)rrrrr rBs zIdleConf.LoadCfgFilescCs"x|jD]}|j|qWdS)N)r?r7)rrrrr SaveUserCfgFiless zIdleConf.SaveUserCfgFiles)F)NNTF)TFF)N)!rrrrrArHrYr&r]rbr_rfrgre staticmethodrirtror~r{rrrrrrrrrrrrBrrrrr r8sD  $ 'D&  (   `  r8cGsH|f|}|tkrDyt|tjdWntk r8YnXt|dS)N)r)_warnedrMrNrOr0add)msgrrrr rUs rUc@s@eZdZddZddZeddZddZd d Zd d Z d S) ConfigChangescCs2g|_x&tjD]}i||<|j||qWdS)N)pagesidleConfr=rp)r config_typerrr rs zConfigChanges.__init__cCs0||}t|}||kr i||<||||<dS)N)str)rrritemr%pagerrr add_option%s zConfigChanges.add_optioncCsNtj|||r:tj||||kr:tj|||Stj||||S)N)rr>rrr?r'r&)rrrr%rrr save_option-szConfigChanges.save_optionc Cstjdd}x|D]~}d}||}xV|D]N}|dkrNtjddd}x,||D]\}}|||||r\d}q\Wq.W|rtj|d}qWxdD]}tj|qW||S)Nr9FrT)r;r:)rr?r7r*rrclear)rZchangedrZcfg_type_changedrrrr%rrr save_all:s&    zConfigChanges.save_allcCs6|||kr|||=tj|}|||dS)N)rr?r*r7)rrrZ configpagerrr delete_sectionXs     zConfigChanges.delete_sectioncCsx|jD] }|qWdS)N)rr)rrrrr rcs zConfigChanges.clearN) rrrrrrrrrrrrrr r s   rcsVddlmd\}}fddfdd}|tj|tjtd|d |d d dS) Nr)crc32)rrcs.t|}td7a|jddtat|dS)Nrzutf-8)encoding)rlineencodecrcrM)objZtxt)rrr sprintrsz_dump..sprintc std|dxt|D]v}||}||xT|D]L}|||}||x(|D] }|d||||qhWq@WqWdS)N z = )rMsortedr;r)rr)r@rr)rrr)rrr dumpCfgzs    z_dump..dumpCfgz lines = z, crc = rC)sep)zlibrrr>r?rM)rrrr)rrr _dumpns    r__main__)r9zidlelib.idle_test.test_configrF) verbosityexit)Z configparserrr1rNZ tkinter.fontrrF Exceptionrr r r r"r8rr#rrUdictrrrZunittestr9rrrr s,  (Bq c