Mirrored from GitHub

git clone https://github.com/christc4/md2html-go.git

Jump to: README.md handlers.go main.go


README.md

1	# md2html-go
2	
3	minified markdown to html (in development)
4	
5	## compile
6	
7	go build -o md2html-go *.go

handlers.go

1	package main
2	
3	import (
4		"strings"
5	)
6	
7	type handlerFunc func(string) string
8	
9	func applyBold(line string) string {
10		for strings.Contains(line, "*") {
11			start := strings.Index(line, "*")
12			end := strings.Index(line[start+1:], "*")
13			if start == -1 || end == -1 {
14				break
15			}
16			end += start + 1
17			boldText := "<b>" + line[start+1:end] + "</b>"
18			line = line[:start] + boldText + line[end+1:]
19		}
20		return line
21	}
22	
23	func handleParagraph(line string) string {
24		line = applyBold(strings.TrimSpace(line))
25		return "<p>" + line
26	}
27	
28	func handleHeading(line string) string {
29		line = applyBold(strings.TrimSpace(line[2:]))
30		return "<h1>" + line + "</h1>"
31	}
32	
33	func handleHeading2(line string) string {
34		line = applyBold(strings.TrimSpace(line[3:]))
35		return "<h2>" + line + "</h2>"
36	}
37	
38	var handlers = map[string]handlerFunc{
39		"##": handleHeading2,
40		"#":  handleHeading,
41	}

main.go

1	package main
2	
3	import (
4		"bufio"
5		"fmt"
6		"os"
7		"strings"
8	)
9	
10	func main() {
11		if len(os.Args) < 2 {
12			fmt.Println("Usage: md2html-go <input.md>")
13			return
14		}
15	
16		inputFile := os.Args[1]
17		file, err := os.Open(inputFile)
18		if err != nil {
19			fmt.Println("Error opening file:", err)
20			return
21		}
22		defer file.Close()
23	
24		scanner := bufio.NewScanner(file)
25		var html strings.Builder
26	
27		for scanner.Scan() {
28			line := strings.TrimSpace(scanner.Text())
29			if line == "" {
30				continue
31			}
32	
33			// Check for a matching handler
34			matched := false
35			for prefix, handler := range handlers {
36				if strings.HasPrefix(line, prefix) {
37					html.WriteString(handler(line))
38					matched = true
39					break
40				}
41			}
42	
43			// Fallback to paragraph if no handler matches
44			if !matched {
45				html.WriteString(handleParagraph(line))
46			}
47		}
48	
49		if err := scanner.Err(); err != nil {
50			fmt.Println("Error reading file:", err)
51			return
52		}
53	
54		fmt.Println(html.String())
55	}