3
§ fR2 ã @ sœ d Z ddlmZ ddlZddlmZ eejej d ƒZ eejd ƒZ
dd„ edƒD ƒZd d„ edƒD ƒZ
G d
d„ dƒZedkr˜dd
lmZ eddd� dS )zîProvide advanced parsing abilities for ParenMatch and other extensions.
HyperParser uses PyParser. PyParser mostly gives information on the
proper indentation of code. HyperParser gives additional information on
the structure of code.
é )Ú iskeywordN)ÚpyparseÚ_c C s g | ]}t |ƒtk‘qS © )ÚchrÚ_ASCII_ID_CHARS)Ú.0Úxr r ú8/opt/alt/python36/lib64/python3.6/idlelib/hyperparser.pyú
s r é€ c C s g | ]}t |ƒtk‘qS r )r Ú_ASCII_ID_FIRST_CHARS)r r r r r
r s c @ s\ e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zddd„Zed
ddhƒZ e
dd„ ƒZdZdd„ Z
dS )ÚHyperParserc
sJ |ˆ _ |j ˆ _}tj|j|jƒ}dd„ }||j|ƒƒ}|js¸xh|jD ]^}t || dƒ}t
|ƒd } d| }
|j|j| |
ƒd ƒ |j
|j| ƒƒ}|dk s¢|dkrFP qFW |j|p²dƒ nF|jd |ƒ}|rÒ|d } nd
} d| }
|j|j| |
ƒd ƒ |jdƒ |jdd… ˆ _|
ˆ _|jƒ ˆ _‡ fdd
„ttˆ jƒƒD ƒˆ _ˆ j|ƒ dS )z;To initialize, analyze the surroundings of the given index.c S s t t| ƒƒS )N)ÚintÚfloat)Úindexr r r
Ú
index2line" s z(HyperParser.__init__..index2lineé z.0z%d.endz
Nr Zconsolez1.0é c s4 g | ],}|d ko.ˆ j | d ˆ j |d d k‘qS )r r )Ú
bracketing)r Úi)Úselfr r
r K s z(HyperParser.__init__..éþÿÿÿ)ÚeditwinÚtextr ZParserZindentwidthZtabwidthr Zcontext_use_ps1Znum_context_linesÚmaxÚreprZset_codeÚgetZfind_good_parse_startZ_build_char_in_string_funcZset_loZ
tag_prevrangeÚcodeÚrawtextÚstopatindexZget_last_stmt_bracketingr ÚrangeÚlenÚisopenerÚ set_index)
r r r r Úparserr ZlnoÚcontextZstartatZstartatindexr ZbodÚrr )r r
Ú__init__ s:
zHyperParser.__init__c C sÒ t | jƒt | jj|| jƒƒ }|dk r2td| ƒ‚|| _d| _x@| jt | jƒd k r~| j| jd d | jk r~| jd7 _q@W | jt | jƒd k rÎ| j| jd d | jkrÎ| j | jd rÎ| jd7 _dS )zgSet the index to which the functions relate.
The index must be in the same statement.
r z(Index %s precedes the analyzed statementr N)
r" r r r r Ú
ValueErrorÚindexinrawtextÚindexbracketr r# )r r r* r r r
r$ Q s zHyperParser.set_indexc C s&