Skip to content

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

@fofen

Description

@fofen

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions