def build_page(title, path, config, md_src=None): """ Helper which returns a Page object. """ sitenav = nav.SiteNavigation(config) page = nav.Page(title, path, sitenav.url_context, config) if md_src: # Fake page.read_source() page.markdown, page.meta = meta.get_data(md_src) return page, sitenav
def create_tree(event): """ Processes all the auto-generated API pages for the documentation. ### Parameters event | <mkdocs.events.PreBuild> ### Returns <bool> """ # generate a set of autodoc pages match = re.match('^tree:(.*)$', event.path) if match: root = match.group(1) path = os.path.abspath(os.path.join(config.docs_dir, root)) base = path[:-(len(root) + 1)] pages = [] for base_path, folder, files in os.walk(path): files.sort() if 'index.md' in files: files.remove('index.md') files.insert(0, 'index.md') for file in files: filepath = os.path.join(base_path, file) filepath = filepath.replace('\\', '/') if file == 'index.md': title = nav.filename_to_title(os.path.basename(base_path)) else: title = nav.filename_to_title(file) base_file_path = filepath[len(base) + 1:].replace('\\', '/') url = utils.get_url_path(base_file_path, True) page = nav.Page(title=title, url=url, path=base_file_path, url_context=event.url_context) page.base_path = base_path # Add in previous and next information. if pages: pages[-1].next_page = page page.previous_page = pages[-1] pages.append(page) event.pages = pages event.consumed = True
def append_extra_pages(config, env, dump_json, site_navigation): if site_navigation is None: log.debug("append_extra_pages: site_navigation is None") return docs_dir = config["docs_dir"] site_dir = config["site_dir"] log.info("append_extra_pages: docs_dir=%s, site_dir=%s", docs_dir, site_dir) for (dirpath, dirs, filenames) in os.walk(docs_dir): dir = dirpath[len(docs_dir):] for filename in filenames: if dirpath == docs_dir: extra_page = filename else: extra_page = dirpath[len(docs_dir)+1:] + "/" + filename if os.path.splitext(extra_page)[1] == '.md' and extra_page not in site_navigation.source_files: log.info(" - append_extra_pages: append %s", extra_page) # append to tail page = nav.Page("", "/"+extra_page.replace(".md", "/index.html"), extra_page, site_navigation.url_context) site_navigation.pages[len(site_navigation.pages)-1].next_page = page page.previous_page = site_navigation.pages[len(site_navigation.pages)-1] site_navigation.pages.append(page)
def build_pages(config, dump_json=False): """ Builds all the pages and writes them into the build directory. """ site_navigation = nav.SiteNavigation(config['pages'], config['use_directory_urls']) loader = jinja2.FileSystemLoader(config['theme_dir']) env = jinja2.Environment(loader=loader) search_index = search.SearchIndex() build_template('404.html', env, config, site_navigation) build_template('search.html', env, config, site_navigation) nav_pages = [] for page in site_navigation.walk_pages(): nav_pages.append(page.input_path) # Read the input file input_path = os.path.join(config['docs_dir'], page.input_path) input_content = open(input_path, 'r').read() if PY2: input_content = input_content.decode('utf-8') # Process the markdown text html_content, table_of_contents, meta = convert_markdown( input_content, site_navigation, extensions=config['markdown_extensions'], strict=config['strict']) context = get_global_context(site_navigation, config) context.update( get_page_context(page, html_content, site_navigation, table_of_contents, meta, config)) # Allow 'template:' override in md source files. if 'template' in meta: template = env.get_template(meta['template'][0]) else: template = env.get_template('base.html') if not utils.is_markdown_file(page.input_path): template = env.get_template('base_without_toc.html') # Render the template. output_content = template.render(context) # Write the output file. output_path = os.path.join(config['site_dir'], page.output_path) if dump_json: json_context = { 'content': context['content'], 'title': context['current_page'].title, 'url': context['current_page'].abs_url, 'language': 'en', } utils.write_file( json.dumps(json_context, indent=4).encode('utf-8'), output_path.replace('.html', '.json')) else: utils.write_file(output_content.encode('utf-8'), output_path) search_index.add_entry_from_context(page, html_content, table_of_contents) # generate html for other md files files = ListFilesByTxt(os.path.join(config['docs_dir']), '.md') for mdf in files: title = os.path.basename(mdf) title = os.path.splitext(title)[0] path = os.path.relpath(mdf, config['docs_dir']) url = utils.get_url_path(path, config['use_directory_urls']) output_path = utils.get_html_path(path) if (path in nav_pages): continue input_content = open(mdf, 'r').read() if PY2: input_content = input_content.decode('utf-8') site_navigation.url_context.set_current_url(url) # Process the markdown text html_content, table_of_contents, meta = convert_markdown( input_content, site_navigation, extensions=config['markdown_extensions']) context = get_global_context(site_navigation, config) page = nav.Page(title=title, url=url, path=path, url_context=site_navigation.url_context) context.update( get_page_context(page, html_content, site_navigation, table_of_contents, meta, config)) if 'template' in meta: template = env.get_template(meta['template'][0]) else: template = env.get_template('base.html') if not utils.is_markdown_file(mdf): template = env.get_template('base_without_toc.html') # Render the template. output_content = template.render(context) # Write the output file. output_path = os.path.join(config['site_dir'], output_path) utils.write_file(output_content.encode('utf-8'), output_path) #search_index.add_entry_from_context(page, html_content, table_of_contents) build_template( 'js/tipuesearch/tipuesearch_content.js', env, config, extra_context={'search_index': search_index.generate_search_index()})