shithub: hugo

Download patch

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}
 }