used struct to represent the headers

This commit is contained in:
bjt-user 2024-04-30 10:50:58 +02:00
parent d17e61f08f
commit abd4c60339

26
main.go
View File

@ -13,6 +13,12 @@ import (
"strings" "strings"
) )
type heading struct {
text string
level int
line int
}
func is_heading(line string) bool { func is_heading(line string) bool {
if strings.HasPrefix(line, "#") { if strings.HasPrefix(line, "#") {
return true return true
@ -21,20 +27,22 @@ func is_heading(line string) bool {
} }
} }
func get_heading_level(heading string) int { func get_heading_level(heading_text string) int {
level := 0 level := 0
for i := 0; heading[i] == '#'; i++ { for i := 0; heading_text[i] == '#'; i++ {
level += 1 level += 1
} }
return level return level
} }
func print_toc(headings []string) { func print_toc(headings []heading) {
tab_count := 0 tab_count := 0
for index, value := range headings { for index, _ := range headings {
if index > 0 { if index > 0 {
prev_level := get_heading_level(headings[index-1]) prev_level := get_heading_level(headings[index-1].text)
cur_level := get_heading_level(headings[index]) cur_level := get_heading_level(headings[index].text)
headings[index].level = cur_level
if cur_level > prev_level { if cur_level > prev_level {
tab_count += (cur_level - prev_level) tab_count += (cur_level - prev_level)
@ -45,14 +53,14 @@ func print_toc(headings []string) {
fmt.Printf("\t") fmt.Printf("\t")
} }
} }
fmt.Printf("%s\n", value) fmt.Printf("%v\n", headings[index])
} }
} }
func main() { func main() {
file_content_raw, err := os.ReadFile(os.Args[1]) file_content_raw, err := os.ReadFile(os.Args[1])
var headings []string = nil var headings []heading = nil
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
@ -64,7 +72,7 @@ func main() {
for _, value := range file_lines { for _, value := range file_lines {
if is_heading(value) { if is_heading(value) {
headings = append(headings, value) headings = append(headings, heading{value, 0, 0})
} }
} }