ref: 19c52ab0b5a5a8f89d43dcc2e2a15e2f53170017
parent: 1cc638693713d7f4ce564b91302af72e3d8531e2
author: Anthony Fok <[email protected]>
date: Wed Jan 21 01:05:16 EST 2015
Register rstHandler to restore experimental reST support (Experimental) reStructuredText support was working in v0.12, but was no longer handled after some refactoring in v0.13-DEV. That experimental support is now restored. Furthermore, check for both rst2html and rst2html.py in the PATH, and execute whichever is found. See #472 for more information.
--- a/helpers/content.go
+++ b/helpers/content.go
@@ -252,7 +252,17 @@
func GetRstContent(content []byte) string {
cleanContent := bytes.Replace(content, SummaryDivider, []byte(""), 1)
- cmd := exec.Command("rst2html.py", "--leave-comments")
+ path, err := exec.LookPath("rst2html")
+ if err != nil {
+ path, err = exec.LookPath("rst2html.py")
+ if err != nil {
+ jww.ERROR.Println("rst2html / rst2html.py not found in $PATH: Please install.\n",
+ " Leaving reStructuredText content unrendered.")
+ return(string(content))
+ }
+ }
+
+ cmd := exec.Command(path, "--leave-comments")
cmd.Stdin = bytes.NewReader(cleanContent)
var out bytes.Buffer
cmd.Stdout = &out
--- a/hugolib/handler_page.go
+++ b/hugolib/handler_page.go
@@ -24,6 +24,7 @@
RegisterHandler(new(markdownHandler))
RegisterHandler(new(htmlHandler))
RegisterHandler(new(asciidocHandler))
+ RegisterHandler(new(rstHandler))
}
type basicPageHandler Handle
@@ -99,4 +100,31 @@
//err := p.Convert()
return HandledResult{page: p, err: nil}
+}
+
+type rstHandler struct {
+ basicPageHandler
+}
+
+func (h rstHandler) Extensions() []string { return []string{"rest", "rst"} }
+func (h rstHandler) PageConvert(p *Page, t tpl.Template) HandledResult {
+ p.ProcessShortcodes(t)
+
+ tmpContent, tmpTableOfContents := helpers.ExtractTOC(p.renderContent(helpers.RemoveSummaryDivider(p.rawContent)))
+
+ if len(p.contentShortCodes) > 0 {
+ tmpContentWithTokensReplaced, err := replaceShortcodeTokens(tmpContent, shortcodePlaceholderPrefix, -1, true, p.contentShortCodes)
+
+ if err != nil {
+ jww.FATAL.Printf("Fail to replace short code tokens in %s:\n%s", p.BaseFileName(), err.Error())
+ return HandledResult{err: err}
+ } else {
+ tmpContent = tmpContentWithTokensReplaced
+ }
+ }
+
+ p.Content = helpers.BytesToHTML(tmpContent)
+ p.TableOfContents = helpers.BytesToHTML(tmpTableOfContents)
+
+ return HandledResult{err: nil}
}