Alignment links
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user