Skip to content

Commit

Permalink
✨ KityMinder JSON 渲染器 #127
Browse files Browse the repository at this point in the history
  • Loading branch information
88250 committed Jan 9, 2021
1 parent aa27159 commit a3a5f23
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 10 deletions.
23 changes: 13 additions & 10 deletions render/kityminder_json_renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,14 +98,7 @@ func (r *KityMinderJSONRenderer) renderParagraph(node *ast.Node, entering bool)
} else {
r.closeChildren(node)
r.closeObj()
if next := node.Next; nil != next {
if ast.NodeKramdownBlockIAL == next.Type {
next = next.Next
}
if nil != next {
r.comma()
}
}
r.comma(node)
}
return ast.WalkSkipChildren
}
Expand Down Expand Up @@ -140,6 +133,7 @@ func (r *KityMinderJSONRenderer) renderHeading(node *ast.Node, entering bool) as
} else {
r.closeChildren(node)
r.closeObj()
r.comma(node)
}
return ast.WalkContinue
}
Expand All @@ -153,6 +147,7 @@ func (r *KityMinderJSONRenderer) renderList(node *ast.Node, entering bool) ast.W
} else {
r.closeChildren(node)
r.closeObj()
r.comma(node)
}
return ast.WalkContinue
}
Expand All @@ -166,6 +161,7 @@ func (r *KityMinderJSONRenderer) renderListItem(node *ast.Node, entering bool) a
} else {
r.closeChildren(node)
r.closeObj()
r.comma(node)
}
return ast.WalkContinue
}
Expand Down Expand Up @@ -236,8 +232,15 @@ func (r *KityMinderJSONRenderer) closeChildren(node *ast.Node) {
}
}

func (r *KityMinderJSONRenderer) comma() {
r.WriteString(",")
func (r *KityMinderJSONRenderer) comma(node *ast.Node) {
if next := node.Next; nil != next {
if ast.NodeKramdownBlockIAL == next.Type {
next = next.Next
}
if nil != next {
r.WriteString(",")
}
}
}

func (r *KityMinderJSONRenderer) formatNode(node *ast.Node) string {
Expand Down
1 change: 1 addition & 0 deletions test/kityminder_json_renderer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (

var kitymindJSONRendererTests = []parseTest{

{"3", "## 教程\n\n这是一篇讲解如何正确使用 **Markdown** 的排版示例,学会这个很有必要,能让你的文章有更佳清晰的排版。\n\n> 引用文本:Markdown is a text formatting syntax inspired\n\n## 语法指导\n\n### 普通内容\n\n这段内容展示了在内容里面一些排版格式,比如:\n\n- **加粗** - `**加粗**`\n- *倾斜* - `*倾斜*`\n- ~~删除线~~ - `~~删除线~~`\n- `Code 标记` - `` `Code 标记` ``\n- [超级链接](https://ld246.com) - `[超级链接](https://ld246.com)`\n- [username@gmail.com](mailto:username@gmail.com) - `[username@gmail.com](mailto:username@gmail.com)`\n\n### 表情符号 Emoji\n\n支持大部分标准的表情符号,可使用输入法直接输入,也可手动输入字符格式。通过输入 `:` 触发自动完成。\n\n#### 一些表情例子\n\n:smile: :laughing: :dizzy_face: :sob: :cold_sweat: :sweat_smile: :cry: :triumph: :heart_eyes: :relieved::+1: :-1: :100: :clap: :bell: :gift: :question: :bomb: :heart: :coffee: :cyclone: :bow: :kiss: :pray: :anger:\n\n### 标题\n\n使用一个 `#` 是一级标题,两个 `##` 是二级标题,以此类推,最多支持六级标题。\n\n> NOTE: 别忘了 # 后面需要有空格!\n\n### 图片\n\n```\n![alt 文本](http://image-path.png)\n![alt 文本](http://image-path.png \"图片 Title 值\")\n```\n\n支持直接复制粘贴。\n\n### 代码块\n\n#### 普通\n\n```\n*emphasize* **strong**\n_emphasize_ __strong__\nvar a = 1\n```\n\n#### 语法高亮支持\n\n如果在 ``` 后面跟随语言名称,可以有语法高亮的效果哦,比如:\n\n##### 演示 Go 代码高亮\n\n```go\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n\tfmt.Println(\"Hello, 世界\")\n}\n```\n\n##### 演示 Java 高亮\n\n```java\npublic class HelloWorld {\n\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n\n}\n```\n\n> Tip: 语言名称支持下面这些: `ruby`, `python`, `js`, `html`, `erb`, `css`, `coffee`, `bash`, `json`, `yml`, `xml` ...\n\n### 有序、无序、任务列表\n\n#### 无序列表\n\n- Java\n\n - Spring\n - IoC\n - AOP\n- Go\n\n - gofmt\n - Wide\n- Node.js\n\n - Koa\n - Express\n\n#### 有序列表\n\n1. Node.js\n\n 1. Express\n 2. Koa\n 3. Sails\n2. Go\n\n 1. gofmt\n 2. Wide\n3. Java\n\n 1. Latke\n 2. IDEA\n\n#### 任务列表\n\n- [X] 发布 Sym\n- [X] 发布 Solo\n- [ ] 预约牙医\n\n### 表格\n\n如果需要展示数据什么的,可以选择使用表格。\n\n| header 1 | header 2 |\n| ---------- | ---------- |\n| cell 1 | cell 2 |\n| cell 3 | cell 4 |\n| cell 5 | cell 6 |\n\n### 段落\n\n空行可以将内容进行分段,便于阅读。(这是第一段)\n\n使用空行在 Markdown 排版中相当重要。(这是第二段)\n\n### 链接引用\n\n[链接文本][链接标识]\n\n```\n[链接文本][链接标识]\n\n[链接标识]: https://b3log.org\n```\n\n### 数学公式\n\n多行公式块:\n\n$$\n\\frac{1}{\n \\Bigl(\\sqrt{\\phi \\sqrt{5}}-\\phi\\Bigr) e^{\n \\frac25 \\pi}} = 1+\\frac{e^{-2\\pi}} {1+\\frac{e^{-4\\pi}} {\n 1+\\frac{e^{-6\\pi}}\n {1+\\frac{e^{-8\\pi}}{1+\\cdots}}\n }\n}\n$$\n\n行内公式:\n\n公式 $a^2 + b^2 = \\color{red}c^2$ 是行内。\n\n### 脑图\n\n```mindmap\n- 教程\n- 语法指导\n - 普通内容\n - 提及用户\n - 表情符号 Emoji\n - 一些表情例子\n - 大标题 - Heading 3\n - Heading 4\n - Heading 5\n - Heading 6\n - 图片\n - 代码块\n - 普通\n - 语法高亮支持\n - 演示 Go 代码高亮\n - 演示 Java 高亮\n - 有序、无序、任务列表\n - 无序列表\n - 有序列表\n - 任务列表\n - 表格\n - 隐藏细节\n - 段落\n - 链接引用\n - 数学公式\n - 脑图\n - 流程图\n - 时序图\n - 甘特图\n - 图表\n - 五线谱\n - Graphviz\n - 多媒体\n - 脚注\n- 快捷键\n```\n\n### 流程图\n\n```mermaid\ngraph TB\n c1-->a2\n subgraph one\n a1-->a2\n end\n subgraph two\n b1-->b2\n end\n subgraph three\n c1-->c2\n end\n```\n\n### 时序图\n\n```mermaid\nsequenceDiagram\n Alice->>John: Hello John, how are you?\n loop Every minute\n John-->>Alice: Great!\n end\n```\n\n### 甘特图\n\n```mermaid\ngantt\n title A Gantt Diagram\n dateFormat YYYY-MM-DD\n section Section\n A task :a1, 2019-01-01, 30d\n Another task :after a1 , 20d\n section Another\n Task in sec :2019-01-12 , 12d\n another task : 24d\n```\n\n### 图表\n\n```echarts\n{\n \"title\": { \"text\": \"最近 30 天\" },\n \"tooltip\": { \"trigger\": \"axis\", \"axisPointer\": { \"lineStyle\": { \"width\": 0 } } },\n \"legend\": { \"data\": [\"帖子\", \"用户\", \"回帖\"] },\n \"xAxis\": [{\n \"type\": \"category\",\n \"boundaryGap\": false,\n \"data\": [\"2019-05-08\",\"2019-05-09\",\"2019-05-10\",\"2019-05-11\",\"2019-05-12\",\"2019-05-13\",\"2019-05-14\",\"2019-05-15\",\"2019-05-16\",\"2019-05-17\",\"2019-05-18\",\"2019-05-19\",\"2019-05-20\",\"2019-05-21\",\"2019-05-22\",\"2019-05-23\",\"2019-05-24\",\"2019-05-25\",\"2019-05-26\",\"2019-05-27\",\"2019-05-28\",\"2019-05-29\",\"2019-05-30\",\"2019-05-31\",\"2019-06-01\",\"2019-06-02\",\"2019-06-03\",\"2019-06-04\",\"2019-06-05\",\"2019-06-06\",\"2019-06-07\"],\n \"axisTick\": { \"show\": false },\n \"axisLine\": { \"show\": false }\n }],\n \"yAxis\": [{ \"type\": \"value\", \"axisTick\": { \"show\": false }, \"axisLine\": { \"show\": false }, \"splitLine\": { \"lineStyle\": { \"color\": \"rgba(0, 0, 0, .38)\", \"type\": \"dashed\" } } }],\n \"series\": [\n {\n \"name\": \"帖子\", \"type\": \"line\", \"smooth\": true, \"itemStyle\": { \"color\": \"#d23f31\" }, \"areaStyle\": { \"normal\": {} }, \"z\": 3,\n \"data\": [\"18\",\"14\",\"22\",\"9\",\"7\",\"18\",\"10\",\"12\",\"13\",\"16\",\"6\",\"9\",\"15\",\"15\",\"12\",\"15\",\"8\",\"14\",\"9\",\"10\",\"29\",\"22\",\"14\",\"22\",\"9\",\"10\",\"15\",\"9\",\"9\",\"15\",\"0\"]\n },\n {\n \"name\": \"用户\", \"type\": \"line\", \"smooth\": true, \"itemStyle\": { \"color\": \"#f1e05a\" }, \"areaStyle\": { \"normal\": {} }, \"z\": 2,\n \"data\": [\"31\",\"33\",\"30\",\"23\",\"16\",\"29\",\"23\",\"37\",\"41\",\"29\",\"16\",\"13\",\"39\",\"23\",\"38\",\"136\",\"89\",\"35\",\"22\",\"50\",\"57\",\"47\",\"36\",\"59\",\"14\",\"23\",\"46\",\"44\",\"51\",\"43\",\"0\"]\n },\n {\n \"name\": \"回帖\", \"type\": \"line\", \"smooth\": true, \"itemStyle\": { \"color\": \"#4285f4\" }, \"areaStyle\": { \"normal\": {} }, \"z\": 1,\n \"data\": [\"35\",\"42\",\"73\",\"15\",\"43\",\"58\",\"55\",\"35\",\"46\",\"87\",\"36\",\"15\",\"44\",\"76\",\"130\",\"73\",\"50\",\"20\",\"21\",\"54\",\"48\",\"73\",\"60\",\"89\",\"26\",\"27\",\"70\",\"63\",\"55\",\"37\",\"0\"]\n }\n ]\n}\n```\n\n### 五线谱\n\n```abc\nX: 24\nT: Clouds Thicken\nC: Paul Rosen\nS: Copyright 2005, Paul Rosen\nM: 6/8\nL: 1/8\nQ: 3/8=116\nR: Creepy Jig\nK: Em\n|:\"Em\"EEE E2G|\"C7\"_B2A G2F|\"Em\"EEE E2G|\\\n\"C7\"_B2A \"B7\"=B3|\"Em\"EEE E2G|\n\"C7\"_B2A G2F|\"Em\"GFE \"D (Bm7)\"F2D|\\\n1\"Em\"E3-E3:|2\"Em\"E3-E2B|:\"Em\"e2e gfe|\n\"G\"g2ab3|\"Em\"gfeg2e|\"D\"fedB2A|\"Em\"e2e gfe|\\\n\"G\"g2ab3|\"Em\"gfe\"D\"f2d|\"Em\"e3-e3:|\n```\n\n### Graphviz\n\n```graphviz\ndigraph finite_state_machine {\n rankdir=LR;\n size=\"8,5\"\n node [shape = doublecircle]; S;\n node [shape = point ]; qi\n\n node [shape = circle];\n qi -> S;\n S -> q1 [ label = \"a\" ];\n S -> S [ label = \"a\" ];\n q1 -> S [ label = \"a\" ];\n q1 -> q2 [ label = \"ddb\" ];\n q2 -> q1 [ label = \"b\" ];\n q2 -> q2 [ label = \"b\" ];\n}\n```\n\n### Flowchart\n\n```flowchart\nst=>start: Start\nop=>operation: Your Operation\ncond=>condition: Yes or No?\ne=>end\n\nst->op->cond\ncond(yes)->e\ncond(no)->op\n```\n\n### 内容块\n\n内容块相关语法是思源笔记对 Markdown 进行的扩展。\n\n#### 内容块引用\n\n`((20200817123136-in6y5m1 \"内容块引用\"))`\n\n((20200817123136-in6y5m1 \"内容块引用\"))\n\n#### 内容块嵌入\n\n`!((20200920190726-xw7fial \"内容块嵌入\"))`\n\n!((20200920190726-xw7fial \"内容块嵌入\"))\n\n#### 超级块\n\n```markdown\n{{{\n内容块\n……\n}}}\n```\n\n## 快捷键\n\n我们的编辑器支持很多快捷键,具体请参考((20200813004551-gm0pbn1 \"编辑器和快捷键\"))。", "{\"root\":{\"data\":{\"text\":\"文档名 TODO\"},\"children\":[{\"data\":{\"text\":\"foo\\nbar\"},\"children\":[]}]}}"},
{"2", "foo\nbar", "{\"root\":{\"data\":{\"text\":\"文档名 TODO\"},\"children\":[{\"data\":{\"text\":\"foo\\nbar\"},\"children\":[]}]}}"},
{"1", "# foo\n\n para1\n\npara2", "{\"root\":{\"data\":{\"text\":\"文档名 TODO\"},\"children\":[{\"data\":{\"text\":\"# foo\"},\"children\":[{\"data\":{\"text\":\"para1\"},\"children\":[]},{\"data\":{\"text\":\"para2\"},\"children\":[]}]}]}}"},
{"0", "foo **bar**\n", "{\"root\":{\"data\":{\"text\":\"文档名 TODO\"},\"children\":[{\"data\":{\"text\":\"foo **bar**\"},\"children\":[]}]}}"},
Expand Down

0 comments on commit a3a5f23

Please sign in to comment.