diff --git a/go.mod b/go.mod index 89c20c7..6948992 100755 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.18 require github.com/yuin/goldmark v1.4.14 require ( + github.com/otiai10/copy v1.7.0 // indirect github.com/yuin/goldmark-meta v1.1.0 // indirect gopkg.in/yaml.v2 v2.3.0 // indirect ) diff --git a/go.sum b/go.sum index af3b18b..7045e89 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,9 @@ +github.com/otiai10/copy v1.7.0 h1:hVoPiN+t+7d2nzzwMiDHPSOogsWAStewq3TwU05+clE= +github.com/otiai10/copy v1.7.0/go.mod h1:rmRl6QPdJj6EiUqXQ/4Nn2lLXoNQjFCQbbNrxgc/t3U= +github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= +github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.3/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/yuin/goldmark v1.4.14 h1:jwww1XQfhJN7Zm+/a1ZA/3WUiEBEroYFNTiV3dKwM8U= github.com/yuin/goldmark v1.4.14/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc= diff --git a/main.go b/main.go index fda8869..40bbd41 100755 --- a/main.go +++ b/main.go @@ -7,6 +7,8 @@ import ( "log" "os" "path/filepath" + + cp "github.com/otiai10/copy" ) func walk(rootDir string) ([]string, error) { @@ -42,11 +44,17 @@ func main() { outputDir = flag.String("out", defaultOutputDir, "Specify the output directory") flag.Usage = func() { fmt.Printf("Jack expects: \n") - fmt.Printf("./jack -dir \n") + fmt.Printf("./jack -dir -out \n") } flag.Parse() - files, _ := walk(*rootDir) + copyErr := cp.Copy(*rootDir, *outputDir) + + if copyErr != nil { + fmt.Println(copyErr) + } + + files, _ := walk(*outputDir) var articles []models.Article @@ -59,10 +67,8 @@ func main() { fmt.Println(article) articles = append(articles, article) - } - for _, article := range articles { - article.WriteTo(outputDir) + article.Write() } fmt.Println("HTML files were written to: ", *outputDir) diff --git a/models/models.go b/models/models.go index b8bcd0d..7b2accd 100644 --- a/models/models.go +++ b/models/models.go @@ -2,11 +2,10 @@ package models import ( "bytes" - "fmt" "io/ioutil" "log" "os" - "path/filepath" + "strings" "github.com/yuin/goldmark" meta "github.com/yuin/goldmark-meta" @@ -24,7 +23,7 @@ type Article struct { RelativeFilePath string } -func (a Article) FromFile() Article { +func (a *Article) FromFile() { // Build an Article based on a file path content, err := os.ReadFile(a.File) @@ -32,10 +31,10 @@ func (a Article) FromFile() Article { log.Fatal(err) } - return a.FromContent(content) + a.FromContent(content) } -func (a Article) FromContent(content []byte) Article { +func (a *Article) FromContent(content []byte) { // Build an Article instance from a byte[] content md := goldmark.New( @@ -54,23 +53,12 @@ func (a Article) FromContent(content []byte) Article { if err := md.Convert(content, &buf, parser.WithContext(context)); err != nil { panic(err) } + a.HtmlContent = buf.String() metadata := meta.Get(context) a.Title, _ = metadata["Title"].(string) - a.HtmlContent = buf.String() - - fmt.Println(a.Title) - fmt.Println(a.HtmlContent) - - return a } -func (a Article) WriteTo(outputPath *string) { - outputFilePath := filepath.Join(*outputPath, a.RelativeFilePath, "index.html") - - // creates the full directories tree - if err := os.MkdirAll("a/b/c/d", os.ModePerm); err != nil { - log.Fatal(err) - } - - ioutil.WriteFile(outputFilePath, []byte(a.HtmlContent), 0644) // the 0644 is octal representation of the filemode +func (a Article) Write() { + outputFilePath := strings.Replace(a.File, ".md", ".html", -1) + ioutil.WriteFile(outputFilePath, []byte(a.HtmlContent), 0644) }