
    9 f#                     X    d Z ddlmZ ddlZddlmZmZmZ ddl	m
Z
 dede
d	efd
Zd ZdS )zdCondense HTML.

1. Put short html tags back on one line
2. Put short template tags back on one line
    )partialN   )inside_ignored_blockinside_protected_trans_blockis_safe_closing_tag)Confightmlconfigreturnc           	         dt           dt          dt          j        dt          fd}t	          |||           }d}d}|j        rd}d	}|j        s;t          j        t          j        d
| d| dt          j	                  ||           } nqt          j        t          j        d| dt          j	                  ||           } t          j        t          j        d| d| dt          j	                  ||           } dt           dt          dt          j        dt          fd}t	          |||           }|j
        rxd |j
                            d          D             D ]S}t          j        t          j        d| dt          j        t          j        z  t          j        z            ||           } Tdt           dt          dt          j        dt          fd}t	          |||           }|j        rxd |j                            d          D             D ]S}t          j        t          j        d| dt          j        t          j        z  t          j        z            ||           } Tdt          dt          j        dt          fd}	|j        du rPt	          |	|           }t          j        t          j        dt          j        t          j        z            ||           } | S )z3Compress back tags that do not need to be expanded.r
   r	   matchr   c                    t          | ||          r6t          | |                                          s|                                S t          | |d|                                         |          r&|                                                                S t          t          j        d|                    d                              }d|z  }|| j	        k    rdt          | j	        d          z  }|                    d          |z   S )zTrim leading whitespace.Nz\nr   
r      )r   r   groupr   endrstriplenrefindallmax_blank_linesmax)r
   r	   r   linesblank_liness        O/var/www/equiseq/venv/lib/python3.11/site-packages/djlint/formatter/condense.pystrip_spacez%clean_whitespace.<locals>.strip_space   s    
  e44 	!=PEKKMM>
 >
 	! ;;== 
 (]uyy{{]0CUKK 	*;;=='')))JA 
 
 Ul6)))V%;Q!?!??K{{1~~++    z(.*?)z\n \tz	([^\n]+?)z \tz^[ \t]*z([z]*)$z^[ \t]*((?:<|{%).*?)([^c                    t          | ||          r|                                S ||                                |                                dz            dk    r|                                dz   S |                                S )(Add break after if not in ignored block.r   r   )r   r   r   r
   r	   r   s      r   add_blank_line_afterz.clean_whitespace.<locals>.add_blank_line_afterO   sp    e44 	!;;==  		eiikkAo-.$66;;==4''{{}}r   c                 6    g | ]}|                                 S  strip.0xs     r   
<listcomp>z$clean_whitespace.<locals>.<listcomp>^   s     NNN!AGGIINNNr   ,
((?:{%\s*?z\b[^}]+?%}\n?)+)c                     t          | ||          s|                                dk    r|                                S d|                                z   S )zDAdd break before if not in ignored block and not first line in file.r   r   )r   startr   r!   s      r   add_blank_line_beforez/clean_whitespace.<locals>.add_blank_line_beforeh   sI    e44 	!8J8J;;== ekkmm##r   c                 6    g | ]}|                                 S r$   r%   r'   s     r   r*   z$clean_whitespace.<locals>.<listcomp>s   s     OOO!AGGIIOOOr   z(?<!^\n)((?:{%\s*?c                     |                                 dk    r?|                     d|                                          s|                                dz   S |                                S )r    r   z

r   )r.   
startswithr   r   )r	   r   s     r   yaml_add_blank_line_afterz3clean_whitespace.<locals>.yaml_add_blank_line_after   sQ    ;;==Adoofeiikk&J&J;;==4''{{}}r   Fz(^---.+?---)$)r   strr   Matchr   preserve_blank_linespreserve_leading_spacesubcompileMblank_line_after_tagsplit
IGNORECASE	MULTILINEDOTALLblank_line_before_tagno_line_after_yaml)
r	   r
   r   funcline_contentstrailing_contentsr"   tagr/   r3   s
             r   clean_whitespacerF      sH   ,F ,# ,bh ,3 , , , ,6 ;--DM " #$"( 
vJJ-JJ3DJJJBDQQ
 
 vJI2CIII24PP
 

 vJDMDD->DDDbdKKTSW
 
	V 	3 	rx 	C 	 	 	 	 '66D " 	NNv'B'H'H'M'MNNN 	 	C6
:3:::MBL029<   DD$f $C $ $S $ $ $ $ (&$77D # 	OOv'C'I'I#'N'NOOO 	 	C6
B3BBBMBL029<   DD BH       E))0$77vJ ry(  
 
 Kr   c                 f   |j         r| S dt          dt          dt          j        dt          ffd}dt          dt          dt
          fddt          dt          dt
          fdt          |||           }t          j        t          j        d|j	         d	t          j
        t          j        z  t          j        z  t          j        z            ||           } t          j        t          j        d
|j         dt          j
        t          j        z  t          j        z            ||           } | S )z%Put short tags back on a single line.r
   r	   r   r   c                 R   | j         r| j        dz   }nft          |                    d                                          d         |                    d          z   |                    d          z             }t          | ||          s|| j        k     r | |                    d                    r` | |                    d                    rA|                    d          |                    d          z   |                    d          z   S |                                S )z7Put contents on a single line if below max line length.r         )line_break_after_multiline_tagmax_line_lengthr   r   
splitlinesr   )r
   r	   r   combined_lengthif_blank_line_after_matchif_blank_line_before_matchs       r   condense_linez$condense_html.<locals>.condense_line   s	   0 	$4q8OO!A))++B/%++a..@5;;q>>Q O
 %VT599	D&"888))&%++a..AA 9**65;;q>>BB 9 ;;q>>EKKNN2U[[^^CC{{}}r   c                     | j         r>t          fdd | j                             d          D             D                        S dS )z,Check if there should be a blank line after.c              3      K   | ]T}t          j        t          j        d | dt           j        t           j        z  t           j        z                      V  UdS r,   z[^}]+?%}\n?)+)Nr   r   r9   r=   r>   r?   r(   rE   r	   s     r   	<genexpr>zCcondense_html.<locals>.if_blank_line_after_match.<locals>.<genexpr>   z       	 	  
J<s<<<4ry@   	 	 	 	 	 	r   c                 6    g | ]}|                                 S r$   r%   r'   s     r   r*   zDcondense_html.<locals>.if_blank_line_after_match.<locals>.<listcomp>   s     VVV!AGGIIVVVr   r+   T)r;   anyr<   r
   r	   s    `r   rP   z0condense_html.<locals>.if_blank_line_after_match   su    & 
	 	 	 	 	 WVv/J/P/PQT/U/UVVV	 	 	 	 	 	 	 tr   c                     | j         r>t          fdd | j                             d          D             D                        S dS )z-Check if there should be a blank line before.c              3      K   | ]T}t          j        t          j        d | dt           j        t           j        z  t           j        z                      V  UdS rU   rV   rW   s     r   rX   zDcondense_html.<locals>.if_blank_line_before_match.<locals>.<genexpr>   rY   r   c                 6    g | ]}|                                 S r$   r%   r'   s     r   r*   zEcondense_html.<locals>.if_blank_line_before_match.<locals>.<listcomp>   s     WWW!AGGIIWWWr   r+   T)r@   r[   r<   r\   s    `r   rQ   z1condense_html.<locals>.if_blank_line_before_match   su    ' 
	 	 	 	 	 XWv/K/Q/QRU/V/VWWW	 	 	 	 	 	 	 tr   z(<(zH)\b(?:\"[^\"]*\"|'[^']*'|{[^}]*}|[^'\">{}])*>)\s*([^<\n]*?)\s*?(</(\2)>)z((?:\s|^){%-?[ ]*?(z@)\b(?:(?!\n|%}).)*?%})\s*([^%\n]*?)\s*?({%-?[ ]+?end(\2)[ ]*?%}))flags)r7   r   r4   r   r5   boolr   r8   r9   optional_single_line_html_tagsr=   r>   r?   VERBOSE"optional_single_line_template_tags)r	   r
   rR   rB   rP   rQ   s       @@r   condense_htmlre      s   $  f C  S       (&      6        =&$//D 6

 H68  H  H  HMBL(294rzA	
 	
 	 D 6

 TF$M  T  T  T-",.;	
 	
 	
 	 D Kr   )__doc__	functoolsr   regexr   helpersr   r   r   settingsr   r4   rF   re   r$   r   r   <module>rk      s                       
      3  3    DQ Q Q Q Qr   