You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

63 lines
2.0 KiB

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()