ink
ink copied to clipboard
请问 Ink 用的 blackfriday v1.5 可否升级为 v2
我发现 Ink 并没有直接 import "github.com/russross/blackfriday",而是 import 了自己 fork 的 blackfriday,故有此问。
因为 blackfriday v2 多了可定制选项 blackfriday.WithRenderer
,经过不停地搜索学习,我这两天用这个特性实现了自定义 TOC 生成的功能:
.md 的头部 meta 信息里,用 toc: true
来生成 TOC(目录)。
title: "不问罪福 念佛皆生"
date: 2015-05-23 18:01:00 +0800
author: 释慧净
toc: true
tags:
- 净土宗丛书
- 随身书
preview:
---
上面有了 toc: true
的定义,就会在正文之前生成目录(已实现,基于 blackfriday v2):
import "gopkg.in/russross/blackfriday.v2"
下面大部分代码是抄来的:
type inkRenderer struct {
defaultR *blackfriday.HTMLRenderer
}
func (r *inkRenderer) RenderHeader(w io.Writer, ast *blackfriday.Node) {
r.defaultR.RenderHeader(w, ast)
}
func (r *inkRenderer) RenderFooter(w io.Writer, ast *blackfriday.Node) {
r.defaultR.RenderFooter(w, ast)
}
func (r *inkRenderer) RenderNode(w io.Writer, node *blackfriday.Node, entering bool) blackfriday.WalkStatus {
return r.defaultR.RenderNode(w, node, entering)
}
func ParseMarkdownWithToc(markdown string) template.HTML {
defaultR := blackfriday.NewHTMLRenderer(blackfriday.HTMLRendererParameters{Flags: blackfriday.TOC,})
r := inkRenderer{defaultR: defaultR}
html := blackfriday.Run([]byte(markdown), blackfriday.WithRenderer(&r))
return template.HTML(html)
}
func ParseMarkdown(markdown string) template.HTML {
// html.UnescapeString
return template.HTML(blackfriday.Run([]byte(markdown)))
}
后面调用:
if config.Toc {
article.Content = ParseMarkdownWithToc(content)
} else {
article.Content = ParseMarkdown(content)
}
请问 Ink 用的 blackfriday v1.5 可否升级为 v2?
@fofen 太棒了,这个功能一直有人需要,fork 的 blackfriday
版本我们主要修改了 img
标签的生成,将· src
属性更改成了 data-src
以支持图片在页面向下滚动后的 lazy load。看来需要 sync 下 blackfriday upstream 版本了。也可以提 PR 哦。😏
@fofen 发送了邀请给你加入 InkProject member 哈,方便代码提交,欢迎你做 contributor。:)
@imeoer 谢谢哦,已接受邀请,正式成为 InkProject member 啦~ 开心
那就等您 sync 下 blackfriday v2 咯,之后我也要改一下它,把它生成 toc 那部分的 <nav>
给加上 class,方便用户自己定义 toc 的 css 样式。
话说,, toc 还没支持么?