InkProject / ink

An elegant static blog generator

Home Page:https://inkproject.github.io/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

请问 Ink 用的 blackfriday v1.5 可否升级为 v2

fofen opened this issue · comments

我发现 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 还没支持么?