77 lines
1.4 KiB
Go
Executable File
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))
|
|
}
|