#!/usr/bin/env python # -*- coding:utf-8 -*- import sys import re VAR_RE = re.compile(r'\${([^}]*)}(?:\.(\w+))?') opts = {'sprite_name': ''} def main(csvfile, cssfile): coords = {} for row in open(csvfile): try: fn, x, y = row.rstrip().split(',', 3) except ValueError: continue coords[fn] = (int(x), int(y)) for row in open(cssfile): row = VAR_RE.sub(lambda mo: coord_repl(mo, coords), row) sys.stdout.write(row) def coord_repl(mo, coords): try: fn, directive = mo.groups() coords = coords[fn] except KeyError: # does not convert when fn is not found return mo.group(0) if directive == 'x': return '-%dpx' % coords[0] elif directive == 'y': return '-%dpx' % coords[1] else: return 'background: url(%s) no-repeat -%dpx -%dpx;' % ( opts['sprite_name'], coords[0], coords[1] ) def get_options(): import optparse parser = optparse.OptionParser( usage='%prog [options] [CSV COORDS FILE] [CSS FILE]' ) parser.add_option( '-s', '--sprite-name', action='store', type='string', dest='sprite_name', default='', help="css sprite file path" ) options, args = parser.parse_args() if len(args) != 2: parser.print_help() parser.exit() opts['sprite_name'] = options.sprite_name return args if __name__ == '__main__': main(*get_options())