summaryrefslogtreecommitdiff
path: root/gopher/gophermap/mdconv/convert.go
diff options
context:
space:
mode:
authortjpcc <tjp@ctrl-c.club>2023-09-01 12:37:42 -0600
committertjpcc <tjp@ctrl-c.club>2023-09-01 12:37:42 -0600
commita61bcdeb314d4e0e9f6e8915b92010895170e785 (patch)
tree29611d33a0e65f334c7238a7748244ab63ad0d5c /gopher/gophermap/mdconv/convert.go
parent2ce5be68acd3c66d4d135d7eb68b9ecd1563aa1d (diff)
refactor gophermap template handling and add markdown conversion
Diffstat (limited to 'gopher/gophermap/mdconv/convert.go')
-rw-r--r--gopher/gophermap/mdconv/convert.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/gopher/gophermap/mdconv/convert.go b/gopher/gophermap/mdconv/convert.go
new file mode 100644
index 0000000..5d4da08
--- /dev/null
+++ b/gopher/gophermap/mdconv/convert.go
@@ -0,0 +1,52 @@
+package mdconv
+
+import (
+ "io"
+ "text/template"
+
+ "tildegit.org/tjp/sliderule/gopher"
+ "tildegit.org/tjp/sliderule/gopher/gophermap/internal"
+)
+
+func Convert(wr io.Writer, doc gopher.MapDocument, overrides *template.Template) error {
+ tmpl, err := baseTmpl.Clone()
+ if err != nil {
+ return err
+ }
+
+ tmpl, err = internal.AddOverrides(tmpl, overrides)
+ if err != nil {
+ return err
+ }
+
+ for _, item := range internal.RenderItems(doc) {
+ if err := tmpl.ExecuteTemplate(wr, item.Template, item.Object); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+var baseTmpl = template.Must(template.New("mdconv").Parse(`
+{{ define "header" }}{{ end }}
+
+{{ define "message" -}}
+` + "```" + `
+{{.}}
+` + "```" + `
+
+{{ end }}
+
+{{ define "link" -}}
+[{{.Display}}]({{ if .Hostname | and .Port }}gopher://{{.Hostname}}:{{.Port}}{{ end }}{{.Selector}})
+
+{{ end }}
+
+{{ define "image" -}}
+![{{.Display}}]({{ if .Hostname | and .Port }}gopher://{{.Hostname}}:{{.Port}}{{ end }}{{.Selector}})
+
+{{ end }}
+
+{{ define "footer" }}{{ end }}
+`))