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 parser.add_argument("--latex-table", help="output block status table as LaTeX",
18 action = 'store_true')
19 args = parser.parse_args()
21 mydir = os.path.dirname(os.path.realpath(__file__))
23 def print_markdown_as(format, text):
25 proc = subprocess.Popen(['pandoc', '-f', 'markdown', '-t', format], stdin = subprocess.PIPE)
26 proc.stdin.write(bytes(text, 'UTF-8'))
30 raise Exception("pandoc failed: %d" % proc.returncode)
32 def print_latex_desc(doc):
34 if iodef is None: return "None"
35 str='%d\n\\begin{enumerate}\n' % len(iodef)
37 str += Template('\\item {\\bf $name} $type').substitute(io)
39 str += ' %s' % io['range']
41 return str +'\end{enumerate}'
44 print("\\subsubsection{%s}\n" % doc['Name'])
45 print("\\begin{description}\n")
46 print("\\item[Inputs:] %s\n" % iodef_str(doc['Inputs']))
47 print("\\item[Outputs:] %s\n" % iodef_str(doc['Outputs']))
48 print("\\item[Parameters:] %s\n" % iodef_str(doc['Parameters']))
49 print("\\end{description}\n")
51 print_markdown_as('latex', doc['Description'])
53 print("\n\\textbf{Status:}")
54 print("\\begin{multicols}{3}")
55 if doc['Status']['Tested']:
56 print("\\begin{compactitem}")
57 print("\\item \\textbf{Tested}:")
58 print(" \\begin{compactitem}")
59 print("\n".join(["\\item %s" % i.replace('_', '\\_') for i in doc['Status']['Tested']]))
60 print(" \\end{compactitem}")
61 print("\\end{compactitem}")
65 print("\\vfill\\columnbreak")
67 if doc['Status']['Untested']:
68 print("\\begin{compactitem}")
69 print("\\item \\textbf{Untested}:")
70 print(" \\begin{compactitem}")
71 print("\n".join(["\\item %s" % i.replace('_', '\\_') for i in doc['Status']['Untested']]))
72 print(" \\end{compactitem}")
73 print("\\end{compactitem}")
77 print("\\vfill\\columnbreak")
79 if doc['Status']['Not working']:
80 print("\\begin{compactitem}")
81 print("\\item \\textbf{Not working}:")
82 print(" \\begin{compactitem}")
83 print("\n".join(["\\item %s" % i.replace('_', '\\_') for i in doc['Status']['Not working']]))
84 print(" \\end{compactitem}")
85 print("\\end{compactitem}")
89 print("\\end{multicols}\n")
91 if doc.get('RPP API functions used', None) is not None:
92 print("\\textbf{RPP API functions used:}")
93 print("\\begin{compactitem}")
94 print("\n".join(["\\item \\texttt{%s}" % i.replace('_', '\\_') for i in doc['RPP API functions used']]))
95 print("\\end{compactitem}")
97 if doc.get('Relevant demos', None) is not None:
98 print("\\textbf{Relevant demos:}")
99 print("\\begin{compactitem}")
100 print("\n".join(["\\item %s" % i.replace('_', '\\_') for i in doc['Relevant demos']]))
101 print("\\end{compactitem}")
105 for line in open(f, 'r'):
108 elif line.startswith("%YAML"):
113 raise Exception("No line starting with '%%YAML' found in %s" % f)
115 doc = yaml.load(yaml_doc)
116 schema = yaml.load(open(mydir+'/schema.yaml', 'r'))
118 rx = Rx.Factory({ "register_core_types": True })
119 rpp_block_doc_schema = rx.make_schema(schema)
121 rpp_block_doc_schema.check(doc)
122 except Rx.ValidationError as e:
123 raise Exception("Validation error in %s: %s" % (f, e))
127 print_markdown_as('html', doc['Description'])
129 print_latex_desc(doc)
132 if last_category == doc['Category']: doc['Category']=''
133 doc['Header'] = doc['Header'].replace('_', '\\_')
134 if doc['Status']['Not working']: doc['ShortStatus'] = '$\\alpha$'
135 elif doc['Status']['Untested']: doc['ShortStatus'] = '$\\beta$'
136 elif not doc['Status']['Tested']: doc['ShortStatus'] = '$\\beta$'
137 else: doc['ShortStatus'] = 'Stable'
138 print(Template("$Category & $Name & $ShortStatus & $Mnemonic & \\texttt{$Header} \\\\").substitute(doc))
140 last_category = doc['Category']