First, we need this code:
def fountain2latex(input_fntn_file, name=""): """ Assumes John Pate's screenplay template is loaded. INPUT: input_fntn_file could be "/home/wdj/my-script.fountain" name could be "draft-2016-08-26" OUTPUT: latex file of script EXAMPLE: """ script_list = character_dialog_list(input_fntn_file)[1] dones = [] output_latex_file = input_fntn_file[:-10]+"-"+name+".tex" r = open(output_latex_file,"w") char_list = character_list(input_fntn_file) f = open(input_fntn_file,'r') lines = f.readlines() N = len(lines) for j in range(6): x = lines[j] if x[:6] == "Title:": title = x[6:] dones.append(j) if x[:7] == "Author:": author = x[7:] dones.append(j) if "Draft date:" in x: script_list[j] = "date" dones.append(j) if "Contact:" in x: script_list[j] = "email" dones.append(j) # start latex header r.write("\\documentclass{screenplay}\n") #r.write("\\usepackage{article}\n") #r.write("\\makeatletter{}\n") #r.write("\\g@addto@macro\\quote\\flushleft\n") #r.write("\\makeatother\n") r.write("\\begin{document}\n") r.write("\\title{%s}\n"%title) r.write("\\author{%s}\n"%author) r.write("\\maketitle\n") r.write("\\newpage") r.write("\\vskip .2in\n") # finish latex header for j in range(6,N): x = lines[j] if x[0]=="#": r.write("%"+x) dones.append(j) if x[:3].upper() == "INT" and ("DAY" in x or "day" in x): r.write("\intslug[day]{"+x[4:-4]+"}") dones.append(j) if x[:3].upper() == "INT" and ("NIGHT" in x or "night" in x): r.write("\intslug[night]{"+x[4:-6]+"}") dones.append(j) if x[:3].upper() == "EXT" and ("DAY" in x or "day" in x): r.write("\extslug[day]{"+x[4:-4]+"}") dones.append(j) if x[:3].upper() == "EXT" and ("NIGHT" in x or "night" in x): r.write("\extslug[night]{"+x[4:-6]+"}") dones.append(j) for c in char_list: if c in x and len(x)==len(c)+1: dones.append(j) r.write(" \n") r.write("\\begin{dialogue}{"+c+"}") for i in range(1,N): if j+i"#": r.write(lines[j+i]) dones.append(j+i) else: break r.write("\\end{dialogue}") r.write(" \n") if x[0]==".": r.write("\\noindent \n"+x[1:].replace("#","\#")+"\n") dones.append(j) if not(j in dones): r.write(x+"\n") f.close() # start latex footer r.write("\end{document}\n") r.close() return "finished writing: %s"%output_latex_file
This will parse a large subset of fountain into LaTeX, using John Pate's template. For example, comments must be entered with a "#" at the beginning. Secondary slugs can't be used, "DAY" or "NIGHT" must be at the end of the line. There are other features lacking. None-the-less, Big Fish is rendered as latex which compiles almost without errors:-).
Works fine under linux, which is the main thing for me. I wrote this over the labor day weekend for fun and don't plan to improve it more, but if you have suggestions, I'm happy to hear them.
No comments:
Post a Comment