package markup_config
 
 import (
+       "github.com/gohugoio/hugo/common/maps"
        "github.com/gohugoio/hugo/config"
        "github.com/gohugoio/hugo/docshelper"
        "github.com/gohugoio/hugo/markup/asciidocext/asciidocext_config"
        "github.com/gohugoio/hugo/markup/tableofcontents"
        "github.com/gohugoio/hugo/parser"
        "github.com/mitchellh/mapstructure"
+       "github.com/spf13/cast"
 )
 
 type Config struct {
 func Decode(cfg config.Provider) (conf Config, err error) {
        conf = Default
 
-       normalizeConfig(cfg)
-
        m := cfg.GetStringMap("markup")
        if m == nil {
                return
        }
+       normalizeConfig(m)
 
        err = mapstructure.WeakDecode(m, &conf)
        if err != nil {
        return
 }
 
-func normalizeConfig(cfg config.Provider) {
+func normalizeConfig(m map[string]interface{}) {
+       v, err := maps.GetNestedParam("goldmark.parser", ".", m)
+       if err != nil {
+               return
+       }
+       vm := cast.ToStringMap(v)
        // Changed from a bool in 0.81.0
-       const attrKey = "markup.goldmark.parser.attribute"
-       av := cfg.Get(attrKey)
-       if avb, ok := av.(bool); ok {
-               cfg.Set(attrKey, goldmark_config.ParserAttribute{
-                       Title: avb,
-               })
+       if vv, found := vm["attribute"]; found {
+               if vvb, ok := vv.(bool); ok {
+                       vm["attribute"] = goldmark_config.ParserAttribute{
+                               Title: vvb,
+                       }
+               }
        }
 }