SORU
21 EKİM 2008, Salı


Küçültmeye için script CSS Python?

Web sitesi dağıtım sürecinin bir parçası olarak CSS minify basit bir Python script arıyorum. (Python CSS Utils Bu proje için overkill) gibi betik dili sunucu ve tam gelişmiş ayrıştırıcıları desteklenir.

Temel olarak CSS için jsmin.py istiyorum. Hiçbir bağımlılıkları ile tek bir komut.

Herhangi bir fikir?

CEVAP
21 EKİM 2008, Salı


Bu beni bir süre bekleyen olmuştur python, içine almak için iyi bir görev gibi görünüyordu. Ben bu vesile ile ilk python senaryom mevcut:

import sys, re

css = open( sys.argv[1] , 'r' ).read()

# remove comments - this will break a lot of hacks :-P
css = re.sub( r'\s*/\*\s*\*/', "$$HACK1$$", css ) # preserve IE<6 comment hack
css = re.sub( r'/\*[\s\S]*?\*/', "", css )
css = css.replace( "$$HACK1$$", '/**/' ) # preserve IE<6 comment hack

# url() doesn't need quotes
css = re.sub( r'url\((["\'])([^)]*)\1\)', r'url(\2)', css )

# spaces may be safely collapsed as generated content will collapse them anyway
css = re.sub( r'\s ', ' ', css )

# shorten collapsable colors: #aabbcc to #abc
css = re.sub( r'#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3(\s|;)', r'#\1\2\3\4', css )

# fragment values can loose zeros
css = re.sub( r':\s*0(\.\d ([cm]m|e[mx]|in|p[ctx]))\s*;', r':\1;', css )

for rule in re.findall( r'([^{] ){([^}]*)}', css ):

    # we don't need spaces around operators
    selectors = [re.sub( r'(?<=[\[\(> =])\s |\s (?=[=~^$*|> \]\)])', r'', selector.strip() ) for selector in rule[0].split( ',' )]

    # order is important, but we still want to discard repetitions
    properties = {}
    porder = []
    for prop in re.findall( '(.*?):(.*?)(;|$)', rule[1] ):
        key = prop[0].strip().lower()
        if key not in porder: porder.append( key )
        properties[ key ] = prop[1].strip()

    # output rule if it contains any declarations
    if properties:
        print "%s{%s}" % ( ','.join( selectors ), ''.join(['%s:%s;' % (key, properties[key]) for key in porder])[:-1] ) 

Bu işe inanıyorum, ve çıkışı iyi Safari, Opera ve Firefox üzerinde son testleri. CSS kesmek çizgi & /**/ kesmek dışında kıracak! Eğer kesmek (veya ayrı bir dosyaya koyun) çok şey varsa bir minifier kullanmayın.

Benim python herhangi bir ipucu takdir. Lütfen nazik olsa da, bu benim ilk seferim. :-)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bratayley

    Bratayley

    30 Aralık 2010
  • kev5124

    kev5124

    9 Kasım 2008
  • michal lelkowski

    michal lelko

    9 Temmuz 2006