#! /usr/bin/python import sys from string import split, strip def fix(filename, lines): last_point = None in_curve = 0 closed = 0 for i in range(len(lines) - 1, -1, -1): line = strip(lines[i]) if line == 'bC()': closed = 1 if line[:3] in ('bs(', 'bc('): if not in_curve and closed: # line is the last line of a curve object. remember the # end point args = split(line[3:-1], ',') last_point = args[-3:-1] in_curve = 1 else: in_curve = 0 if line in ('b()', 'bn()'): # The beginning of a curve object. If the first segment in # the curve object is a bezier object, insert a line segment # to last_point before it. if lines[i + 1][:3] == 'bc(': print "%s:%d: Curve starts with a line segment" % (filename, i + 1) if last_point: segment = "bs(%s,%s,0)\n" % tuple(last_point) lines.insert(i + 1, segment) print "%s:%d: fixed" % (filename, i + 1) else: print ("%s:%d:" % (filename, i + 1) + "can't be fixed because the curve is not closed") def main(): infile = sys.argv[1] if len(sys.argv) > 2: outfile = sys.argv[2] else: outfile = infile lines = open(infile).readlines() fix(infile, lines) open(outfile, "w").writelines(lines) main()