Newer
Older
"encoding/json"
"gitlab.schukai.com/oss/bob/types"
"gitlab.schukai.com/oss/libraries/go/markup/html/engine"
"gopkg.in/yaml.v3"
"os"
"path"
"strings"
)
func GenerateFiles(dataPath, out string) error {
dir := path.Dir(dataPath)
yamlFile, err := os.ReadFile(dataPath)
if err != nil {
return err
}
storage := types.NewPageDataStorage()
if err := yaml.Unmarshal(yamlFile, storage); err != nil {
return err
}
for name, page := range storage {
p := path.Join(dir, name)
html, err := Generate(page, p)
if err != nil {
return err
}
outFile := path.Join(out, page.Export)
dir := path.Dir(outFile)
if err := os.MkdirAll(dir, 0755); err != nil {
return err
}
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
err = os.WriteFile(outFile, []byte(html), 0644)
if err != nil {
return err
}
}
return nil
}
func Generate(data *types.PageData, name string) (string, error) {
dataset := make(map[any]any)
dataset["lang"] = data.Lang
dataset["title"] = data.Title
dataset["meta"] = make(map[any]any)
for k, v := range data.Meta {
dataset["meta"].(map[any]any)[k] = v
}
dataset["images"] = make(map[any]any, 0)
for _, v := range data.Images {
dataset["images"].(map[any]any)[v.Id] = map[any]any{
"source": v.Source,
"alt": v.Alt,
"title": v.Title,
"id": v.Id,
}
}
dataset["anchors"] = make(map[any]any, 0)
for _, v := range data.Anchors {
dataset["anchors"].(map[any]any)[v.Id] = map[any]any{
"href": v.Href,
"hreflang": v.HrefLang,
"title": v.Title,
"id": v.Id,
}
}
dataset["text"] = make(map[any]any, 0)
for _, v := range data.Text {
dataset["text"].(map[any]any)[v.Id] = map[any]any{"text": v.Text}
}
dataset["translations"] = make(map[string]any, 0)
for _, v := range data.Translations {
j, err := json.Marshal(v.KeyValues)
if err != nil {
return "", err
}
dataset["translations"].(map[string]any)[v.Id] = map[string]string{
"content": string(j),
}
}
e := engine.New(dataset)
template, err := os.ReadFile(name)
if err != nil {
return "", err
}
stringWriter := &strings.Builder{}
e.ProcessHtml(stringWriter, strings.NewReader(string(template)))
return stringWriter.String(), nil
}