Index: native_client_sdk/src/doc/_sphinxext/devsite_builder.py |
diff --git a/native_client_sdk/src/doc/_sphinxext/devsite_builder.py b/native_client_sdk/src/doc/_sphinxext/devsite_builder.py |
index 0a7860b8c216deba061d48983ca9d80fd6872f4d..a78ba16821efc397b9efe2d06b0aaab87d155354 100644 |
--- a/native_client_sdk/src/doc/_sphinxext/devsite_builder.py |
+++ b/native_client_sdk/src/doc/_sphinxext/devsite_builder.py |
@@ -15,7 +15,9 @@ from sphinx.util.osutil import ensuredir |
from sphinx.builders.html import StandaloneHTMLBuilder |
from sphinx.writers.html import HTMLWriter |
from sphinx.writers.html import SmartyPantsHTMLTranslator as HTMLTranslator |
+from sphinx.util.console import bold |
+PEPPER_VERSION = "31" |
# TODO(eliben): it may be interesting to use an actual Sphinx template here at |
# some point. |
@@ -25,8 +27,8 @@ ${devsite_prefix} |
<head> |
${nonprod_meta_head} |
<title>${doc_title}</title> |
- <meta name="project_path" value="/native-client/_project.yaml" /> |
- <meta name="book_path" value="/native-client/_book.yaml" /> |
+ <meta name="project_path" value="/native-client${folder}/_project.yaml" /> |
+ <meta name="book_path" value="/native-client${folder}/_book.yaml" /> |
<link href="/native-client/css/local_extensions.css" rel="stylesheet" type="text/css"/> |
${nonprod_css} |
<style type="text/css"> |
@@ -44,9 +46,8 @@ ${doc_body} |
'''.lstrip()) |
DEVSITE_PREFIX = r''' |
-{% setvar pepperversion %}pepper28{% endsetvar %} |
-{% include "native-client/_local_variables.html" %} |
-'''.lstrip() |
+{% setvar pepperversion %}pepper''' + PEPPER_VERSION + ''' {% endsetvar %} |
+{% include "native-client/_local_variables.html" %}''' |
DEVSITE_BUTTERBAR = '{{butterbar}}' |
@@ -142,7 +143,7 @@ class DevsiteHTMLTranslator(HTMLTranslator): |
# Paths to images in .rst sources should be absolute. This visitor does the |
# required transformation for the path to be correct in the final HTML. |
if self.builder.devsite_production_mode: |
- node['uri'] = '/native-client/' + node['uri'] |
+ node['uri'] = self.builder.get_prodution_url(node['uri']) |
HTMLTranslator.visit_image(self, node) |
def visit_reference(self, node): |
@@ -245,11 +246,56 @@ class DevsiteBuilder(StandaloneHTMLBuilder): |
self.init_translator_class() |
self.init_highlighter() |
+ def finish(self): |
+ super(DevsiteBuilder, self).finish() |
+ |
+ if self.devsite_production_mode: |
+ self.info(bold('generating yaml files... '), nonl=True) |
+ |
+ substitutions = { |
+ 'version': PEPPER_VERSION, |
+ 'folder': self.config.devsite_foldername |
+ } |
+ |
+ olddir = os.getcwd() |
+ try: |
+ os.chdir(self.env.srcdir) |
+ for root, dirs, files in os.walk('.'): |
+ root = os.path.normpath(root) |
+ if root.startswith("_"): |
+ continue |
+ for filename in files: |
+ if os.path.splitext(filename)[1] != ".yaml": |
+ continue |
+ filename = os.path.join(root, filename) |
+ outfile = os.path.join(self.outdir, filename) |
+ with open(filename) as f: |
+ template = string.Template(f.read()) |
+ |
+ with open(outfile, 'w') as f: |
+ f.write(template.substitute(substitutions)) |
+ finally: |
+ os.chdir(olddir) |
+ |
+ self.info() |
+ |
+ def dump_inventory(self): |
+ # We don't want an inventory file when building for devsite |
+ if not self.devsite_production_mode: |
+ super(DevsiteBuilder, self).dump_inventory() |
+ |
+ def get_prodution_url(self, url): |
+ if not self.devsite_production_mode: |
+ return url |
+ |
+ if self.config.devsite_foldername: |
+ return '/native-client/%s/%s' % (self.config.devsite_foldername, url) |
+ |
+ return '/native-client/%s' % url |
+ |
def get_target_uri(self, docname, typ=None): |
if self.devsite_production_mode: |
- # TODO(eliben): testrst here will have to be replaced with |
- # {{pepperversion}} |
- return '/native-client/testrst/%s' % docname |
+ return self.get_prodution_url(docname) |
else: |
return docname + self.link_suffix |
@@ -279,12 +325,18 @@ class DevsiteBuilder(StandaloneHTMLBuilder): |
""" |
if not 'body' in context: |
return |
+ |
+ folder = '' |
+ if self.devsite_production_mode and self.config.devsite_foldername: |
+ folder = "/" + self.config.devsite_foldername |
+ |
# codecs.open is the fast Python 2.x way of emulating the encoding= argument |
# in Python 3's builtin open. |
with codecs.open(filename, 'w', encoding='utf-8') as f: |
f.write(PAGE_TEMPLATE.substitute( |
doc_title=context.get('title', ''), |
doc_body=context.get('body'), |
+ folder=folder, |
nonprod_css=self._conditional_nonprod(NONPROD_CSS), |
nonprod_meta_head=self._conditional_nonprod(NONPROD_META_HEAD), |
devsite_prefix=self._conditional_devsite(DEVSITE_PREFIX), |
@@ -323,5 +375,5 @@ def setup(app): |
# "Production mode" for local testing vs. on-server documentation. |
app.add_config_value('devsite_production_mode', default='1', rebuild='html') |
- |
app.add_config_value('kill_internal_links', default='0', rebuild='html') |
+ app.add_config_value('devsite_foldername', default='dev', rebuild='html') |