<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

]H                @   s  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 Gd d   d  Z	 d d d d   Z
 d d   Z Gd d   d  Z d d l Z e j d  j d d  Z d d d  Z d d   Z d  d  d  d  d d! d" d  Z d# d$   Z d  d  d  d  d d! d% d  Z d& d'   Z d( d( d( d( d d) d* d	  Z d e d+ d  Z d d e d, d-  Z d. Z d/ Z d0 Z d1 Z Gd2 d
   d
 e  Z [ d3 d   Z  d4 d5   Z! e" d6 k re!   d S)7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 |  | Sd S)Ng       @g      ? )matcheslengthr   r   ,/opt/alt/python35/lib64/python3.5/difflib.py_calculate_ratio&   s    r   c               @   s   e  Z d  Z d 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 d   Z d d   Z d d   Z d S)r   N Tc             C   s6   | |  _  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   s0   | |  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   sC   | |  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   sP  |  j  } i  |  _ } x9 t |  D]+ \ } } | j | g   } | j |  q# Wt   |  _ } |  j } | r x- | j   D] } | |  r~ | j	 |  q~ Wx | D] } | | =q Wt   |  _
 } t |  }	 |  j rL|	 d k rL|	 d d }
 x9 | j   D]+ \ } } t |  |
 k r| j	 |  qWx | D] } | | =q;Wd  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   s  |  j  |  j |  j |  j j f \ } } } } | | d }	 }
 } i  } g  } x t | |  D] } | j } i  } x | j | | |  D]q } | | k  r q | | k r P| | d d  d } | | <| | k r | | d | | d | }	 }
 } q W| } q] Wxm |	 | k rw|
 | k rw| | |
 d  rw| |	 d | |
 d k rw|	 d |
 d | d }	 }
 } qWx_ |	 | | k  r|
 | | k  r| | |
 |  r| |	 | | |
 | k r| d 7} q{Wxl |	 | k rH|
 | k rH| | |
 d  rH| |	 d | |
 d k rH|	 d |
 d | d }	 }
 } qWx^ |	 | | k  r|
 | | k  r| | |
 |  r| |	 | | |
 | k r| d } qLWt |	 |
 |  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  St |  j  t |  j  } } d | d | f g } g  } x | r| j   \ } } } } |  j | | | |  \ }	 }
 } } | rS | j |  | |	 k  r | |
 k  r | j | |	 | |
 f  |	 | | k  rS |
 | | k  rS | j |	 | | |
 | | f  qS W| j   d } } } g  } xt | D]l \ } } } | | | k r| | | k r| | 7} qD| r| j | | | f  | | | } } } qD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lb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  Sd } } g  |  _  } x |  j   D] \ } } } d } | | k  rp | | k  rp d } n' | | k  r d } n | | k  r d } | r | j | | | | | f  | | | | } } | r: | j d | | | | f  q: W| S)Nr   r   replacedeleteinsertequal)r    rK   r)   )r   r0   r;   Zansweraibjsizetagr   r   r   get_opcodes  s$    
		 zSequenceMatcher.get_opcodes   c       
   
   c   s  |  j    } | s d g } | d d d k r{ | d \ } } } } } | t | | |  | t | | |  | f | d <| d d d k r | d \ } } } } } | | t | | |  | t | | |  f | d <| | } g  }	 x | D] \ } } } } } | d k r| | | k r|	 j | | t | | |  | t | | |  f  |	 Vg  }	 t | | |  t | | |  } } |	 j | | | | | f  q W|	 rt |	  d k o|	 d d d k r|	 Vd  S)NrO   r   r%   )rO   r   r%   r   r%   rV   rV   )rT   maxminr)   r.   )
r   r3   ZcodesrS   rG   rI   rH   rJ   nngroupr   r   r   get_grouped_opcodes<  s(    	33
6' -z#SequenceMatcher.get_grouped_opcodesc             C   sB   t  d d   |  j   D  } t | t |  j  t |  j   S)Nc             s   s   |  ] } | d Vq d S)r%   NrV   r   ).0Ztripler   r   r   	<genexpr>  s    z(SequenceMatcher.ratio.<locals>.<genexpr>)sumrK   r   r.   r   r   )r   r   r   r   r   ration  s    zSequenceMatcher.ratioc             C   s   |  j  d  k rJ i  |  _  } x+ |  j D]  } | j | d  d | | <q& W|  j  } i  } | j d } } x` |  j D]U } | |  r | | } n | j | d  } | d | | <| d k rs | d } qs Wt | 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   s9   t  |  j  t  |  j  } } t t | |  | |  S)N)r.   r   r   r   rX   )r   rC   rD   r   r   r   real_quick_ratio  s    z SequenceMatcher.real_quick_ratio)__name__
__module____qualname__r   r   r   r   r"   r=   rK   rT   r[   r_   r`   ra   r   r   r   r   r   +   s   l@,'nG72rU   g333333?c             C   s   | d k s t  d | f   d | k o6 d k n sN t  d | f   g  } t   } | j |   xj | D]b } | j |  | j   | k rq | j   | k rq | j   | k rq | j | j   | f  qq Wt | |  } 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 Sr   r   )r\   ZscorerF   r   r   r   
<listcomp>  s   	 z%get_close_matches.<locals>.<listcomp>)	
ValueErrorr   r   r   ra   r`   r_   r)   	_nlargest)ZwordZpossibilitiesr3   cutoffresultsrF   r   r   r   r     s    	c             C   sD   d t  |   } } x* | | k  r? |  | | k r? | d 7} q W| S)Nr   r%   )r.   )linechr0   r3   r   r   r   _count_leading  s    
rm   c               @   sj   e  Z d  Z d 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   rn   ro   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 | | |  }	 na | d k r |  j d | | |  }	 n: | d k r |  j d | | |  }	 n t d | f   |	 Ed  Hq" Wd  S)	NrL   rM   -rN   +rO    zunknown tag %r)r   rn   rT   _fancy_replace_dumprf   )
r   r   r   cruncherrS   r7   r8   r9   r:   gr   r   r   compared  s    "!zDiffer.comparec             c   s1   x* t  | |  D] } d | | | f Vq Wd  S)Nz%s %s)r5   )r   rS   rF   lohir0   r   r   r   rt     s    zDiffer._dumpc       
      c   s   | | | | k  rG |  j  d | | |  } |  j  d | | |  } n0 |  j  d | | |  } |  j  d | | |  } x | | f D] }	 |	 Ed  Hq Wd  S)Nrq   rp   )rt   )
r   r   r7   r8   r   r9   r:   firstsecondrv   r   r   r   _plain_replace  s    zDiffer._plain_replacec             c   s  d \ } } t  |  j  }	 d \ }
 } x t | |  D] } | | } |	 j |  x t | |  D] } | | } | | k r |
 d  k rd | | }
 } qd |	 j |  |	 j   | k rd |	 j   | k rd |	 j   | k rd |	 j   | | } } } qd Wq7 W| | k  rU|
 d  k r>|  j | | | | | |  Ed  Hd  S|
 | d } } } n d  }
 |  j	 | | | | | |  Ed  H| | | | } } |
 d  k rd } } |	 j
 | |  x |	 j   D] \ } } } } } | | | | } } | d k r| d | 7} | d | 7} q| d k r6| d | 7} q| d	 k rS| d
 | 7} q| d k r~| d | 7} | d | 7} qt d | f   qW|  j | | | |  Ed  Hn	 d | V|  j	 | | d | | | d |  Ed  Hd  S)NGz?      ?g      ?r   rL   ^rM   rp   rN   rq   rO   rr   zunknown tag %rz  r%   )r}   r~   )NN)r   ro   r5   r   r   ra   r`   r_   r|   _fancy_helperr   rT   rf   _qformat)r   r   r7   r8   r   r9   r:   Z
best_ratiorh   ru   ZeqiZeqjr;   rQ   r0   rP   Zbest_iZbest_jZaeltZbeltatagsbtagsrS   Zai1Zai2Zbj1Zbj2rC   rD   r   r   r   rs     sX    

"!!
"	zDiffer._fancy_replacec             c   s   g  } | | k  rZ | | k  r? |  j  | | | | | |  } q~ |  j d | | |  } n$ | | k  r~ |  j d | | |  } | Ed  Hd  S)Nrp   rq   )rs   rt   )r   r   r7   r8   r   r9   r:   rv   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	rr   z- z? %s%s
z+ )rX   rm   rstrip)r   ZalineZbliner   r   commonr   r   r   r   
  s    ""		zDiffer._qformat)
rb   rc   rd   r   rw   rt   r|   rs   r   r   r   r   r   r   r     s   ^)^Nz\s*(?:#\s*)?$c             C   s   | |   d  k	 S)Nr   )rk   patr   r   r   r   >  s    z 	c             C   s
   |  | k S)Nr   )rl   Zwsr   r   r   r   N  s    c             C   sM   |  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   s  t  |  | | | | | |  d } xt d  |  |  j |  D]z}	 | s d } | re d 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 rTx! |  | |  D] } d | Vq>Wq| d k rx! |  | |  D] } d | VqqW| d k rx! | | |  D] } d | VqWqWq> Wd  S)NFTz	{}r   z
--- {}{}{}z
+++ {}{}{}r   r%      rU      z@@ -{} +{} @@{}rO   rr   rL   rM   rp   rN   rq   rV   >   rL   rM   >   rL   rN   )_check_typesr   r[   r   r   )r   r   fromfiletofilefromfiledate
tofiledater3   linetermstartedrZ   fromdatetodaterz   lastfile1_rangefile2_rangerS   rG   rI   rH   rJ   rk   r   r   r   r	   p  s0    )"c             C   sU   |  d } | |  } | s$ | d 8} | d k r= d j  |  Sd 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 d d  } d	 }	 xt d  |  |  j |  D]}
 |	 s d
 }	 | r d j |  n d } | r d j |  n d } d j | | |  Vd j | | |  V|
 d |
 d } } d | Vt | d | d  } d j | |  Vt d d   |
 D  rxQ |
 D]I \ } } } } } | d k r5x% |  | |  D] } | | | VqgWq5Wt | d | d  } d j | |  Vt d d   |
 D  r_ xQ |
 D]I \ } } } } } | d k rx% | | |  D] } | | | VqWqWq_ Wd  S)NrN   z+ rM   z- rL   z! rO   z  FTz	{}r   z
*** {}{}{}z
--- {}{}{}r   r%   z***************r   z*** {} ****{}c             s   s*   |  ]  \ } } } } } | d k Vq d S)rL   rM   N>   rL   rM   r   )r\   rS   _r   r   r   r]     s    zcontext_diff.<locals>.<genexpr>rU   r   z--- {} ----{}c             s   s*   |  ]  \ } } } } } | d k Vq d S)rL   rN   N>   rL   rN   r   )r\   rS   r   r   r   r   r]     s    rV   )r   dictr   r[   r   r   any)r   r   r   r   r   r   r3   r   prefixr   rZ   r   r   rz   r   r   rS   rG   rI   r   rk   r   rH   rJ   r   r   r   r     s4    ,!"	c             G   s   |  rA t  |  d t  rA t d t |  d  j |  d f   | r t  | d t  r t d t | d  j | d f   x0 | D]( } t  | t  s t d | f   q Wd  S)Nr   z)lines to compare must be str, not %s (%r)z"all arguments must be str, not: %r)
isinstancestr	TypeErrortyperb   )r   r   argsargr   r   r   r     s    !!r       s   
c	          	   c   s   d d   }	 t  t |	 |   } t  t |	 |   } |	 |  } |	 |  } |	 |  } |	 |  } |	 |  } |  | | | | | | | |  }
 x |
 D] } | j d d  Vq Wd  S)Nc             S   sh   y |  j  d d  SWnM t k
 rc } z- d t |   j |  f } t |  |  WYd  d  } ~ Xn Xd  S)Nasciisurrogateescapez(all arguments must be bytes, not %s (%r))decodeAttributeErrorr   rb   r   )rj   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   linesrk   r   r   r   r
   "  s    !c             C   s   t  | |  j |  |  S)N)r   rw   )r   r   rn   ro   r   r   r   r   @  s    #c             #   s  d d  l  } | j d   t |  | | |   d d g  f d d     f d d       f d d   } |   } | d  k r | Ed  HnN| d	 7} d } x;d d  g | }	 }
 d
 } xi | d
 k r+y t |  \ } } } Wn t k
 r d  SYn X|	 | } | | | f |
 | <|	 d	 7}	 q W|	 | k rFd V| } n |	 } d }	 x1 | r|	 | } |	 d	 7}	 |
 | V| d	 8} qUW| d	 } xJ | rt |  \ } } } | r| d	 } n
 | d	 8} | | | f VqWq Wd  S)Nr   z(\++|\-+|\^+)c                s>  | | d 7<| d  k r; | | |  j  d  d d   f S| d k r |  j  d  |  j  d  } } g  } | d d  }   j | |  xX t |  D]J \ } \ }	 }
 | d |	  d | | |	 |
  d | |
 d   } q W| d d   } n7 |  j  d  d d   } | sd	 } d | | d } | | | f S)
Nr%   r   r   ?c             S   s3   | j  |  j d  d |  j   g  |  j d  S)Nr%   r   )r)   rZ   span)Zmatch_objectsub_infor   r   r   record_sub_info  s    &z3_mdiff.<locals>._make_line.<locals>.record_sub_info rr   )r>   subreversed)r   Z
format_keysideZ	num_linestextZmarkersr   r   keyZbeginend)	change_rer   r   
_make_line  s     !<z_mdiff.<locals>._make_linec              3   s4  g  }  d \ } } xx, t  |   d k  rC |  j t  d   q Wd j d d   |  D  } | j d  rx | } nO| j d  r   |  d d    |  d d	  d
 f Vq n| j d  r | d	 8}   |  d d  d  d
 f Vq n| j d  r(  |  d d  d  } } | d	 d } } n| j d  rc  |  d  d    |  d d	  d
 f Vq nd| j d  r  |  d d    |  d  d	  d
 f Vq n)| j d  r| 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  rLd    |  d d	  } } | d	 d } } n{ | j d  r| d	 7} d    |  d d	  d
 f Vq nB | j d  r  |  d  d   d  d    |  d  d	  d f Vq x | d k  r| d	 7} d VqWx | d k r
| d	 8} d VqW| j d  rd  S| | d
 f Vq Wd  S) Nr   r   Xr   c             S   s   g  |  ] } | d   q S)r   r   )r\   rk   r   r   r   re     s   	 z2_mdiff.<locals>._line_iterator.<locals>.<listcomp>z-?+?r   r%   Tz--++rp   --?+--+- z-+?z-?+z+--rq   + +-rr   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_yieldrj   	from_lineto_line)r   diff_lines_iteratorr   r   _line_iterator  sf    	&
&&


0
	
	z_mdiff.<locals>._line_iteratorc              3   s       }  g  g  } } x x t  |  d k s@ t  |  d k r y t |   \ } } } Wn t k
 rq d  SYn X| d  k	 r | j | | f  | d  k	 r | j | | f  q W| j d  \ } } | j d  \ } } | | | p | f Vq Wd  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   contextrn   ro   r   r   Zline_pair_iteratorZlines_to_writeindexZcontextLinesr   r   r   r0   r   )r   r   r   r   r   _mdiffe  sN    "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 d d  Z	 d d d 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 d d d  Z d S)r   r      Nc             C   s(   | |  _  | |  _ | |  _ | |  _ d  S)N)_tabsize_wrapcolumn	_linejunk	_charjunk)r   tabsizeZ
wrapcolumnrn   ro   r   r   r   r     s    			zHtmlDiff.__init__r   F   charsetzutf-8c            C   s_   |  j  t d |  j d |  j d |  j | | | | d | d | d |  j | d  j |  S)NZstylesZlegendtabler   numlinesr   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                sN    f d d       f d d   | D }   f d d   | D } | | f S)Nc                sO   |  j  d d  }  |  j   j  }  |  j  d d  }  |  j  d d  j d  S)Nrr   r   r   r   )rL   
expandtabsr   r   )rk   )r   r   r   expand_tabs  s    z2HtmlDiff._tab_newline_replace.<locals>.expand_tabsc                s   g  |  ] }   |   q Sr   r   )r\   rk   )r   r   r   re     s   	 z1HtmlDiff._tab_newline_replace.<locals>.<listcomp>c                s   g  |  ] }   |   q Sr   r   )r\   rk   )r   r   r   re     s   	 r   )r   r   r   r   )r   r   r   _tab_newline_replace  s    
	zHtmlDiff._tab_newline_replacec             C   ss  | s | j  | | f  d  St |  } |  j } | | k s[ | | j d  d | k rr | j  | | f  d  Sd } d } d } x | | k  r
| | k  r
| | d k r | d 7} | | } | d 7} q | | d k r | d 7} d } q | d 7} | d 7} q W| d  |  }	 | | d   }
 | rI|	 d }	 d | |
 }
 | j  | |	 f  |  j | d |
  d  S)Nr   rU   r   r   r%   r   >)r)   r.   r   count_split_line)r   Z	data_listZline_numr   rR   rW   r0   r3   markZline1Zline2r   r   r   r      s8    
	)


	

zHtmlDiff._split_linec             c   s   x | D] \ } } } | d  k r3 | | | f Vq | | \ } } \ } } g  g  }	 }
 |  j  |	 | |  |  j  |
 | |  xZ |	 s |
 r |	 r |	 j d  } n d } |
 r |
 j d  } n d } | | | f Vq Wq Wd  S)Nr   r   rr   )r   rr   )r   rr   )r   r>   )r   diffsfromdatatodataflagZfromlineZfromtextZtolineZtotextfromlisttolistr   r   r   _line_wrapper7  s     zHtmlDiff._line_wrapperc             C   s   g  g  g  } } } x | D] \ } } } y< | j  |  j d | |   | j  |  j d | |   Wn, t k
 r | j  d   | j  d   Yn X| j  |  q W| | | f S)Nr   r%   )r)   _format_liner   )r   r   r   r   flaglistr   r   r   r   r   r   _collect_linesS  s     zHtmlDiff._collect_linesc             C   s   y% d | } d |  j  | | f } Wn t k
 r? d } Yn 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;rr   z&nbsp;z<<td class="diff_header"%s>%s</td><td nowrap="nowrap">%s</td>)_prefixr   rL   r   )r   r   r   Zlinenumr   idr   r   r   r   h  s    
*zHtmlDiff._format_linec             C   s<   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   sP  |  j  d } d g t |  } d g t |  } d \ }	 }
 d } x t |  D]u \ } } | r |
 s d }
 | } t d | | g  } d | |	 f | | <|	 d 7}	 d | |	 f | | <qR d }
 qR 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'   rW   )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   s  |  j    |  j | |  \ } } | r1 | } n d  } t | | | d |  j d |  j } |  j rs |  j |  } |  j |  \ }	 }
 } |  j |	 |
 | | |  \ }	 }
 } } } g  } d d } xz t	 t
 |   D]f } | | d  k r
| d k r>| j d  q | j | | | | | |	 | | | |
 | f  q W| sN| rod d d	 | d d	 | f } n d
 } |  j t d d
 j |  d | d |  j d  } | j d d  j d d  j d d  j d d  j d d  S)Nrn   ro   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   Z	data_rows
header_rowr   r%   z +z<span class="diff_add">z -z<span class="diff_sub">z ^z<span class="diff_chg">r   z</span>r   z&nbsp;)r   r   r   r   r   r   r   r   r  r5   r.   r)   _table_templater   r   r   rL   )r   r   r   r   r   r   r   Zcontext_linesr   r   r   r   r  r  rj   fmtr0   r  r   r   r   r   r     sJ    
		$zHtmlDiff.make_table)rb   rc   rd   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   s   y  d d d d i t  |  } Wn" t k
 rD t d |   Yn Xd | f } x3 |  D]+ } | d  d  | k rX | d d   VqX Wd  S)Nr%   z- r   z+ z)unknown delta choice (must be 1 or 2): %rz  )intKeyErrorrf   )ZdeltawhichrS   prefixesrk   r   r   r   r     s     c              C   s%   d d  l  }  d d  l } |  j |  S)Nr   )doctestdifflibtestmod)r  r  r   r   r   _test(  s    r  __main__)#__all__heapqr   rg   collectionsr   Z_namedtupler   r   r   r   rm   r   r   r   matchr   r   r   r	   r   r   r   r
   r   r   r   r   r  r   objectr   r   r  rb   r   r   r   r   <module>   sP     0 N	HK% 	
 ` 