package html import ( "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 } 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 }