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
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. :-)
Bir şekilde Android üzerinde Python ça...
Erişim için döngüler Python Endeksi...
Python bir sözlük için anahtar Ekle?...
Nasıl Python ile şimdiki zaman almak i...
Python ile bir dize bir dize için bir ...