diff --git a/helpers/content.go b/helpers/content.go index e8c086a33..1d051801d 100644 --- a/helpers/content.go +++ b/helpers/content.go @@ -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 diff --git a/hugolib/handler_page.go b/hugolib/handler_page.go index 73cd12a79..6c912ded3 100644 --- a/hugolib/handler_page.go +++ b/hugolib/handler_page.go @@ -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} +}