B YI~d��@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�ddlmZedddd�dS)�)� 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||dd�dS)NF)�defaults�strict)�filer�__init__)�self�cfgFileZ cfgDefaultsrrr r+szIdleConfParser.__init__FcCsL|�||�s|S|dkr$|�||�S|dkr8|�||�S|j|||d�SdS)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|tjd�Wnt k r\YnXd}|dkrrt� �}tj� ||�}tj�|�s�yt� |�WnRt k r�tjs�d|d}yt|tjd�Wnt 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||||d�SWnDtk rrd||||j|j|||d�f}t||||�YnXy.|j|�||�r�|j|j||||d�SWntk 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|dddd�rj|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|jdd�D]$}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�r�r�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)r�rrr ���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|tjd�Wntk 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*r�r��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�|jdd�t�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