Điều này có vẻ như một nhiệm vụ tốt để tôi vào được python, đã được chờ trong một thời gian. Tôi xin trình bày kịch bản python đầu tiên của tôi:
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])
Tôi tin rằng điều này có hiệu quả và thử nghiệm tốt trên Safari, Opera và Firefox gần đây. Nó sẽ phá vỡ hacks CSS khác với gạch dưới &/**/hacks! Không sử dụng một minifier nếu bạn có rất nhiều hacks đang diễn ra (hoặc đặt chúng trong một tập tin riêng biệt).
Mọi mẹo trên trăn của tôi được đánh giá cao. Xin hãy nhẹ nhàng, đây là lần đầu tiên của tôi. :-)
Bạn có thể sử dụng chỉ mục -1 để tham chiếu phần tử cuối cùng trong chuỗi. Vì vậy, bạn có thể sử dụng .append() thay vì .insert(), và tránh .reverse(). Ngoài ra, nếu len (lst)> 0: thường được thực hiện như thể lst: – recursive
Cảm ơn lời khuyên. Tôi đã sửa những thứ này và một số thứ khác. Python là một ngôn ngữ thực sự tốt đẹp. :-) – Borgar
đơn giản là tuyệt vời. Phần tốt nhất là điều này sẽ là một phần của một kịch bản triển khai ngay bây giờ! – Soviut