wiki-archive/twiki/pub/TWiki/KupuContrib/_kupu/tools/compress.py

41 lines
1.6 KiB
Python

#!/usr/bin/env python
"""Remove comments, newlines and redundant whitespace from JavaScript code
This reads all paths that were passed in as arguments on the command-line
and removes everything that is ignored by JavaScript. This makes that
the source isn't readable anymore (which I personally consider bad),
but also that less bytes have to be served by the server, scripts are
loaded faster and also that they're executed faster.
WARNING: This script converts files in place! Original files will be
overwritten. Do *not* run this on a development version of your code,
since you won't be able to get them back into the original state. This
should be ran only by system administrators if they want to speed up
their setups.
"""
import sys, re
one_line_comment = re.compile(r'^\s*//.*$', re.M)
trailing_comment = re.compile(r'//(\w|\s)*$', re.M)
multi_line_comment = re.compile(r'^\s*/\*.*?\*/', re.M | re.S)
whitespace_after_separator = re.compile(r';\s*', re.M | re.S)
whitespace_after_opening_bracket = re.compile(r'{\s*', re.M | re.S)
starting_whitespace = re.compile(r'^\s*', re.M | re.S)
def strip(data):
"""Processes the data, removing comments and unecessary whitespace."""
data = one_line_comment.sub('', data)
data = trailing_comment.sub('', data)
data = multi_line_comment.sub('', data)
data = whitespace_after_separator.sub(';', data)
data = whitespace_after_opening_bracket.sub('{', data)
data = starting_whitespace.sub('', data)
return data.strip()
for file in sys.argv[1:]:
data = open(file).read()
data = strip(data)
open(file, 'w').write(data)