ó
Ñs/Uc           @   sÃ   d  Z  d d l m Z d d l Z d Z d „  Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z e d k r¿ e ƒ  n  d S(   s3   `cssmin` - A Python port of the YUI CSS compressor.iÿÿÿÿ(   t   StringIONs   0.1.4c         C   s  t  } t  } |  j d ƒ } xò | d k r|  | d | d !d k } |  j d | d ƒ } | d k  r~ | sú |  |  }  Pqú n| | | d k rú |  | d d k rµ | d } t } qú | rÎ | d } t  } qú | sí |  |  |  | d }  qú | d } n  |  j d | ƒ } q W|  S(	   s   Remove all CSS comment blocks.s   /*i    i   i   t   !s   */i   s   \(   t   Falset   findt   True(   t   csst   iemact   preservet   comment_startt   comment_end(    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   remove_comments   s,    

	
	c         C   s”   d „  } | |  ƒ }  t  j d d |  ƒ }  t  j d d |  ƒ }  t  j d d |  ƒ }  t  j d d |  ƒ }  |  j d	 d
 ƒ }  t  j d d |  ƒ }  |  S(   s)   Remove unnecessary whitespace characters.c         S   s|   t  j d ƒ } | j |  ƒ } xW | rw d j |  | j ƒ   | j ƒ  j d d ƒ |  | j ƒ  g ƒ }  | j |  ƒ } q! W|  S(   s¬   
        Prevents 'p :link' from becoming 'p:link'.

        Translates 'p :link' into 'p ___PSEUDOCLASSCOLON___link'; this is
        translated back again later.
        s   (^|\})(([^\{\:])+\:)+([^\{]*\{)t    t   :t   ___PSEUDOCLASSCOLON___(   t   ret   compilet   searcht   joint   startt   groupt   replacet   end(   R   t   regext   match(    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   pseudoclasscolon:   s    		s   \s+([!{};:>+\(\)\],])s   \1s   ^(.*)(@charset \"[^\"]*\";)s   \2\1s   ^(\s*@charset [^;]+;\s*)+s   \band\(s   and (R   R   s   ([!{}:;>+\(\[,])\s+(   R   t   subR   (   R   R   (    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   remove_unnecessary_whitespace7   s    	c         C   s   t  j d d |  ƒ S(   s   Remove unnecessary semicolons.s   ;+\}t   }(   R   R   (   R   (    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   remove_unnecessary_semicolonsb   s    c         C   s   t  j d d |  ƒ S(   s   Remove empty rules.s   [^\}\{]+\{\}R   (   R   R   (   R   (    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   remove_empty_rulesh   s    c         C   s“   t  j d ƒ } | j |  ƒ } xn | rŽ t d „  | j d ƒ j d ƒ ƒ } d t t t | ƒ ƒ } |  j | j ƒ  | ƒ }  | j |  ƒ } q! W|  S(   s'   Convert `rgb(51,102,153)` to `#336699`.s   rgb\s*\(\s*([0-9,\s]+)\s*\)c         S   s
   |  j  ƒ  S(   N(   t   strip(   t   s(    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   <lambda>t   s    i   t   ,s   #%.2x%.2x%.2x(	   R   R   R   t   mapR   t   splitt   tuplet   intR   (   R   R   R   t   colorst   hexcolor(    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   normalize_rgb_colors_to_hexn   s    	$c         C   s   t  j d d |  ƒ S(   s%   Replace `0(px, em, %, etc)` with `0`.s%   ([\s:])(0)(px|em|%|in|cm|mm|pc|pt|ex)s   \1\2(   R   R   (   R   (    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   condense_zero_units{   s    c         C   sL   |  j  d d ƒ }  |  j  d d ƒ }  |  j  d d ƒ }  |  j  d d ƒ }  |  S(   s/   Replace `:0 0 0 0;`, `:0 0 0;` etc. with `:0;`.s	   :0 0 0 0;s   :0;s   :0 0 0;s   :0 0;s   background-position:0;s   background-position:0 0;(   R   (   R   (    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   condense_multidimensional_zeros   s
    c         C   s   t  j d d |  ƒ S(   s'   Replace `0.6` with `.6` where possible.s   (:|\s)0+\.(\d+)s   \1.\2(   R   R   (   R   (    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   condense_floating_pointsŽ   s    c         C   s  t  j d ƒ } | j |  ƒ } xá | r| j d ƒ | j d ƒ | j d ƒ } | j d ƒ | j d ƒ | j d ƒ } | j ƒ  | j ƒ  k ræ |  j | j ƒ  | j d ƒ | j d	 ƒ d
 | ƒ }  | j |  | j ƒ  d ƒ } q! | j |  | j ƒ  ƒ } q! W|  S(   s3   Shorten colors from #AABBCC to #ABC where possible.s_   ([^\"'=\s])(\s*)#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])i   i   i   i   i   i   i   i   t   #(   R   R   R   R   t   lowerR   R   (   R   R   R   t   firstt   second(    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   condense_hex_colors”   s    	))0c         C   s   t  j d d |  ƒ S(   s:   Condense multiple adjacent whitespace characters into one.s   \s+t    (   R   R   (   R   (    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   condense_whitespace¥   s    c         C   s   t  j d d |  ƒ S(   s9   Condense multiple adjacent semicolon characters into one.s   ;;+t   ;(   R   R   (   R   (    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   condense_semicolons«   s    c         C   s   g  } d } x[ t  |  ƒ D]M \ } } | d k r | | | k r | j |  | | d !ƒ | d } q q W| t |  ƒ k  r | j |  | ƒ n  d j | ƒ S(   s9   Wrap the lines of the given CSS to an approximate length.i    R   i   s   
(   t	   enumeratet   appendt   lenR   (   R   t   line_lengtht   linest
   line_startt   it   char(    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   wrap_css_lines±   s    c         C   sÄ   t  |  ƒ }  t |  ƒ }  |  j d d ƒ }  t |  ƒ }  t |  ƒ }  t |  ƒ }  t |  ƒ }  t |  ƒ }  t |  ƒ }  t	 |  ƒ }  | d  k	 rœ t |  | ƒ }  n  |  j d d ƒ }  t |  ƒ }  |  j ƒ  S(   Ns   "\"}\""t   ___PSEUDOCLASSBMH___(   R
   R2   R   R   R   R)   R*   R+   R(   R0   t   NoneR=   R4   R   (   R   t   wrap(    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   cssminÁ   s    c          C   s¢   d d  l  }  d d  l } |  j d d d t d d d d ƒ } | j d	 d
 d d d d  d d d d ƒ| j ƒ  \ } } | j j t	 | j
 j ƒ  d | j ƒƒ d  S(   Niÿÿÿÿt   progRA   t   versiont   usages   %prog [--wrap N]t   descriptions>   Reads raw CSS from stdin, and writes compressed CSS to stdout.s   -ws   --wrapt   typeR%   t   defaultt   metavart   Nt   helps.   Wrap output to approximately N chars per line.R@   (   t   optparset   syst   OptionParsert   __version__t
   add_optionR?   t
   parse_argst   stdoutt   writeRA   t   stdint   readR@   (   RK   RL   t   pt   optionst   args(    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   mainÕ   s    		t   __main__(   t   __doc__R    R   RN   R
   R   R   R   R(   R)   R*   R+   R0   R2   R4   R=   R?   RA   RX   t   __name__(    (    (    sE   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/contrib/minify/cssmin.pyt   <module>   s&   
	"	+											