Register rstHandler to restore experimental reST support
authorAnthony Fok <foka@debian.org>
Wed, 21 Jan 2015 13:05:16 +0000 (06:05 -0700)
committerAnthony Fok <foka@debian.org>
Wed, 21 Jan 2015 13:41:19 +0000 (06:41 -0700)
(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.

helpers/content.go
hugolib/handler_page.go

index e8c086a333caea0f56f9966855022e73806b2ad3..1d051801deb3dfb48cd6c5b1d426a92e08bb6840 100644 (file)
@@ -252,7 +252,17 @@ func TruncateWordsToWholeSentence(s string, max int) string {
 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
index 73cd12a793c957706a89792ebb8b462d5dfe6764..6c912ded3377e7788458abd8cb71009295b850c2 100644 (file)
@@ -24,6 +24,7 @@ func init() {
        RegisterHandler(new(markdownHandler))
        RegisterHandler(new(htmlHandler))
        RegisterHandler(new(asciidocHandler))
+       RegisterHandler(new(rstHandler))
 }
 
 type basicPageHandler Handle
@@ -100,3 +101,30 @@ func (h asciidocHandler) PageConvert(p *Page, t tpl.Template) HandledResult {
        //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}
+}