Alignment links

This commit is contained in:
2026-05-24 18:06:28 +02:00
parent a0c3c89049
commit 5fa5246e9f
7 changed files with 66 additions and 4 deletions
+23 -3
View File
@@ -188,7 +188,7 @@ func (ctx *wikiContext) applyWikiTemplateFilter(value any, filter string, state
case "count":
return countWikiTemplateValue(value), nil
case "alignments":
return formatWikiTemplateAlignments(value)
return ctx.formatWikiTemplateAlignments(value)
case "list":
return wikiTemplateHTML(renderWikiTemplateList(value, firstArg(args))), nil
case "ordinal":
@@ -367,7 +367,7 @@ func joinWikiTemplateValue(value any, sep string) string {
}
}
func formatWikiTemplateAlignments(value any) (string, error) {
func (ctx *wikiContext) formatWikiTemplateAlignments(value any) (string, error) {
values, err := wikiTemplateAlignmentValues(value)
if err != nil {
return "", err
@@ -384,7 +384,7 @@ func formatWikiTemplateAlignments(value any) (string, error) {
if !ok {
return "", fmt.Errorf("unknown alignment value 0x%02X", value)
}
labels = append(labels, label)
labels = append(labels, ctx.renderWikiTemplateAlignmentLabel(label))
}
if len(labels) == 0 {
return "Any", nil
@@ -392,6 +392,26 @@ func formatWikiTemplateAlignments(value any) (string, error) {
return strings.Join(labels, ", "), nil
}
func (ctx *wikiContext) renderWikiTemplateAlignmentLabel(label string) string {
pattern := ""
if ctx != nil {
pattern = strings.TrimSpace(ctx.alignmentLinkPattern)
}
if pattern == "" {
return label
}
target := strings.ReplaceAll(pattern, "{alignment}", wikiTemplateAlignmentTargetSegment(label))
target = strings.ReplaceAll(target, "{label}", label)
if strings.TrimSpace(target) == "" {
return label
}
return "[[" + target + "|" + label + "]]"
}
func wikiTemplateAlignmentTargetSegment(label string) string {
return strings.ReplaceAll(strings.TrimSpace(label), " ", "_")
}
func wikiTemplateAlignmentValues(value any) ([]int, error) {
if isNullLike(value) {
return []int{0}, nil