
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aZH ã                   @   s4  d ddddddddd	d
dgZ ddlmZ ddlmZ eddƒZdd„ ZG dd„ dƒZ	d7dd „Z
dd„ ZG dd„ dƒZddlZe d¡jfdd„Zd8dd„Zdd„ Zd9d"d„Zd#d$„ Zd:d%d„Zd&d'„ Zd;d*d	„Zdefd+d„Zddefd,d-„Zd.Zd/Zd0Zd1ZG d2d
„ d
eƒZ[d3d„ Z d4d5„ Z!e"d6k�r0e!ƒ  dS )<Úget_close_matchesÚndiffÚrestoreÚSequenceMatcherÚDifferÚIS_CHARACTER_JUNKÚIS_LINE_JUNKÚcontext_diffÚunified_diffÚ
diff_bytesÚHtmlDiffÚMatché    )Únlargest)Ú
namedtupleza b sizec                 C   s   |rd|  | S dS )Ng       @ç      ð?© )ÚmatchesÚlengthr   r   ú,/opt/alt/python38/lib64/python3.8/difflib.pyÚ_calculate_ratio&   s    r   c                   @   sp   e Zd Z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d„Zdd„ Zdd„ Zdd„ ZdS )r   NÚ Tc                 C   s(   || _ d  | _| _|| _|  ||¡ d S ©N)ÚisjunkÚaÚbÚautojunkÚset_seqs)Úselfr   r   r   r   r   r   r   Ú__init__—   s    ;zSequenceMatcher.__init__c                 C   s   |   |¡ |  |¡ d S r   )Úset_seq1Úset_seq2)r   r   r   r   r   r   r   ×   s    	
zSequenceMatcher.set_seqsc                 C   s$   || j krd S || _ d  | _| _d S r   )r   Úmatching_blocksÚopcodes)r   r   r   r   r   r   ã   s    
zSequenceMatcher.set_seq1c                 C   s2   || j krd S || _ d  | _| _d | _|  ¡  d S r   )r   r!   r"   Ú
fullbcountÚ_SequenceMatcher__chain_b)r   r   r   r   r   r    ý   s    
zSequenceMatcher.set_seq2c                 C   sè   | j }i  | _}t|ƒD ]\}}| |g ¡}| |¡ qtƒ  | _}| j}|r~| ¡ D ]}||ƒrV| 	|¡ qV|D ]
}||= qrtƒ  | _
}t|ƒ}	| jrä|	dkrä|	d d }
| ¡ D ]\}}t|ƒ|
kr´| 	|¡ q´|D ]
}||= qØd S )NéÈ   éd   é   )r   Úb2jÚ	enumerateÚ
setdefaultÚappendÚsetÚbjunkr   ÚkeysÚaddZbpopularÚlenr   Úitems)r   r   r(   ÚiÚeltÚindicesZjunkr   ZpopularÚnZntestZidxsr   r   r   Z	__chain_b)  s,    
zSequenceMatcher.__chain_bc                 C   s4  | j | j| j| jjf\}}}}||d  }	}
}i }g }t||ƒD ]€}|j}i }| || |¡D ]\}||k rlq^||krx q¼||d dƒd  }||< ||kr^|| d || d |  }	}
}q^|}q@|	|k�r |
|k�r |||
d  ƒ�s ||	d  ||
d  k�r |	d |
d |d   }	}
}qÂ|	| |k �rt|
| |k �rt|||
|  ƒ�st||	|  ||
|  k�rt|d7 }�q |	|k�rÔ|
|k�rÔ|||
d  ƒ�rÔ||	d  ||
d  k�rÔ|	d |
d |d   }	}
}�qt|	| |k �r(|
| |k �r(|||
|  ƒ�r(||	|  ||
|  k�r(|d }�qÔt|	|
|ƒS ©Nr   r'   )r   r   r(   r-   Ú__contains__ÚrangeÚgetr   )r   ÚaloÚahiÚbloÚbhir   r   r(   ZisbjunkZbestiZbestjZbestsizeZj2lenZnothingr2   Zj2lengetZnewj2lenÚjÚkr   r   r   Úfind_longest_matchP  sR    8"ÿþÿþ	ÿþ ÿþz"SequenceMatcher.find_longest_matchc                 C   s|  | j d k	r| j S t| jƒt| jƒ }}d|d|fg}g }|rÊ| ¡ \}}}}|  ||||¡ \}	}
}}|r8| |¡ ||	k r–||
k r–| ||	||
f¡ |	| |k r8|
| |k r8| |	| ||
| |f¡ q8| ¡  d } }}g }|D ]V\}}}|| |k�r|| |k�r||7 }qæ|�r,| |||f¡ |||  }}}qæ|�rT| |||f¡ | ||df¡ tt	t
j|ƒƒ| _ | j S ©Nr   )r!   r0   r   r   Úpopr@   r+   ÚsortÚlistÚmapr   Ú_make)r   ÚlaÚlbZqueuer!   r:   r;   r<   r=   r2   r>   r?   ÚxÚi1Új1Zk1Znon_adjacentÚi2Új2Zk2r   r   r   Úget_matching_blocks¾  s8    


z#SequenceMatcher.get_matching_blocksc                 C   s°   | j d k	r| j S d }}g  | _ }|  ¡ D ]€\}}}d}||k rN||k rNd}n||k r\d}n||k rhd}|r€| |||||f¡ || ||  }}|r*| d||||f¡ q*|S )Nr   r   ÚreplaceÚdeleteÚinsertÚequal)r"   rN   r+   )r   r2   r>   ZanswerÚaiÚbjÚsizeÚtagr   r   r   Úget_opcodes  s$    

zSequenceMatcher.get_opcodesé   c           
      c   sn  |   ¡ }|sdg}|d d dkrZ|d \}}}}}|t||| ƒ|t||| ƒ|f|d< |d d dkr¢|d \}}}}}||t||| ƒ|t||| ƒf|d< || }g }	|D ]Š\}}}}}|dk�r(|| |k�r(|	 ||t||| ƒ|t||| ƒf¡ |	V  g }	t||| ƒt||| ƒ }}|	 |||||f¡ q²|	�rjt|	ƒdk�rd|	d d dk�sj|	V  d S )N)rR   r   r'   r   r'   r   rR   éÿÿÿÿr'   )rW   ÚmaxÚminr+   r0   )
r   r5   ZcodesrV   rJ   rL   rK   rM   ZnnÚgroupr   r   r   Úget_grouped_opcodes<  s(    &&(&z#SequenceMatcher.get_grouped_opcodesc                 C   s0   t dd„ |  ¡ D ƒƒ}t|t| jƒt| jƒ ƒS )Nc                 s   s   | ]}|d  V  qdS )rY   Nr   )Ú.0Ztripler   r   r   Ú	<genexpr>„  s     z(SequenceMatcher.ratio.<locals>.<genexpr>)ÚsumrN   r   r0   r   r   )r   r   r   r   r   Úration  s    zSequenceMatcher.ratioc                 C   sª   | j d kr4i  | _ }| jD ]}| |d¡d ||< q| j }i }|jd }}| jD ]>}||ƒrf|| }n| |d¡}|d ||< |dkrP|d }qPt|t| jƒt| jƒ ƒS r6   )r#   r   r9   r7   r   r   r0   )r   r#   r3   ZavailZavailhasr   Znumbr   r   r   Úquick_ratio‡  s    






zSequenceMatcher.quick_ratioc                 C   s*   t | jƒt | jƒ }}tt||ƒ|| ƒS r   )r0   r   r   r   r[   )r   rG   rH   r   r   r   Úreal_quick_ratio¤  s    z SequenceMatcher.real_quick_ratio)Nr   r   T)rX   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r    r$   r@   rN   rW   r]   ra   rb   rc   r   r   r   r   r   +   s   l
@,'nG7
2rX   ç333333ã?c                 C   s°   |dkst d|f ƒ‚d|  kr*dks:n t d|f ƒ‚g }tƒ }| | ¡ |D ]D}| |¡ | ¡ |krR| ¡ |krR| ¡ |krR| | ¡ |f¡ qRt||ƒ}dd„ |D ƒS )Nr   zn must be > 0: %rg        r   z cutoff must be in [0.0, 1.0]: %rc                 S   s   g | ]\}}|‘qS r   r   )r^   ZscorerI   r   r   r   Ú
<listcomp>Þ  s     z%get_close_matches.<locals>.<listcomp>)	Ú
ValueErrorr   r    r   rc   rb   ra   r+   Ú	_nlargest)ZwordZpossibilitiesr5   ÚcutoffÚresultÚsrI   r   r   r   r   °  s"    


ÿ
þ
c                 C   s   d  dd„ t| |ƒD ƒ¡S )Nr   c                 s   s*   | ]"\}}|d kr|  ¡ r|n|V  qdS )ú N)Úisspace)r^   ÚcZtag_cr   r   r   r_   ã  s   ÿz$_keep_original_ws.<locals>.<genexpr>)ÚjoinÚzip)rm   Ztag_sr   r   r   Ú_keep_original_wsá  s    
þrs   c                   @   sF   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )r   Nc                 C   s   || _ || _d S r   ©ÚlinejunkÚcharjunk)r   ru   rv   r   r   r   r   H  s    zDiffer.__init__c           
   	   c   s®   t | j||ƒ}| ¡ D ]’\}}}}}|dkrB|  ||||||¡}	n\|dkr\|  d|||¡}	nB|dkrv|  d|||¡}	n(|dkr�|  d|||¡}	ntd|f ƒ‚|	E d H  qd S )	NrO   rP   ú-rQ   ú+rR   rn   úunknown tag %r)r   ru   rW   Ú_fancy_replaceÚ_dumpri   )
r   r   r   ÚcruncherrV   r:   r;   r<   r=   Úgr   r   r   Úcompare_  s    zDiffer.comparec                 c   s&   t ||ƒD ]}d||| f V  q
d S )Nz%s %s)r8   )r   rV   rI   ÚloÚhir2   r   r   r   r{   ˆ  s    zDiffer._dumpc           
      c   sn   || || k r2|   d|||¡}|   d|||¡}n |   d|||¡}|   d|||¡}||fD ]}	|	E d H  qZd S )Nrx   rw   )r{   )
r   r   r:   r;   r   r<   r=   ÚfirstÚsecondr}   r   r   r   Ú_plain_replace�  s    zDiffer._plain_replacec                 c   s:  d\}}t | jƒ}	d\}
}t||ƒD ]Œ}|| }|	 |¡ t||ƒD ]j}|| }||krl|
d krD|| }
}qD|	 |¡ |	 ¡ |krD|	 ¡ |krD|	 ¡ |krD|	 ¡ ||  }}}qDq$||k rò|
d krà|  ||||||¡E d H  d S |
|d  }}}nd }
|  	||||||¡E d H  || ||  }}|
d k�r
d }}|	 
||¡ |	 ¡ D ]¨\}}}}}|| ||  }}|dk�rŒ|d| 7 }|d| 7 }nb|dk�r¤|d| 7 }nJ|d	k�r¼|d
| 7 }n2|dk�rà|d| 7 }|d| 7 }ntd|f ƒ‚�qH|  ||||¡E d H  n
d| V  |  	||d |||d |¡E d H  d S )N)g®Gáz®ç?g      è?)NNr   r   rO   ú^rP   rw   rQ   rx   rR   rn   ry   ú  r'   )r   rv   r8   r    r   rc   rb   ra   rƒ   Ú_fancy_helperr   rW   ri   Ú_qformat)r   r   r:   r;   r   r<   r=   Z
best_ratiork   r|   ZeqiZeqjr>   rT   r2   rS   Zbest_iZbest_jZaeltZbeltÚatagsÚbtagsrV   Zai1Zai2Zbj1Zbj2rG   rH   r   r   r   rz   ›  s\    




ÿ
þ





zDiffer._fancy_replacec                 c   sb   g }||k r<||k r*|   ||||||¡}qT|  d|||¡}n||k rT|  d|||¡}|E d H  d S )Nrw   rx   )rz   r{   )r   r   r:   r;   r   r<   r=   r}   r   r   r   r†   ù  s    zDiffer._fancy_helperc                 c   sX   t ||ƒ ¡ }t ||ƒ ¡ }d| V  |r8d|› d�V  d| V  |rTd|› d�V  d S )Nú- z? Ú
ú+ )rs   Úrstrip)r   ZalineZblinerˆ   r‰   r   r   r   r‡     s    

zDiffer._qformat)NN)
rd   re   rf   r   r~   r{   rƒ   rz   r†   r‡   r   r   r   r   r   ê  s   ^
)^Nz\s*(?:#\s*)?$c                 C   s   || ƒd k	S r   r   )ÚlineZpatr   r   r   r   3  s    ú 	c                 C   s   | |kS r   r   )ZchZwsr   r   r   r   C  s    c                 C   s:   | d }||  }|dkr"d  |¡S |s.|d8 }d  ||¡S ©Nr'   z{}z{},{}©Úformat©ÚstartÚstopZ	beginningr   r   r   r   Ú_format_range_unifiedZ  s    
r–   r   r‹   c                 c   sP  t | ||||||ƒ d}td | |ƒ |¡D �]}	|s|d}|rFd |¡nd}
|rXd |¡nd}d ||
|¡V  d |||¡V  |	d |	d  }}t|d	 |d
 ƒ}t|d |d ƒ}d |||¡V  |	D ]‚\}}}}}|dkrú| ||… D ]}d| V  qèqÆ|dk�r"| ||… D ]}d| V  �q|dkrÆ|||… D ]}d| V  �q6qÆq*d S )NFTú	{}r   ú
--- {}{}{}z
+++ {}{}{}r   rY   r'   é   rX   é   z@@ -{} +{} @@{}rR   rn   >   rP   rO   rw   >   rQ   rO   rx   )Ú_check_typesr   r]   r’   r–   )r   r   ÚfromfileÚtofileÚfromfiledateÚ
tofiledater5   ÚlinetermÚstartedr\   ÚfromdateÚtodater�   ÚlastÚfile1_rangeÚfile2_rangerV   rJ   rL   rK   rM   rŽ   r   r   r   r	   e  s0    )
c                 C   sB   | d }||  }|s|d8 }|dkr.d  |¡S d  ||| d ¡S r�   r‘   r“   r   r   r   Ú_format_range_context®  s    
r§   c                 c   s”  t | ||||||ƒ tddddd�}d}	td | |ƒ |¡D �]R}
|	sŒd}	|rVd |¡nd	}|rhd |¡nd	}d
 |||¡V  d |||¡V  |
d |
d  }}d| V  t|d |d ƒ}d ||¡V  tdd„ |
D ƒƒ�r|
D ]8\}}}}}|dkrà| ||… D ]}|| | V  �qqàt|d |d ƒ}d ||¡V  tdd„ |
D ƒƒr:|
D ]<\}}}}}|dk�rP|||… D ]}|| | V  �qt�qPq:d S )NrŒ   rŠ   z! r…   )rQ   rP   rO   rR   FTr—   r   z
*** {}{}{}r˜   r   rY   z***************r'   r™   z*** {} ****{}c                 s   s    | ]\}}}}}|d kV  qdS )>   rP   rO   Nr   ©r^   rV   Ú_r   r   r   r_   ÷  s     zcontext_diff.<locals>.<genexpr>rQ   rX   rš   z--- {} ----{}c                 s   s    | ]\}}}}}|d kV  qdS )>   rQ   rO   Nr   r¨   r   r   r   r_      s     rP   )r›   Údictr   r]   r’   r§   Úany)r   r   rœ   r�   rž   rŸ   r5   r    Úprefixr¡   r\   r¢   r£   r�   r¤   r¥   rV   rJ   rL   r©   rŽ   r¦   rK   rM   r   r   r   r   º  s4    ,

c                 G   s†   | r0t | d tƒs0tdt| d ƒj| d f ƒ‚|r`t |d tƒs`tdt|d ƒj|d f ƒ‚|D ]}t |tƒsdtd|f ƒ‚qdd S )Nr   z)lines to compare must be str, not %s (%r)z"all arguments must be str, not: %r)Ú
isinstanceÚstrÚ	TypeErrorÚtyperd   )r   r   ÚargsÚargr   r   r   r›     s    ÿÿ
r›   ó    ó   
c	              	   c   s~   dd„ }	t t|	|ƒƒ}t t|	|ƒƒ}|	|ƒ}|	|ƒ}|	|ƒ}|	|ƒ}|	|ƒ}| ||||||||ƒ}
|
D ]}| dd¡V  qfd S )Nc              
   S   sR   z|   dd¡W S  tk
rL } z dt| ƒj| f }t|ƒ|‚W 5 d }~X Y nX d S )NÚasciiÚsurrogateescapez(all arguments must be bytes, not %s (%r))ÚdecodeÚAttributeErrorr°   rd   r¯   )rm   ÚerrÚmsgr   r   r   r·   "  s    ÿzdiff_bytes.<locals>.decoderµ   r¶   )rD   rE   Úencode)Zdfuncr   r   rœ   r�   rž   rŸ   r5   r    r·   ÚlinesrŽ   r   r   r   r
     s    c                 C   s   t ||ƒ | |¡S r   )r   r~   )r   r   ru   rv   r   r   r   r   5  s    #c                 #   sŠ  dd l }| d¡‰t| |||ƒ‰ddgf‡fdd„	‰‡‡fdd„‰ ‡ fdd„}|ƒ }|d krj|E d H  �n|d	7 }d}dd g|  }	}
d
}|d
krÜzt|ƒ\}}}W n tk
rº   Y d S X |	| }|||f|
|< |	d	7 }	qŠ|	|krðdV  |}n|	}d}	|�r"|	| }|	d	7 }	|
| V  |d	8 }qø|d	 }z@|�rht|ƒ\}}}|�rP|d	 }n|d	8 }|||fV  �q,W qv tk
�r‚   Y d S X qvd S )Nr   z(\++|\-+|\^+)c                    sö   ||  d7  < |d kr2|| |   d¡dd … fS |dkrÀ|   d¡|   d¡ }}g }|fdd„}ˆ  ||¡ t|ƒD ]<\}\}	}
|d|	… d | ||	|
…  d ||
d …  }qt|dd … }n*|   d¡dd … }|sÚd	}d| | d }|| |fS )
Nr'   r   r™   ú?c                 S   s&   |  |  d¡d |  ¡ g¡ |  d¡S )Nr'   r   )r+   r\   Úspan)Zmatch_objectÚsub_infor   r   r   Úrecord_sub_info¥  s    z3_mdiff.<locals>._make_line.<locals>.record_sub_infoú úrn   )rB   ÚsubÚreversed)r¼   Z
format_keyÚsideZ	num_linesÚtextZmarkersr¿   rÀ   ÚkeyZbeginÚend)Ú	change_rer   r   Ú
_make_line„  s     2z_mdiff.<locals>._make_linec                  3   sn  g } d\}}t | ƒdk r*|  tˆdƒ¡ qd dd„ | D ƒ¡}| d¡rP|}�nÄ| d¡r|ˆ | dd	ƒˆ | dd
ƒdfV  q�n˜| d¡r¨|d
8 }ˆ | dd	ƒd dfV  q�nl| d¡rÖˆ | dd	ƒd  }}|d
 d	 }}�n>| d¡�rˆ | d d	ƒˆ | dd
ƒdfV  q�n| d¡�r0ˆ | dd	ƒˆ | d d
ƒdfV  qnä| d¡�r\|d
8 }ˆ | dd	ƒd dfV  qn¸| d¡�rˆ|d
7 }d ˆ | dd
ƒdfV  qnŒ| d¡�r¶d ˆ | dd
ƒ }}|d
 d	 }}n^| d¡�râ|d
7 }d ˆ | dd
ƒdfV  qn2| d¡�rˆ | d d … d d	ƒˆ | d d
ƒdfV  q|d	k �r0|d
7 }dV  �q|d	k�rL|d
8 }dV  �q0| d¡�r\d S ||dfV  qd S )N)r   r   rš   ÚXr   c                 S   s   g | ]}|d  ‘qS )r   r   ©r^   rŽ   r   r   r   rh   Ò  s     z2_mdiff.<locals>._line_iterator.<locals>.<listcomp>z-?+?r½   r   r'   Tz--++rw   )z--?+z--+rŠ   z-+?z-?+z+--rx   )rŒ   z+-rn   F)N©r   r‹   T)rÍ   NT)r0   r+   Únextrq   Ú
startswith)r¼   Znum_blanks_pendingZnum_blanks_to_yieldrm   Ú	from_lineÚto_line)rÊ   Údiff_lines_iteratorr   r   Ú_line_iterator¼  sd    



$



z_mdiff.<locals>._line_iteratorc                  3   s²   ˆ ƒ } g g  }}t |ƒdks(t |ƒdkr€zt| ƒ\}}}W n tk
rP   Y d S X |d k	rh| ||f¡ |d k	r| ||f¡ q| d¡\}}| d¡\}}|||p¦|fV  qd S rA   )r0   rÎ   ÚStopIterationr+   rB   )Zline_iteratorÚ	fromlinesÚtolinesrÐ   rÑ   Ú
found_diffZfromDiffZto_diff)rÓ   r   r   Ú_line_pair_iterator  s    
z#_mdiff.<locals>._line_pair_iteratorr'   F)NNN)ÚreÚcompiler   rÎ   rÔ   )rÕ   rÖ   Úcontextru   rv   rÙ   rØ   Zline_pair_iteratorZlines_to_writeÚindexZcontextLinesr×   rÐ   rÑ   r2   r   )rÓ   rÊ   rÉ   rÒ   r   Ú_mdiffZ  sR    "
8X!



rÝ   an  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>
    <meta http-equiv="Content-Type"
          content="text/html; charset=%(charset)s" />
    <title></title>
    <style type="text/css">%(styles)s
    </style>
</head>

<body>
    %(table)s%(legend)s
</body>

</html>aH  
        table.diff {font-family:Courier; border:medium;}
        .diff_header {background-color:#e0e0e0}
        td.diff_header {text-align:right}
        .diff_next {background-color:#c0c0c0}
        .diff_add {background-color:#aaffaa}
        .diff_chg {background-color:#ffff77}
        .diff_sub {background-color:#ffaaaa}aZ  
    <table class="diff" id="difflib_chg_%(prefix)s_top"
           cellspacing="0" cellpadding="0" rules="groups" >
        <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup>
        <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup>
        %(header_row)s
        <tbody>
%(data_rows)s        </tbody>
    </table>aõ  
    <table class="diff" summary="Legends">
        <tr> <th colspan="2"> Legends </th> </tr>
        <tr> <td> <table border="" summary="Colors">
                      <tr><th> Colors </th> </tr>
                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
                      <tr><td class="diff_chg">Changed</td> </tr>
                      <tr><td class="diff_sub">Deleted</td> </tr>
                  </table></td>
             <td> <table border="" summary="Links">
                      <tr><th colspan="2"> Links </th> </tr>
                      <tr><td>(f)irst change</td> </tr>
                      <tr><td>(n)ext change</td> </tr>
                      <tr><td>(t)op</td> </tr>
                  </table></td> </tr>
    </table>c                   @   s„   e Zd ZeZeZeZeZdZdddef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d„ZdS )r   r   é   Nc                 C   s   || _ || _|| _|| _d S r   )Ú_tabsizeÚ_wrapcolumnÚ	_linejunkÚ	_charjunk)r   ÚtabsizeZ
wrapcolumnru   rv   r   r   r   r   ¶  s    zHtmlDiff.__init__r   Fé   zutf-8)Úcharsetc                C   s:   | j t| j| j| j||||||d�|d�  |d¡ |¡S )N)rÛ   Únumlines)ZstylesZlegendÚtablerå   Úxmlcharrefreplace)Ú_file_templaterª   Ú_stylesÚ_legendÚ
make_tabler»   r·   )r   rÕ   rÖ   ÚfromdescÚtodescrÛ   ræ   rå   r   r   r   Ú	make_fileÇ  s     ÿû úúzHtmlDiff.make_filec                    s8   ‡fdd„‰ ‡ fdd„|D ƒ}‡ fdd„|D ƒ}||fS )Nc                    s6   |   dd¡} |  ˆ j¡} |   dd¡} |   dd¡ d¡S )Nrn   rÁ   ú	r‹   )rO   Ú
expandtabsrß   r�   )rŽ   )r   r   r   Úexpand_tabsì  s    z2HtmlDiff._tab_newline_replace.<locals>.expand_tabsc                    s   g | ]}ˆ |ƒ‘qS r   r   rÌ   ©rò   r   r   rh   õ  s     z1HtmlDiff._tab_newline_replace.<locals>.<listcomp>c                    s   g | ]}ˆ |ƒ‘qS r   r   rÌ   ró   r   r   rh   ö  s     r   )r   rÕ   rÖ   r   )rò   r   r   Ú_tab_newline_replaceâ  s    
	zHtmlDiff._tab_newline_replacec                 C   s  |s|  ||f¡ d S t|ƒ}| j}||ksB|| d¡d  |krT|  ||f¡ d S d}d}d}||k rÂ||k rÂ|| dkr–|d7 }|| }|d7 }q`|| dkr°|d7 }d}q`|d7 }|d7 }q`|d |… }	||d … }
|rò|	d }	d| |
 }
|  ||	f¡ |  |d|
¡ d S )NrÁ   rX   r   r   r'   rÂ   ú>)r+   r0   rà   ÚcountÚ_split_line)r   Z	data_listZline_numrÆ   rU   rZ   r2   r5   ZmarkZline1Zline2r   r   r   r÷   ù  s8    


zHtmlDiff._split_linec                 c   s    |D ]–\}}}|d kr$|||fV  q|| \}}\}}g g  }	}
|   |	||¡ |   |
||¡ |	sd|
r|	rt|	 d¡}nd}|
rˆ|
 d¡}nd}|||fV  q\qd S )Nr   )r   rn   )r÷   rB   )r   ÚdiffsÚfromdataÚtodataÚflagZfromlineZfromtextZtolineZtotextÚfromlistÚtolistr   r   r   Ú_line_wrapper0  s     
zHtmlDiff._line_wrapperc              	   C   s’   g g g   }}}|D ]r\}}}z4|  | jd|f|žŽ ¡ |  | jd|f|žŽ ¡ W n( tk
rz   |  d ¡ |  d ¡ Y nX |  |¡ q|||fS r6   )r+   Ú_format_liner¯   )r   rø   rü   rý   Úflaglistrù   rú   rû   r   r   r   Ú_collect_linesL  s    
zHtmlDiff._collect_linesc                 C   sr   zd| }d| j | |f }W n tk
r6   d}Y nX | dd¡ dd¡ dd	¡}| d
d¡ ¡ }d|||f S )Nz%dz
 id="%s%s"r   ú&z&amp;rõ   z&gt;ú<z&lt;rn   ú&nbsp;z<<td class="diff_header"%s>%s</td><td nowrap="nowrap">%s</td>)Ú_prefixr¯   rO   r�   )r   rÅ   rû   ZlinenumrÆ   Úidr   r   r   rÿ   a  s    
ÿzHtmlDiff._format_linec                 C   s0   dt j }dt j }t  jd7  _||g| _d S )Nzfrom%d_zto%d_r'   )r   Ú_default_prefixr  )r   Z
fromprefixÚtoprefixr   r   r   Ú_make_prefixx  s    

zHtmlDiff._make_prefixc                 C   sô   | j d }dgt|ƒ }dgt|ƒ }d\}	}
d}t|ƒD ]V\}}|rŒ|
s�d}
|}td|| gƒ}d||	f ||< |	d7 }	d||	f ||< q:d}
q:|sÆdg}dg}dg}d}|r¼d	g}|}n
d
g }}|d sÚd| |d< d| ||< |||||fS )Nr'   r   )r   Fr   Tz id="difflib_chg_%s_%d"z"<a href="#difflib_chg_%s_%d">n</a>Fz2<td></td><td>&nbsp;No Differences Found&nbsp;</td>z(<td></td><td>&nbsp;Empty File&nbsp;</td>z!<a href="#difflib_chg_%s_0">f</a>z#<a href="#difflib_chg_%s_top">t</a>)r  r0   r)   rZ   )r   rü   rý   r   rÛ   ræ   r  Únext_idÚ	next_hrefZnum_chgZ	in_changer¤   r2   rû   r   r   r   Ú_convert_flagsƒ  s>    
 ÿ
zHtmlDiff._convert_flagsc              
   C   sR  |   ¡  |  ||¡\}}|r"|}nd }t|||| j| jd�}| jrL|  |¡}|  |¡\}	}
}|  |	|
|||¡\}	}
}}}g }d}t	t
|ƒƒD ]P}|| d kr°|dkrÜ| d¡ qŒ| ||| || |	| || |
| f ¡ qŒ|sè|�rddd| dd| f }nd}| jtd |¡|| jd	 d
� }| dd¡ dd¡ dd¡ dd¡ dd¡S )Nrt   zV            <tr><td class="diff_next"%s>%s</td>%s<td class="diff_next">%s</td>%s</tr>
r   z)        </tbody>        
        <tbody>
z <thead><tr>%s%s%s%s</tr></thead>z!<th class="diff_next"><br /></th>z+<th colspan="2" class="diff_header">%s</th>r   r'   )Z	data_rowsÚ
header_rowr¬   z +z<span class="diff_add">z -z<span class="diff_sub">z ^z<span class="diff_chg">rÂ   z</span>rð   r  )r	  rô   rÝ   rá   râ   rà   rþ   r  r  r8   r0   r+   Ú_table_templaterª   rq   r  rO   )r   rÕ   rÖ   rí   rî   rÛ   ræ   Zcontext_linesrø   rü   rý   r   r  r
  rm   Zfmtr2   r  rç   r   r   r   rì   ²  sl    ÿ
    ÿ ÿ

üý ÿ þ ý üzHtmlDiff.make_table)r   r   Frä   )r   r   Frä   )rd   re   rf   ré   rê   r  rë   r  r   r   rï   rô   r÷   rþ   r  rÿ   r	  r  rì   r   r   r   r   r      s0   ÿ
    ÿÿ7/  ÿc                 c   sn   zdddœt |ƒ }W n" tk
r8   td| ƒd ‚Y nX d|f}| D ]"}|d d… |krF|dd … V  qFd S )NrŠ   rŒ   )r'   r™   z)unknown delta choice (must be 1 or 2): %rr…   r™   )ÚintÚKeyErrorri   )ZdeltaZwhichrV   ÚprefixesrŽ   r   r   r   r     s    ÿÿc                  C   s   dd l } dd l}|  |¡S rA   )ÚdoctestÚdifflibZtestmod)r  r  r   r   r   Ú_test!  s    r  Ú__main__)rX   rg   )r�   )r   r   r   r   rX   r‹   )r   r   r   r   rX   r‹   )r³   r³   r³   r³   rX   r´   )#Ú__all__Úheapqr   rj   Úcollectionsr   Z_namedtupler   r   r   r   rs   r   rÙ   rÚ   Úmatchr   r   r–   r	   r§   r   r›   r
   r   rÝ   ré   rê   r  rë   Úobjectr   r   r  rd   r   r   r   r   Ú<module>   s‚         þ
     

1	  I
      ÿ
I        ÿ
L        ÿ
%ÿ
  	
  a 
