Created
January 5, 2015 15:45
-
-
Save rubdos/b688e946c9a9d3b7226e to your computer and use it in GitHub Desktop.
compile_procedures.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# Please put this file in the $FG_ROOT directory, chmod +x and run, then look in the procedures subdirectory. | |
import xml.etree.ElementTree as etree | |
import os | |
import shutil | |
from subprocess import call | |
def generate_procedures(source): | |
root = os.path.join("procedures", source['name']) | |
checklists_path = os.path.join(root, "checklists") | |
if(not os.path.isdir(root)): | |
os.mkdir(root) | |
if(not os.path.isdir(checklists_path)): | |
os.mkdir(checklists_path) | |
preamble = open(os.path.join(root, "preamble.tex"), "w") | |
preamble.write("\\section{Preamble}") | |
preamble.write("This procedure list should be considered incomplete and it is not intended for real world use. It is automatically generated documentation intended for FlightGear flight simulator.") | |
procedures_tex = open(os.path.join(root, source['name'] + "_procedures.tex"), "w") | |
procedures_tex.write("\\documentclass{article}\n") | |
procedures_tex.write("\\usepackage{hyperref}\n\usepackage{graphicx}\n") | |
procedures_tex.write("\\title{"+source['name']+" procedures}\n") | |
procedures_tex.write("\\author{FlightGear team}\n") | |
procedures_tex.write("\\begin{document}\n") | |
procedures_tex.write("\\maketitle\n") | |
if(source['thumbnail']): | |
shutil.copyfile("Aircraft/" + source['name'] + "/thumbnail.jpg", | |
os.path.join(root, "thumbnail.jpg")) | |
procedures_tex.write("\\begin{figure}[h!]\\centering") | |
procedures_tex.write("\\includegraphics{thumbnail.jpg}") | |
procedures_tex.write("\\end{figure}") | |
procedures_tex.write("\\tableofcontents\n") | |
procedures_tex.write("\\input{preamble.tex}\n") | |
if(source['sources'] > 0): | |
procedures_tex.write("\\input{checklists.tex}\n") | |
checklists_tex = open(os.path.join(root, "checklists.tex"), "w") | |
checklists_tex.write("\\section{Checklists}\n") | |
for xmlfile in source['sources']: | |
tree = etree.parse(xmlfile) | |
chkl_root = tree.getroot() | |
for checklist in chkl_root: | |
if checklist.tag != "checklist": | |
print "Unrecognised tag in", xmlfile | |
continue | |
title = checklist.find("title") | |
if title is None: | |
title = "Untitled" | |
else: | |
title = title.text | |
items = [] | |
for item in checklist.findall("item"): | |
name = item.find("name") | |
value = item.find("value") | |
if name is None or value is None: | |
continue | |
if name.text is None or value.text is None: | |
continue | |
items.append({ | |
'name': name.text, | |
'value': value.text | |
}) | |
filename = title + ".tex" | |
filename = filename.replace("/", "_") | |
filename = filename.replace(" ", "_") | |
checklists_tex.write("\\input{checklists/"+filename+"}\n") | |
f = open(os.path.join(checklists_path,filename), "w") | |
f.write("\\subsection{" + title + "}\n") | |
if len(items) > 0: | |
f.write("\\begin{description}\n") | |
for item in items: | |
f.write("\\item["+item['name']+"] " + item['value']+"\n") | |
f.write("\\end{description}\n") | |
procedures_tex.write("\\end{document}\n") | |
def generate_index(directory = "Aircraft"): | |
checklists = [] | |
for aircraft in os.listdir(directory): | |
checklist = { | |
'sources' : [], | |
'name' : aircraft, | |
'thumbnail': False | |
} | |
if os.path.isfile(os.path.join(directory, aircraft + "/thumbnail.jpg")): | |
checklist['thumbnail'] = True | |
for root, dirs, files in os.walk(os.path.join(directory, aircraft), topdown=False): | |
for name in files: | |
if(name.endswith("checklists.xml")): | |
checklist['sources'].append(os.path.join(root,name)) | |
if(len(checklist['sources']) > 0): | |
checklists.append(checklist) | |
return checklists | |
def compile_procedures(source): | |
wd = os.getcwd() | |
root = os.path.join("procedures", source['name']) | |
os.chdir(root) | |
mainfile = source['name'] + "_procedures.tex" | |
call(["pdflatex", "-interaction", "nonstopmode", mainfile]) | |
call(["pdflatex", "-interaction", "nonstopmode", mainfile]) | |
os.chdir(wd) | |
checklists_source = generate_index() | |
if(len(checklists_source) == 0 ): | |
print "No aircraft found; wrong directory?" | |
if(not os.path.isdir("procedures")): | |
os.mkdir("procedures") | |
for src in checklists_source: | |
generate_procedures(src) | |
compile_procedures(src) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment