Separate the build<FORMAT> functions into their own source files

Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>

git-svn-id: file:///srv/svn/repo/aya/trunk@79 cec141ff-132a-4243-88a5-ce187bd62f94
This commit is contained in:
yakumo.izuru
2023-12-11 17:23:49 +00:00
parent ce6aacf82a
commit f3a588d5a2
7 changed files with 170 additions and 133 deletions

47
cmd/aya/amber.go Normal file
View File

@@ -0,0 +1,47 @@
// Render .amber files into .html
package main
import (
"bytes"
"fmt"
"io"
"os"
"path/filepath"
"github.com/eknkc/amber"
)
func buildAmber(path string, w io.Writer, vars Vars) error {
v, body, err := getVars(path, vars)
if err != nil {
return err
}
a := amber.New()
if err := a.Parse(body); err != nil {
fmt.Println(body)
return err
}
t, err := a.Compile()
if err != nil {
return err
}
htmlBuf := &bytes.Buffer{}
if err := t.Execute(htmlBuf, v); err != nil {
return err
}
if body, err = render(string(htmlBuf.Bytes()), v); err != nil {
return err
}
if w == nil {
f, err := os.Create(filepath.Join(PUBDIR, renameExt(path, ".amber", ".html")))
if err != nil {
return err
}
defer f.Close()
w = f
}
_, err = io.WriteString(w, body)
return err
}

30
cmd/aya/gcss.go Normal file
View File

@@ -0,0 +1,30 @@
// Render .gcss files into .css
package main
import (
"io"
"os"
"path/filepath"
"strings"
"github.com/yosssi/gcss"
)
func buildGCSS(path string, w io.Writer) error {
f, err := os.Open(path)
if err != nil {
return err
}
defer f.Close()
if w == nil {
s := strings.TrimSuffix(path, ".gcss") + ".css"
css, err := os.Create(filepath.Join(PUBDIR, s))
if err != nil {
return err
}
defer css.Close()
w = css
}
_, err = gcss.Compile(w, f)
return err
}

32
cmd/aya/html.go Normal file
View File

@@ -0,0 +1,32 @@
// Renders hypertext files expanding all variable macros inside it
package main
import (
"io"
"os"
"path/filepath"
"text/template"
)
func buildHTML(path string, w io.Writer, vars Vars) error {
v, body, err := getVars(path, vars)
if err != nil {
return err
}
if body, err = render(body, v); err != nil {
return err
}
tmpl, err := template.New("").Delims("<%", "%>").Parse(body)
if err != nil {
return err
}
if w == nil {
f, err := os.Create(filepath.Join(PUBDIR, path))
if err != nil {
return err
}
defer f.Close()
w = f
}
return tmpl.Execute(w, vars)
}

View File

@@ -1,4 +1,4 @@
// $TheSupernovaDuo: marisa.chaotic.ninja/aya/cmd/aya, v0.6.9 2023-12-09 23:30:07+0000, yakumo_izuru Exp $
// $TheSupernovaDuo: marisa.chaotic.ninja/aya/cmd/aya, v0.7.0 2023-12-11 17:22:51+0000, yakumo_izuru Exp $
package main
import (
@@ -9,12 +9,8 @@ import (
"os/exec"
"path/filepath"
"strings"
"text/template"
"time"
"github.com/eknkc/amber"
"github.com/russross/blackfriday/v2"
"github.com/yosssi/gcss"
"gopkg.in/yaml.v3"
"marisa.chaotic.ninja/aya"
)
@@ -174,133 +170,6 @@ func render(s string, vars Vars) (string, error) {
}
// Renders markdown with the given layout into html expanding all the macros
func buildMarkdown(path string, w io.Writer, vars Vars) error {
v, body, err := getVars(path, vars)
extensions := blackfriday.CommonExtensions|blackfriday.AutoHeadingIDs|blackfriday.Strikethrough|blackfriday.Footnotes
if err != nil {
return err
}
content, err := render(body, v)
if err != nil {
return err
}
v["content"] = string(blackfriday.Run([]byte(content),
blackfriday.WithExtensions(extensions),
))
if w == nil {
out, err := os.Create(filepath.Join(PUBDIR, renameExt(path, "", ".html")))
if err != nil {
return err
}
defer out.Close()
w = out
}
return buildHTML(filepath.Join(AYADIR, v["layout"]), w, v)
}
// Renders hypertext file expanding all variable macros inside it
func buildHTML(path string, w io.Writer, vars Vars) error {
v, body, err := getVars(path, vars)
if err != nil {
return err
}
if body, err = render(body, v); err != nil {
return err
}
tmpl, err := template.New("").Delims("<%", "%>").Parse(body)
if err != nil {
return err
}
if w == nil {
f, err := os.Create(filepath.Join(PUBDIR, path))
if err != nil {
return err
}
defer f.Close()
w = f
}
return tmpl.Execute(w, vars)
}
// Renders .amber file into .html
func buildAmber(path string, w io.Writer, vars Vars) error {
v, body, err := getVars(path, vars)
if err != nil {
return err
}
a := amber.New()
if err := a.Parse(body); err != nil {
fmt.Println(body)
return err
}
t, err := a.Compile()
if err != nil {
return err
}
htmlBuf := &bytes.Buffer{}
if err := t.Execute(htmlBuf, v); err != nil {
return err
}
if body, err = render(string(htmlBuf.Bytes()), v); err != nil {
return err
}
if w == nil {
f, err := os.Create(filepath.Join(PUBDIR, renameExt(path, ".amber", ".html")))
if err != nil {
return err
}
defer f.Close()
w = f
}
_, err = io.WriteString(w, body)
return err
}
// Compiles .gcss into .css
func buildGCSS(path string, w io.Writer) error {
f, err := os.Open(path)
if err != nil {
return err
}
defer f.Close()
if w == nil {
s := strings.TrimSuffix(path, ".gcss") + ".css"
css, err := os.Create(filepath.Join(PUBDIR, s))
if err != nil {
return err
}
defer css.Close()
w = css
}
_, err = gcss.Compile(w, f)
return err
}
// Copies file as is from path to writer
func buildRaw(path string, w io.Writer) error {
in, err := os.Open(path)
if err != nil {
return err
}
defer in.Close()
if w == nil {
if out, err := os.Create(filepath.Join(PUBDIR, path)); err != nil {
return err
} else {
defer out.Close()
w = out
}
}
_, err = io.Copy(w, in)
return err
}
// This function passes the files to build to their corresponding functions
// As far as I'm aware, Markdown has three possible filename extensions,
// but .md is the most common one known.

33
cmd/aya/markdown.go Normal file
View File

@@ -0,0 +1,33 @@
// Renders markdown with the given layout into html expanding all the macros
package main
import (
"io"
"os"
"path/filepath"
"github.com/russross/blackfriday/v2"
)
func buildMarkdown(path string, w io.Writer, vars Vars) error {
v, body, err := getVars(path, vars)
extensions := blackfriday.CommonExtensions|blackfriday.AutoHeadingIDs|blackfriday.Strikethrough|blackfriday.Footnotes
if err != nil {
return err
}
content, err := render(body, v)
if err != nil {
return err
}
v["content"] = string(blackfriday.Run([]byte(content),
blackfriday.WithExtensions(extensions),
))
if w == nil {
out, err := os.Create(filepath.Join(PUBDIR, renameExt(path, "", ".html")))
if err != nil {
return err
}
defer out.Close()
w = out
}
return buildHTML(filepath.Join(AYADIR, v["layout"]), w, v)
}

26
cmd/aya/raw.go Normal file
View File

@@ -0,0 +1,26 @@
// Copy files as-is from source to destination
package main
import (
"io"
"os"
"path/filepath"
)
func buildRaw(path string, w io.Writer) error {
in, err := os.Open(path)
if err != nil {
return err
}
defer in.Close()
if w == nil {
if out, err := os.Create(filepath.Join(PUBDIR, path)); err != nil {
return err
} else {
defer out.Close()
w = out
}
}
_, err = io.Copy(w, in)
return err
}

View File

@@ -8,7 +8,7 @@ import (
var (
// Set to current tag
Version = "v0.6.9"
Version = "v0.7.0"
Time = time.Now()
)