mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-21 21:35:28 +02:00
@@ -19,6 +19,8 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/gohugoio/hugo/parser/metadecoders"
|
||||
)
|
||||
@@ -234,3 +236,14 @@ func IsProbablySourceOfItems(source []byte, items Items) bool {
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
var hasShortcodeRe = regexp.MustCompile(`{{[%,<][^\/]`)
|
||||
|
||||
// HasShortcode returns true if the given string contains a shortcode.
|
||||
func HasShortcode(s string) bool {
|
||||
// Fast path for the common case.
|
||||
if !strings.Contains(s, "{{") {
|
||||
return false
|
||||
}
|
||||
return hasShortcodeRe.MatchString(s)
|
||||
}
|
||||
|
@@ -101,3 +101,30 @@ func TestIsProbablyItemsSource(t *testing.T) {
|
||||
c.Assert(IsProbablySourceOfItems([]byte(`{{< foo >}} `), items), qt.IsFalse)
|
||||
c.Assert(IsProbablySourceOfItems([]byte(``), items), qt.IsFalse)
|
||||
}
|
||||
|
||||
func TestHasShortcode(t *testing.T) {
|
||||
c := qt.New(t)
|
||||
|
||||
c.Assert(HasShortcode("{{< foo >}}"), qt.IsTrue)
|
||||
c.Assert(HasShortcode("aSDasd SDasd aSD\n\nasdfadf{{% foo %}}\nasdf"), qt.IsTrue)
|
||||
c.Assert(HasShortcode("{{</* foo */>}}"), qt.IsFalse)
|
||||
c.Assert(HasShortcode("{{%/* foo */%}}"), qt.IsFalse)
|
||||
|
||||
}
|
||||
|
||||
func BenchmarkHasShortcode(b *testing.B) {
|
||||
withShortcode := strings.Repeat("this is text", 30) + "{{< myshortcode >}}This is some inner content.{{< /myshortcode >}}" + strings.Repeat("this is text", 30)
|
||||
withoutShortcode := strings.Repeat("this is text", 30) + "This is some inner content." + strings.Repeat("this is text", 30)
|
||||
b.Run("Match", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
HasShortcode(withShortcode)
|
||||
}
|
||||
})
|
||||
|
||||
b.Run("NoMatch", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
HasShortcode(withoutShortcode)
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user