-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
94 lines (78 loc) · 3.03 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package editorjs
import (
"github.com/banjuanshu/go-editorjs/parser/html"
"github.com/banjuanshu/go-editorjs/parser/html/bootstrap"
"github.com/banjuanshu/go-editorjs/parser/html/bulma"
"github.com/banjuanshu/go-editorjs/parser/html/sample"
"github.com/banjuanshu/go-editorjs/parser/markdown"
"github.com/banjuanshu/go-editorjs/support"
"github.com/banjuanshu/go-editorjs/support/domain"
"log"
"strings"
)
func Bootstrap(jsonStr string) string {
return html.Parser(jsonStr, bootstrap.StyleName)
}
func Bulma(jsonStr string) string {
return html.Parser(jsonStr, bulma.StyleName)
}
func Custom(jsonStr, stylePath string) string {
support.LoadExternalStyleMap(stylePath)
return html.Parser(jsonStr, "custom")
}
func Sample(jsonStr string) string {
return html.Parser(jsonStr, sample.StyleName)
}
func Markdown(jsonFilePath, outputFilePath string) (err error) {
var result []string
input, err := support.ReadJsonFile(jsonFilePath)
if err != nil {
log.Println("It was not possible to read the input json file\n", err)
}
editorJSAST := support.ParseEditorJSON(input)
for _, el := range editorJSAST.Blocks {
content := support.PrepareData(el)
switch el.Type {
case "header":
result = append(result, markdown.Header(content.(*domain.EditorJSDataHeader)))
case "paragraph":
result = append(result, markdown.Paragraph(content.(*domain.EditorJSDataParagraph)))
case "quote":
result = append(result, markdown.Quote(content.(*domain.EditorJSDataQuote)))
case "warning":
result = append(result, markdown.Warning(content.(*domain.EditorJSDataWarning)))
case "delimiter":
result = append(result, markdown.Delimiter())
case "alert":
result = append(result, markdown.Alert(content.(*domain.EditorJSDataAlert)))
case "list":
result = append(result, markdown.List(content.(*domain.EditorJSDataList)))
case "checklist":
result = append(result, markdown.Checklist(content.(*domain.EditorJSDataChecklist)))
case "table":
result = append(result, markdown.Table(content.(*domain.EditorJSDataTable)))
case "AnyButton":
result = append(result, markdown.AnyButton(content.(*domain.EditorJSDataAnyButton)))
case "code":
result = append(result, markdown.Code(content.(*domain.EditorJSDataCode)))
case "raw":
result = append(result, markdown.Raw(content.(*domain.EditorJSDataRaw)))
case "image":
result = append(result, markdown.Image(content.(*domain.EditorJSDataImage)))
case "linkTool":
result = append(result, markdown.LinkTool(content.(*domain.EditorJSDataLinkTool)))
case "attaches":
result = append(result, markdown.Attaches(content.(*domain.EditorJSDataAttaches)))
case "embed":
result = append(result, markdown.Embed(content.(*domain.EditorJSDataEmbed)))
case "imageGallery":
result = append(result, markdown.ImageGallery(content.(*domain.EditorJSDataImageGallery)))
}
}
content := strings.Join(result[:], "\n\n")
err = support.WriteOutputFile(outputFilePath, content, "markdown")
if err != nil {
log.Println("It was not possible to write the output markdown file\n", err)
}
return
}