
    D6i                     `   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z
 d dlmZ 	 d dlZd dlmZ d d	lmZ  G d
 d      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d d      Zy# e$ r dZY w xY w)    )	lru_cache)StringIO)minify)jsmin)compile)cssminN)FlaskMinifyException)get_tag_contentsc                   $    e Zd ZdZdZed        Zy)ParserMixinFc                 4    | j                   | j                  k7  S N)_oruntime_optionsselfs    W/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/flask_minify/parsers.pyoptions_changedzParserMixin.options_changed   s    ww$....    N)__name__
__module____qualname__takes_precedencegopropertyr    r   r   r   r      s    	B/ /r   r   c                   (    e Zd ZddixZZ ee      Zy)Jsminquote_charsz'"`N)r   r   r   r   r   staticmethodr   executerr   r   r   r   r      s    )622ObE"Hr   r   c                   (    e Zd ZddixZZ ee      Zy)Rcssminkeep_bang_commentsFN)r   r   r   r   r   r    r   r!   r   r   r   r#   r#   !   s    0%88ObF#Hr   r#   c                        e Zd ZdddxZZd Zy)LesscpyT)r   xminifyc                 ,    t        t        |      fi |S r   )compile_lessr   r   contentoptionss      r   r!   zLesscpy.executer)   s    HW-999r   N)r   r   r   r   r   r!   r   r   r   r&   r&   &   s    &*t<<Ob:r   r&   c                   2    e Zd ZdddZddddg edxZZd Zy)HtmlFscriptstyleT)remove_comments remove_optional_attribute_quotesremove_empty_spaceonly_html_contentscript_typesminify_inlinec                 ^   |j                  dd      }|j                  dg       }|j                  d| j                        }d |j                         D        }|D ]B  }t        |||      D ]0  }| j                  j                  ||      }	|j                  ||	      }2 D |r|S t        |fi |S )Nr5   Fr6   r7   c              3   ,   K   | ]  \  }}|s	|  y wr   r   ).0tes      r   	<genexpr>z Html.executer.<locals>.<genexpr>?   s     AdaqAs   
)pop_default_tagsitemsr
   parserr   replaceminify_html)
r   r+   r,   r5   r6   r7   enabled_tagstagsub_contentminifieds
             r   r!   zHtml.executer;   s    #KK(;UC{{>26OT5G5GHAm&9&9&;A 	AC/lK A;;--k3?!//+x@A	A
 ,wPW1P1PPr   N)r   r   r   r?   r   r   r!   r   r   r   r.   r.   -   s7    M
  ,1""& ObQr   r.   c                   6    e Zd ZdZdZ ed      d        Zd Zy)GoParserMixinTz	text/html
   c                     i }| j                   j                  j                         D ]*  }|j                  s|j	                  |j
                         , |S r   )rA   parsersvaluesr   updater   )r   all_optionsrA   s      r   get_all_go_optionsz GoParserMixin.get_all_go_optionsM   sL    kk))002 	;Fyy""6#9#9:	; r   c                     t        j                  i | j                         |       t        j                  | j                  |      S r   )	minify_goconfigrP   string
media_typer*   s      r   r!   zGoParserMixin.executerW   s;    AD335AAB99r   N)r   r   r   r   rU   r   rP   r!   r   r   r   rI   rI   I   s'    	BJr] :r   rI   c                   $    e Zd ZddddddddxZZy)HtmlGoFT)zhtml-keep-commentszhtml-keep-special-commentszhtml-keep-default-attr-valszhtml-keep-document-tagszhtml-keep-end-tagszhtml-keep-whitespacezhtml-keep-quotesN)r   r   r   r   r   r   r   r   rW   rW   \   s%    #&*'+#'" %  Obr   rW   c                       e Zd ZdZdddxZZy)JsGoztext/javascriptr   T)zjs-precisionzjs-keep-var-namesNr   r   r   rU   r   r   r   r   r   rY   rY   h   s    "J! Obr   rY   c                       e Zd ZdZddixZZy)CssGoztext/csszcss-precisionr   NrZ   r   r   r   r\   r\   p   s    J+Q//Obr   r\   c                   j    e Zd ZeeedZeee	dZ
i di dfdZed        Zed        Zdddg fdZd Zy)	Parser)htmlr0   r1   Fc                     || _         i | j                  || _        i || _        || _        | j
                  rt        st        d      y y )NzcCannot use any Go parsers without installing Go optional dependency: `pip install flask-minify[go]`)r   default_parsersrL   r   	fail_safehas_go_parserrR   r	   )r   rL   rb   r   r   s        r   __init__zParser.__init__y   s\     :$..:':2/2"i&I  '0r   c                 V    | j                   rt        r| j                  S | j                  S r   )r   rR   _go_default_parsers_default_parsersr   s    r   ra   zParser.default_parsers   s(     )-ID$$	
CGCXCX	
r   c                 V    t        d | j                  j                         D              S )Nc              3   4   K   | ]  }|j                     y wr   )r   )r:   ps     r   r=   z'Parser.has_go_parser.<locals>.<genexpr>   s     7A1447s   )anyrL   rM   r   s    r   rc   zParser.has_go_parser   s     7!4!4!6777r   c                     t         r| j                  s4| j                  j                  di       j	                  | |||dd       y y )Nr_   r/   )r5   r6   r7   )rR   r   r   
setdefaultrN   )r   r_   jscsslessr6   s        r   update_runtime_optionszParser.update_runtime_options   sK       ++FB7>>-1$0"$!(&	 !(r   c                 (   || j                   vrt        dj                  |             | j                   |          }| |_        |j                  r|j
                  }na|j                  r+i | j
                  j                  |i       |j
                  }n*i |j
                  | j
                  j                  |i       }	  |j                  |fi |}|S # t        $ r4}| j                  st        dj                  |            ||}Y d }~|S d }~ww xY w)NzUnknown tag "{0}"zFailed to minify "{0}" content)rL   r	   formatrA   r   r   r   getr!   	Exceptionrb   )r   r+   rE   rA   r   minified_or_contentr<   s          r   r   zParser.minify   s$   dll"&':'A'A#'FGG"c"$!!$44O$$&&**33((O
((&&**33O
	*"1&//'"M_"M #"  	*>>*4;;C@ #*""	*s   ?C 	D)DDN)r   r   r   r.   r   r#   rg   rW   rY   r\   rf   rd   r   ra   rc   rp   r   r   r   r   r^   r^   u   sl     $H#)TEJ $ 
 

 8 8 UE#r   r^   )	functoolsr   ior   htmlminr   rC   r   lesscpyr   r)   rcssminr   rR   rt   flask_minify.exceptionsr	   flask_minify.utilsr
   r   r   r#   r&   r.   rI   rW   rY   r\   r^   r   r   r   <module>r}      s      )  +  9 // /#K #
$k $
:k :Q; Q8:K :&	] 	= 0M 0
M# M#U  Is   B# #B-,B-