import glob import os def build_header(id, title, prev, next): prevtext = nexttext = '' if prev: prevtext = 'prev: ' + prev + '\n' if next: nexttext = 'next: ' + next + '\n' return '''--- id: %s title: %s layout: docs %s%s---''' % (id, title, prevtext, nexttext) def sanitize(content): title,content = content.split('\n', 1) title = title[2:].strip() return title,content.replace('# ', '## ').strip() def get_dest(filename): return os.path.join(os.path.dirname(filename), '..', os.path.basename(filename)) def relative_html(filename): if not filename: return None return os.path.splitext(os.path.basename(filename))[0] + '.html' def generate_nav_item(filename, title): basename = os.path.splitext(os.path.basename(filename))[0] return ' <li><a href="/react/docs/%s.html"{%% if page.id == \'%s\' %%} class="active"{%% endif %%}>%s</a></li>\n' % (basename, basename, title) def main(): docs = [None] + glob.glob(os.path.join(os.path.dirname(os.path.abspath(__file__)), '*.md'))[:-1] + [None] nav = ''' <div class="nav-docs"> <div class="nav-docs-section"> <h3>React documentation</h3> <ul> %s </ul> </div> </div>''' items = '' for i in xrange(1, len(docs) - 1): prev = relative_html(docs[i - 1]) next = relative_html(docs[i + 1]) with open(docs[i], 'r') as src, open(get_dest(docs[i]), 'w') as dest: title,content = sanitize(src.read()) header = build_header( os.path.splitext(os.path.basename(docs[i]))[0], title, prev, next ) dest.write(header + '\n' + content) if docs[i].count('.') == 1: items += generate_nav_item(docs[i], title) with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', '_includes', 'nav_docs.html'), 'w') as f: f.write(nav % items) if __name__ == '__main__': main()