Your IP : 216.73.216.213


Current Path : /opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/__pycache__/
Upload File :
Current File : //opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/__pycache__/suspicious.cpython-33.pyo

�
��f�$c@s�dZddlZddlZddlZddlZddlmZddlmZej	dej
ejB�jZ
ejdkZGdd�d�ZGd	d
�d
ej�ZGdd�de�Zd
d�Zdd�ZGdd�dej�ZdS(u�
Try to detect suspicious constructs, resembling markup
that has leaked into the final output.

Suspicious lines are reported in a comma-separated-file,
``suspicious.csv``, located in the output directory.

The file is utf-8 encoded, and each line contains four fields:

 * document name (normalized)
 * line number in the source document
 * problematic text
 * complete line showing the problematic text in context

It is common to find many false positives. To avoid reporting them
again and again, they may be added to the ``ignored.csv`` file
(located in the configuration directory). The file has the same
format as ``suspicious.csv`` with a few differences:

  - each line defines a rule; if the rule matches, the issue
    is ignored.
  - line number may be empty (that is, nothing between the
    commas: ",,"). In this case, line numbers are ignored (the
    rule matches anywhere in the file).
  - the last field does not have to be a complete line; some
    surrounding text (never more than a line) is enough for
    context.

Rules are processed sequentially. A rule matches when:

 * document names are the same
 * problematic texts are the same
 * line numbers are close to each other (5 lines up or down)
 * the rule text is completely contained into the source line

The simplest way to create the ignored.csv file is by copying
undesired entries from suspicious.csv (possibly trimming the last
field.)

Copyright 2009 Gabriel A. Genellina

iN(unodes(uBuilderu�
    ::(?=[^=])|            # two :: (but NOT ::=)
    :[a-zA-Z][a-zA-Z0-9]+| # :foo
    `|                     # ` (seldom used by itself)
    (?<!\.)\.\.[ \t]*\w+:  # .. foo: (but NOT ... else:)
    icBs,|EeZdZdd�Zdd�ZdS(uRulecCs1||_||_||_||_d|_dS(uA rule for ignoring issuesNF(udocnameulinenouissueulineuFalseuused(uselfudocnameulinenouissueuline((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyu__init__?s
				u
Rule.__init__cCs
dj|�S(Nu{0.docname},,{0.issue},{0.line}(uformat(uself((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyu__repr__Isu
Rule.__repr__N(u__name__u
__module__u__qualname__u__init__u__repr__(u
__locals__((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyuRule>s
uRulecBs |EeZdZdZdZdS(udialectu+Our dialect: uses only linefeed as newline.u
N(u__name__u
__module__u__qualname__u__doc__ulineterminator(u
__locals__((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyudialectNsudialectcBs�|EeZdZdZdZdd�Zdd�Zddd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS(uCheckSuspiciousMarkupBuilderuK
    Checks for possibly invalid markup that may leak into the output.
    u
suspiciouscCs]tjj|jd�|_t|jd�j�|jtjjtjjt	�d��dS(Nususpicious.csvuwususp-ignored.csv(
uosupathujoinuoutdiru
log_file_nameuopenucloseu
load_rulesudirnameu__file__(uself((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyuinitYsu!CheckSuspiciousMarkupBuilder.initcCs
|jjS(N(uenvu
found_docs(uself((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyuget_outdated_docsasu.CheckSuspiciousMarkupBuilder.get_outdated_docscCsdS(Nu((uselfudocnameutyp((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyuget_target_uridsu+CheckSuspiciousMarkupBuilder.get_target_uricCsdS(N((uselfudocnames((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyuprepare_writinggsu,CheckSuspiciousMarkupBuilder.prepare_writingcCs2d|_||_t||�}|j|�dS(NF(uFalseu	any_issueudocnameuSuspiciousVisitoruwalk(uselfudocnameudoctreeuvisitor((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyu	write_docjs		u&CheckSuspiciousMarkupBuilder.write_doccCsmdd�|jD�}|ri|jdt|�t|j�f�x$|D]}|jt|��qIWndS(NcSsg|]}|js|�qS((uused(u.0urule((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyu
<listcomp>rs	u7CheckSuspiciousMarkupBuilder.finish.<locals>.<listcomp>uFound %s/%s unused rules:(urulesuwarnulenuinfourepr(uselfuunused_rulesurule((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyufinishqs	
u#CheckSuspiciousMarkupBuilder.finishcCs/|j|||�s+|j|||�ndS(N(u
is_ignoredureport_issue(uselfulineulinenouissue((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyucheck_issuezsu(CheckSuspiciousMarkupBuilder.check_issuecCs�|j}x�|jD]}}|j|kr.qn|j|krCqn|j|krXqn|jdk	r�t|j|�dkr�qnd|_dSWdS(u/Determine whether this issue should be ignored.iNTF(
udocnameurulesuissueulineulinenouNoneuabsuTrueuuseduFalse(uselfulineulinenouissueudocnameurule((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyu
is_ignored~s		u'CheckSuspiciousMarkupBuilder.is_ignoredcCs�|js|j�nd|_|j|||�tr[|jd|j|||f�n\|jd|jjtj	�d�||jtj	�d�|j
�jtj	�d�f�d|j_dS(Nu[%s:%d] "%s" found in "%-.120s"ureplaceiT(
u	any_issueuinfouTrueuwrite_log_entryupy3uwarnudocnameuencodeusysugetdefaultencodingustripuappu
statuscode(uselfutextulinenouissue((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyureport_issue�s	
			#u)CheckSuspiciousMarkupBuilder.report_issuecCs�trYt|jd�}tj|t�}|j|j|||j�g�|j	�nkt|jd�}tj|t�}|j|jj
d�||j
d�|j�j
d�g�|j	�dS(Nuauabuutf-8(upy3uopenu
log_file_nameucsvuwriterudialectuwriterowudocnameustripucloseuencode(uselfulinenouissueutextufuwriter((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyuwrite_log_entry�s"
u,CheckSuspiciousMarkupBuilder.write_log_entrycCsi|jddd�g|_}y+tr;t|d�}nt|d�}Wntk
rcdSYnXx�ttj|��D]�\}}t|�dkr�t	d||d|f��n|\}}}}	|r�t
|�}nd}ts|jd	�}|jd	�}|	jd	�}	nt
||||	�}
|j|
�qzW|j�|jd
t|j��dS(u�Load database of previously ignored issues.

        A csv file, with exactly the same format as suspicious.csv
        Fields: document name (normalized), line number, issue, surrounding text
        uloading ignore rules... unonliururbNiuwrong format in %s, line %d: %suutf-8udone, %d rules loaded(uinfourulesupy3uopenuIOErroru	enumerateucsvureaderulenu
ValueErroruintuNoneudecodeuRuleuappenduclose(uselfufilenameurulesufuiurowudocnameulinenouissueutexturule((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyu
load_rules�s0

	"
u'CheckSuspiciousMarkupBuilder.load_rulesN(u__name__u
__module__u__qualname__u__doc__unameuinituget_outdated_docsuNoneuget_target_uriuprepare_writingu	write_docufinishucheck_issueu
is_ignoredureport_issueuwrite_log_entryu
load_rules(u
__locals__((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyuCheckSuspiciousMarkupBuilderSs	uCheckSuspiciousMarkupBuildercCs5d}x(|dkr0|r0|j}|j}q	W|S(u*Obtain line number information for a node.N(uNoneuparentuline(unodeulineno((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyu
get_lineno�s
	
u
get_linenocCsT|jdd|�d}|jd|�}|dkrFt|�}n|||�S(u text may be a multiline string; extract
    only the line containing the given character index.

    >>> extract_line("abc
defgh
i", 6)
    >>> 'defgh'
    >>> for i in (0, 2, 3, 4, 10):
    ...   print extract_line("abc
defgh
i", i)
    abc
    abc
    abc
    defgh
    defgh
    i
    u
ii(urfindufindulen(utextuindexupuq((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyuextract_line�s
uextract_linecBsP|EeZdZdZdd�Zdd�ZeZdd�Zdd	�Zd
S(uSuspiciousVisitoricCs tjj||�||_dS(N(unodesuGenericNodeVisitoru__init__ubuilder(uselfudocumentubuilder((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyu__init__�suSuspiciousVisitor.__init__cCs�t|tjtjf�r�|j�}tt|�p9d|j�|_}t�}xvt	|�D]e}|j
�}t||j��}||f|krb|j
j|||�|j||f�qbqbWndS(Ni(u
isinstanceunodesuTextuimageuastextumaxu
get_linenou
lastlinenousetu
detect_allugroupuextract_lineustartubuilderucheck_issueuadd(uselfunodeutextulinenouseenumatchuissueuline((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyu
default_visit�s%	uSuspiciousVisitor.default_visitcCs
d|_dS(Ni(u
lastlineno(uselfunode((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyuvisit_document
su SuspiciousVisitor.visit_documentcCs
tj�dS(N(unodesuSkipNode(uselfunode((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyu
visit_comment
suSuspiciousVisitor.visit_commentN(	u__name__u
__module__u__qualname__u
lastlinenou__init__u
default_visitu
unknown_visituvisit_documentu
visit_comment(u
__locals__((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyuSuspiciousVisitor�s
uSuspiciousVisitor(ii(u__doc__uosureucsvusysudocutilsunodesusphinx.buildersuBuilderucompileuUNICODEuVERBOSEufinditeru
detect_alluversion_infoupy3uRuleuexceludialectuCheckSuspiciousMarkupBuilderu
get_linenouextract_lineuGenericNodeVisitoruSuspiciousVisitor(((uC/opt/alt/python33/lib64/python3.3/Doc/tools/sphinxext/suspicious.pyu<module>*s�