markup/goldmark: Change link and image render hook enablement to enums

Closes #13535
This commit is contained in:
Joe Mooring
2025-06-21 06:41:08 -07:00
committed by Bjørn Erik Pedersen
parent b8ba33ca95
commit 84b31721bf
9 changed files with 293 additions and 35 deletions

View File

@@ -255,6 +255,27 @@ func SliceToLower(s []string) []string {
return l
}
// StringSliceToList formats a string slice into a human-readable list.
// It joins the elements of the slice s with commas, using an Oxford comma,
// and precedes the final element with the conjunction c.
func StringSliceToList(s []string, c string) string {
const defaultConjunction = "and"
if c == "" {
c = defaultConjunction
}
if len(s) == 0 {
return ""
}
if len(s) == 1 {
return s[0]
}
if len(s) == 2 {
return fmt.Sprintf("%s %s %s", s[0], c, s[1])
}
return fmt.Sprintf("%s, %s %s", strings.Join(s[:len(s)-1], ", "), c, s[len(s)-1])
}
// IsWhitespace determines if the given rune is whitespace.
func IsWhitespace(r rune) bool {
return r == ' ' || r == '\t' || r == '\n' || r == '\r'

View File

@@ -18,9 +18,8 @@ import (
"strings"
"testing"
"github.com/gohugoio/hugo/helpers"
qt "github.com/frankban/quicktest"
"github.com/gohugoio/hugo/helpers"
)
func TestResolveMarkup(t *testing.T) {
@@ -304,3 +303,26 @@ func BenchmarkUniqueStrings(b *testing.B) {
}
})
}
func TestStringSliceToList(t *testing.T) {
for _, tt := range []struct {
slice []string
conjunction string
want string
}{
{[]string{}, "", ""},
{[]string{"foo"}, "", "foo"},
{[]string{"foo"}, "and", "foo"},
{[]string{"foo", "bar"}, "", "foo and bar"},
{[]string{"foo", "bar"}, "and", "foo and bar"},
{[]string{"foo", "bar"}, "or", "foo or bar"},
{[]string{"foo", "bar", "baz"}, "", "foo, bar, and baz"},
{[]string{"foo", "bar", "baz"}, "and", "foo, bar, and baz"},
{[]string{"foo", "bar", "baz"}, "or", "foo, bar, or baz"},
} {
got := helpers.StringSliceToList(tt.slice, tt.conjunction)
if got != tt.want {
t.Errorf("StringSliceToList() got: %q, want: %q", got, tt.want)
}
}
}