
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \™I ã               @   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j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       @g      ð?© )ÚmatchesÚlengthr   r   ú/usr/lib64/python3.6/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  | _| _|| _| j||ƒ d S )N)ÚisjunkÚaÚbÚautojunkÚset_seqs)Úselfr   r   r   r   r   r   r   Ú__init__—   s    ;zSequenceMatcher.__init__c             C   s   | j |ƒ | j|ƒ d S )N)Ú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 )N)r   Úmatching_blocksÚopcodes)r   r   r   r   r   r   ã   s    
zSequenceMatcher.set_seq1c             C   s2   || j krd S || _ d  | _| _d | _| jƒ  d S )N)r   r   r    Ú
fullbcountÚ_SequenceMatcher__chain_b)r   r   r   r   r   r   ý   s    
zSequenceMatcher.set_seq2c             C   sü   | j }i  | _}x*t|ƒD ]\}}|j|g ƒ}|j|ƒ qW tƒ  | _}| j}|rŠx"|jƒ D ]}||ƒr\|j	|ƒ q\W x|D ]
}||= q|W tƒ  | _
}t|ƒ}	| jrø|	dkrø|	d d }
x*|jƒ D ]\}}t|ƒ|
krÂ|j	|ƒ qÂW x|D ]
}||= qêW 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   sN  | j | j| j| jjf\}}}}||d  }	}
}i }g }x�t||ƒD ]‚}|j}i }xn|j|| |ƒD ]Z}||k rpqb||krzP ||d dƒd  }||< ||krb|| d || d |  }	}
}qbW |}qBW xb|	|k�r*|
|k�r*|||
d  ƒ �r*||	d  ||
d  k�r*|	d |
d |d   }	}
}qÊW xX|	| |k �r„|
| |k �r„|||
|  ƒ �r„||	|  ||
|  k�r„|d7 }�q.W xb|	|k�rè|
|k�rè|||
d  ƒ�rè||	d  ||
d  k�rè|	d |
d |d   }	}
}�qˆW xV|	| |k �r@|
| |k �r@|||
|  ƒ�r@||	|  ||
|  k�r@|d }�qìW t|	|
|ƒS )Nr   r%   )r   r   r&   r+   Ú__contains__ÚrangeÚgetr   )r   ÚaloÚahiÚbloÚbhir   r   r&   ZisbjunkZbestiZbestjZbestsizeZj2lenZnothingr0   Zj2lengetZnewj2lenÚjÚkr   r   r   Úfind_longest_matchP  sB    8$ 	"z"SequenceMatcher.find_longest_matchc             C   s„  | j d k	r| j S t| jƒt| jƒ }}d|d|fg}g }x”|rÌ|jƒ \}}}}| j||||ƒ \}	}
}}|r:|j|ƒ ||	k r˜||
k r˜|j||	||
fƒ |	| |k r:|
| |k r:|j|	| ||
| |fƒ q:W |jƒ  d } }}g }x^|D ]V\}}}|| |k�r|| |k�r||7 }qì|�r2|j|||fƒ |||  }}}qìW |�r\|j|||fƒ |j||dfƒ tt	t
j|ƒƒ| _ | j S )Nr   )r   r.   r   r   Úpopr=   r)   ÚsortÚlistÚmapr   Ú_make)r   ÚlaÚlbZqueuer   r7   r8   r9   r:   r0   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  | _ }xŒ| jƒ D ]€\}}}d}||k rP||k rPd}n||k r^d}n||k rjd}|r‚|j|||||fƒ || ||  }}|r,|jd||||fƒ q,W |S )Nr   r   ÚreplaceÚdeleteÚinsertÚequal)r    rJ   r)   )r   r0   r;   ZanswerÚaiÚbjÚsizeÚtagr   r   r   Úget_opcodes  s$    

zSequenceMatcher.get_opcodesé   c       
   
   c   sr  | j ƒ }|sdg}|d d dkrZ|d \}}}}}|t||| ƒ|t||| ƒ|f|d< |d d dkr¢|d \}}}}}||t||| ƒ|t||| ƒf|d< || }g }	x�|D ]ˆ\}}}}}|dkoÔ|| |k�r(|	j||t||| ƒ|t||| ƒfƒ |	V  g }	t||| ƒt||| ƒ }}|	j|||||fƒ q´W |	�rnt|	ƒdk�ob|	d d dk �rn|	V  d S )NrN   r   r%   )rN   r   r%   r   r%   éÿÿÿÿrU   rU   )rS   ÚmaxÚminr)   r.   )
r   r3   ZcodesrR   rF   rH   rG   rI   ZnnÚgroupr   r   r   Úget_grouped_opcodes<  s(    &&((z#SequenceMatcher.get_grouped_opcodesc             C   s0   t dd„ | jƒ D ƒƒ}t|t| jƒt| jƒ ƒS )Nc             s   s   | ]}|d V  qdS )r%   NrU   r   )Ú.0Ztripler   r   r   ú	<genexpr>„  s    z(SequenceMatcher.ratio.<locals>.<genexpr>)ÚsumrJ   r   r.   r   r   )r   r   r   r   r   Úration  s    zSequenceMatcher.ratioc             C   s²   | j d kr8i  | _ }x"| jD ]}|j|dƒd ||< qW | j }i }|jd }}xH| jD ]>}||ƒrl|| }n|j|dƒ}|d ||< |dkrV|d }qVW t|t| jƒt| jƒ ƒS )Nr   r%   )r!   r   r6   r4   r   r   r.   )r   r!   r1   ZavailZavailhasr   Znumbr   r   r   Úquick_ratio‡  s    



zSequenceMatcher.quick_ratioc             C   s*   t | jƒt | jƒ }}tt||ƒ|| ƒS )N)r.   r   r   r   rW   )r   rC   rD   r   r   r   Úreal_quick_ratio¤  s    z SequenceMatcher.real_quick_ratio)Nr   r   T)rT   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r"   r=   rJ   rS   rY   r]   r^   r_   r   r   r   r   r   +   s   l
@,'nG7
2rT   ç333333ã?c             C   s¶   |dkst d|f ƒ‚d|  ko(dkn  s<t d|f ƒ‚g }tƒ }|j| ƒ xL|D ]D}|j|ƒ |jƒ |krV|jƒ |krV|jƒ |krV|j|jƒ |fƒ qVW t||ƒ}dd„ |D ƒS )Nr   zn must be > 0: %rg        g      ð?z cutoff must be in [0.0, 1.0]: %rc             S   s   g | ]\}}|‘qS r   r   )rZ   ZscorerE   r   r   r   ú
<listcomp>Þ  s    z%get_close_matches.<locals>.<listcomp>)	Ú
ValueErrorr   r   r   r_   r^   r]   r)   Ú	_nlargest)ZwordZpossibilitiesr3   ÚcutoffÚresultÚsrE   r   r   r   r   °  s    



c             C   s4   dt | ƒ }}x ||k r.| | |kr.|d7 }qW |S )Nr   r%   )r.   )ÚlineÚchr0   r3   r   r   r   Ú_count_leadingà  s    
rl   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 )N)ÚlinejunkÚcharjunk)r   rm   rn   r   r   r   r   M  s    zDiffer.__init__c       
      c   s²   t | j||ƒ}xž|jƒ D ]’\}}}}}|dkrD| j||||||ƒ}	n\|dkr^| jd|||ƒ}	nB|dkrx| jd|||ƒ}	n(|dkr’| jd|||ƒ}	ntd|f ƒ‚|	E d H  qW d S )	NrK   rL   ú-rM   ú+rN   ú zunknown tag %r)r   rm   rS   Ú_fancy_replaceÚ_dumpre   )
r   r   r   ÚcruncherrR   r7   r8   r9   r:   Úgr   r   r   Úcompared  s    zDiffer.comparec             c   s*   x$t ||ƒD ]}d||| f V  qW d S )Nz%s %s)r5   )r   rR   rE   ÚloÚhir0   r   r   r   rs   �  s    zDiffer._dumpc       
      c   sr   || || k r2| j d|||ƒ}| j d|||ƒ}n | j d|||ƒ}| j d|||ƒ}x||fD ]}	|	E d H  q\W d S )Nrp   ro   )rs   )
r   r   r7   r8   r   r9   r:   ÚfirstÚsecondru   r   r   r   Ú_plain_replace’  s    zDiffer._plain_replacec             c   sH  d\}}t | jƒ}	d\}
}xžt||ƒD ]�}|| }|	j|ƒ xxt||ƒD ]j}|| }||krp|
d krH|| }
}qH|	j|ƒ |	jƒ |krH|	jƒ |krH|	jƒ |krH|	jƒ ||  }}}qHW q&W ||k � rü|
d krê| j||||||ƒE d H  d S |
|d  }}}nd }
| j	||||||ƒE d H  || ||  }}|
d k�rd }}|	j
||ƒ x´|	jƒ 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 ƒ‚�qTW | j||||ƒE d H  n
d| V  | j	||d |||d |ƒE d H  d S )Nç®Gáz®ç?ç      è?g      ð?r   rK   ú^rL   ro   rM   rp   rN   rq   zunknown tag %rz  r%   )r|   r}   )NN)r   rn   r5   r   r   r_   r^   r]   r{   Ú_fancy_helperr   rS   re   Ú_qformat)r   r   r7   r8   r   r9   r:   Z
best_ratiorg   rt   ZeqiZeqjr;   rP   r0   rO   Zbest_iZbest_jZaeltZbeltÚatagsÚbtagsrR   Zai1Zai2Zbj1Zbj2rC   rD   r   r   r   rr      sX    










zDiffer._fancy_replacec             c   sb   g }||k r<||k r*| j ||||||ƒ}qT| jd|||ƒ}n||k rT| jd|||ƒ}|E d H  d S )Nro   rp   )rr   rs   )r   r   r7   r8   r   r9   r:   ru   r   r   r   r   þ  s    zDiffer._fancy_helperc             c   sª   t t|dƒt|dƒƒ}t |t|d |… dƒƒ}t |t|d |… dƒƒ}||d … jƒ }||d … jƒ }d| V  |r†dd| |f V  d| V  |r¦dd| |f V  d S )Nú	rq   z- z? %s%s
z+ )rW   rl   Úrstrip)r   ZalineZbliner�   r‚   Úcommonr   r   r   r€   
  s    


zDiffer._qformat)NN)
r`   ra   rb   r   rv   rs   r{   rr   r   r€   r   r   r   r   r   ï  s   ^
)^Nz\s*(?:#\s*)?$c             C   s   || ƒd k	S )Nr   )rj   Zpatr   r   r   r   >  s    ú 	c             C   s   | |kS )Nr   )rk   Zwsr   r   r   r   N  s    c             C   s:   | d }||  }|dkr"dj |ƒS |s.|d8 }dj ||ƒS )Nr%   z{}z{},{})Úformat)ÚstartÚstopÚ	beginningr   r   r   r   Ú_format_range_unifiede  s    
r‹   r   Ú
c             c   sh  t | ||||||ƒ d}�xHtd | |ƒj|ƒD �]0}	|s€d}|rJdj|ƒnd}
|r\dj|ƒnd}dj||
|ƒV  dj|||ƒV  |	d |	d  }}t|d |d	 ƒ}t|d
 |d ƒ}dj|||ƒV  x˜|	D ]�\}}}}}|dk�rx| ||… D ]}d| V  qòW qÌ|dk�r2x | ||… D ]}d| V  �qW |dkrÌx |||… D ]}d| V  �qHW qÌW q.W d S )NFTz	{}r   z
--- {}{}{}z
+++ {}{}{}r   r%   é   rT   é   z@@ -{} +{} @@{}rN   rq   rK   rL   ro   rM   rp   rU   >   rL   rK   >   rK   rM   )Ú_check_typesr   rY   r‡   r‹   )r   r   ÚfromfileÚtofileÚfromfiledateÚ
tofiledater3   ÚlinetermÚstartedrX   ÚfromdateÚtodatery   ÚlastÚfile1_rangeÚfile2_rangerR   rF   rH   rG   rI   rj   r   r   r   r	   p  s0    )

c             C   sB   | d }||  }|s|d8 }|dkr.dj |ƒS dj ||| d ƒS )Nr%   z{}z{},{})r‡   )rˆ   r‰   rŠ   r   r   r   r   Ú_format_range_context¹  s    
r›   c             c   sª  t | ||||||ƒ tddddd�}d}	�xztd | |ƒj|ƒD �]b}
|	s�d}	|rZdj|ƒnd	}|rldj|ƒnd	}d
j|||ƒV  dj|||ƒV  |
d |
d  }}d| V  t|d |d ƒ}dj||ƒV  tdd„ |
D ƒƒ�r&xD|
D ]<\}}}}}|dkræx$| ||… D ]}|| | V  �q
W qæW t|d |d ƒ}dj||ƒV  tdd„ |
D ƒƒr>xH|
D ]@\}}}}}|dk�r^x$|||… D ]}|| | V  �q„W �q^W q>W d S )Nz+ z- z! z  )rM   rL   rK   rN   FTz	{}r   z
*** {}{}{}z
--- {}{}{}r   r%   z***************r�   z*** {} ****{}c             s   s    | ]\}}}}}|dkV  qdS )rK   rL   N>   rL   rK   r   )rZ   rR   Ú_r   r   r   r[     s    zcontext_diff.<locals>.<genexpr>rM   rT   rŽ   z--- {} ----{}c             s   s    | ]\}}}}}|dkV  qdS )rK   rM   N>   rK   rM   r   )rZ   rR   rœ   r   r   r   r[     s    rL   rU   )r�   Údictr   rY   r‡   r›   Úany)r   r   r�   r‘   r’   r“   r3   r”   Úprefixr•   rX   r–   r—   ry   r˜   r™   rR   rF   rH   rœ   rj   rš   rG   rI   r   r   r   r   Å  s4    ,

c             G   sŽ   | r2t | d tƒ r2tdt| d ƒj| d f ƒ‚|rdt |d tƒ rdtdt|d ƒj|d f ƒ‚x$|D ]}t |tƒsjtd|f ƒ‚qjW d S )Nr   z)lines to compare must be str, not %s (%r)z"all arguments must be str, not: %r)Ú
isinstanceÚstrÚ	TypeErrorÚtyper`   )r   r   ÚargsÚargr   r   r   r�     s    

r�   ó    ó   
c	          	   c   s‚   dd„ }	t t|	|ƒƒ}t t|	|ƒƒ}|	|ƒ}|	|ƒ}|	|ƒ}|	|ƒ}|	|ƒ}| ||||||||ƒ}
x|
D ]}|jddƒV  qhW d S )Nc             S   sP   y| j ddƒS  tk
rJ } z"dt| ƒj| f }t|ƒ|‚W Y d d }~X nX d S )NÚasciiÚsurrogateescapez(all arguments must be bytes, not %s (%r))ÚdecodeÚAttributeErrorr£   r`   r¢   )ri   ÚerrÚmsgr   r   r   rª   -  s    zdiff_bytes.<locals>.decoder¨   r©   )r@   rA   Úencode)Zdfuncr   r   r�   r‘   r’   r“   r3   r”   rª   Úlinesrj   r   r   r   r
   "  s    
c             C   s   t ||ƒj| |ƒS )N)r   rv   )r   r   rm   rn   r   r   r   r   @  s    #c             #   sœ  dd l }|j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}�xdd g|  }	}
d
}xR|d
kràyt|ƒ\}}}W n tk
r¾   d S X |	| }|||f|
|< |	d	7 }	q�W |	|k� rødV  |}n|	}d}	x.|�r.|	| }|	d	7 }	|
| V  |d	8 }�qW |d	 }yDx>|�rxt|ƒ\}}}|�r`|d	 }n|d	8 }|||fV  �q<W W qz tk
�r’   d S X qzW d S )Nr   z(\++|\-+|\^+)c                sú   ||  d7  < |d kr2|| | j dƒdd … fS |dkrÄ| j dƒ| j dƒ }}g }|fdd„}ˆ j||ƒ xHt|ƒD ]<\}\}	}
|d|	… d | ||	|
…  d ||
d …  }qvW |dd … }n*| j dƒdd … }|sÞd	}d| | d }|| |fS )
Nr%   r   r�   ú?c             S   s&   |j | jdƒd | jƒ gƒ | jdƒS )Nr%   r   )r)   rX   Úspan)Zmatch_objectÚsub_infor   r   r   Úrecord_sub_info°  s    z3_mdiff.<locals>._make_line.<locals>.record_sub_infoú úrq   )r>   ÚsubÚreversed)r¯   Z
format_keyÚsideZ	num_linesÚtextZmarkersr²   r³   ÚkeyZbeginÚend)Ú	change_rer   r   Ú
_make_line�  s     4z_mdiff.<locals>._make_linec              3   s€  g } d\}}�xlx t | ƒdk r0| jtˆdƒƒ qW djdd„ | D ƒƒ}|jdƒrX|}�nÄ|jdƒr„ˆ | ddƒˆ | dd	ƒd
fV  q�n˜|jdƒr°|d	8 }ˆ | ddƒd d
fV  q�nl|jdƒrÞˆ | ddƒd  }}|d	 d }}�n>|jdƒ�rˆ | d dƒˆ | dd	ƒd
fV  q�n|jdƒ�r8ˆ | ddƒˆ | d d	ƒd
fV  qnä|jdƒ�rd|d	8 }ˆ | ddƒd d
fV  qn¸|jdƒ�r�|d	7 }d ˆ | dd	ƒd
fV  qnŒ|jdƒ�r¾d ˆ | dd	ƒ }}|d	 d }}n^|jdƒ�rê|d	7 }d ˆ | dd	ƒd
fV  qn2|jdƒ�rˆ | d d … d dƒˆ | d d	ƒdfV  qx|dk �r:|d	7 }dV  �qW x|dk�rZ|d	8 }dV  �q>W |jdƒ�rld S ||d
fV  qW d S ) Nr   rŽ   ÚXr   c             S   s   g | ]}|d  ‘qS )r   r   )rZ   rj   r   r   r   rd   Ý  s    z2_mdiff.<locals>._line_iterator.<locals>.<listcomp>z-?+?r°   r%   Tz--++ro   ú--?+ú--+ú- z-+?z-?+z+--rp   ú+ ú+-rq   FrŒ   )r   r   )r¿   rÀ   rÁ   )rÂ   rÃ   ©r   rŒ   )NrÄ   T©r   rŒ   )rÅ   NT)r.   r)   ÚnextÚjoinÚ
startswith)r¯   Znum_blanks_pendingZnum_blanks_to_yieldri   Ú	from_lineÚto_line)r½   Údiff_lines_iteratorr   r   Ú_line_iteratorÇ  sf    



$z_mdiff.<locals>._line_iteratorc              3   s¸   ˆ ƒ } g g  }}x¢xpt |ƒdks,t |ƒdkr‚yt| ƒ\}}}W n tk
rR   d S X |d k	rj|j||fƒ |d k	r|j||fƒ qW |jdƒ\}}|jdƒ\}}|||pª|fV  qW d S )Nr   )r.   rÆ   ÚStopIterationr)   r>   )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Ï   Úcontextrm   rn   rÒ   rÑ   Zline_pair_iteratorZlines_to_writeÚindexZcontextLinesrÐ   rÉ   rÊ   r0   r   )rÌ   r½   r¼   rË   r   Ú_mdiffe  sT    "
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 )N)Ú_tabsizeÚ_wrapcolumnÚ	_linejunkÚ	_charjunk)r   ÚtabsizeZ
wrapcolumnrm   rn   r   r   r   r   Á  s    zHtmlDiff.__init__r   Fé   zutf-8)Úcharsetc            C   s:   | j t| j| j| j||||||d�|d� j|dƒj|ƒ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   | j ddƒ} | jˆ jƒ} | j ddƒ} | j ddƒjdƒS )Nrq   r´   rƒ   rŒ   )rK   Ú
expandtabsrØ   r„   )rj   )r   r   r   Úexpand_tabs÷  s    z2HtmlDiff._tab_newline_replace.<locals>.expand_tabsc                s   g | ]}ˆ |ƒ‘qS r   r   )rZ   rj   )rê   r   r   rd      s    z1HtmlDiff._tab_newline_replace.<locals>.<listcomp>c                s   g | ]}ˆ |ƒ‘qS r   r   )rZ   rj   )rê   r   r   rd     s    r   )r   rÎ   rÏ   r   )rê   r   r   Ú_tab_newline_replaceí  s    
	zHtmlDiff._tab_newline_replacec             C   s  |s|j ||fƒ d S t|ƒ}| j}||ksB||jdƒd  |krT|j ||fƒ d S d}d}d}xd||k rÄ||k rÄ|| dkr˜|d7 }|| }|d7 }qb|| dkr²|d7 }d}qb|d7 }|d7 }qbW |d |… }	||d … }
|rö|	d }	d| |
 }
|j ||	fƒ | j|d|
ƒ d S )Nr´   rT   r   r   r%   rµ   ú>)r)   r.   rÙ   ÚcountÚ_split_line)r   Z	data_listZline_numr¹   rQ   rV   r0   r3   ZmarkZline1Zline2r   r   r   rî     s8    

zHtmlDiff._split_linec             c   s¨   x¢|D ]š\}}}|d kr&|||fV  q|| \}}\}}g g  }	}
| j |	||ƒ | j |
||ƒ x@|	sh|
rž|	rx|	jdƒ}nd}|
rŒ|
jdƒ}nd}|||fV  q`W qW d S )Nr   r   rq   )r   rq   )r   rq   )rî   r>   )r   ÚdiffsÚfromdataÚtodataÚflagZfromlineZfromtextZtolineZtotextÚfromlistÚtolistr   r   r   Ú_line_wrapper;  s     

zHtmlDiff._line_wrapperc             C   s–   g g g   }}}xz|D ]r\}}}y4|j | jd|f|žŽ ƒ |j | jd|f|žŽ ƒ W n( tk
r|   |j d ƒ |j d ƒ Y nX |j |ƒ qW |||fS )Nr   r%   )r)   Ú_format_liner¢   )r   rï   ró   rô   Úflaglistrð   rñ   rò   r   r   r   Ú_collect_linesW  s    
zHtmlDiff._collect_linesc             C   sr   yd| }d| j | |f }W n tk
r6   d}Y nX |jddƒjddƒjdd	ƒ}|jd
dƒjƒ }d|||f S )Nz%dz
 id="%s%s"r   ú&z&amp;rì   z&gt;ú<z&lt;rq   z&nbsp;z<<td class="diff_header"%s>%s</td><td nowrap="nowrap">%s</td>)Ú_prefixr¢   rK   r„   )r   r¸   rò   Zlinenumr¹   Úidr   r   r   rö   l  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_prefixƒ  s    

zHtmlDiff._make_prefixc             C   sø   | j d }dgt|ƒ }dgt|ƒ }d\}	}
d}xbt|ƒD ]V\}}|rŽ|
s’d}
|}td|| gƒ}d||	f ||< |	d7 }	d||	f ||< q<d}
q<W |sÊdg}dg}dg}d}|rÀdg}|}n
d	g }}|d sÞd
| |d< d| ||< |||||fS )Nr%   r   r   FTz id="difflib_chg_%s_%d"z"<a href="#difflib_chg_%s_%d">n</a>z2<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   F)rû   r.   r'   rV   )r   ró   rô   r÷   rÔ   rß   rþ   Únext_idÚ	next_hrefZnum_chgZ	in_changer˜   r0   rò   r   r   r   Ú_convert_flagsŽ  s:    

zHtmlDiff._convert_flagsc          	   C   sV  | j ƒ  | j||ƒ\}}|r"|}nd }t|||| j| jd�}| jrL| j|ƒ}| j|ƒ\}	}
}| j|	|
|||ƒ\}	}
}}}g }d}x`t	t
|ƒƒD ]P}|| d kr²|dkrÞ|jdƒ qŽ|j||| || |	| || |
| f ƒ qŽW |sì|�rddd| dd| f }nd	}| jtd	j|ƒ|| jd
 d� }|jddƒjddƒjddƒjddƒjddƒS )N)rm   rn   z1            <tr><td class="diff_next"%s>%s</td>%sz%<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ƒ   z&nbsp;zV            <tr><td class="diff_next"%s>%s</td>%s<td class="diff_next">%s</td>%s</tr>
)rÿ   rë   rÖ   rÚ   rÛ   rÙ   rõ   rø   r  r5   r.   r)   Ú_table_templater�   rÇ   rû   rK   )r   rÎ   rÏ   ræ   rç   rÔ   rß   Zcontext_linesrï   ró   rô   r÷   r  r   ri   Zfmtr0   r  rà   r   r   r   rå   ½  sJ    

 
zHtmlDiff.make_table)r   r   FrÝ   )r   r   FrÝ   )r`   ra   rb   râ   rã   r  rä   rý   r   r   rè   rë   rî   rõ   rø   rö   rÿ   r  rå   r   r   r   r   r   «  s$    7/ c             c   sp   ydddœt |ƒ }W n  tk
r6   td| ƒ‚Y nX d|f}x*| D ]"}|d d… |krF|dd … V  qFW d S )Nz- z+ )r%   r�   z)unknown delta choice (must be 1 or 2): %rz  r�   )ÚintÚKeyErrorre   )ZdeltaZwhichrR   Úprefixesrj   r   r   r   r     s    
c              C   s   dd l } dd l}| j|ƒS )Nr   )ÚdoctestÚdifflibZtestmod)r  r	  r   r   r   Ú_test,  s    r
  Ú__main__)rT   rc   )r†   )r   r   r   r   rT   rŒ   )r   r   r   r   rT   rŒ   )r¦   r¦   r¦   r¦   rT   r§   )#Ú__all__Úheapqr   rf   Úcollectionsr   Z_namedtupler   r   r   r   rl   r   rÒ   rÓ   Úmatchr   r   r‹   r	   r›   r   r�   r
   r   rÖ   râ   rã   r  rä   Úobjectr   r   r
  r`   r   r   r   r   Ú<module>   s\   
     

0  O
 
H 
K 
%  !	
  a 
