mirror of
https://github.com/eiblog/eiblog.git
synced 2026-02-04 13:52:26 +08:00
86 lines
2.3 KiB
Go
86 lines
2.3 KiB
Go
// Package render provides ...
|
|
package render
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/eiblog/eiblog/pkg/config"
|
|
"github.com/eiblog/eiblog/pkg/model"
|
|
"github.com/eiblog/eiblog/tools"
|
|
|
|
"github.com/eiblog/blackfriday"
|
|
)
|
|
|
|
// blackfriday 配置
|
|
const (
|
|
commonHtmlFlags = 0 |
|
|
blackfriday.HTML_TOC |
|
|
blackfriday.HTML_USE_XHTML |
|
|
blackfriday.HTML_USE_SMARTYPANTS |
|
|
blackfriday.HTML_SMARTYPANTS_FRACTIONS |
|
|
blackfriday.HTML_SMARTYPANTS_DASHES |
|
|
blackfriday.HTML_SMARTYPANTS_LATEX_DASHES |
|
|
blackfriday.HTML_NOFOLLOW_LINKS
|
|
|
|
commonExtensions = 0 |
|
|
blackfriday.EXTENSION_NO_INTRA_EMPHASIS |
|
|
blackfriday.EXTENSION_TABLES |
|
|
blackfriday.EXTENSION_FENCED_CODE |
|
|
blackfriday.EXTENSION_AUTOLINK |
|
|
blackfriday.EXTENSION_STRIKETHROUGH |
|
|
blackfriday.EXTENSION_SPACE_HEADERS |
|
|
blackfriday.EXTENSION_HEADER_IDS |
|
|
blackfriday.EXTENSION_BACKSLASH_LINE_BREAK |
|
|
blackfriday.EXTENSION_DEFINITION_LISTS
|
|
)
|
|
|
|
var (
|
|
// 渲染markdown操作和截取摘要操作
|
|
regIdentifier = regexp.MustCompile(config.Conf.EiBlogApp.General.Identifier)
|
|
// header
|
|
regHeader = regexp.MustCompile("</nav></div>")
|
|
)
|
|
|
|
// RenderPage 渲染markdown
|
|
func RenderPage(md []byte) []byte {
|
|
renderer := blackfriday.HtmlRenderer(commonHtmlFlags, "", "")
|
|
return blackfriday.Markdown(md, renderer, commonExtensions)
|
|
}
|
|
|
|
// GenerateExcerptMarkdown 生成预览和描述
|
|
func GenerateExcerptMarkdown(article *model.Article) {
|
|
blogapp := config.Conf.EiBlogApp
|
|
|
|
if strings.HasPrefix(article.Content, blogapp.General.DescPrefix) {
|
|
index := strings.Index(article.Content, "\r\n")
|
|
prefix := article.Content[len(blogapp.General.DescPrefix):index]
|
|
|
|
article.Desc = tools.IgnoreHtmlTag(prefix)
|
|
article.Content = article.Content[index:]
|
|
}
|
|
|
|
// 查找目录
|
|
content := RenderPage([]byte(article.Content))
|
|
index := regHeader.FindIndex(content)
|
|
if index != nil {
|
|
article.Header = string(content[0:index[1]])
|
|
article.Content = string(content[index[1]:])
|
|
} else {
|
|
article.Content = string(content)
|
|
}
|
|
|
|
// excerpt
|
|
index = regIdentifier.FindStringIndex(article.Content)
|
|
if index != nil {
|
|
article.Excerpt = tools.IgnoreHtmlTag(article.Content[:index[0]])
|
|
return
|
|
}
|
|
uc := []rune(article.Content)
|
|
length := blogapp.General.Length
|
|
if len(uc) < length {
|
|
length = len(uc)
|
|
}
|
|
article.Excerpt = tools.IgnoreHtmlTag(string(uc[0:length]))
|
|
}
|