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.
This commit is contained in:
Anthony Fok 2015-01-21 06:05:16 -07:00
parent 1cc6386937
commit 19c52ab0b5
2 changed files with 39 additions and 1 deletions

View file

@ -252,7 +252,17 @@ func TruncateWordsToWholeSentence(s string, max int) string {
func GetRstContent(content []byte) string { func GetRstContent(content []byte) string {
cleanContent := bytes.Replace(content, SummaryDivider, []byte(""), 1) 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) cmd.Stdin = bytes.NewReader(cleanContent)
var out bytes.Buffer var out bytes.Buffer
cmd.Stdout = &out cmd.Stdout = &out

View file

@ -24,6 +24,7 @@ func init() {
RegisterHandler(new(markdownHandler)) RegisterHandler(new(markdownHandler))
RegisterHandler(new(htmlHandler)) RegisterHandler(new(htmlHandler))
RegisterHandler(new(asciidocHandler)) RegisterHandler(new(asciidocHandler))
RegisterHandler(new(rstHandler))
} }
type basicPageHandler Handle type basicPageHandler Handle
@ -100,3 +101,30 @@ func (h asciidocHandler) PageConvert(p *Page, t tpl.Template) HandledResult {
//err := p.Convert() //err := p.Convert()
return HandledResult{page: p, err: nil} 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}
}