-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerator.go
110 lines (96 loc) ยท 2.42 KB
/
generator.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package white600
import (
"strings"
)
// generator ...ๆฌไฝ
func generator(markdown string) string {
// ๅๆ็ถๆ
ใฎ็ๆ
data := initInfo(markdown)
// ๆฌไฝ
for len(data.markdown) > 0 {
// ็พๅจใฎ่กใๅฆ็
data.currentData = LineInfo{currentLine: data.markdown[0]}
data.currentData.lineType = data.getLineType()
data.currentData.isNewBlock = data.currentData.lineType != data.previousData.lineType
if len(data.markdown) > 1 {
data.currentData.nextLine = data.markdown[1]
}
// ใฟใคใใๅคใใฃใใใใญใใฏใ้ใใ
if data.currentData.isNewBlock {
data.closeBlock()
}
// ็พๅจใฎ่กใ่งฃๆ
data.convBlock()
// ๆฌกใฎ่กใธๅผใ็ถใ
data.previousData = data.currentData
data.markdown = data.markdown[1:]
}
// ใใญใใฏใ้ใใๅฆ็
data.closeBlock()
return strings.Join(data.html, "")
}
// convBlock ...ใใญใใฏใ่งฃๆ
func (data *MarkdownInfo) convBlock() {
switch data.currentData.lineType {
case typeParagraph:
data.convParagraph()
case typeHeader:
data.convHeader()
case typeTableBody:
data.convTableBody()
case typeTableHead:
data.convTableHead()
case typeCode, typeCodeMarker:
data.convCode()
case typeList:
data.convList()
case typeQuote:
data.convQuote()
case typeHorizon:
data.convHorizon()
}
}
// closeBlock ...ใใญใใฏใ้ใใ
func (data *MarkdownInfo) closeBlock() {
switch data.previousData.lineType {
case typeParagraph:
data.closeParagraph()
case typeTableBody:
data.closeTableBody()
case typeTableHead:
data.closeTableHead()
case typeCode, typeCodeMarker:
data.closeCode()
case typeList:
data.closeList()
case typeQuote:
data.closeQuote()
}
}
// shiftLine ...็พๅจใฎ่กใซ็ฉบ่กใๆฟๅ
ฅใใใ
func (data *MarkdownInfo) shiftLine() {
data.markdown = append([]string{""}, data.markdown...)
data.currentData.nextLine = data.currentData.currentLine
data.currentData.currentLine = ""
}
// initInfo ...็ถๆ
ใฎๅๆๅๅฆ็
func initInfo(markdown string) MarkdownInfo {
return MarkdownInfo{
markdown: append(strings.Split(strings.NewReplacer("\r\n", "\n", "\r", "\n").Replace(markdown), "\n"), ""),
html: []string{},
currentData: LineInfo{
lineType: typeNone,
currentLine: "",
nextLine: "",
},
previousData: LineInfo{
lineType: typeNone,
currentLine: "",
nextLine: "",
},
options: Options{
listNest: []string{},
tableAlign: []string{},
},
}
}