25
25
finishRe = regexp .MustCompile (`(?i)\<!--\s*(end of toc|tocstop|/TOC)\s*--\>` )
26
26
)
27
27
28
+ var skip = 0
29
+
28
30
// Run handles the application logic.
29
31
func Run () {
30
32
var toc toc
@@ -65,7 +67,7 @@ func (t *toc) logic() {
65
67
os .Exit (1 )
66
68
}
67
69
68
- if t .Options .Append != true {
70
+ if ! t .Options .Append {
69
71
fmt .Print (t .String ())
70
72
return
71
73
}
@@ -82,7 +84,7 @@ func (t *toc) String() (s string) {
82
84
color .Red ("ERROR: skip value is bigger than the length of table of contents" )
83
85
os .Exit (1 )
84
86
}
85
- for _ , v := range t .Content [ t . Options . Skip :] {
87
+ for _ , v := range t .Content {
86
88
s += v
87
89
}
88
90
@@ -102,9 +104,33 @@ func getHeaderValue(header string) int {
102
104
return headers [header ]
103
105
}
104
106
107
+ func (t * toc ) Last () int {
108
+ if len (t .Content ) >= 1 {
109
+ switch spaceCount (t .Content [len (t .Content )- 1 ]) {
110
+ case 0 :
111
+ return 0
112
+ case 4 :
113
+ return 1
114
+ case 8 :
115
+ return 2
116
+ case 12 :
117
+ return 3
118
+ case 16 :
119
+ return 4
120
+ case 20 :
121
+ return 5
122
+ }
123
+ }
124
+ return 0
125
+ }
126
+
127
+ func spaceCount (s string ) int {
128
+ return len (s ) - len (strings .TrimLeft (s , " " ))
129
+ }
130
+
105
131
func (t * toc ) getDelimiter (header int ) string {
106
132
// Set delimiter
107
- if t .Options .Bulleted != true {
133
+ if ! t .Options .Bulleted {
108
134
return "1."
109
135
}
110
136
@@ -130,6 +156,20 @@ func (t *toc) parseHTML(body []byte) error {
130
156
headerVal := getHeaderValue (n .Data )
131
157
132
158
if headerVal < t .Options .Depth {
159
+ if len (t .Content ) == 0 && headerVal != 0 {
160
+ headerVal -= 1
161
+ }
162
+
163
+ if (headerVal - t .Last ()) > 1 {
164
+ headerVal -= 1
165
+ }
166
+
167
+ if t .Options .Skip > skip {
168
+ skip += 1
169
+ return
170
+ }
171
+
172
+ fmt .Println (t .Content )
133
173
t .add (fmt .Sprintf ("%s%s [%s](#%s)\n " , strings .Repeat (tab , headerVal ), t .getDelimiter (headerVal ), n .FirstChild .Data , n .Attr [0 ].Val ))
134
174
}
135
175
}
0 commit comments