{{- /* Read the config and format */ -}} {{- $params := .Page.Params | merge site.Params.page -}} {{- /* Toc data patch */ -}} {{- $toc := $params.toc -}} {{- if not (reflect.IsMap $toc) -}} {{- $toc = dict "enable" $toc | merge site.Params.page.toc -}} {{- end -}} {{- $headingConfig := $params.heading -}} {{- /* Only enable in main section pages */ -}} {{- $onlyMainSection := cond $headingConfig.number.onlyMainSection (eq .Page.Type "posts") true -}} {{- $ordered := $toc.ordered | and $headingConfig.number.enable | and $onlyMainSection -}} {{- $h1Format := $headingConfig.number.format.h1 | default "{title}" -}} {{- $h2Format := $headingConfig.number.format.h2 | default "{h2} {title}" -}} {{- $h3Format := $headingConfig.number.format.h3 | default "{h2}.{h3} {title}" -}} {{- $h4Format := $headingConfig.number.format.h4 | default "{h2}.{h3}.{h4} {title}" -}} {{- $h5Format := $headingConfig.number.format.h5 | default "{h2}.{h3}.{h4}.{h5} {title}" -}} {{- $h6Format := $headingConfig.number.format.h6 | default "{h2}.{h3}.{h4}.{h5}.{h6} {title}" -}} {{- $level := .Level -}} {{- $maxMarkupLevel := 2 -}} {{- /* Disable ordered headings on home page */ -}} {{- if eq hugo.Context.MarkupScope "home" -}} {{- $ordered = false -}} {{- /* Decrease the level to match the correct HTML level */ -}} {{- $level = add $level 1 -}} {{- $maxMarkupLevel = 3 -}} {{- end -}} {{- if $ordered -}} {{- /* Set the count for child level to 0 */ -}} {{- .Page.Scratch.SetInMap "heading-counter" (string (add $level 1)) 0 -}} {{- end -}} {{- /* Force decrease the markup level to avoid multiple h1 */ -}} {{- $markupLevel := cond (gt $maxMarkupLevel $level) $maxMarkupLevel $level -}} {{- $title := .Text -}} {{- if $ordered -}} {{- /* Add 1 to the current level */ -}} {{- $headingMap := .Page.Scratch.Get "heading-counter" -}} {{- $count := (string $level) | index $headingMap | int | add 1 -}} {{- .Page.Scratch.SetInMap "heading-counter" (string $level) $count -}} {{- /* Get the counters for all levels */ -}} {{- $h1 := "1" | index $headingMap | int | string -}} {{- $h2 := "2" | index $headingMap | int | string -}} {{- $h3 := "3" | index $headingMap | int | string -}} {{- $h4 := "4" | index $headingMap | int | string -}} {{- $h5 := "5" | index $headingMap | int | string -}} {{- $h6 := "6" | index $headingMap | int | string -}} {{- /* Apply the level based on the format */ -}} {{- $title = "" -}} {{- if $level | eq 1 -}} {{- $title = $h1Format -}} {{- else if $level | eq 2 -}} {{- $title = $h2Format -}} {{- else if $level | eq 3 -}} {{- $title = $h3Format -}} {{- else if $level | eq 4 -}} {{- $title = $h4Format -}} {{- else if $level | eq 5 -}} {{- $title = $h5Format -}} {{- else if $level | eq 6 -}} {{- $title = $h6Format -}} {{- end -}} {{- $title = replace $title "{h1}" $h1 -}} {{- $title = replace $title "{h2}" $h2 -}} {{- $title = replace $title "{h3}" $h3 -}} {{- $title = replace $title "{h4}" $h4 -}} {{- $title = replace $title "{h5}" $h5 -}} {{- $title = replace $title "{h6}" $h6 -}} {{- $title = replace $title "{title}" .Text -}} {{- end -}} {{- if $headingConfig.capitalize -}} {{- $title = replace $title .PlainText (title .PlainText) -}} {{- end -}} {{ $title | safeHTML }} {{- /* EOF */ -}}