#!/usr/bin/env python import re import sys class GenAssemblyIndex(object): indexfile = "docs/assembly/index.html" markdownfile = "wiki/Assembly.md" sourcefile = "full_assembly.scad" modules = [] modinfo = {} def write_index(self): with open(self.indexfile, "w") as f: f.write("""\ Snappy Assembly

Snappy RepRap Assembly Instructions

    """) for mod_eng in self.modules: f.write('
  1. ') f.write('

    %s

    \n' % mod_eng) stepcnt = len(self.modinfo[mod_eng]) if stepcnt > 1: f.write('\n') f.write('
  2. \n') f.write('
\n') f.write('\n') f.write('\n') def write_markdown(self): with open(self.markdownfile, "w") as f: f.write("# Snappy RepRap Assembly Instructions\n\n") for mod_eng in self.modules: f.write('##%s\n\n' % mod_eng) stepcnt = len(self.modinfo[mod_eng]) for stepinfo in self.modinfo[mod_eng]: stepinfo['base'] = \ 'https://raw.githubusercontent.com/' \ 'revarbat/snappy-reprap/master/docs/assembly/' if stepcnt > 1: f.write('### Step {step}\n\n'.format(**stepinfo)) f.write( '{desc}\n\n' 'Before | After\n' '------ | -----\n' '![{module} Step {step} Before]' '({base}{module}_before.png) | ' '![{module} Step {step} After]' '({base}{module}_after.png)\n\n' .format(**stepinfo) ) def process_module(self, module, desc): print("module: %s" % module) step = 1 mod_eng = module.replace('_', ' ') \ .title() \ .replace('Xy', 'XY') \ .replace('Yz', 'YZ') mod_split = mod_eng.split(" ") if mod_split[-1].isdigit(): step = int(mod_split[-1]) mod_eng = " ".join(mod_split[:-1]) if mod_eng not in self.modules: self.modules.append(mod_eng) self.modinfo[mod_eng] = [ { 'module': module, 'step': step, 'desc': desc }, ] else: self.modinfo[mod_eng].append( { 'module': module, 'step': step, 'desc': desc }, ) def generate_index(self): mod_re = re.compile( r'module *([a-z_][a-z0-9_]*_assembly(_[0-9]+)?) *\(' ) desc_re = re.compile(r'// *desc: *(.*)$') module = "" desc = "" with open(self.sourcefile, "r") as f: for line in f.readlines(): mod_res = mod_re.search(line) if mod_res: if module: self.process_module(module, desc) module = mod_res.group(1) desc = "" desc_res = desc_re.search(line) if desc_res: desc += desc_res.group(1) if module: self.process_module(module, desc) self.write_index() self.write_markdown() def main(): genidx = GenAssemblyIndex() genidx.generate_index() sys.exit(0) if __name__ == "__main__": main() # vim: expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap