a  ze@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 B/opt/bitninja-python-dojo/embedded/lib/python3.9/idlelib/config.pyr#rc@s eZdZdS)InvalidConfigSetNrr r r r r $r r c@s eZdZdS) InvalidThemeNrr r r r r %r r 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  rc@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 )r1r/r&r r r IsEmptyyszIdleUserConfParser.IsEmptycCs|j}|r|ddkr|szt|d}Wn&tyRt|t|d}Yn0|||Wdq1sx0Yntj|jrt |jdS)Nr#w) rr2openOSErrorosunlinkwritepathexistsremove)rZfnamerr r r Save~s  *zIdleUserConfParser.SaveN) rrrr,r-r.r1r2r=r r r r r(Os  r(c@seZdZd=ddZddZddZd>d d Zd d ZddZddZ ddZ ddZ ddZ ddZ eddZd?ddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zhd0Zd@d1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z dS)AIdleConfFcCs0d|_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.defr3z.cfg)r7r:dirname__file__idlelibtesting GetUserCfgDiruserdirrCrjoinrDr(rE)rZidledirrOZcfg_typer r r rGs   zIdleConf.CreateConfigHandlersc Csd}tjd}|dkr`tj|s`tjs\d|d}zt|tjdWnt yZYn0d}|dkrpt }tj ||}tj|szt |WnNt ytjsd|d}zt|tjdWnt yYn0t Yn0|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! )r7r: expanduserr;rLrMprintsysstderrr6getcwdrPmkdir SystemExit)rZcfgDirZuserDirwarnr r r rNsD       zIdleConf.GetUserCfgDirNTc Csz0|j|||r.|j|j||||dWSWnBtyrd||||j|j|||df}t||||Yn0z0|j|||r|j|j||||dWSWntyYn0|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)rErr ValueError_warnrD) r configTyperrrrwarn_on_defaultrwarningr r r GetOptions2      zIdleConf.GetOptioncCs|j||||dSr )rEr,)rr]rrr+r r r r,szIdleConf.SetOptioncCsJ||jvrtd|dkr&|j|}n|dkr:|j|}ntd|S)NzInvalid configType specifieduserrInvalid configSet specified)rCrrErDr 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)Nrmr@rAr?rrTrrrIZname2rknamez IDLE Classic)r`rDrEr! default_keys)rrZcfgnamerrssourcer r r roms z IdleConf.current_colors_and_keyscCs,tjdddkrdStjdkr$dSdSdS)NwinzIDLE Classic WindowsdarwinzIDLE Classic OSXzIDLE Modern Unix)rUplatformr r r r rts  zIdleConf.default_keysc Cs||dd}||dd}|D]}||vr(||q(dD]}||qD|rg}|D]Z}|jd|ddddr`|s|r|rd }nd }|jd||ddd d r||q`||q`|S|SdS) NrrBra)Z AutoCompleteZ CodeContextZFormatParagraphZ ParenMatchenableTrrrZ enable_editorZ enable_shellF)rrr^)RemoveKeyBindNamesreappendr<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 r z/IdleConf.RemoveKeyBindNames..r )rZ extnNameListr r r r|szIdleConf.RemoveKeyBindNamescCsBd}d|d}|jddD] }||D]}||kr*|}q*q|S)N<<>>rr~)rGetExtensionKeys)r virtualEventZextNameZvEventreventr r r GetExtnNameForEvents zIdleConf.GetExtnNameForEventc Cs^|d}|}i}|jd|rZ|jd|}|D] }d|d}||}|||<q8|S)NrrBrr)GetCurrentKeySetrDr!r$) r extensionNamekeysNameZ activeKeysextKeys eventNames eventNamerbindingr r r rs  zIdleConf.GetExtensionKeyscCsd|d}i}|jd|r`|jd|}|D].}|jd||dd}d|d}|||<q0|S)NrrBrIrkrr)rDr!r$r`split)rrrrrrrrr r r Z__GetRawExtensionKeyss   zIdleConf.__GetRawExtensionKeyscCsj|d}||}|jd|rf|jd|}|D].}|jd||dd}d|d}|||<q6|S)NrrBrIrkrr)rrDr!r$r`r)rrZ bindsNameZextBindsrrrrr r r GetExtensionBindingss    zIdleConf.GetExtensionBindingscCs(|dd}|jd||ddd}|S)NrArIF)rr^)r`r)r keySetNameZeventStrrrr r r GetKeyBindings    zIdleConf.GetKeyBindingcCsL||}tjdkrH|D]&\}}dd|D}||kr |||<q |S)NrxcSsg|]}|ddqS)z.) GetKeySetrqrUryitems)rresultkvZv2r r r rs  zIdleConf.GetCurrentKeySetcCs`||}|jdd}|D]@}||}|r|D](}|||vrLd||<||||<q0q|S)NrrI) GetCoreKeysr_IdleConf__GetRawExtensionKeysvalues)rrZkeySetrrrrr r r r+s   zIdleConf.GetKeySetcCsd|d|vS)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<>rrrrrrrrrrAza 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)rEr!rDr\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)Nrar?rrb HelpFiles;rkrIrrcSs|dS)Nrr )rr r r r z1IdleConf.GetExtraHelpSourceList..)key) rErDr r$rfindrstripr}sort) rrcZ helpSourcesrdr"rr+ZmenuItemZhelpPathr r r GetExtraHelpSourceLists&       zIdleConf.GetExtraHelpSourceListcCs|d|d}|S)Nrra)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)NZfontZcourierrkz font-sizerZ10rrz font-boldrrr{Z TkFixedFontT)rsr;rootfamilysize Zweightboldrf)r`ractual) rrr]rrrrfZ actualFontr r r GetFonts     zIdleConf.GetFontcCs,|jD] }|j||j|qdSr )rDr'rErrr r r rHs zIdleConf.LoadCfgFilescCs|jD]}|j|qdSr )rEr=rr r r SaveUserCfgFiless zIdleConf.SaveUserCfgFiles)F)NNTF)TFF)N)!rrrrrGrNr`r,rerjrgrprqro staticmethodrtrr|rrrrrrrrrrrrrrHrr r r r r>sD  $ (D&  )   `  r>cGsF|f|}|tvrBzt|tjdWnty6Yn0t|dS)NrR)_warnedrTrUrVr6add)msgrr r r r\s  r\c@s@eZdZddZddZeddZddZd d Zd d Z d S) ConfigChangescCs.g|_tjD]}i||<|j||q dSr )pagesidleConfrCr})r config_typer r r rs zConfigChanges.__init__cCs0||}t|}||vr i||<||||<dSr )str)rrritemr+pager r r add_option%s zConfigChanges.add_optioncCsNtj|||r:tj||||kr:tj|||Stj||||Sr )rrDrrrEr-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)rAr@)rrEr=r0rrclear)rchangedrZcfg_type_changedrrrr+r r r save_all:s&zConfigChanges.save_allcCs6|||vr|||=tj|}|||dSr )rrEr0r=)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)rlineencodecrcrT)objZtxtrr r sprintrsz_dump..sprintc std|dt|D]n}||}|||D]H}|||}|||D] }|d||||qbq.dumpCfgz lines = z, crc = rI)sep)zlibrrrDrErT)rrrr )rrr _dumpns    r__main__)r?zidlelib.idle_test.test_configrF) verbosityexit) configparserrr7rUZ tkinter.fontrrL Exceptionrr r rr(r>rr)rr\dictrrrZunittestr?r r r r s,  (Bq c