
W}                 @   sA  d  d l  Z  d  d l Z d  d l m Z d  d l m Z d  d l m Z m Z Gd d   d e	  Z
 Gd d   d e	  Z Gd	 d
   d
 e	  Z Gd d   d e	  Z Gd d   d e  Z Gd d   d e  Z Gd d   d  Z e   Z e d k r=d d   Z e e j  e e j  e e j d j d d   d S)    N)ConfigParser)	TkVersion)Font
nametofontc               @   s   e  Z d  Z d S)InvalidConfigTypeN)__name__
__module____qualname__ r
   r
   B/afs/.cs/s/python-3.5.2/amd64_ubu14/lib/python3.5/configHandler.pyr      s    r   c               @   s   e  Z d  Z d S)InvalidConfigSetN)r   r   r	   r
   r
   r
   r   r      s    r   c               @   s   e  Z d  Z d S)InvalidFgBgN)r   r   r	   r
   r
   r
   r   r      s    r   c               @   s   e  Z d  Z d S)InvalidThemeN)r   r   r	   r
   r
   r
   r   r      s    r   c               @   sL   e  Z d  Z d d d  Z d d d d d  Z d d   Z d	 d
   Z d S)IdleConfParserNc             C   s&   | |  _  t j |  d | d d d  S)NdefaultsstrictF)filer   __init__)selfcfgFileZcfgDefaultsr
   r
   r   r   %   s    	zIdleConfParser.__init__Fc             C   sh   |  j  | |  s | S| d k r2 |  j | |  S| d k rN |  j | |  S|  j | | d | Sd  S)Nboolintraw)
has_optionZ
getbooleanZgetintget)r   sectionoptiontypedefaultr   r
   r
   r   Get,   s    zIdleConfParser.Getc             C   s$   |  j  |  r |  j |  Sg  Sd  S)N)has_sectionoptions)r   r   r
   r
   r   GetOptionList=   s    zIdleConfParser.GetOptionListc             C   s   |  j  |  j  d  S)N)readr   )r   r
   r
   r   LoadD   s    zIdleConfParser.Load)r   r   r	   r   r   r"   r$   r
   r
   r
   r   r   !   s   r   c               @   sd   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d S)IdleUserConfParserc             C   s    |  j  |  s |  j |  d  S)N)r    add_section)r   r   r
   r
   r   
AddSectionM   s    zIdleUserConfParser.AddSectionc             C   s7   x0 |  j    D]" } |  j |  s |  j |  q Wd  S)N)sectionsr"   Zremove_section)r   r   r
   r
   r   RemoveEmptySectionsR   s    z&IdleUserConfParser.RemoveEmptySectionsc             C   s   |  j    |  j   S)N)r)   r(   )r   r
   r
   r   IsEmptyX   s    
zIdleUserConfParser.IsEmptyc             C   s#   |  j  |  r |  j | |  Sd S)NF)r    Zremove_option)r   r   r   r
   r
   r   RemoveOption]   s    zIdleUserConfParser.RemoveOptionc             C   s   |  j  | |  rH |  j | |  | k r. d S|  j | | |  d Sn3 |  j |  sd |  j |  |  j | | |  d Sd  S)NFT)r   r   setr    r&   )r   r   r   valuer
   r
   r   	SetOptionf   s    zIdleUserConfParser.SetOptionc             C   s)   t  j j |  j  r% t  j |  j  d  S)N)ospathexistsr   remove)r   r
   r
   r   
RemoveFilew   s    zIdleUserConfParser.RemoveFilec             C   s   |  j    sw |  j } y t | d  } Wn. t k
 rX t j |  t | d  } Yn X|  |  j |  Wd  QRXn
 |  j   d  S)Nw)r*   r   openOSErrorr/   unlinkwriter3   )r   Zfnamer   r
   r
   r   Save|   s    	zIdleUserConfParser.SaveN)
r   r   r	   r'   r)   r*   r+   r.   r3   r9   r
   r
   r
   r   r%   H   s   	r%   c               @   sc  e  Z d  Z d d   Z d d   Z d d   Z d d d d	 d
 d  Z d d   Z d d   Z d d d  Z	 d d   Z
 d d   Z d d   Z d d	 d	 d d  Z d d   Z d d   Z d d   Z d  d!   Z d" d#   Z d$ d%   Z d& d'   Z d( d)   Z d* d+   Z d d, d-  Z d. d/   Z d0 d1   Z d2 d3   Z d4 d5   Z d6 d7   Z d S)8IdleConfc             C   s<   d |  _  i  |  _ i  |  _ i  |  _ |  j   |  j   d  S)Nmain
extensions	highlightkeys)zmainz
extensionsz	highlightzkeys)config_types
defaultCfguserCfgcfgCreateConfigHandlersLoadCfgFiles)r   r
   r
   r   r      s    				
zIdleConf.__init__c             C   s   t  d k r! t j j t  } n t j j t j d  } |  j   } i  } i  } xS |  j D]H } t j j	 | d | d  | | <t j j	 | d | d  | | <q\ Wx? |  j D]4 } t
 | |  |  j | <t | |  |  j | <q Wd  S)N__main__r   zconfig-z.defz.cfg)r   r/   r0   dirname__file__abspathsysGetUserCfgDirr?   joinr   r@   r%   rA   )r   ZidleDiruserDirZdefCfgFilesZusrCfgFilesZcfgTyper
   r
   r   rC      s    		zIdleConf.CreateConfigHandlersc             C   s  d } t  j j d  } | d k rv t  j j |  sv d | d } y t | d t j Wn t k
 ro Yn Xd } | d k r t  j   } t  j j	 | |  } t  j j |  sy t  j
 |  Wn9 t k
 rd | d } t | d t j t  Yn X| S)Nz.idlerc~z.
 Warning: os.path.expanduser("~") points to
 z,
 but the path does not exist.r   z2
 Warning: unable to create user config directory
z(
 Check path and permissions.
 Exiting!
)r/   r0   
expanduserr1   printrI   stderrr6   getcwdrK   mkdir
SystemExit)r   ZcfgDirrL   warnr
   r
   r   rJ      s*    zIdleConf.GetUserCfgDirNTFc       	   !   C   sN  y@ |  j  | j | |  r? |  j  | j | | d | d | SWnm t k
 r d | | | |  j  | j | | d | f } y t | d t j Wn t k
 r Yn XYn Xy@ |  j | j | |  r |  j | j | | d | d | SWn t k
 rYn X| rJd | | | f } y t | d t j Wn t k
 rIYn X| S)Nr   r   zu
 Warning: configHandler.py - IdleConf.GetOption -
 invalid %r value for configuration option %r
 from section %r: %rr   z
 Warning: configHandler.py - IdleConf.GetOption -
 problem retrieving configuration option %r
 from section %r.
 returning default value: %r)	rA   r   r   
ValueErrorrO   rI   rP   r6   r@   )	r   
configTyper   r   r   r   warn_on_defaultr   warningr
   r
   r   	GetOption   s4    	#
zIdleConf.GetOptionc             C   s   |  j  | j | | |  d  S)N)rA   r.   )r   rV   r   r   r-   r
   r
   r   r.     s    zIdleConf.SetOptionc             C   si   | |  j  k r t d   | d k r7 |  j | } n( | d k rS |  j | } n t d   | j   S)NzInvalid configType specifieduserr   zInvalid configSet specified)r?   r   rA   r@   r   r(   )r   	configSetrV   	cfgParserr
   r
   r   GetSectionList	  s    zIdleConf.GetSectionListc             C   s   |  j  d j |  r+ |  j d |  } n |  j d |  } | | d } | d k rd | d } n | | d } d | d	 | i } | s | S| d
 k r | d S| d k r | d	 St d   d  S)Nr=   r   rZ   z-foregroundZcursorznormal-backgroundz-backgroundZ
foregroundZ
backgroundZfgbgzInvalid fgBg specified)r@   r    GetThemeDictr   )r   themeelementZfgBgZ	themeDictZforeZbackr=   r
   r
   r   GetHighlight  s    	zIdleConf.GetHighlightc          6   C   sv  | d k r |  j  d } n( | d k r8 |  j d } n t d   d d d d d	 d d
 d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d  d d! d d" d i } x | D]{ } | j | |  sNd# | | | | f } y t | d$ t j Wn t k
 rMYn X| j | | d | | | | <q W| S)%NrZ   r=   r   zInvalid theme type specifiedznormal-foregroundz#000000znormal-backgroundz#ffffffzkeyword-foregroundzkeyword-backgroundzbuiltin-foregroundzbuiltin-backgroundzcomment-foregroundzcomment-backgroundzstring-foregroundzstring-backgroundzdefinition-foregroundzdefinition-backgroundzhilite-foregroundzhilite-backgroundZgrayzbreak-foregroundzbreak-backgroundzhit-foregroundzhit-backgroundzerror-foregroundzerror-backgroundzcursor-foregroundzstdout-foregroundzstdout-backgroundzstderr-foregroundzstderr-backgroundzconsole-foregroundzconsole-backgroundz
 Warning: configHandler.IdleConf.GetThemeDict -
 problem retrieving theme element %r
 from theme %r.
 returning default color: %rr   )	rA   r@   r   r   rO   rI   rP   r6   r   )r   r   Z	themeNamer\   r`   ra   rX   r
   r
   r   r_   6  sV    zIdleConf.GetThemeDictc             C   s   |  j  d d d d d d d } | rB |  j  d d d d d } | rO | sV | rq |  j  d d d	 d d } | r |  j n |  j } | d
 j |  r | Sd Sd  S)Nr;   Themer   r   r   TZname2 namer=   zIDLE Classic)rY   r@   rA   r    )r   r   r`   sourcer
   r
   r   CurrentThemev  s    zIdleConf.CurrentThemec             C   s   |  j  d d d d d S)Nr;   ZKeysre   r   rd   )rY   )r   r
   r
   r   CurrentKeys  s    zIdleConf.CurrentKeysc       	      C   s  |  j  |  j d d   } |  j  |  j d d   } x' | D] } | | k r= | j |  q= W| rg  } x | D] } |  j d | d d d d d rs | s | r | r d } n d	 } |  j d | | d d d d d
 d r | j |  qs | j |  qs W| S| Sd  S)Nr   r<   rZ   enableTr   r   Zenable_editorZenable_shellrW   F)RemoveKeyBindNamesr]   appendrY   )	r   active_onlyZeditor_onlyZ
shell_onlyZextnsZ	userExtnsextnactiveExtnsr   r
   r
   r   GetExtensions  s.    			zIdleConf.GetExtensionsc             C   sn   | } g  } x3 | D]+ } | j  d  r | j | j |   q W| j d d  x | D] } | | =qY W| S)N	_bindings_cfgBindingsreverseT)rp   rq   )endswithrk   indexsort)r   ZextnNameListnamesZkbNameIndiciesre   rt   r
   r
   r   rj     s    zIdleConf.RemoveKeyBindNamesc             C   sa   d  } d | d } xF |  j  d d  D]2 } x) |  j |  D] } | | k r= | } q= Wq' W| S)Nz<<z>>rl   r   )ro   GetExtensionKeys)r   virtualEventZextNameZvEventrm   eventr
   r
   r   GetExtnNameForEvent  s    zIdleConf.GetExtnNameForEventc       	      C   s   | d } |  j    } i  } |  j d j |  r{ |  j d j |  } x0 | D]( } d | d } | | } | | | <qO W| S)Nrq   r<   z<<z>>)GetCurrentKeySetr@   r    r"   )	r   extensionNamekeysNameZ
activeKeysextKeys
eventNames	eventNamery   bindingr
   r
   r   rw     s    

zIdleConf.GetExtensionKeysc             C   s   | d } i  } |  j  d j |  r |  j  d j |  } xG | D]? } |  j d | | d d j   } d | d } | | | <qC W| S)Nrq   r<   r   rd   z<<z>>)r@   r    r"   rY   split)r   r|   r}   r~   r   r   r   ry   r
   r
   r   Z__GetRawExtensionKeys  s    
zIdleConf.__GetRawExtensionKeysc             C   s   | d } |  j  |  } |  j d j |  r |  j d j |  } xG | D]? } |  j d | | d d j   } d | d } | | | <qL W| S)Nrp   r<   r   rd   z<<z>>)rw   r@   r    r"   rY   r   )r   r|   Z	bindsNameZextBindsr   r   r   ry   r
   r
   r   GetExtensionBindings  s    
zIdleConf.GetExtensionBindingsc             C   s5   | d d  } |  j  d | | d d j   } | S)N   r>   r   rd   )rY   r   )r   
keySetNameZeventStrr   r   r
   r
   r   GetKeyBinding  s    !zIdleConf.GetKeyBindingc             C   sn   |  j  |  j    } t j d k rj xC | j   D]5 \ } } d d   | D } | | k r1 | | | <q1 W| S)Ndarwinc             S   s"   g  |  ] } | j  d  d   q S)z<Alt-z<Option-)replace).0xr
   r
   r   
<listcomp>"  s   	 z-IdleConf.GetCurrentKeySet.<locals>.<listcomp>)	GetKeySetrh   rI   platformitems)r   resultkvZv2r
   r
   r   r{     s    zIdleConf.GetCurrentKeySetc             C   s   |  j  |  } |  j d d  } xb | D]Z } |  j |  } | r( x< | D]4 } | | | j   k rp d | | <| | | | <qJ Wq( W| S)Nrl      rd   )GetCoreKeysro   _IdleConf__GetRawExtensionKeysvalues)r   r   ZkeySetrn   rm   r~   ry   r
   r
   r   r   (  s    
zIdleConf.GetKeySetc             C   s   d | d |  j    k S)Nz<<z>>)r   )r   rx   r
   r
   r   IsCoreBinding:  s    zIdleConf.IsCoreBindingc          b   C   sT  d d d g d d d g d d d	 g d
 d d g d d g d d g d d g d d g d d g d d g d d g d d g d d g d d g d d  g d! d" g d# d$ g d% d& g d' d( g d) d* g d+ d, g d- d. g d/ d0 g d1 d2 g d3 d4 g d5 d6 g d7 d8 g d9 d: g d; d< g d= d> g d? d@ dA g dB dC g dD dE g dF dG g dH dI g dJ dK g dL dM g dN dO dP g dQ dR g dS dT g dU dV g dW dX g dY dZ g d[ d\ g d] d^ g d_ d` g da db g dc dd g de df g i1 } | rPxv | D]n } |  j  | |  } | r	| | | <qdg | | | | f } y t | dh t j Wqt k
 rKYqXqW| S)iNz<<copy>>z<Control-c>z<Control-C>z<<cut>>z<Control-x>z<Control-X>z	<<paste>>z<Control-v>z<Control-V>z<<beginning-of-line>>z<Control-a>z<Home>z<<center-insert>>z<Control-l>z<<close-all-windows>>z<Control-q>z<<close-window>>z<Alt-F4>z<<do-nothing>>z<<end-of-file>>z<Control-d>z<<python-docs>>z<F1>z<<python-context-help>>z
<Shift-F1>z<<history-next>>z<Alt-n>z<<history-previous>>z<Alt-p>z<<interrupt-execution>>z<<view-restart>>z<F6>z<<restart-shell>>z<Control-F6>z<<open-class-browser>>z<Alt-c>z<<open-module>>z<Alt-m>z<<open-new-window>>z<Control-n>z<<open-window-from-file>>z<Control-o>z<<plain-newline-and-indent>>z<Control-j>z<<print-window>>z<Control-p>z<<redo>>z<Control-y>z<<remove-selection>>z<Escape>z<<save-copy-of-window-as-file>>z<Alt-Shift-S>z<<save-window-as-file>>z<Alt-s>z<<save-window>>z<Control-s>z<<select-all>>z<Alt-a>z<<toggle-auto-coloring>>z<Control-slash>z<<undo>>z<Control-z>z<<find-again>>z<Control-g>z<F3>z<<find-in-files>>z<Alt-F3>z<<find-selection>>z<Control-F3>z<<find>>z<Control-f>z<<replace>>z<Control-h>z<<goto-line>>z<Alt-g>z<<smart-backspace>>z<Key-BackSpace>z<<newline-and-indent>>z<Key-Return>z<Key-KP_Enter>z<<smart-indent>>z	<Key-Tab>z<<indent-region>>z<Control-Key-bracketright>z<<dedent-region>>z<Control-Key-bracketleft>z<<comment-region>>z<Alt-Key-3>z<<uncomment-region>>z<Alt-Key-4>z<<tabify-region>>z<Alt-Key-5>z<<untabify-region>>z<Alt-Key-6>z<<toggle-tabs>>z<Alt-Key-t>z<<change-indentwidth>>z<Alt-Key-u>z<<del-word-left>>z<Control-Key-BackSpace>z<<del-word-right>>z<Control-Key-Delete>z
 Warning: configHandler.py - IdleConf.GetCoreKeys -
 problem retrieving key binding for event %r
 from key set %r.
 returning default value: %rr   )r   rO   rI   rP   r6   )r   r   ZkeyBindingsry   r   rX   r
   r
   r   r   E  sz    
																																											zIdleConf.GetCoreKeysc       	      C   s  g  } | d k r" |  j  d } n( | d k r> |  j d } n t d   | j d  } x | D] } | j d | d d } | j d  d k r d } d } n/ | j d  } | d	 j   } | d j   } | r` | r` | j | | | f  q` W| j	 d
 d d    | S)NrZ   r;   r   zInvalid configSet specifiedZ	HelpFiles;r   rd   r   keyc             S   s   |  d S)Nr   r
   )r   r
   r
   r   <lambda>  s    z1IdleConf.GetExtraHelpSourceList.<locals>.<lambda>)
rA   r@   r   r"   r   findr   striprk   ru   )	r   r[   ZhelpSourcesr\   r!   r   r-   ZmenuItemZhelpPathr
   r
   r   GetExtraHelpSourceList  s&    
	zIdleConf.GetExtraHelpSourceListc             C   s    |  j  d  |  j  d  } | S)Nr   rZ   )r   )r   ZallHelpSourcesr
   r
   r   GetAllExtraHelpSourcesList  s    z#IdleConf.GetAllExtraHelpSourcesListc       	      C   s   |  j  | | d d d } |  j  | | d d d d d } |  j  | | d d d	 d d
 } | d k r t d k  r~ d } n` t d d d d d |  } t j |  } | d } | d } | d	 k r d } | d d k } | | | r d n d f S)NZfontr   Zcourierz	font-sizer   r   Z10z	font-boldr   r   ZTkFixedFontg      !@ZCourierre   r1   Trootfamilysize
   ZweightboldZnormal)rY   r   r   actual)	r   r   rV   r   r   r   r   fZ
actualFontr
   r
   r   GetFont  s     			

zIdleConf.GetFontc             C   s:   x3 |  j  D]( } |  j  | j   |  j | j   q
 Wd  S)N)r@   r$   rA   )r   r   r
   r
   r   rD     s    zIdleConf.LoadCfgFilesc             C   s)   x" |  j  D] } |  j  | j   q
 Wd  S)N)rA   r9   )r   r   r
   r
   r   SaveUserCfgFiles  s    zIdleConf.SaveUserCfgFiles)r   r   r	   r   rC   rJ   rY   r.   r]   rb   r_   rg   rh   ro   rj   rz   rw   r   r   r   r{   r   r   r   r   r   r   rD   r   r
   r
   r
   r   r:      s6   	-@#
M 	r:   rE   c          	   C   s   t  d |  d  x |  D] } |  | j   } t  |  t  |  xf | D]^ } |  | j |  } t  |  t  |  x. | D]& } t  | d |  | j | |   q| WqH Wq Wd  S)N
=)rO   r(   r!   r   )rB   r   r(   r   r!   r   r
   r
   r   dumpCfg  s    



r   r;   rc   re   )r/   rI   configparserr   tkinterr   Ztkinter.fontr   r   	Exceptionr   r   r   r   r   r%   r:   ZidleConfr   r   r@   rA   rO   r   r
   r
   r
   r   <module>   s&   'G  W	