def write_secondary_postScript(primitive, functionName, writefile): ''' takes a primitive, a description string. converts it to js readable data input: primitive ( a joined list with raw commands ) input: the name of the current function. (each graphical element) input: writefile, is the file we are writing to. output: straight to file. i'm not sure what is up with the coordinate system, it's not something i've been able to find any useful information on. Applying assumptions seems a little zealous. It seems like, if a primitive doesn't havea a fillColour, that unmodified point coordinates are ok. ''' global dashModeOn global dashParameters global strokeWidth global currentColour # subdivide into function lines. primitive = regex_plotListString(primitive) writefile.write("\nfunction " + functionName + "(){\n") writefile.write(indent + "var point = new Point(0, " + rectHeight + ");\n") # each time this function is called, it means a new path primitive is # being requested. each primitive only has one path writefile.write(indent + "var path = new Path();\n") for instruction in primitive: instruction = instruction.rstrip() if instruction.startswith("[] 0.0 d"): dashModeOn = False continue if instruction.endswith(" d"): dashModeOn = True dashParameters = parse_dash_params(instruction) lineToWrite = indent + "path.dashArray = " + dashParameters + ";\n" writefile.write(lineToWrite) continue if instruction.endswith(" m"): lineArray = instruction.split() coordinates = pointify_coordinates(lineArray[0:2]) lineToWrite = indent + "path.moveTo(" + coordinates + ");\n" writefile.write(lineToWrite) continue if instruction.endswith(" cm"): # print(indent + instruction + " (store some data, no idea)") continue if instruction.endswith("l"): lineArray = instruction.split() coordinates = pointify_coordinates(lineArray[0:2]) lineToWrite = indent + "path.lineTo(" + coordinates + ");\n" writefile.write(lineToWrite) continue if instruction.endswith("c"): lineArray = instruction.split() coordinates = convert_to_curve_parameters(lineArray) lineToWrite = indent + "path.cubicCurveTo(" + coordinates + ");\n" writefile.write(lineToWrite) continue # stroke information if instruction.endswith("w"): strokeWidth = instruction.split()[0] lineToWrite = indent + "path.strokeWidth = " + strokeWidth + ";\n" writefile.write(lineToWrite) continue if instruction.endswith("S"): lineToWrite = indent + "path.strokeColor = " + currentColour + ";\n" writefile.write(lineToWrite) continue if instruction.endswith("J"): print(indent + instruction + " (a line cap)") continue if instruction.endswith("j"): print(indent + instruction + " (a line join)") continue if instruction.endswith("M"): lineArray = instruction.split() lineToWrite = indent + "path.miterLimit = " + lineArray[0] + ";\n" print(lineToWrite) continue # fixing if instruction.endswith(" g") or instruction.endswith(" rg"): currentColour = parse_colour_line(instruction) continue if instruction.endswith("f"): print("found fill colour for primitive: " + currentColour) lineToWrite = indent + "path.fillColor = " + currentColour + ";\n" writefile.write(lineToWrite) continue # stroke closing if instruction.endswith("h"): lineToWrite = indent + "path.closePath();\n" writefile.write(lineToWrite) continue print("if you see this, time to support extra commands") print(instruction + "####") writefile.write("}\n") writefile.write(functionName + "();\n") return
def write_primitive_postScript(primitive, functionName, writefile): global dashModeOn global dashParameters global strokeWidth print("function " + functionName + "(){\n") print(indent + "var point = new Point(0, " + rectHeight + ");\n") # each time this function is called, it means a new path primitive is # being requested. each primitive only has one path print(indent + "var path = new Path();\n") for instruction in primitive: if instruction.startswith("[] 0.0 d"): dashModeOn = False continue if instruction.endswith("d"): dashModeOn = True dashParameters = parse_dash_params(instruction) lineToWrite = indent + "path.dashArray = " + dashParameters + ";\n" print(lineToWrite) continue if instruction.endswith(" m"): lineArray = instruction.split() coordinates = pointify_coordinates(lineArray[0:2]) lineToWrite = indent + "path.moveTo(" + coordinates + ");\n" print(lineToWrite) continue if instruction.endswith(" cm"): print(indent + instruction + " (store some data, no idea)") continue if instruction.endswith("l"): lineArray = instruction.split() coordinates = pointify_coordinates(lineArray[0:2]) lineToWrite = indent + "path.lineTo(" + coordinates + ");\n" print(lineToWrite) continue if instruction.endswith("c"): lineArray = instruction.split() coordinates = convert_to_curve_parameters(lineArray) lineToWrite = indent + "path.cubicCurveTo(" + coordinates + ");\n" print(lineToWrite) continue # stroke information if instruction.endswith("w"): strokeWidth = instruction.split()[0] lineToWrite = indent + "path.strokeWidth = " + strokeWidth + ";\n" print(lineToWrite) continue if instruction.endswith("S"): lineToWrite = indent + "path.strokeColor = " + currentColour + ";\n" print(lineToWrite) continue if instruction.endswith("J"): print(indent + instruction + " (a line cap)") continue if instruction.endswith("j"): print(indent + instruction + " (a line join)") continue if instruction.endswith("M"): lineArray = instruction.split() # print(indent + instruction + " (set miter limit)") lineToWrite = indent + "path.miterLimit = " + lineArray[0] + ";\n" print(lineToWrite) continue # stroke closing if instruction.endswith("h"): lineToWrite = indent + "path.closePath();\n" print(lineToWrite) continue print("if you see this, time to support extra commands") print(instruction) print("\n}") print(functionName + "();\n") return