diff --git a/views/routes/components/_inhaltsverzeichnis_eintrag.gohtml b/views/routes/components/_inhaltsverzeichnis_eintrag.gohtml
index 3beecd4..36a28f6 100644
--- a/views/routes/components/_inhaltsverzeichnis_eintrag.gohtml
+++ b/views/routes/components/_inhaltsverzeichnis_eintrag.gohtml
@@ -420,7 +420,7 @@
{{- if not $piece.IsContinuation -}}
{{- range $annotation := $piece.AnnotationNote.Annotations -}}
- {{ $annotation.Inner.InnerXML }}
+ {{ Safe $annotation.HTML }}
{{- end -}}
{{- end -}}
diff --git a/xmlmodels/common.go b/xmlmodels/common.go
index 6bbcc61..73f44ce 100644
--- a/xmlmodels/common.go
+++ b/xmlmodels/common.go
@@ -34,6 +34,14 @@ type URL struct {
Inner
}
+// HTML returns the HTML-transformed version of the URL text
+func (u URL) HTML() string {
+ if u.Inner.InnerXML != "" {
+ return transformToHTML(u.Inner.InnerXML)
+ }
+ return u.Value.Chardata
+}
+
type AnnotationNote struct {
Annotations []Annotation `xml:"anmerkung"`
Notes []Note `xml:"vermerk"`
@@ -57,18 +65,53 @@ func (an AnnotationNote) Readable() map[string]interface{} {
return ret
}
+// ReadableHTML returns HTML versions of annotations and notes
+func (an AnnotationNote) ReadableHTML() map[string]interface{} {
+ ret := make(map[string]interface{})
+ annnotations := make([]string, len(an.Annotations))
+ for _, a := range an.Annotations {
+ annnotations = append(annnotations, a.HTML())
+ }
+
+ ret["AnnotationsHTML"] = annnotations
+
+ nots := make([]string, len(an.Notes))
+ for _, n := range an.Notes {
+ nots = append(nots, n.HTML())
+ }
+
+ ret["NotesHTML"] = nots
+ return ret
+}
+
type Annotation struct {
XMLName xml.Name `xml:"anmerkung"`
Value
Inner
}
+// HTML returns the HTML-transformed version of the annotation
+func (a Annotation) HTML() string {
+ if a.Inner.InnerXML != "" {
+ return transformToHTML(a.Inner.InnerXML)
+ }
+ return a.Value.Chardata
+}
+
type Note struct {
XMLName xml.Name `xml:"vermerk"`
Value
Inner
}
+// HTML returns the HTML-transformed version of the note
+func (n Note) HTML() string {
+ if n.Inner.InnerXML != "" {
+ return transformToHTML(n.Inner.InnerXML)
+ }
+ return n.Value.Chardata
+}
+
type Identifier struct {
ID string `xml:"id,attr"`
keys []string
@@ -88,6 +131,14 @@ type Reference struct {
Inner Inner
}
+// HTML returns the HTML-transformed version of the reference
+func (r Reference) HTML() string {
+ if r.Inner.InnerXML != "" {
+ return transformToHTML(r.Inner.InnerXML)
+ }
+ return ""
+}
+
func (r Reference) Readable(lib *Library) map[string]interface{} {
data := make(map[string]interface{})
if r.Category != "" {
@@ -98,6 +149,7 @@ func (r Reference) Readable(lib *Library) map[string]interface{} {
}
data["ReferenceComment"] = r.Inner.InnerXML
+ data["ReferenceCommentHTML"] = r.HTML()
return data
}
@@ -108,3 +160,31 @@ type Value struct {
type Inner struct {
InnerXML string `xml:",innerxml"`
}
+
+
+// transformToHTML converts XML content to HTML
+func transformToHTML(xmlContent string) string {
+ if xmlContent == "" {
+ return ""
+ }
+
+ // Simple string replacements for now
+ html := xmlContent
+
+ // Transform wwwlink tags to anchor tags
+ // This is a simple regex replacement - for production you might want more robust parsing
+ html = strings.ReplaceAll(html, ``, ``)
+ html = strings.ReplaceAll(html, `">`, `">`) // Keep the closing of the opening tag
+
+ // Transform title tags to em tags
+ html = strings.ReplaceAll(html, ``, ``)
+ html = strings.ReplaceAll(html, ``, ``)
+
+ // Remove year tags but keep content
+ html = strings.ReplaceAll(html, ``, ``)
+ html = strings.ReplaceAll(html, ``, ``)
+
+ return html
+}
+
diff --git a/xmlmodels/works.go b/xmlmodels/works.go
index 13cf87d..167b73c 100644
--- a/xmlmodels/works.go
+++ b/xmlmodels/works.go
@@ -29,6 +29,14 @@ type Citation struct {
Inner
}
+// HTML returns the HTML-transformed version of the citation
+func (c Citation) HTML() string {
+ if c.Inner.InnerXML != "" {
+ return transformToHTML(c.Inner.InnerXML)
+ }
+ return c.Value.Chardata
+}
+
func (w Work) References() xmlprovider.ResolvingMap[Work] {
refs := make(xmlprovider.ResolvingMap[Work])
@@ -57,12 +65,18 @@ func (w Work) Readable(lib *Library) map[string]interface{} {
"Title": w.Citation.Title,
"Year": w.Citation.Year,
"CitationTitle": w.Citation.Title,
+ "CitationHTML": w.Citation.HTML(),
}
for k, v := range w.AnnotationNote.Readable() {
ret[k] = v
}
+ // Add HTML versions
+ for k, v := range w.AnnotationNote.ReadableHTML() {
+ ret[k] = v
+ }
+
agents := make([]map[string]interface{}, len(w.AgentRefs))
for k, v := range w.AgentRefs {
agents[k] = v.Readable(lib)