go-jack/main.go

77 lines
1.4 KiB
Go
Executable File

package main
import (
"flag"
"fmt"
"jack/models"
"log"
"os"
"path/filepath"
cp "github.com/otiai10/copy"
)
func walk(rootDir string) ([]string, error) {
var files []string
err := filepath.Walk(rootDir, func(path string, info os.FileInfo, err error) error {
_, file := filepath.Split(path)
ext := filepath.Ext(file)
if !info.IsDir() && ext == ".md" {
files = append(files, path)
}
return nil
})
if err != nil {
log.Println(err)
}
return files, err
}
func main() {
var rootDir *string
var outputDir *string
defaultOutputDir, err := os.MkdirTemp("", "go-jack")
if err != nil {
panic(err)
}
rootDir = flag.String("dir", ".", "Specify the directory to parse.")
outputDir = flag.String("out", defaultOutputDir, "Specify the output directory")
flag.Usage = func() {
fmt.Printf("Jack expects: \n")
fmt.Printf("./jack -dir <rootDir> -out <outputDir>\n")
}
flag.Parse()
copyErr := cp.Copy(*rootDir, *outputDir)
if copyErr != nil {
fmt.Println(copyErr)
}
files, _ := walk(*outputDir)
site := models.Site{Name: "Grimboite", OutputDir: *outputDir}
site.Categories = make(map[string]*models.Category)
for _, file := range files {
article := models.Article{
File: file,
}
article.FromFile()
site.Append(&article)
}
site.WriteRootPage()
site.Build()
fmt.Println("HTML files were written to: ", *outputDir)
fmt.Println("Number of parsed articles: ", len(site.Articles))
}