-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtype.go
84 lines (73 loc) · 2.97 KB
/
type.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
package white600
import "strings"
// getLineType ...現在の行のタイプをチェックする
func (markdownInfo *MarkdownInfo) getLineType() LineType {
// 優先度が高いものが上
switch true {
case markdownInfo.isCodeMarker():
return typeCodeMarker
case markdownInfo.isCode():
return typeCode
case markdownInfo.isHeader():
return typeHeader
case markdownInfo.isList():
return typeList
case markdownInfo.isQuote():
return typeQuote
case markdownInfo.isHorizon():
return typeHorizon
case markdownInfo.isTableBody():
return typeTableBody
case markdownInfo.isTableHead():
return typeTableHead
case markdownInfo.isNone():
return typeNone
default:
return typeParagraph
}
}
// isCode ...コードブロックであるかを判定する。
func (markdownInfo *MarkdownInfo) isCode() bool {
return markdownInfo.previousData.lineType == typeCodeMarker || markdownInfo.previousData.lineType == typeCode
}
// isCodeMarker ...コードブロックの端子であるかを判定する。
func (markdownInfo *MarkdownInfo) isCodeMarker() bool {
return len(markdownInfo.currentData.currentLine) >= 3 && markdownInfo.currentData.currentLine[:3] == "```"
}
// isHeader ...markdownLines[0] is header?
func (markdownInfo *MarkdownInfo) isHeader() bool {
line := strings.Split(strings.Trim(markdownInfo.currentData.currentLine, " "), " ")[0]
return line != "" && strings.Trim(line, "#") == ""
}
// isHorizon ...水平線ブロックであるかを判定する。
func (markdownInfo *MarkdownInfo) isHorizon() bool {
var line = strings.Replace(markdownInfo.currentData.currentLine, " ", "", -1)
return len(line) >= 3 && (len(line) == strings.Count(line, "-") || len(line) == strings.Count(line, "_") || len(line) == strings.Count(line, "*"))
}
// isList ...リストブロックであるかを判定する。
func (markdownInfo *MarkdownInfo) isList() bool {
var line = strings.Trim(markdownInfo.currentData.currentLine, " ")
for md := range listStyle {
if strings.Index(line, md) == 0 {
return true
}
}
return false
}
// isNone ...空行であるかを判定する。
func (markdownInfo *MarkdownInfo) isNone() bool {
return strings.Trim(markdownInfo.currentData.currentLine, " ") == "" // && markdownInfo.previousData.lineType != typeParagraph
}
// isQuote ...引用であるかを判定する。
func (markdownInfo *MarkdownInfo) isQuote() bool {
return (strings.Trim(markdownInfo.currentData.currentLine, " ") + " ")[:2] == "> " || (markdownInfo.previousData.lineType == typeQuote && !markdownInfo.isNone())
}
// isTableHead ...count "|"
func (markdownInfo *MarkdownInfo) isTableHead() bool {
var line = markdownInfo.currentData.currentLine
return len(line) >= 2 && strings.Trim(line, " ")[:1] == "|" && strings.Count(line, "|") > 1
}
// isTableBody ...thead and before type check
func (markdownInfo *MarkdownInfo) isTableBody() bool {
return (markdownInfo.previousData.lineType == typeTableBody || markdownInfo.previousData.lineType == typeTableHead) && markdownInfo.isTableHead()
}