package notes
import (
"bytes"
"encoding/base64"
"errors"
"fmt"
"io"
"io/ioutil"
"gogs.inhome.blapointe.com/local/notes-server/filetree"
"gogs.inhome.blapointe.com/local/notes-server/notes/md"
"path"
"regexp"
"strings"
"github.com/fairlyblank/md2min"
"github.com/gomarkdown/markdown/ast"
"github.com/gomarkdown/markdown/html"
blackfriday "github.com/russross/blackfriday/v2"
"github.com/yuin/goldmark"
)
func (n *Notes) File(urlPath string) (string, error) {
p := filetree.NewPathFromURL(urlPath)
if p.IsDir() {
return "", errors.New("path is dir")
}
b, _ := ioutil.ReadFile(p.Local)
return n.gomarkdown(urlPath, b)
return n.blackfriday(urlPath, b)
return n.goldmark(urlPath, b)
return n.md2min(urlPath, b)
}
func (n *Notes) blackfriday(urlPath string, b []byte) (string, error) {
renderer := blackfriday.NewHTMLRenderer(blackfriday.HTMLRendererParameters{
Flags: blackfriday.TOC | blackfriday.Smartypants | blackfriday.SmartypantsFractions | blackfriday.SmartypantsDashes | blackfriday.SmartypantsQuotesNBSP | blackfriday.CompletePage,
})
return string(blackfriday.Run(
b,
blackfriday.WithRenderer(renderer),
)), nil
}
func (n *Notes) goldmark(urlPath string, b []byte) (string, error) {
buff := bytes.NewBuffer(nil)
err := goldmark.Convert(b, buff)
return string(buff.Bytes()), err
}
func (n *Notes) md2min(urlPath string, b []byte) (string, error) {
mdc := md2min.New("h1")
buff := bytes.NewBuffer(nil)
err := mdc.Parse(b, buff)
return string(buff.Bytes()), err
}
func (n *Notes) gomarkdown(urlPath string, b []byte) (string, error) {
return md.Gomarkdown(b, n.commentFormer(urlPath, b))
}
func (n *Notes) commentFormer(urlPath string, md []byte) html.RenderNodeFunc {
urlPath = strings.TrimPrefix(urlPath, "/")
urlPath = strings.TrimPrefix(urlPath, strings.Split(urlPath, "/")[0])
lines := bytes.Split(md, []byte("\n"))
cur := -1
nextHeader := func() {
cur++
for cur < len(lines) {
for _, opener_closer := range [][]string{{"```", "```"}, {`