Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
fofen opened this issue Nov 7, 2017 · 4 comments · Fixed by #138
Closed

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

fofen opened this issue Nov 7, 2017 · 4 comments · Fixed by #138

Comments

@fofen
Copy link
Contributor

fofen commented Nov 7, 2017

我发现 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?

@imeoer
Copy link
Member

imeoer commented Nov 8, 2017

@fofen 太棒了,这个功能一直有人需要,fork 的 blackfriday 版本我们主要修改了 img 标签的生成,将· src 属性更改成了 data-src 以支持图片在页面向下滚动后的 lazy load。看来需要 sync 下 blackfriday upstream 版本了。也可以提 PR 哦。😏

@imeoer
Copy link
Member

imeoer commented Nov 8, 2017

@fofen 发送了邀请给你加入 InkProject member 哈,方便代码提交,欢迎你做 contributor。:)

@fofen
Copy link
Contributor Author

fofen commented Nov 8, 2017

@imeoer 谢谢哦,已接受邀请,正式成为 InkProject member 啦~ 开心
那就等您 sync 下 blackfriday v2 咯,之后我也要改一下它,把它生成 toc 那部分的 <nav> 给加上 class,方便用户自己定义 toc 的 css 样式。

@bigzhu
Copy link

bigzhu commented Jun 1, 2018

话说,, toc 还没支持么?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants