From 9c2a89e4123233144286612f73ba068a28f2f4fa Mon Sep 17 00:00:00 2001 From: mDuo13 Date: Wed, 21 Oct 2015 13:05:46 -0700 Subject: [PATCH] parse_pages - different output for different environments --- tool/pages.json | 15 +++++++ tool/parse_pages.py | 91 ++++++++++++++++++++++++++++++------------ tool/template-doc.html | 4 +- 3 files changed, 83 insertions(+), 27 deletions(-) diff --git a/tool/pages.json b/tool/pages.json index 49be16e76b..9d93f24dd9 100644 --- a/tool/pages.json +++ b/tool/pages.json @@ -3,60 +3,70 @@ "name": "rippled", "md":"rippled.md", "html":"rippled-apis.html", + "ripple.com": "https://ripple.com/build/rippled-apis/", "type": "reference" }, { "name": "rippled Setup", "md":"rippled-setup.md", "html":"rippled-setup.html", + "ripple.com": "https://ripple.com/build/rippled-setup/", "type": "tutorial" }, { "name": "Ripple-REST", "md": "ripplerest_api.md", "html": "ripple-rest.html", + "ripple.com": "https://ripple.com/build/ripple-rest/", "type": "reference" }, { "name": "Transactions", "md":"tx_format.md", "html":"transactions.html", + "ripple.com": "https://ripple.com/build/transactions/", "type": "reference" }, { "name": "Ripple Consensus Ledger", "md":"ledger_format.md", "html":"ripple-ledger.html", + "ripple.com": "https://ripple.com/build/ledger-format/", "type": "reference" }, { "name": "Reliable Transaction Submission", "md":"reliable_tx.md", "html":"reliable_tx.html", + "ripple.com": "https://ripple.com/build/reliable-transaction-submission/", "type": "tutorial" }, { "name": "Gateway Guide", "md":"gateway_guide.md", "html":"gateway_guide.html", + "ripple.com": "https://ripple.com/build/gateway-guide/", "type": "tutorial" }, { "name": "Historical Data API", "md": "historical_data.md", "html": "historical_data.html", + "ripple.com": "https://ripple.com/build/historical-database/", "type": "reference" }, { "name": "Ripple Charts API", "md": "charts_api.md", "html": "charts_api.html", + "ripple.com": "https://ripple.com/build/charts-api/", "type": "reference" }, { "name": "Ripple Data API v2", "md": "data_v2.md", "html": "data_api_v2.html", + "ripple.com": "https://ripple.com/build/data-api-v2/", "type": "reference" }, { @@ -75,6 +85,7 @@ "name": "Transfer Fees", "md":"transferrate.md", "html":"transfer_fees.html", + "ripple.com": "https://ripple.com/knowledge_center/transfer-fees/", "type": "reference" }, { @@ -94,6 +105,7 @@ "methods_js": "js/apitool-methods-ripplerest.js", "is_apitool": true, "rest_host": "https://api.ripple.com", + "ripple.com": "https://ripple.com/build/rest-tool/", "html": "rest-api-tool.html" }, { @@ -102,12 +114,14 @@ "methods_js": "js/apitool-methods-historical.js", "type": "apitool", "rest_host": "https://history.ripple.com", + "ripple.com": "https://ripple.com/build/historical-database-api-tool/", "html": "historicaldb-api-tool.html" }, { "name": "WebSocket API Tool", "template":"template-ripple-api-tool.html", "type": "apitool", + "ripple.com": "https://ripple.com/build/websocket-tool/", "html": "ripple-api-tool.html" }, { @@ -116,6 +130,7 @@ "methods_js": "js/apitool-methods-charts.js", "type": "apitool", "rest_host": "https://api.ripplecharts.com", + "ripple.com": "https://ripple.com/build/charts-api-tool/", "html": "charts-api-tool.html" }, { diff --git a/tool/parse_pages.py b/tool/parse_pages.py index aa5c5339a3..335a8eec1b 100755 --- a/tool/parse_pages.py +++ b/tool/parse_pages.py @@ -33,11 +33,12 @@ CONTENT_PATH = "../content" BUTTONIZE_FILTER = "buttonize.py" PRINCE_PAGE_MANIFEST_FILE = "/tmp/devportal-pages.txt" -def parse_markdown(md): +def parse_markdown(md, environment="local", pages=None): ## Python markdown requires markdown="1" on HTML block elements ## that contain markdown. AND there's a bug where if you use ## markdown.extensions.extra, it replaces code fences in HTML ## block elements with garbled text + print("adding markdown class to embedded divs...") def add_markdown_class(m): if m.group(0).find("markdown=") == -1: return m.group(1) + ' markdown="1">' @@ -45,18 +46,54 @@ def parse_markdown(md): return m.group(0) md = re.sub("(]*)>", add_markdown_class, md) + print("done") #the actual markdown parsing is the easy part - html = markdown(md, extensions=["markdown.extensions.extra", "markdown.extensions.toc"]) + print("parsing markdown...") + html = markdown(md, extensions=["markdown.extensions.extra", + "markdown.extensions.toc"]) + print("done") #replace underscores with dashes in h1,h2,etc. for Flatdoc compatibility + print("tweaking header IDs...") soup = BeautifulSoup(html, "html.parser") headers = soup.find_all(name=re.compile("h[0-9]"), id=True) for h in headers: if "_" in h["id"]: h["id"] = h["id"].replace("_","-") + print("done") - html2 = soup.prettify() + #buttonize links ending in > + print("buttonizing try-it links...") + buttonlinks = soup.find_all("a", string=re.compile(">$")) +## print("buttonlinks:",buttonlinks) + for link in buttonlinks: + if "class" in link.attrs: + link["class"].append("button") + else: + link["class"] = "button" + print("done") + + #Replace links for live site + if environment != "local": + print("modifying links for environment",environment) + if not pages: + pages = get_pages() + + links = soup.find_all("a",href=re.compile("^[^.]+\.html")) + for link in links: + for page in pages: + if environment in page: + #There's a replacement link for this env + if page["html"] in link["href"]: + link["href"] = link["href"].replace(page["html"], + page[environment]) + print("done") + + print("re-rendering HTML") + #html2 = soup.prettify() + html2 = str(soup) + print("done") return html2 def get_pages(): @@ -66,17 +103,9 @@ def get_pages(): print("done") return pages -def render_pages(precompiled, pdf=False): +def render_pages(precompiled, pdf=False, environment="local"): pages = get_pages() -# if pdf: -# precompiled = True#Prince probably won't work otherwise -# with open(PRINCE_PAGE_MANIFEST_FILE,"w") as f: -# for page in pages: -# if "md" in page: -# f.write(page["html"]) -# f.write("\n\n") - env = Environment(loader=FileSystemLoader(os.path.curdir)) env.lstrip_blocks = True env.trim_blocks = True @@ -88,6 +117,7 @@ def render_pages(precompiled, pdf=False): print("reading template file...") +# #Experimental: Preprocessing the doc files using Jinja # with open(DOC_TEMPLATE_FILE) as f: # template_text = f.read() # doc_template = Template(template_text) @@ -103,7 +133,7 @@ def render_pages(precompiled, pdf=False): ## New markdown module way with open(filein) as f: s = f.read() - doc_html = parse_markdown(s) + doc_html = parse_markdown(s, environment, pages) # ## Old Pandoc way # args = ['pandoc', filein, '-F', BUTTONIZE_FILTER, '-t', 'html'] @@ -111,17 +141,21 @@ def render_pages(precompiled, pdf=False): # doc_html = subprocess.check_output(args, universal_newlines=True) print("done") - print("rendering page",currentpage,"...") - out_html = doc_template.render(currentpage=currentpage, pages=pages, - content=doc_html, precompiled=precompiled) + print("rendering page",currentpage["name"],"...") + out_html = doc_template.render(currentpage=currentpage, + pages=pages, + content=doc_html, + precompiled=precompiled) print("done") else: print("compiling skipped") - print("rendering page",currentpage,"...") - out_html = doc_template.render(currentpage=currentpage, pages=pages, - content="", precompiled=precompiled) + print("rendering page",currentpage["name"],"...") + out_html = doc_template.render(currentpage=currentpage, + pages=pages, + content="", + precompiled=precompiled) print("done") else: @@ -134,7 +168,7 @@ def render_pages(precompiled, pdf=False): print("done") - print("rendering page",currentpage,"...") + print("rendering page",currentpage["name"],"...") out_html = template.render(currentpage=currentpage, pages=pages) print("done") @@ -149,14 +183,14 @@ def render_pages(precompiled, pdf=False): print("done") -def watch(pre_parse, pdf): +def watch(pre_parse, pdf, environment): path = ".." class UpdaterHandler(PatternMatchingEventHandler): def on_any_event(self, event): print("got event!") if pdf: make_pdf(pdf) - render_pages(pre_parse, pdf) + render_pages(pre_parse, pdf, environment) patterns = ["*tool/pages.json","*tool/template-*.html"] if pre_parse: @@ -176,7 +210,7 @@ def watch(pre_parse, pdf): def make_pdf(outfile): print("rendering PDF-able versions of pages...") - render_pages(True, outfile) + render_pages(True, pdf=outfile) print("done") args = ['prince', '-o', outfile, "../index.html"] @@ -192,16 +226,23 @@ if __name__ == "__main__": parser.add_argument("-w","--watch", action="store_true", help="Watch for changes and re-generate the files. This runs until force-quit.") parser.add_argument("--pdf", type=str, help="Generate a PDF, too. Requires Prince.") + parser.add_argument("--environment", "-e", type=str, default="local", + choices=["local","ripple.com"]) args = parser.parse_args() if args.pdf: if args.pdf[-4:] != ".pdf": exit("PDF filename must end in .pdf") + print("making a pdf...") make_pdf(args.pdf) + print("pdf done") #Not an accident that we go on to re-gen files in non-PDF format if args.watch: - watch(args.pre_parse, args.pdf) + print("watching for changes...") + watch(args.pre_parse, args.pdf, args.environment) else: - render_pages(args.pre_parse) + print("rendering pages now") + render_pages(args.pre_parse, environment=args.environment) + print("all done") diff --git a/tool/template-doc.html b/tool/template-doc.html index 982e03500e..91462b6681 100644 --- a/tool/template-doc.html +++ b/tool/template-doc.html @@ -41,7 +41,7 @@ {% endblock %} -{% block bodyattrs %} role='flatdoc' class='no-literate'{% endblock %} +{% block bodyattrs %}{% if not precompiled %} role='flatdoc'{% endif %} class='no-literate'{% endblock %} {% block contentroot %}
@@ -55,7 +55,7 @@ {% endif %}
-
+
{% if precompiled %} {{ content }} {% endif %}