hugolib: Fix emoji handling inside shortcodes
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 14 Nov 2019 08:57:37 +0000 (09:57 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 14 Nov 2019 09:00:06 +0000 (10:00 +0100)
Fixes #6504

hugolib/shortcode.go
hugolib/shortcode_test.go

index 700ac5bd86af9be31eec7e0ecdf0be93471ae78f..5e916aeec24445ab7cc147b03fca0862b86cbc84 100644 (file)
@@ -18,6 +18,8 @@ import (
        "fmt"
        "strconv"
 
+       "github.com/gohugoio/hugo/helpers"
+
        "html/template"
        "path"
 
@@ -517,6 +519,15 @@ Loop:
                        return sc, nil
                case currItem.IsText():
                        sc.inner = append(sc.inner, currItem.ValStr())
+               case currItem.Type == pageparser.TypeEmoji:
+                       // TODO(bep) avoid the duplication of these "text cases", to prevent
+                       // more of #6504 in the future.
+                       val := currItem.ValStr()
+                       if emoji := helpers.Emoji(val); emoji != nil {
+                               sc.inner = append(sc.inner, string(emoji))
+                       } else {
+                               sc.inner = append(sc.inner, val)
+                       }
                case currItem.IsShortcodeName():
 
                        sc.name = currItem.ValStr()
index 01fa6151253e2821b201ac998f9272ebd09fb9fe..eb763b2a02cca4999248b26a58cc193e1f75088b 100644 (file)
@@ -1171,6 +1171,33 @@ title: "Hugo Rocks!"
        )
 }
 
+// https://github.com/gohugoio/hugo/issues/6504
+func TestShortcodeEmoji(t *testing.T) {
+       t.Parallel()
+
+       v := viper.New()
+       v.Set("enableEmoji", true)
+
+       builder := newTestSitesBuilder(t).WithViper(v)
+
+       builder.WithContent("page.md", `---
+title: "Hugo Rocks!"
+---
+
+# doc
+
+{{< event >}}10:30-11:00 My :smile: Event {{< /event >}}
+
+
+`).WithTemplatesAdded(
+               "layouts/shortcodes/event.html", `<div>{{ "\u29BE" }} {{ .Inner }} </div>`)
+
+       builder.Build(BuildCfg{})
+       builder.AssertFileContent("public/page/index.html",
+               "⦾ 10:30-11:00 My 😄 Event",
+       )
+}
+
 func TestShortcodeTypedParams(t *testing.T) {
        t.Parallel()
        c := qt.New(t)