-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtypes.go
More file actions
121 lines (111 loc) · 2.66 KB
/
types.go
File metadata and controls
121 lines (111 loc) · 2.66 KB
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
111
112
113
114
115
116
117
118
119
120
121
package parser
type elementType struct {
name string
}
func (et elementType) Name() string {
return et.name
}
type elementTypes struct {
text elementType
link elementType
heading elementType
list elementType
quote elementType
preformatToggle elementType
}
func (et elementTypes) Text() elementType {
return et.text
}
func (et elementTypes) Link() elementType {
return et.link
}
func (et elementTypes) Heading() elementType {
return et.heading
}
func (et elementTypes) List() elementType {
return et.list
}
func (et elementTypes) Quote() elementType {
return et.quote
}
func (et elementTypes) PreformatToggle() elementType {
return et.preformatToggle
}
// ElementTypes exposes the different element types:
//
// p.ElementTypes.Text()
// p.ElementTypes.Link()
// p.ElementTypes.Heading()
// p.ElementTypes.List()
// p.ElementTypes.Quote()
// p.ElementTypes.PreformatToggle()
//
// Their names can be accessed as strings:
//
// p.ElementTypes.Text().Name() // Text
//
// It can be used to check what type an [Element] is:
//
// func example(e p.Element) {
// if e.Type() == p.ElementTypes.Text() {
// // Do something
// }
// }
//
// -
var ElementTypes = elementTypes{
text: elementType{name: "Text"},
link: elementType{name: "Link"},
heading: elementType{name: "Heading"},
list: elementType{name: "List"},
quote: elementType{name: "Quote"},
preformatToggle: elementType{name: "PreformatToggle"},
}
type headingLevel struct {
value int8
}
func (hl headingLevel) Value() int8 {
return hl.value
}
type headingLevels struct {
notHeading headingLevel
heading headingLevel
subHeading headingLevel
subSubHeading headingLevel
}
func (hl headingLevels) NotHeading() headingLevel {
return hl.notHeading
}
func (hl headingLevels) Heading() headingLevel {
return hl.heading
}
func (hl headingLevels) SubHeading() headingLevel {
return hl.subHeading
}
func (hl headingLevels) SubSubHeading() headingLevel {
return hl.subSubHeading
}
// HeadingLevels exposes the different heading levels:
//
// p.HeadingLevels.Heading()
// p.HeadingLevels.SubHeading()
// p.HeadingLevels.SubSubHeading()
// p.HeadingLevels.NotHeading()
//
// Their values can be accessed as int8:
//
// p.HeadingLevels.Heading().Value() // 1
//
// It can be used to check what level a [Heading] is:
//
// func example(h p.Heading) {
// if h.Level() == p.HeadingLevels.Heading() {
// // Do something
// }
// }
var HeadingLevels = headingLevels{
notHeading: headingLevel{value: -1},
heading: headingLevel{value: 1},
subHeading: headingLevel{value: 2},
subSubHeading: headingLevel{value: 3},
}