9 from string import Template
11 parser = argparse.ArgumentParser()
12 parser.add_argument("file", help="file to process", nargs='+')
13 parser.add_argument("--html", help="output block description as HTML",
14 action = 'store_true')
15 parser.add_argument("--latex", help="output block description as LaTeX",
16 action = 'store_true')
17 args = parser.parse_args()
19 mydir = os.path.dirname(os.path.realpath(__file__))
21 def print_markdown_as(format, text):
23 proc = subprocess.Popen(['pandoc', '-f', 'markdown_strict', '-t', format], stdin = subprocess.PIPE)
24 proc.stdin.write(bytes(text, 'UTF-8'))
28 def print_latex_desc(doc):
30 if iodef is None: return "None"
31 str='%d\n\\begin{enumerate}\n' % len(iodef)
33 str += Template('\\item {\\bf $name} $type').substitute(io)
35 str += ' %s' % io['range']
37 return str +'\end{enumerate}'
40 print("\\subsubsection{%s}\n" % doc['Name'])
41 print("\\begin{description}\n")
42 print("\\item[Inputs:] %s\n" % iodef_str(doc['Inputs']))
43 print("\\item[Outputs:] %s\n" % iodef_str(doc['Outputs']))
44 print("\\item[Parameters:] %s\n" % iodef_str(doc['Parameters']))
45 print("\\end{description}\n")
47 print_markdown_as('latex', doc['Description'])
49 print("\n\\textbf{Status:}")
50 print("\\begin{multicols}{3}")
51 if doc['Status']['Tested']:
52 print("\\begin{compactitem}")
53 print("\\item \\textbf{Tested}:")
54 print(" \\begin{compactitem}")
55 print("\n".join(["\\item %s" % i.replace('_', '\\_') for i in doc['Status']['Tested']]))
56 print(" \\end{compactitem}")
57 print("\\end{compactitem}")
61 print("\\vfill\\columnbreak")
63 if doc['Status']['Untested']:
64 print("\\begin{compactitem}")
65 print("\\item \\textbf{Untested}:")
66 print(" \\begin{compactitem}")
67 print("\n".join(["\\item %s" % i.replace('_', '\\_') for i in doc['Status']['Untested']]))
68 print(" \\end{compactitem}")
69 print("\\end{compactitem}")
73 print("\\vfill\\columnbreak")
75 if doc['Status']['Not working']:
76 print("\\begin{compactitem}")
77 print("\\item \\textbf{Not working}:")
78 print(" \\begin{compactitem}")
79 print("\n".join(["\\item %s" % i.replace('_', '\\_') for i in doc['Status']['Not working']]))
80 print(" \\end{compactitem}")
81 print("\\end{compactitem}")
85 print("\\end{multicols}\n")
87 if 'RPP API functions used' in doc:
88 print("\\textbf{RPP API functions used:}")
89 print("\\begin{compactitem}")
90 print("\n".join(["\\item \\texttt{%s}" % i.replace('_', '\\_') for i in doc['RPP API functions used']]))
91 print("\\end{compactitem}")
93 if 'Relevant demos' in doc:
94 print("\\textbf{Relevant demos:}")
95 print("\\begin{compactitem}")
96 print("\n".join(["\\item %s" % i.replace('_', '\\_') for i in doc['Relevant demos']]))
97 print("\\end{compactitem}")
102 for line in open(f, 'r'):
105 elif line.startswith("%YAML"):
110 raise Exception("No line starting with '%%YAML' found in %s" % f)
112 doc = yaml.load(yaml_doc)
113 schema = yaml.load(open(mydir+'/schema.yaml', 'r'))
115 rx = Rx.Factory({ "register_core_types": True })
116 rpp_block_doc_schema = rx.make_schema(schema)
118 rpp_block_doc_schema.check(doc)
119 except Rx.ValidationError as e:
120 raise Exception("Validation error in %s: %s" % (f, e))
124 print_markdown_as('html', doc['Description'])
126 print_latex_desc(doc)