diff --git a/go.mod b/go.mod index 3868457..979a4ca 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,7 @@ module github.com/ficcdaf/zona go 1.23.2 -require github.com/gomarkdown/markdown v0.0.0-20241105142532-d03b89096d81 // indirect +require ( + github.com/gomarkdown/markdown v0.0.0-20241105142532-d03b89096d81 + gopkg.in/yaml.v3 v3.0.1 +) diff --git a/internal/convert/build_page.go b/internal/convert/build_page.go new file mode 100644 index 0000000..ac63fd2 --- /dev/null +++ b/internal/convert/build_page.go @@ -0,0 +1,65 @@ +package convert + +import ( + "bytes" + "fmt" + "html/template" + "strings" + + "gopkg.in/yaml.v3" +) + +type PageData struct { + Title string + Icon string + Stylesheet string + Header template.HTML + Content template.HTML + NextPost template.HTML + PrevPost template.HTML + Footer template.HTML +} + +func processWithYaml(f []byte) (Metadata, []byte, error) { + // Check if the file has valid metadata + if !bytes.HasPrefix(f, []byte("---\n")) { + // No valid yaml, so return the entire content + return nil, f, nil + } + // Separate YAML from rest of document + split := strings.SplitN(string(f), "---\n", 3) + if len(split) < 3 { + return nil, nil, fmt.Errorf("Invalid frontmatter format.") + } + var metadata Metadata + // Parse YAML + if err := yaml.Unmarshal([]byte(split[1]), &metadata); err != nil { + return nil, nil, err + } + return metadata, []byte(split[2]), nil +} + +func ConvertFile(in string, out string) error { + mdPre, err := ReadFile(in) + if err != nil { + return err + } + metadata, md, err := processWithYaml(mdPre) + if err != nil { + return err + } + + title, ok := metadata["title"].(string) + if !ok { + fmt.Println("No title in page.") + } else { + fmt.Println("Title found: ", title) + } + + html, err := MdToHTML(md) + if err != nil { + return err + } + err = WriteFile(html, out) + return err +} diff --git a/internal/convert/convert.go b/internal/convert/convert.go index 2cb51eb..46d7fc0 100644 --- a/internal/convert/convert.go +++ b/internal/convert/convert.go @@ -21,7 +21,7 @@ func MdToHTML(md []byte) ([]byte, error) { doc := p.Parse(md) // build HTML renderer - htmlFlags := html.CommonFlags | html.HrefTargetBlank | html.CompletePage + htmlFlags := html.CommonFlags | html.HrefTargetBlank opts := html.RendererOptions{Flags: htmlFlags} renderer := newZonaRenderer(opts) @@ -131,19 +131,6 @@ func CopyFile(inPath string, outPath string) error { } } -func ConvertFile(in string, out string) error { - md, err := ReadFile(in) - if err != nil { - return err - } - html, err := MdToHTML(md) - if err != nil { - return err - } - err = WriteFile(html, out) - return err -} - func ChangeExtension(in string, outExt string) string { return strings.TrimSuffix(in, filepath.Ext(in)) + outExt } diff --git a/internal/util/path.go b/internal/util/path.go index 1e79964..2f125f9 100644 --- a/internal/util/path.go +++ b/internal/util/path.go @@ -60,7 +60,6 @@ func processFile(inPath string, entry fs.DirEntry, err error, outRoot string) er if !entry.IsDir() { ext := filepath.Ext(inPath) outPath := replaceRoot(inPath, outRoot) - // fmt.Println("NewRoot: ", outPath) switch ext { case ".md": fmt.Println("Processing markdown...") diff --git a/templates/article.html b/templates/article.html new file mode 100644 index 0000000..eb677d8 --- /dev/null +++ b/templates/article.html @@ -0,0 +1,28 @@ + + +
+