diff options
| author | uint <abhinav.prsai@gmail.com> | 2025-12-19 18:48:18 +0000 |
|---|---|---|
| committer | uint <abhinav.prsai@gmail.com> | 2025-12-19 18:48:18 +0000 |
| commit | 6c6da4ffbafd745ffb6a7b9ed6cef19e9536d296 (patch) | |
| tree | 1e4ef2231b69af863f60d6e8b9a582636e67b738 /kew.go | |
| parent | c29694fce7fe52f2ec5c6dbc60203999141ee214 (diff) | |
implement minimal kew
Diffstat (limited to 'kew.go')
| -rw-r--r-- | kew.go | 114 |
1 files changed, 109 insertions, 5 deletions
@@ -2,18 +2,122 @@ package main import ( "fmt" + "io" "os" + "os/exec" + "path/filepath" + "strings" ) +func md_to_html(input_path string, output_path string) error { + var cmd *exec.Cmd + var err error + + /* open source markdown */ + var in *os.File + in, err = os.Open(input_path) + if err != nil { + return err + } + defer in.Close() + + /* create output html */ + var out *os.File + out, err = os.Create(output_path) + if err != nil { + return err + } + defer out.Close() + + /* + run: + lowdown -Thtml + stdin <- markdown file + stdout -> html file + */ + cmd = exec.Command("lowdown", "-Thtml") + cmd.Stdin = in + cmd.Stdout = out + cmd.Stderr = os.Stderr + + err = cmd.Run() + if err != nil { + return err + } + + return nil +} + +func copy_file(src string, dst string) error { + var err error + + var in *os.File + in, err = os.Open(src) + if err != nil { + return err + } + defer in.Close() + + var out *os.File + out, err = os.Create(dst) + if err != nil { + return err + } + defer out.Close() + + _, err = io.Copy(out, in) + if err != nil { + return err + } + + return nil +} + func main() { + var err error + if len(os.Args) != 3 { - fmt.Fprintf(os.Stderr, "usage: kew in/ out/\n") + fmt.Fprintf(os.Stderr, "usage: kew <in> <out>\n") os.Exit(1) } - src := os.Args[1] - out := os.Args[2] + var src string = os.Args[1] + var out string = os.Args[2] + + fmt.Printf("kew: %s -> %s\n", src, out) + + err = filepath.WalkDir(src, func(path string, entry os.DirEntry, err error) error { + if err != nil { + return err + } + + /* find relative path */ + var rel string + rel, err = filepath.Rel(src, path) + if err != nil { + return err + } + + var outpath string = filepath.Join(out, rel) + + /* mirror src */ + if entry.IsDir() { + return os.MkdirAll(outpath, 0755) + } + + /* convert markdown else copy */ + if strings.HasSuffix(path, ".md") { + outpath = strings.TrimSuffix(outpath, ".md") + ".html" + return md_to_html(path, outpath) + } + + return copy_file(path, outpath) + }) + + if err != nil { + fmt.Fprintln(os.Stderr, "kew:", err) + os.Exit(1) + } - fmt.Println("src:", src) - fmt.Println("out:", out) + fmt.Println("kew: done") } |
