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
3minified markdown to html (in development)
4
5## compile
6
7go build -o md2html-go *.go

handlers.go

1package main
2
3import (
4	"strings"
5)
6
7type handlerFunc func(string) string
8
9func 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
23func handleParagraph(line string) string {
24	line = applyBold(strings.TrimSpace(line))
25	return "<p>" + line
26}
27
28func handleHeading(line string) string {
29	line = applyBold(strings.TrimSpace(line[2:]))
30	return "<h1>" + line + "</h1>"
31}
32
33func handleHeading2(line string) string {
34	line = applyBold(strings.TrimSpace(line[3:]))
35	return "<h2>" + line + "</h2>"
36}
37
38var handlers = map[string]handlerFunc{
39	"##": handleHeading2,
40	"#":  handleHeading,
41}

main.go

1package main
2
3import (
4	"bufio"
5	"fmt"
6	"os"
7	"strings"
8)
9
10func 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}