1
0
mirror of https://github.com/schollz/cowyo.git synced 2023-08-10 21:13:00 +03:00
cowyo/vendor/github.com/shurcooL/go/gfmutil/gfmutil.go
2017-10-03 14:43:55 -04:00

41 lines
1.9 KiB
Go

// Package gfmutil offers functionality to render GitHub Flavored Markdown to io.Writer.
package gfmutil
import (
"bytes"
"io"
"net/http"
"github.com/shurcooL/github_flavored_markdown"
)
// TODO: Change API to return errors rather than panicking.
// WriteGitHubFlavoredMarkdownViaLocal converts GitHub Flavored Markdown to full HTML page and writes it to w.
// It assumes that GFM CSS is available at /assets/gfm/gfm.css.
func WriteGitHubFlavoredMarkdownViaLocal(w io.Writer, markdown []byte) {
io.WriteString(w, `<html><head><meta charset="utf-8"><link href="/assets/gfm/gfm.css" media="all" rel="stylesheet" type="text/css" /><link href="//cdnjs.cloudflare.com/ajax/libs/octicons/2.1.2/octicons.css" media="all" rel="stylesheet" type="text/css" /></head><body><article class="markdown-body entry-content" style="padding: 30px;">`)
w.Write(github_flavored_markdown.Markdown(markdown))
io.WriteString(w, `</article></body></html>`)
}
// WriteGitHubFlavoredMarkdownViaGitHub converts GitHub Flavored Markdown to full HTML page and writes it to w
// by using GitHub API.
// It assumes that GFM CSS is available at /assets/gfm/gfm.css.
func WriteGitHubFlavoredMarkdownViaGitHub(w io.Writer, markdown []byte) {
io.WriteString(w, `<html><head><meta charset="utf-8"><link href="/assets/gfm/gfm.css" media="all" rel="stylesheet" type="text/css" /><link href="//cdnjs.cloudflare.com/ajax/libs/octicons/2.1.2/octicons.css" media="all" rel="stylesheet" type="text/css" /></head><body><article class="markdown-body entry-content" style="padding: 30px;">`)
// Convert GitHub Flavored Markdown to HTML (includes syntax highlighting for diff, Go, etc.)
resp, err := http.Post("https://api.github.com/markdown/raw", "text/x-markdown", bytes.NewReader(markdown))
if err != nil {
panic(err)
}
defer resp.Body.Close()
_, err = io.Copy(w, resp.Body)
if err != nil {
panic(err)
}
io.WriteString(w, `</article></body></html>`)
}