]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Merge commit 'e477373487abcccdbed95688e37aa74b9b8fc198'
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 11 Dec 2024 08:53:33 +0000 (09:53 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 11 Dec 2024 08:53:33 +0000 (09:53 +0100)
72 files changed:
1  2 
docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/list.html
docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/list.xml
docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/related.html
docs/_vendor/modules.txt
docs/content/en/content-management/_common/page-kinds.md
docs/content/en/content-management/diagrams.md
docs/content/en/contribute/documentation.md
docs/content/en/functions/_common/glob-patterns.md
docs/content/en/functions/_common/go-html-template-package.md
docs/content/en/functions/_common/locales.md
docs/content/en/functions/_common/regular-expressions.md
docs/content/en/functions/_common/time-layout-string.md
docs/content/en/functions/css/PostCSS.md
docs/content/en/functions/fmt/_common/fmt-layout.md
docs/content/en/functions/go-template/_common/text-template.md
docs/content/en/functions/go-template/_common/truthy-falsy.md
docs/content/en/functions/hugo/Store.md
docs/content/en/functions/images/_common/apply-image-filter.md
docs/content/en/functions/resources/_common/postcss-windows-warning.md
docs/content/en/functions/time/_common/parsable-date-time-strings.md
docs/content/en/functions/transform/Unmarshal.md
docs/content/en/functions/urls/Anchorize.md
docs/content/en/functions/urls/_common/anchorize-vs-urlize.md
docs/content/en/hosting-and-deployment/hosting-on-aws-amplify/amplify-step-05.png
docs/content/en/hosting-and-deployment/hosting-on-aws-amplify/amplify-step-06.png
docs/content/en/hosting-and-deployment/hosting-on-aws-amplify/amplify-step-07.png
docs/content/en/hosting-and-deployment/hosting-on-aws-amplify/amplify-step-08.png
docs/content/en/hosting-and-deployment/hosting-on-aws-amplify/amplify-step-09.png
docs/content/en/hosting-and-deployment/hosting-on-aws-amplify/amplify-step-11.png
docs/content/en/hosting-and-deployment/hosting-on-aws-amplify/index.md
docs/content/en/hosting-and-deployment/hosting-on-github/index.md
docs/content/en/hosting-and-deployment/hosting-on-netlify/index.md
docs/content/en/hugo-modules/use-modules.md
docs/content/en/hugo-pipes/postprocess.md
docs/content/en/hugo-pipes/transpile-sass-to-css.md
docs/content/en/installation/_common/01-editions.md
docs/content/en/installation/_common/02-prerequisites.md
docs/content/en/installation/_common/03-prebuilt-binaries.md
docs/content/en/installation/_common/04-build-from-source.md
docs/content/en/installation/_common/homebrew.md
docs/content/en/installation/linux.md
docs/content/en/methods/menu-entry/PageRef.md
docs/content/en/methods/menu-entry/_common/pre-post.md
docs/content/en/methods/page/Ancestors.md
docs/content/en/methods/page/GitInfo.md
docs/content/en/methods/page/HasMenuCurrent.md
docs/content/en/methods/page/IsMenuCurrent.md
docs/content/en/methods/page/Store.md
docs/content/en/methods/page/_common/definition-of-section.md
docs/content/en/methods/page/_common/next-and-prev.md
docs/content/en/methods/page/_common/nextinsection-and-previnsection.md
docs/content/en/methods/page/_common/output-format-definition.md
docs/content/en/methods/page/_common/output-format-methods.md
docs/content/en/methods/page/_common/scratch-methods.md
docs/content/en/methods/pages/_common/group-sort-order.md
docs/content/en/methods/pages/_common/next-and-prev.md
docs/content/en/methods/resource/_common/global-page-remote-resources.md
docs/content/en/methods/resource/_common/processing-spec.md
docs/content/en/methods/shortcode/Ordinal.md
docs/content/en/methods/shortcode/Scratch.md
docs/content/en/methods/shortcode/Store.md
docs/content/en/methods/site/Store.md
docs/content/en/methods/taxonomy/_common/get-a-taxonomy-object.md
docs/content/en/methods/taxonomy/_common/ordered-taxonomy-element-methods.md
docs/content/en/render-hooks/_common/pageinner.md
docs/content/en/render-hooks/code-blocks.md
docs/content/en/templates/_common/filter-sort-group.md
docs/content/en/templates/introduction.md
docs/data/docs.yaml
docs/go.mod
docs/go.sum
docs/netlify.toml

index a41e45a2cf8b540239f7f77dbfb071f7782c9161,0000000000000000000000000000000000000000..113e63973b50cc9bdfc2edd4685d0c024d801cf6
mode 100644,000000..100644
--- /dev/null
@@@ -1,57 -1,0 +1,64 @@@
-           "Date" (.published_at | time.AsTime)
 +{{ define "main" }}
 +<div class="w-100 ph4 ph5-ns pb5 pb6-ns pt1 pt3-ns ">
 +
 +  <article class="cf pa3 pa4-m pa4-l nested-copy-line-height nested-img">
 +    <h1 class="primary-color-dark">
 +      {{ .Title }}
 +    </h1>
 +    <div class="nested-copy-line-height">
 +      {{ .Content }}
 +    </div>
 +  </article>
 +
 +  <div class="flex flex-wrap">
 +    {{ $interior_classes := $.Site.Params.flex_box_interior_classes }}
 +    <section class="flex-ns flex-wrap justify-between w-100 w-80-nsTK v-top">
 +
 +      {{ $news_items := slice }}
 +
 +      {{/* Get releases from GitHub. */}}
 +      {{ $u := "https://api.github.com/repos/gohugoio/hugo/releases" }}
 +      {{ $releases := partial "utilities/get-remote-data.html" $u }}
 +      {{ $releases = where $releases "draft" false }}
 +      {{ $releases = where $releases "prerelease" false }}
 +      {{ range $releases | first 20 }}
++        {{ $publishDate := .published_at | time.AsTime }}
++
++        {{/* Correct the v0.138.0 release date. See https://github.com/gohugoio/hugo/issues/13066. */}}
++        {{ if eq .name "v0.138.0" }}
++          {{ $publishDate = "2024-11-06T11:22:34Z" | time.AsTime }}
++        {{ end }}
++
 +        {{ $ctx := dict
++          "Date" $publishDate
 +          "Title" (printf "Release %s" .name)
 +          "Permalink" .html_url
 +          "Section" "news"
 +          "Summary" ""
 +        }}
 +        {{ $news_items = $news_items | append $ctx }}
 +      {{ end }}
 +
 +      {{/* Get content pages from news section. */}}
 +      {{ range .Pages }}
 +        {{ $ctx := dict
 +          "Date" .Date
 +          "Title" .Title
 +          "RelPermalink" .RelPermalink
 +          "Section" "news"
 +          "Summary" .Summary
 +          "Params" (dict "description" .Description)
 +        }}
 +        {{ $news_items = $news_items | append $ctx }}
 +      {{ end }}
 +
 +      {{/* Sort by date (descending) and render. */}}
 +      {{ range sort $news_items "Date" "desc" }}
 +        {{ partial "boxes-section-summaries.html" (dict "context" . "classes" $interior_classes "fullcontent" false) }}
 +      {{ end }}
 +
 +    </section>
 +  </div>
 +
 +</div>
 +{{ end }}
index 40bca59ebcfa3855b1016597d9696e82908a52ef,0000000000000000000000000000000000000000..26b1217d02a8b0e9f9d0da826267eca2fa338ca5
mode 100644,000000..100644
--- /dev/null
@@@ -1,68 -1,0 +1,75 @@@
-         (.published_at | time.AsTime | time.Format "2 Jan 2006")
 +{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
 +<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 +  <channel>
 +    <title>Hugo News</title>
 +    <description>Recent news about Hugo, a static site generator written in Go, optimized for speed and designed for flexibility.</description>
 +    <link>{{ .Permalink }}</link>
 +    <generator>Hugo {{ hugo.Version }}</generator>
 +    <language>{{ or site.Language.LanguageCode site.Language.Lang }}</language>
 +    {{- with site.Copyright }}
 +      <copyright>{{ . }}</copyright>
 +    {{- end }}
 +    {{- with .OutputFormats.Get "RSS" }}
 +      {{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
 +    {{- end }}
 +
 +    {{- $news_items := slice }}
 +
 +    {{- /* Get releases from GitHub. */}}
 +    {{- $u := "https://api.github.com/repos/gohugoio/hugo/releases" }}
 +    {{- $releases := partial "utilities/get-remote-data.html" $u }}
 +    {{- $releases = where $releases "draft" false }}
 +    {{- $releases = where $releases "prerelease" false }}
 +    {{- range $releases | first 20 }}
++      {{- $publishDate := .published_at | time.AsTime }}
++
++      {{- /* Correct the v0.138.0 release date. See https://github.com/gohugoio/hugo/issues/13066. */}}
++      {{- if eq .name "v0.138.0" }}
++        {{- $publishDate = "2024-11-06T11:22:34Z" | time.AsTime }}
++      {{- end }}
++
 +      {{- $summary := printf
 +        "Hugo %s was released on %s. See [release notes](%s) for details."
 +        .tag_name
-         "PublishDate" (.published_at | time.AsTime)
++        ($publishDate | time.AsTime | time.Format "2 Jan 2006")
 +        .html_url
 +      }}
 +      {{- $ctx := dict
++        "PublishDate" $publishDate
 +        "Title" (printf "Release %s" .name)
 +        "Permalink" .html_url
 +        "Section" "news"
 +        "Summary" ($summary | $.Page.RenderString)
 +      }}
 +      {{- $news_items = $news_items | append $ctx }}
 +    {{- end }}
 +
 +    {{- /* Get content pages from news section. */}}
 +    {{- range .Pages }}
 +      {{- $ctx := dict
 +        "PublishDate" .PublishDate
 +        "Title" .Title
 +        "RelPermalink" .RelPermalink
 +        "Section" "news"
 +        "Summary" .Summary
 +        "Params" (dict "description" .Description)
 +      }}
 +      {{- $news_items = $news_items | append $ctx }}
 +    {{- end }}
 +    {{- /* Sort, limit, and render lastBuildDate. */}}
 +    {{- $limit := cond (gt site.Config.Services.RSS.Limit 1) site.Config.Services.RSS.Limit 999 }}
 +    {{- $news_items = sort $news_items "PublishDate" "desc" | first $limit }}
 +    <lastBuildDate>{{ (index $news_items 0).PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>
 +
 +    {{- /* Render items. */}}
 +    {{- range $news_items }}
 +      <item>
 +        <title>{{ .Title }}</title>
 +        <link>{{ .Permalink }}</link>
 +        <pubDate>{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
 +        <guid>{{ .Permalink }}</guid>
 +        <description>{{ .Summary | transform.XMLEscape | safeHTML }}</description>
 +      </item>
 +    {{- end }}
 +  </channel>
 +</rss>
index ff74356680643fafebcd40a79407a856dd2f56bc,0000000000000000000000000000000000000000..53995a486d003435b23fdb50d2824aaa9d05e9da
mode 100644,000000..100644
--- /dev/null
@@@ -1,22 -1,0 +1,22 @@@
-       <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
 +{{- $heading := "See also" }}
 +{{- $related := site.RegularPages.Related . | first 5 }}
 +
 +{{- if in (slice "functions" "methods") .Type }}
 +  {{- $related = slice }}
 +  {{- range .Params.action.related }}
 +    {{- with site.GetPage (lower .) }}
 +      {{- $related = $related | append . }}
 +    {{- else }}
 +      {{- errorf "The 'related' partial was unable to get page %s" . }}
 +    {{- end }}
 +  {{- end }}
 +{{- end }}
 +
 +{{- with $related }}
 +  <h2>{{ $heading }}</h2>
 +  <ul>
 +    {{- range . }}
++      <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
 +    {{- end }}
 +  </ul>
 +{{- end }}
index 0a59507906240e844f1a58cb87e9397b162ff0ee,0000000000000000000000000000000000000000..5ff5b9db1879cbd95929b086447005c0b1c3f87b
mode 100644,000000..100644
--- /dev/null
@@@ -1,1 -1,0 +1,2 @@@
- # github.com/gohugoio/gohugoioTheme v0.0.0-20241105120803-6c6e5fb8f8af
++# github.com/gohugoio/gohugoioTheme v0.0.0-20241119115653-b92d27ede3e1
++
index 07a53e8e63e349a5d40fb9300030c70461477250,0000000000000000000000000000000000000000..8f10dcd792bd875824aaaab7feb7ea4719af2d58
mode 100644,000000..100644
--- /dev/null
@@@ -1,17 -1,0 +1,17 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +| Kind | Description | Example |
 +|----------------|--------------------------------------------------------------------|-------------------------------------------------------------------------------|
 +| `home` | The landing page for the home page | `/index.html` |
 +| `page` | The landing page for a given page | `my-post` page (`/posts/my-post/index.html`) |
 +| `section` | The landing page of a given section | `posts` section (`/posts/index.html`) |
 +| `taxonomy` | The landing page for a taxonomy | `tags` taxonomy (`/tags/index.html`) |
 +| `term` | The landing page for one taxonomy's term | term `awesome` in `tags` taxonomy (`/tags/awesome/index.html`) |
 +
 +Four other page kinds unrelated to content are `robotsTXT`, `RSS`, `sitemap`, and `404`. Although primarily for internal use, you can specify the name when disabling one or more page kinds on your site. For example:
 +
 +{{< code-toggle file=hugo >}}
 +disableKinds = ['robotsTXT','404']
 +{{< /code-toggle >}}
index 8851034c6c25feb5ea14befa3f38a57b5e8f58d7,0000000000000000000000000000000000000000..f9f3cd30f648e36868628b3c91fe6cc60fa6d59c
mode 100644,000000..100644
--- /dev/null
@@@ -1,267 -1,0 +1,267 @@@
-   {{- .Inner | safeHTML }}
 +---
 +title: Diagrams
 +description: Use fenced code blocks and Markdown render hooks to include diagrams in your content.
 +categories: [content management]
 +keywords: [diagrams,drawing]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 260
 +weight: 260
 +toc: true
 +---
 +
 +## GoAT diagrams (ASCII)
 +
 +Hugo natively supports [GoAT] diagrams with an [embedded code block render hook]. This means that this code block:
 +
 +[GoAT]: https://github.com/bep/goat
 +[embedded code block render hook]: {{% eturl render-codeblock-goat %}}
 +
 +````txt
 +```goat
 +      .               .                .               .--- 1          .-- 1     / 1
 +     / \              |                |           .---+            .-+         +
 +    /   \         .---+---.         .--+--.        |   '--- 2      |   '-- 2   / \ 2
 +   +     +        |       |        |       |    ---+            ---+          +
 +  / \   / \     .-+-.   .-+-.     .+.     .+.      |   .--- 3      |   .-- 3   \ / 3
 + /   \ /   \    |   |   |   |    |   |   |   |     '---+            '-+         +
 + 1   2 3   4    1   2   3   4    1   2   3   4         '--- 4          '-- 4     \ 4
 +
 +```
 +````
 +
 +Will be rendered as:
 +
 +```goat
 +
 +          .               .                .               .--- 1          .-- 1     / 1
 +         / \              |                |           .---+            .-+         +
 +        /   \         .---+---.         .--+--.        |   '--- 2      |   '-- 2   / \ 2
 +       +     +        |       |        |       |    ---+            ---+          +
 +      / \   / \     .-+-.   .-+-.     .+.     .+.      |   .--- 3      |   .-- 3   \ / 3
 +     /   \ /   \    |   |   |   |    |   |   |   |     '---+            '-+         +
 +     1   2 3   4    1   2   3   4    1   2   3   4         '--- 4          '-- 4     \ 4
 +```
 +
 +## Mermaid diagrams
 +
 +Hugo does not provide a built-in template for Mermaid diagrams. Create your own using a [code block render hook]:
 +
 +[code block render hook]: /render-hooks/code-blocks/
 +
 +{{< code file=layouts/_default/_markup/render-codeblock-mermaid.html >}}
 +<pre class="mermaid">
++  {{- .Inner | htmlEscape | safeHTML }}
 +</pre>
 +{{ .Page.Store.Set "hasMermaid" true }}
 +{{< /code >}}
 +
 +And then include this snippet at the bottom of the content template:
 +
 +```go-html-template
 +{{ if .Store.Get "hasMermaid" }}
 +  <script type="module">
 +    import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
 +    mermaid.initialize({ startOnLoad: true });
 +  </script>
 +{{ end }}
 +```
 +
 +With that you can use the `mermaid` language in Markdown code blocks:
 +
 +````text
 +```mermaid
 +sequenceDiagram
 +    participant Alice
 +    participant Bob
 +    Alice->>John: Hello John, how are you?
 +    loop Healthcheck
 +        John->>John: Fight against hypochondria
 +    end
 +    Note right of John: Rational thoughts <br/>prevail!
 +    John-->>Alice: Great!
 +    John->>Bob: How about you?
 +    Bob-->>John: Jolly good!
 +```
 +````
 +
 +## Goat ASCII diagram examples
 +
 +### Graphics
 +
 +```goat
 +                                                                             .
 +    0       3                          P *              Eye /         ^     /
 +     *-------*      +y                    \                +)          \   /  Reflection
 +  1 /|    2 /|       ^                     \                \           \ v
 +   *-------* |       |                v0    \       v3           --------*--------
 +   | |4    | |7      |                  *----\-----*
 +   | *-----|-*       +-----> +x        /      v X   \          .-.<--------        o
 +   |/      |/       /                 /        o     \        | / | Refraction    / \
 +   *-------*       v                 /                \        +-'               /   \
 +  5       6      +z              v1 *------------------* v2    |                o-----o
 +                                                               v
 +
 +```
 +
 +### Complex
 +
 +```goat
 ++-------------------+                           ^                      .---.
 +|    A Box          |__.--.__    __.-->         |      .-.             |   |
 +|                   |        '--'               v     | * |<---        |   |
 ++-------------------+                                  '-'             |   |
 +                       Round                                       *---(-. |
 +  .-----------------.  .-------.    .----------.         .-------.     | | |
 + |   Mixed Rounded  | |         |  / Diagonals  \        |   |   |     | | |
 + | & Square Corners |  '--. .--'  /              \       |---+---|     '-)-'       .--------.
 + '--+------------+-'  .--. |     '-------+--------'      |   |   |       |        / Search /
 +    |            |   |    | '---.        |               '-------'       |       '-+------'
 +    |<---------->|   |    |      |       v                Interior                 |     ^
 +    '           <---'      '----'   .-----------.              ---.     .---       v     |
 + .------------------.  Diag line    | .-------. +---.              \   /           .     |
 + |   if (a > b)     +---.      .--->| |       | |    | Curved line  \ /           / \    |
 + |   obj->fcn()     |    \    /     | '-------' |<--'                +           /   \   |
 + '------------------'     '--'      '--+--------'      .--. .--.     |  .-.     +Done?+-'
 +    .---+-----.                        |   ^           |\ | | /|  .--+ |   |     \   /
 +    |   |     | Join        \|/        |   | Curved    | \| |/ | |    \    |      \ /
 +    |   |     +---->  o    --o--        '-'  Vertical  '--' '--'  '--  '--'        +  .---.
 + <--+---+-----'       |     /|\                                                    |  | 3 |
 +                      v                             not:line    'quotes'        .-'   '---'
 +  .-.             .---+--------.            /            A || B   *bold*       |        ^
 + |   |           |   Not a dot  |      <---+---<--    A dash--is not a line    v        |
 +  '-'             '---------+--'          /           Nor/is this.            ---
 +
 +```
 +
 +### Process
 +
 +```goat
 +                                      .
 +   .---------.                       / \
 +  |   START   |                     /   \        .-+-------+-.      ___________
 +   '----+----'    .-------.    A   /     \   B   | |COMPLEX| |     /           \      .-.
 +        |        |   END   |<-----+CHOICE +----->| |       | +--->+ PREPARATION +--->| X |
 +        v         '-------'        \     /       | |PROCESS| |     \___________/      '-'
 +    .---------.                     \   /        '-+---+---+-'
 +   /  INPUT  /                       \ /
 +  '-----+---'                         '
 +        |                             ^
 +        v                             |
 +  .-----------.                 .-----+-----.        .-.
 +  |  PROCESS  +---------------->|  PROCESS  |<------+ X |
 +  '-----------'                 '-----------'        '-'
 +```
 +
 +### File tree
 +
 +Created from <https://arthursonzogni.com/Diagon/#Tree>
 +
 +```goat  { width=300  color="orange" }
 +───Linux─┬─Android
 +         ├─Debian─┬─Ubuntu─┬─Lubuntu
 +         │        │        ├─Kubuntu
 +         │        │        ├─Xubuntu
 +         │        │        └─Xubuntu
 +         │        └─Mint
 +         ├─Centos
 +         └─Fedora
 +```
 +
 +### Sequence diagram
 +
 +<https://arthursonzogni.com/Diagon/#Sequence>
 +
 +```goat { class="w-40" }
 +┌─────┐       ┌───┐
 +│Alice│       │Bob│
 +└──┬──┘       └─┬─┘
 +   │            │  
 +   │ Hello Bob! │  
 +   │───────────>│  
 +   │            │  
 +   │Hello Alice!│  
 +   │<───────────│  
 +┌──┴──┐       ┌─┴─┐
 +│Alice│       │Bob│
 +└─────┘       └───┘
 +
 +```
 +
 +### Flowchart
 +
 +<https://arthursonzogni.com/Diagon/#Flowchart>
 +
 +```goat
 +   _________________                                                              
 +  ╱                 ╲                                                     ┌─────┐ 
 + ╱ DO YOU UNDERSTAND ╲____________________________________________________│GOOD!│ 
 + ╲ FLOW CHARTS?      ╱yes                                                 └──┬──┘ 
 +  ╲_________________╱                                                        │    
 +           │no                                                               │    
 +  _________▽_________                    ______________________              │    
 + ╱                   ╲                  ╱                      ╲    ┌────┐   │    
 +╱ OKAY, YOU SEE THE   ╲________________╱ ... AND YOU CAN SEE    ╲___│GOOD│   │    
 +╲ LINE LABELED 'YES'? ╱yes             ╲ THE ONES LABELED 'NO'? ╱yes└──┬─┘   │    
 + ╲___________________╱                  ╲______________________╱       │     │    
 +           │no                                     │no                 │     │    
 +   ________▽_________                     _________▽__________         │     │    
 +  ╱                  ╲    ┌───────────┐  ╱                    ╲        │     │    
 + ╱ BUT YOU SEE THE    ╲___│WAIT, WHAT?│ ╱ BUT YOU JUST         ╲___    │     │    
 + ╲ ONES LABELED 'NO'? ╱yes└───────────┘ ╲ FOLLOWED THEM TWICE? ╱yes│   │     │    
 +  ╲__________________╱                   ╲____________________╱    │   │     │    
 +           │no                                     │no             │   │     │    
 +       ┌───▽───┐                                   │               │   │     │    
 +       │LISTEN.│                                   └───────┬───────┘   │     │    
 +       └───┬───┘                                    ┌──────▽─────┐     │     │    
 +     ┌─────▽────┐                                   │(THAT WASN'T│     │     │    
 +     │I HATE YOU│                                   │A QUESTION) │     │     │    
 +     └──────────┘                                   └──────┬─────┘     │     │    
 +                                                      ┌────▽───┐       │     │    
 +                                                      │SCREW IT│       │     │    
 +                                                      └────┬───┘       │     │    
 +                                                           └─────┬─────┘     │    
 +                                                                 │           │    
 +                                                                 └─────┬─────┘    
 +                                                               ┌───────▽──────┐   
 +                                                               │LET'S GO DRING│   
 +                                                               └───────┬──────┘   
 +                                                             ┌─────────▽─────────┐
 +                                                             │HEY, I SHOULD TRY  │
 +                                                             │INSTALLING FREEBSD!│
 +                                                             └───────────────────┘
 +
 +```
 +
 +### Table
 +
 +<https://arthursonzogni.com/Diagon/#Table>
 +
 +```goat { class="w-80 dark-blue" }
 +┌────────────────────────────────────────────────┐
 +│                                                │
 +├────────────────────────────────────────────────┤
 +│SYNTAX     = { PRODUCTION } .                   │
 +├────────────────────────────────────────────────┤
 +│PRODUCTION = IDENTIFIER "=" EXPRESSION "." .    │
 +├────────────────────────────────────────────────┤
 +│EXPRESSION = TERM { "|" TERM } .                │
 +├────────────────────────────────────────────────┤
 +│TERM       = FACTOR { FACTOR } .                │
 +├────────────────────────────────────────────────┤
 +│FACTOR     = IDENTIFIER                         │
 +├────────────────────────────────────────────────┤
 +│          | LITERAL                             │
 +├────────────────────────────────────────────────┤
 +│          | "[" EXPRESSION "]"                  │
 +├────────────────────────────────────────────────┤
 +│          | "(" EXPRESSION ")"                  │
 +├────────────────────────────────────────────────┤
 +│          | "{" EXPRESSION "}" .                │
 +├────────────────────────────────────────────────┤
 +│IDENTIFIER = letter { letter } .                │
 +├────────────────────────────────────────────────┤
 +│LITERAL    = """" character { character } """" .│
 +└────────────────────────────────────────────────┘
 +```
index 580d0b0e2ef2ab3052553caf5490d067621d9d9a,0000000000000000000000000000000000000000..d4e65c9e0ba53c3e499b4b733a44182fed9420f0
mode 100644,000000..100644
--- /dev/null
@@@ -1,417 -1,0 +1,419 @@@
- Although we do not strictly adhere to the [Microsoft Writing Style Guide], it is an excellent resource for questions related to style, grammar, and voice.
 +---
 +title: Documentation
 +description: Help us to improve the documentation by identifying issues and suggesting changes.
 +categories: [contribute]
 +keywords: [documentation]
 +menu:
 +  docs:
 +    parent: contribute
 +    weight: 30
 +weight: 30
 +toc: true
 +aliases: [/contribute/docs/]
 +---
 +
 +## Introduction
 +
 +We welcome corrections and improvements to the documentation. Please note that the documentation resides in its own repository, separate from the project repository.
 +
 +For corrections and improvements to the current documentation, please submit issues and pull requests to the [documentation repository].
 +
 +For documentation related to a new feature, please include the documentation changes when you submit a pull request to the [project repository].
 +
 +## Guidelines
 +
 +### Markdown
 +
 +Please follow these guidelines:
 +
 +- Use [ATX] headings, not [setext] headings, levels 2 through 4
 +- Use [fenced code blocks], not [indented code blocks]
 +- Use hyphens, not asterisks, with unordered [list items]
 +- Use the [note shortcode] instead of blockquotes
 +- Do not mix [raw HTML] within Markdown
 +- Do not use bold text instead of a heading or description term (`dt`)
 +- Remove consecutive blank lines (maximum of two)
 +- Remove trailing spaces
 +
 +### Style
 +
++Please adhere to Google's [developer documentation style guide].
++
++[developer documentation style guide]: https://developers.google.com/style
 +
 +#### Terminology
 +
 +Please link to the [glossary of terms] when necessary, and use the terms consistently throughout the documentation. Of special note:
 +
 +- The term "front matter" is two words unless you are referring to the configuration key
 +- The term "home page" is two words
 +- The term "website" is one word
 +- The term "standalone" is one word, not hyphenated
 +- Use the word "map" instead of "dictionary"
 +- Use the word "flag" instead of "option" when referring to a command line flag
 +- Capitalize the word "Markdown"
 +- Hyphenate the term "open-source" when used an adjective.
 +
 +#### Page titles and headings
 +
 +Please follow these guidelines for page titles and headings:
 +
 +- Use sentence-style capitalization
 +- Avoid formatted strings in headings and page titles
 +- Shorter is better
 +
 +#### Use active voice with present tense
 +
 +In software documentation, passive voice is unavoidable in some cases. Please use active voice when possible.
 +
 +No → With Hugo you can build a static site.\
 +Yes → Build a static site with Hugo.
 +
 +No → This will cause Hugo to generate HTML files in the public directory.\
 +Yes → Hugo generates HTML files in the public directory.
 +
 +#### Use second person instead of third person
 +
 +No → Users should exercise caution when deleting files.\
 +Better → You must be cautious when deleting files.\
 +Best → Be cautious when deleting files.
 +
 +#### Avoid adverbs when possible
 +
 +No → Hugo is extremely fast.\
 +Yes → Hugo is fast.
 +
 +{{% note %}}
 +"It's an adverb, Sam. It's a lazy tool of a weak mind." (Outbreak, 1995).
 +{{% /note %}}
 +
 +#### Level 6 headings
 +
 +Level 6 headings are styled as `dt` elements. This was implemented to support a [glossary] with linkable terms.
 +
 +[glossary]: /getting-started/glossary/
 +
 +#### Function and method descriptions
 +
 +When adding a page to the [functions] or [methods] section, begin the description with the word "Returns". With functions and methods that return a boolean value, begin the description with the phrase "Reports whether".
 +
 +For example:
 +
 +- `Returns the URL aliases as defined in front matter.`
 +- `Reports whether the given page is in the given section.`
 +
 +[functions]: /functions
 +[methods]: /methods
 +
 +#### Miscellaneous
 +
 +Other guidelines to consider:
 +
 +- Do not place list items directly under a heading; include an introductory sentence or phrase before the list.
 +- Avoid use of **bold** text. Use the [note shortcode] to draw attention to important content.
 +- Do not place description terms (`dt`) within backticks unless required for syntactic clarity.
 +- Do not use Hugo's `ref` or `relref` shortcodes. We use a link render hook to resolve and validate link destinations, including fragments.
 +- Shorter is better. If there is more than one way to do something, describe the current best practice. For example, avoid phrases such as "you can also do..." and "in older versions you had to..."
 +- When including code samples, use short snippets that demonstrate the concept.
 +- The Hugo user community is global; use  [basic english](https://simple.wikipedia.org/wiki/Basic_English) when possible.
 +
 +## Code examples
 +
 +Indent code by two spaces. With examples of template code, include a space after opening action delimiters, and include a space before closing action delimiters.
 +
 +### Fenced code blocks
 +
 +Always include the language code when using a fenced code block:
 +
 +````text
 +```go-html-template
 +{{ if eq $foo "bar" }}
 +  {{ print "foo is bar" }}
 +{{ end }}
 +```
 +````
 +
 +Rendered:
 +
 +```go-html-template
 +{{ if eq $foo "bar" }}
 +  {{ print "foo is bar" }}
 +{{ end }}
 +```
 +
 +### Shortcode calls
 +
 +Use this syntax to include shortcodes calls within your code examples:
 +
 +```text
 +{{</*/* foo */*/>}}
 +{{%/*/* foo */*/%}}
 +```
 +
 +Rendered:
 +
 +```text
 +{{</* foo */>}}
 +{{%/* foo */%}}
 +```
 +
 +### Site configuration
 +
 +Use the [code-toggle shortcode] to include site configuration examples:
 +
 +```text
 +{{</* code-toggle file=hugo */>}}
 +baseURL = 'https://example.org/'
 +languageCode = 'en-US'
 +title = 'My Site'
 +{{</* /code-toggle */>}}
 +```
 +
 +Rendered:
 +
 +{{< code-toggle file=hugo >}}
 +baseURL = 'https://example.org/'
 +languageCode = 'en-US'
 +title = 'My Site'
 +{{< /code-toggle >}}
 +
 +### Front matter
 +
 +Use the [code-toggle shortcode] to include front matter examples:
 +
 +```text
 +{{</* code-toggle file=content/posts/my-first-post.md fm=true */>}}
 +title = 'My first post'
 +date = 2023-11-09T12:56:07-08:00
 +draft = false
 +{{</* /code-toggle */>}}
 +```
 +
 +Rendered:
 +
 +{{< code-toggle file=content/posts/my-first-post.md fm=true >}}
 +title = 'My first post'
 +date = 2023-11-09T12:56:07-08:00
 +draft = false
 +{{< /code-toggle >}}
 +
 +### Other code examples
 +
 +Use the [code shortcode] for other code examples that require a file name:
 +
 +```text
 +{{</* code file=layouts/_default/single.html */>}}
 +{{ range .Site.RegularPages }}
 +  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
 +{{ end }}
 +{{</* /code */>}}
 +```
 +
 +Rendered:
 +
 +{{< code file=layouts/_default/single.html >}}
 +{{ range .Site.RegularPages }}
 +  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
 +{{ end }}
 +{{< /code >}}
 +
 +## Shortcodes
 +
 +These shortcodes are commonly used throughout the documentation. Other shortcodes are available for specialized use.
 +
 +### code
 +
 +Use the "code" shortcode for other code examples that require a file name. See the [code examples] above. This shortcode takes these arguments:
 +
 +copy
 +: (`bool`) Whether to display a copy-to-clipboard button. Default is `false`.
 +
 +file
 +: (`string`) The file name to display.
 +
 +lang
 +: (`string`) The code language. If you do not provide a `lang` argument, the code language is determined by the file extension. If the file extension is `html`, sets the code language to `go-html-template`. Default is `text`.
 +
 +### code-toggle
 +
 +Use the "code-toggle" shortcode to display examples of site configuration, front matter, or data files. See the [code examples] above. This shortcode takes these arguments:
 +
 +copy
 +: (`bool`) Whether to display a copy-to-clipboard button. Default is `false`.
 +
 +file
 +: (`string`) The file name to display. Omit the file extension for site configuration examples.
 +
 +fm
 +: (`bool`) Whether the example is front matter. Default is `false`.
 +
 +
 +### deprecated-in
 +
 +Use the “deprecated-in” shortcode to indicate that a feature is deprecated:
 +
 +```text
 +{{%/* deprecated-in 0.127.0 */%}}
 +Use [`hugo.IsServer`] instead.
 +
 +[`hugo.IsServer`]: /functions/hugo/isserver/
 +{{%/* /deprecated-in */%}}
 +```
 +
 +Rendered:
 +
 +{{% deprecated-in 0.127.0 %}}
 +Use [`hugo.IsServer`] instead.
 +
 +[`hugo.IsServer`]: /functions/hugo/isserver/
 +{{% /deprecated-in %}}
 +
 +### eturl
 +
 +Use the embedded template URL (eturl) shortcode to insert an absolute URL to the source code for an embedded template. The shortcode takes a single argument, the base file name of the template (omit the file extension).
 +
 +```text
 +This is a link to the [embedded alias template].
 +
 +[embedded alias template]: {{%/* eturl alias */%}}
 +```
 +
 +Rendered:
 +
 +This is a link to the [embedded alias template].
 +
 +[embedded alias template]: {{% eturl alias %}}
 +
 +### new-in
 +
 +Use the "new-in" shortcode to indicate a new feature:
 +
 +```text
 +{{</* new-in 0.127.0 */>}}
 +```
 +
 +Rendered:
 +
 +{{< new-in 0.127.0 >}}
 +
 +### note
 +
 +Use the "note" shortcode with `{{%/* */%}}` delimiters to call attention to important content:
 +
 +```text
 +{{%/* note */%}}
 +Use the [`math.Mod`] function to control...
 +
 +[`math.Mod`]: /functions/math/mod/
 +{{%/* /note */%}}
 +```
 +
 +Rendered:
 +
 +{{% note %}}
 +Use the [`math.Mod`] function to control...
 +
 +[`math.Mod`]: /functions/math/mod/
 +{{% /note %}}
 +
 +## New features
 +
 +Use the "new-in" shortcode to indicate a new feature:
 +
 +{{< code file=content/something/foo.md lang=text >}}
 +{{</* new-in 0.120.0 */>}}
 +{{< /code >}}
 +
 +The "new in" label will be hidden if the specified version is older than a predefined threshold, based on differences in major and minor versions. See&nbsp;[details](https://github.com/gohugoio/hugoDocs/blob/master/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/new-in.html).
 +
 +## Deprecated features
 +
 +Use the "deprecated-in" shortcode to indicate that a feature is deprecated:
 +
 +{{< code file=content/something/foo.md >}}
 +{{%/* deprecated-in 0.120.0 */%}}
 +Use [`hugo.IsServer`] instead.
 +
 +[`hugo.IsServer`]: /functions/hugo/isserver/
 +{{%/* /deprecated-in */%}}
 +{{< /code >}}
 +
 +When deprecating a function or method, add this to front matter:
 +
 +{{< code-toggle file=content/something/foo.md fm=true >}}
 +expiryDate: 2024-10-30
 +{{< /code-toggle >}}
 +
 +Set the `expiryDate` to one year from the date of deprecation, and add a brief front matter comment to explain the setting.
 +
 +## GitHub workflow
 +
 +{{% note %}}
 +This section assumes that you have a working knowledge of Git and GitHub, and are comfortable working on the command line.
 +{{% /note %}}
 +
 +Use this workflow to create and submit pull requests.
 +
 +Step 1
 +: Fork the [documentation repository].
 +
 +Step 2
 +: Clone your fork.
 +
 +Step 3
 +: Create a new branch with a descriptive name that includes the corresponding issue number, if any:
 +
 +```sh
 +git checkout -b restructure-foo-page-99999
 +```
 +
 +Step 4
 +: Make changes.
 +
 +Step 5
 +: Build the site locally to preview your changes.
 +
 +Step 6
 +: Commit your changes with a descriptive commit message:
 +
 +- Provide a summary on the first line, typically 50 characters or less, followed by a blank line.
 +- Optionally, provide a detailed description where each line is 80 characters or less, followed by a blank line.
 +- Optionally, add one or more "Fixes" or "Closes" keywords, each on its own line, referencing the [issues] addressed by this change.
 +
 +For example:
 +
 +```sh
 +git commit -m "Restructure the taxonomy page
 +
 +This restructures the taxonomy page by splitting topics into logical
 +sections, each with one or more examples.
 +
 +Fixes #9999
 +Closes #9998"
 +```
 +
 +Step 7
 +: Push the new branch to your fork of the documentation repository.
 +
 +Step 8
 +: Visit the [documentation repository] and create a pull request (PR).
 +
 +Step 9
 +: A project maintainer will review your PR and may request changes. You may delete your branch after the maintainer merges your PR.
 +
 +[ATX]: https://spec.commonmark.org/0.30/#atx-headings
 +[Microsoft Writing Style Guide]: https://learn.microsoft.com/en-us/style-guide/welcome/
 +[basic english]: https://simple.wikipedia.org/wiki/Basic_English
 +[code examples]: #code-examples
 +[code shortcode]: #code
 +[code-toggle shortcode]: #code-toggle
 +[documentation repository]: https://github.com/gohugoio/hugoDocs/
 +[fenced code blocks]: https://spec.commonmark.org/0.30/#fenced-code-blocks
 +[glossary of terms]: /getting-started/glossary/
 +[indented code blocks]: https://spec.commonmark.org/0.30/#indented-code-blocks
 +[issues]: https://github.com/gohugoio/hugoDocs/issues
 +[list items]: https://spec.commonmark.org/0.30/#list-items
 +[note shortcode]: #note
 +[project repository]: https://github.com/gohugoio/hugo
 +[raw HTML]: https://spec.commonmark.org/0.30/#raw-html
 +[setext]: https://spec.commonmark.org/0.30/#setext-heading
index 3b0813f6fe9143547ae4b5fd989e27c3a0fdd0af,0000000000000000000000000000000000000000..d3092dece2cc90571f85357e239700a7ab41930e
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,23 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +Path|Pattern|Match
 +:--|:--|:--
 +`images/foo/a.jpg`|`images/foo/*.jpg`|`true`
 +`images/foo/a.jpg`|`images/foo/*.*`|`true`
 +`images/foo/a.jpg`|`images/foo/*`|`true`
 +`images/foo/a.jpg`|`images/*/*.jpg`|`true`
 +`images/foo/a.jpg`|`images/*/*.*`|`true`
 +`images/foo/a.jpg`|`images/*/*`|`true`
 +`images/foo/a.jpg`|`*/*/*.jpg`|`true`
 +`images/foo/a.jpg`|`*/*/*.*`|`true`
 +`images/foo/a.jpg`|`*/*/*`|`true`
 +`images/foo/a.jpg`|`**/*.jpg`|`true`
 +`images/foo/a.jpg`|`**/*.*`|`true`
 +`images/foo/a.jpg`|`**/*`|`true`
 +`images/foo/a.jpg`|`**`|`true`
 +`images/foo/a.jpg`|`*/*.jpg`|`false`
 +`images/foo/a.jpg`|`*.jpg`|`false`
 +`images/foo/a.jpg`|`*.*`|`false`
 +`images/foo/a.jpg`|`*`|`false`
index b622f2b76e2de33b2272acd724976a99e89bbe36,0000000000000000000000000000000000000000..57992ea66b113d218b14f257e30515d8d87307fc
mode 100644,000000..100644
--- /dev/null
@@@ -1,14 -1,0 +1,14 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +Hugo uses Go's [text/template] and [html/template] packages.
 +
 +The text/template package implements data-driven templates for generating textual output, while the html/template package implements data-driven templates for generating HTML output safe against code injection.
 +
 +By default, Hugo uses the html/template package when rendering HTML files.
 +
 +To generate HTML output that is safe against code injection, the html/template package escapes strings in certain contexts.
 +
 +[text/template]: https://pkg.go.dev/text/template
 +[html/template]: https://pkg.go.dev/html/template
index fd84157819b5f263a82aba6a550c9b17e1705d4e,0000000000000000000000000000000000000000..42d00877601b102d181270c33e32548d3d0a9f9a
mode 100644,000000..100644
--- /dev/null
@@@ -1,10 -1,0 +1,10 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +{{% note %}}
 +
 +Localization of dates, currencies, numbers, and percentages is performed by the [gohugoio/locales] package. The language tag of the current site must match one of the listed locales.
 +
 +[gohugoio/locales]: https://github.com/gohugoio/locales
 +{{% /note %}}
index 48e020ac65a5748225fffe8647115bf826474d38,0000000000000000000000000000000000000000..58f81a2ee55dda85121378e29e7a46e123a97eba
mode 100644,000000..100644
--- /dev/null
@@@ -1,12 -1,0 +1,12 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +When specifying the regular expression, use a raw [string literal] (backticks) instead of an interpreted string literal (double quotes) to simplify the syntax. With an interpreted string literal you must escape backslashes.
 +
 +Go's regular expression package implements the [RE2 syntax]. The RE2 syntax is a subset of that accepted by [PCRE], roughly speaking, and with various [caveats]. Note that the RE2 `\C` escape sequence is not supported.
 +
 +[caveats]: https://swtch.com/~rsc/regexp/regexp3.html#caveats
 +[PCRE]: https://www.pcre.org/
 +[RE2 syntax]: https://github.com/google/re2/wiki/Syntax/
 +[string literal]: https://go.dev/ref/spec#String_literals
index 827dc9894657a8c94cb9dc0c7d6e15c762070773,0000000000000000000000000000000000000000..3664eaef2e32a989e1d3f662621d2048e4830037
mode 100644,000000..100644
--- /dev/null
@@@ -1,46 -1,0 +1,46 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +Format a `time.Time` value based on [Go's reference time]:
 +
 +[Go's reference time]: https://pkg.go.dev/time#pkg-constants
 +
 +```text
 +Mon Jan 2 15:04:05 MST 2006
 +```
 +
 +Create a layout string using these components:
 +
 +Description|Valid components
 +:--|:--
 +Year|`"2006" "06"`
 +Month|`"Jan" "January" "01" "1"`
 +Day of the week|`"Mon" "Monday"`
 +Day of the month|`"2" "_2" "02"`
 +Day of the year|`"__2" "002"`
 +Hour|`"15" "3" "03"`
 +Minute|`"4" "04"`
 +Second|`"5" "05"`
 +AM/PM mark|`"PM"`
 +Time zone offsets|`"-0700" "-07:00" "-07" "-070000" "-07:00:00"`
 +
 +Replace the sign in the layout string with a Z to print Z instead of an offset for the UTC zone.
 +
 +Description|Valid components
 +:--|:--
 +Time zone offsets|`"Z0700" "Z07:00" "Z07" "Z070000" "Z07:00:00"`
 +
 +```go-html-template
 +{{ $t := "2023-01-27T23:44:58-08:00" }}
 +{{ $t = time.AsTime $t }}
 +{{ $t = $t.Format "Jan 02, 2006 3:04 PM Z07:00" }}
 +
 +{{ $t }} → Jan 27, 2023 11:44 PM -08:00 
 +```
 +
 +Strings such as `PST` and `CET` are not time zones. They are time zone _abbreviations_.
 +
 +Strings such as `-07:00` and `+01:00` are not time zones. They are time zone _offsets_.
 +
 +A time zone is a geographic area with the same local time. For example, the time zone abbreviated by `PST` and `PDT` (depending on Daylight Savings Time) is `America/Los_Angeles`.
index 750971c103d31702616207388661376549803e17,0000000000000000000000000000000000000000..8d41435751f8a061092ce06b63dc91b0c8c837eb
mode 100644,000000..100644
--- /dev/null
@@@ -1,129 -1,0 +1,129 @@@
- [postcss plugins]: https://www.postcss.parts/
 +---
 +title: css.PostCSS
 +description: Processes the given resource with PostCSS using any PostCSS plugin.
 +categories: []
 +keywords: []
 +action:
 +  aliases: [postCSS]
 +  related:
 +    - functions/css/Sass
 +    - functions/css/TailwindCSS
 +  returnType: resource.Resource
 +  signatures: ['css.PostCSS [OPTIONS] RESOURCE']
 +toc: true
 +---
 +
 +{{< new-in 0.128.0 >}}
 +
 +```go-html-template
 +{{ with resources.Get "css/main.css" | postCSS }}
 +  <link rel="stylesheet" href="{{ .RelPermalink }}">
 +{{ end }}
 +```
 +
 +## Setup
 +
 +Follow the steps below to transform CSS using any of the available [PostCSS plugins].
 +
 +Step 1
 +: Install [Node.js].
 +
 +Step 2
 +: Install the required Node.js packages in the root of your project. For example, to add vendor prefixes to your CSS rules:
 +
 +```sh
 +npm i -D postcss postcss-cli autoprefixer
 +```
 +
 +Step 3
 +: Create a PostCSS configuration file in the root of your project. You must name this file `postcss.config.js` or another [supported file name]. For example:
 +
 +```js
 +module.exports = {
 +  plugins: [
 +    require('autoprefixer')
 +  ]
 +};
 +```
 +
 +{{% note %}}
 +{{% include "functions/resources/_common/postcss-windows-warning.md" %}}
 +{{% /note %}}
 +
 +Step 4
 +: Place your CSS file within the `assets/css` directory.
 +
 +Step 5
 +: Process the resource with PostCSS:
 +
 +```go-html-template
 +{{ with resources.Get "css/main.css" | postCSS }}
 +  <link rel="stylesheet" href="{{ .RelPermalink }}">
 +{{ end }}
 +```
 +
 +## Options
 +
 +The `css.PostCSS` method takes an optional map of options.
 +
 +config
 +: (`string`) The directory that contains the PostCSS configuration file. Default is the root of the project directory.
 +
 +noMap
 +: (`bool`) Default is `false`. If `true`, disables inline sourcemaps.
 +
 +inlineImports
 +: (`bool`) Default is `false`. Enable inlining of @import statements. It does so recursively, but will only import a file once. URL imports (e.g. `@import url('https://fonts.googleapis.com/css?family=Open+Sans&display=swap');`) and imports with media queries will be ignored. Note that this import routine does not care about the CSS spec, so you can have @import anywhere in the file. Hugo will look for imports relative to the module mount and will respect theme overrides.
 +
 +skipInlineImportsNotFound
 +: (`bool`) Default is `false`. Before Hugo 0.99.0 when `inlineImports` was enabled and we failed to resolve an import, we logged it as a warning. We now fail the build. If you have regular CSS imports in your CSS that you want to preserve, you can either use imports with URL or media queries (Hugo does not try to resolve those) or set `skipInlineImportsNotFound` to true.
 +
 +```go-html-template
 +{{ $opts := dict "config" "config-directory" "noMap" true }}
 +{{ with resources.Get "css/main.css" | postCSS $opts }}
 +  <link rel="stylesheet" href="{{ .RelPermalink }}">
 +{{ end }}
 +```
 +
 +## No configuration file
 +
 +To avoid using a PostCSS configuration file, you can specify a minimal configuration using the options map.
 +
 +use
 +: (`string`) A space-delimited list of PostCSS plugins to use.
 +
 +parser
 +: (`string`) A custom PostCSS parser.
 +
 +stringifier
 +: (`string`) A custom PostCSS stringifier.
 +
 +syntax
 +: (`string`) Custom postcss syntax.
 +
 +```go-html-template
 +{{ $opts := dict "use" "autoprefixer postcss-color-alpha" }}
 +{{ with resources.Get "css/main.css" | postCSS $opts }}
 +  <link rel="stylesheet" href="{{ .RelPermalink }}">
 +{{ end }}
 +```
 +
 +## Check environment
 +
 +The current Hugo environment name (set by `--environment` or in configuration or OS environment) is available in the Node context, which allows constructs like this:
 +
 +```js
 +const autoprefixer = require('autoprefixer');
 +const purgecss = require('@fullhuman/postcss-purgecss');
 +module.exports = {
 +  plugins: [
 +    autoprefixer,
 +    process.env.HUGO_ENVIRONMENT !== 'development' ? purgecss : null
 +  ]
 +}
 +```
 +
 +[node.js]: https://nodejs.org/en/download
++[postcss plugins]: https://postcss.org/docs/postcss-plugins
 +[supported file name]: https://github.com/postcss/postcss-load-config#usage
 +[transpile to CSS]: /functions/css/sass/
index ff69ce5e43dac2b1213aef13f3843202c7a2abe2,0000000000000000000000000000000000000000..09a9ee867731f1c3ae229080f4c96cb4ff70e4aa
mode 100644,000000..100644
--- /dev/null
@@@ -1,7 -1,0 +1,7 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +The documentation for Go's [fmt] package describes the structure and content of the format string.
 +
 +[fmt]: https://pkg.go.dev/fmt
index 71718c3fd369853fb543e5ac0aea40a2c227062e,0000000000000000000000000000000000000000..4b934c1e98a23db0a31a2902ccd4d77062a812c5
mode 100644,000000..100644
--- /dev/null
@@@ -1,7 -1,0 +1,7 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +See Go's [text/template] documentation for more information.
 +
 +[text/template]: https://pkg.go.dev/text/template
index c41bb65618445463d4e15b6b443a2dfdc521349e,0000000000000000000000000000000000000000..e15e58d617158e421b52bb68086326e04fe2c40e
mode 100644,000000..100644
--- /dev/null
@@@ -1,7 -1,0 +1,7 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +The falsy values are `false`, `0`, any `nil` pointer or interface value, any array, slice, map, or string of length zero, and zero `time.Time` values.
 +
 +Everything else is truthy.
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b0503a5ff94fd6f8cd6f15ecc605cc136f7f8e9f
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,125 @@@
++---
++title: hugo.Store
++description: Returns a global, persistent "scratch pad" to store and manipulate data.
++categories: []
++keywords: []
++action:
++  related:
++  - methods/page/store
++  - methods/site/store
++  - functions/collections/NewScratch
++  returnType: maps.Scratch
++  signatures: [hugo.Store]
++toc: true
++---
++
++{{< new-in 0.139.0 >}}
++
++The global `hugo.Store` function creates a persistent [scratch pad] to store and manipulate data. To create a locally scoped, use the [`newScratch`] function.
++
++[`Scratch`]: /functions/hugo/scratch/
++[`newScratch`]: /functions/collections/newscratch/
++[scratch pad]: /getting-started/glossary/#scratch-pad
++
++## Methods
++
++###### Set
++
++Sets the value of a given key.
++
++```go-html-template
++{{ hugo.Store.Set "greeting" "Hello" }}
++```
++
++###### Get
++
++Gets the value of a given key.
++
++```go-html-template
++{{ hugo.Store.Set "greeting" "Hello" }}
++{{ hugo.Store.Get "greeting" }} → Hello
++```
++
++###### Add
++
++Adds a given value to existing value(s) of the given key.
++
++For single values, `Add` accepts values that support Go's `+` operator. If the first `Add` for a key is an array or slice, the following adds will be appended to that list.
++
++```go-html-template
++{{ hugo.Store.Set "greeting" "Hello" }}
++{{ hugo.Store.Add "greeting" "Welcome" }}
++{{ hugo.Store.Get "greeting" }} → HelloWelcome
++```
++
++```go-html-template
++{{ hugo.Store.Set "total" 3 }}
++{{ hugo.Store.Add "total" 7 }}
++{{ hugo.Store.Get "total" }} → 10
++```
++
++```go-html-template
++{{ hugo.Store.Set "greetings" (slice "Hello") }}
++{{ hugo.Store.Add "greetings" (slice "Welcome" "Cheers") }}
++{{ hugo.Store.Get "greetings" }} → [Hello Welcome Cheers]
++```
++
++###### SetInMap
++
++Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to the given `key`.
++
++```go-html-template
++{{ hugo.Store.SetInMap "greetings" "english" "Hello" }}
++{{ hugo.Store.SetInMap "greetings" "french" "Bonjour" }}
++{{ hugo.Store.Get "greetings" }} → map[english:Hello french:Bonjour]
++```
++
++###### DeleteInMap
++
++Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`.
++
++```go-html-template
++{{ hugo.Store.SetInMap "greetings" "english" "Hello" }}
++{{ hugo.Store.SetInMap "greetings" "french" "Bonjour" }}
++{{ hugo.Store.DeleteInMap "greetings" "english" }}
++{{ hugo.Store.Get "greetings" }} → map[french:Bonjour]
++```
++
++###### GetSortedMapValues
++
++Returns an array of values from `key` sorted by `mapKey`.
++
++```go-html-template
++{{ hugo.Store.SetInMap "greetings" "english" "Hello" }}
++{{ hugo.Store.SetInMap "greetings" "french" "Bonjour" }}
++{{ hugo.Store.GetSortedMapValues "greetings" }} → [Hello Bonjour]
++```
++
++###### Delete
++
++Removes the given key.
++
++```go-html-template
++{{ hugo.Store.Set "greeting" "Hello" }}
++{{ hugo.Store.Delete "greeting" }}
++```
++
++## Determinate values
++
++The `Store` method is often used to set scratch pad values within a shortcode, a partial template called by a shortcode, or by a Markdown render hook. In all three cases, the scratch pad values are indeterminate until Hugo renders the page content.
++
++If you need to access a scratch pad value from a parent template, and the parent template has not yet rendered the page content, you can trigger content rendering by assigning the returned value to a [noop] variable:
++
++[noop]: /getting-started/glossary/#noop
++
++```go-html-template
++{{ $noop := .Content }}
++{{ hugo.Store.Get "mykey" }}
++```
++
++You can also trigger content rendering with the `ContentWithoutSummary`, `FuzzyWordCount`, `Len`, `Plain`, `PlainWords`, `ReadingTime`, `Summary`, `Truncated`, and `WordCount` methods. For example:
++
++```go-html-template
++{{ $noop := .WordCount }}
++{{ hugo.Store.Get "mykey" }}
++```
index 15eddb4854648ff4bb310e556d49415c1c5f1e8d,0000000000000000000000000000000000000000..08e08238f38764ee63eb1a72ed8e427fff9582b6
mode 100644,000000..100644
--- /dev/null
@@@ -1,27 -1,0 +1,27 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +Apply the filter using the [`images.Filter`] function:
 +
 +[`images.Filter`]: /functions/images/filter/
 +
 +```go-html-template
 +{{ with resources.Get "images/original.jpg" }}
 +  {{ with . | images.Filter $filter }}
 +    <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt="">
 +  {{ end }}
 +{{ end }}
 +```
 +
 +You can also apply the filter using the [`Filter`] method on a `Resource` object:
 +
 +[`Filter`]: /methods/resource/filter/
 +
 +```go-html-template
 +{{ with resources.Get "images/original.jpg" }}
 +  {{ with .Filter $filter }}
 +    <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt="">
 +  {{ end }}
 +{{ end }}
 +```
index 1b72e74db328be97f1e5d19919a277ee9dfe9890,0000000000000000000000000000000000000000..e2d97850b2dcbd5302f625c007be66f5f65fb5ef
mode 100644,000000..100644
--- /dev/null
@@@ -1,8 -1,0 +1,8 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +If you are a Windows user, and the path to your project contains a space, you must place the PostCSS configuration within the package.json file. See [this example] and issue [#7333].
 +
 +[this example]: https://github.com/postcss/postcss-load-config#packagejson
 +[#7333]: https://github.com/gohugoio/hugo/issues/7333
index 6d1633a6f499247d7a9fb732ad71a78d87755864,0000000000000000000000000000000000000000..92842767eafa88166cb33120390dd3c43598a6a8
mode 100644,000000..100644
--- /dev/null
@@@ -1,14 -1,0 +1,14 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +Format|Time zone
 +:--|:--
 +`2023-10-15T13:18:50-07:00`|`America/Los_Angeles`
 +`2023-10-15T13:18:50-0700`|`America/Los_Angeles`
 +`2023-10-15T13:18:50Z`|`Etc/UTC`
 +`2023-10-15T13:18:50`|Default is `Etc/UTC`
 +`2023-10-15`|Default is `Etc/UTC`
 +`15 Oct 2023`|Default is `Etc/UTC`
 +
 +The last three examples are not fully qualified, and default to the `Etc/UTC` time zone.
index 998152eb24a630b26f27cbf9643ab69bee6b68dd,0000000000000000000000000000000000000000..960332c440e36975f86970d36eb0d41a84c63177
mode 100644,000000..100644
--- /dev/null
@@@ -1,301 -1,0 +1,301 @@@
-       <title lang="fr">The Hunchback of Notre Dame</title>
 +---
 +title: transform.Unmarshal
 +description: Parses serialized data and returns a map or an array. Supports CSV, JSON, TOML, YAML, and XML.
 +categories: []
 +keywords: []
 +action:
 +  aliases: [unmarshal]
 +  related:
 +    - functions/transform/Remarshal
 +    - functions/resources/Get
 +    - functions/resources/GetRemote
 +    - functions/encoding/Jsonify
 +  returnType: any
 +  signatures: ['transform.Unmarshal [OPTIONS] INPUT']
 +toc: true
 +aliases: [/functions/transform.unmarshal]
 +---
 +
 +The input can be a string or a [resource].
 +
 +## Unmarshal a string
 +
 +```go-html-template
 +{{ $string := `
 +title: Les Misérables
 +author: Victor Hugo
 +`}}
 +
 +{{ $book := unmarshal $string }}
 +{{ $book.title }} → Les Misérables
 +{{ $book.author }} → Victor Hugo
 +```
 +
 +## Unmarshal a resource
 +
 +Use the `transform.Unmarshal` function with global, page, and remote resources.
 +
 +### Global resource
 +
 +A global resource is a file within the assets directory, or within any directory mounted to the assets directory.
 +
 +```text
 +assets/
 +└── data/
 +    └── books.json
 +```
 +
 +```go-html-template
 +{{ $data := dict }}
 +{{ $path := "data/books.json" }}
 +{{ with resources.Get $path }}
 +  {{ with . | transform.Unmarshal }}
 +    {{ $data = . }}
 +  {{ end }}
 +{{ else }}
 +  {{ errorf "Unable to get global resource %q" $path }}
 +{{ end }}
 +
 +{{ range where $data "author" "Victor Hugo" }}
 +  {{ .title }} → Les Misérables
 +{{ end }}
 +```
 +
 +### Page resource
 +
 +A page resource is a file within a [page bundle].
 +
 +```text
 +content/
 +├── post/
 +│   └── book-reviews/
 +│       ├── books.json
 +│       └── index.md
 +└── _index.md
 +```
 +
 +```go-html-template
 +{{ $data := dict }}
 +{{ $path := "books.json" }}
 +{{ with .Resources.Get $path }}
 +  {{ with . | transform.Unmarshal }}
 +    {{ $data = . }}
 +  {{ end }}
 +{{ else }}
 +  {{ errorf "Unable to get page resource %q" $path }}
 +{{ end }}
 +
 +{{ range where $data "author" "Victor Hugo" }}
 +  {{ .title }} → Les Misérables
 +{{ end }}
 +```
 +
 +### Remote resource
 +
 +A remote resource is a file on a remote server, accessible via HTTP or HTTPS.
 +
 +```go-html-template
 +{{ $data := dict }}
 +{{ $url := "https://example.org/books.json" }}
 +{{ with resources.GetRemote $url }}
 +  {{ with .Err }}
 +    {{ errorf "%s" . }}
 +  {{ else }}
 +    {{ $data = . | transform.Unmarshal }}
 +  {{ end }}
 +{{ else }}
 +  {{ errorf "Unable to get remote resource %q" $url }}
 +{{ end }}
 +
 +{{ range where $data "author" "Victor Hugo" }}
 +  {{ .title }} → Les Misérables
 +{{ end }}
 +```
 +
 +{{% note %}}
 +When retrieving remote data, a misconfigured server may send a response header with an incorrect [Content-Type]. For example, the server may set the Content-Type header to `application/octet-stream` instead of `application/json`.
 +
 +In these cases, pass the resource `Content` through the `transform.Unmarshal` function instead of passing the resource itself. For example, in the above, do this instead:
 +
 +`{{ $data = .Content | transform.Unmarshal }}`
 +
 +[Content-Type]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type
 +{{% /note %}}
 +
 +## Options
 +
 +When unmarshaling a CSV file, provide an optional map of options.
 +
 +delimiter
 +: (`string`) The delimiter used, default is `,`.
 +
 +comment
 +: (`string`) The comment character used in the CSV. If set, lines beginning with the comment character without preceding whitespace are ignored.
 +
 +lazyQuotes {{< new-in 0.122.0 >}}
 +: (`bool`) If true, a quote may appear in an unquoted field and a non-doubled quote may appear in a quoted field. Default is `false`.
 +
 +```go-html-template
 +{{ $csv := "a;b;c" | transform.Unmarshal (dict "delimiter" ";") }}
 +```
 +
 +## Working with XML
 +
 +When unmarshaling an XML file, do not include the root node when accessing data. For example, after unmarshaling the RSS feed below, access the feed title with `$data.channel.title`.
 +
 +```xml
 +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 +<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 +  <channel>
 +    <title>Books on Example Site</title>
 +    <link>https://example.org/books/</link>
 +    <description>Recent content in Books on Example Site</description>
 +    <language>en-US</language>
 +    <atom:link href="https://example.org/books/index.xml" rel="self" type="application/rss+xml" />
 +    <item>
 +      <title>The Hunchback of Notre Dame</title>
 +      <description>Written by Victor Hugo</description>
 +      <link>https://example.org/books/the-hunchback-of-notre-dame/</link>
 +      <pubDate>Mon, 09 Oct 2023 09:27:12 -0700</pubDate>
 +      <guid>https://example.org/books/the-hunchback-of-notre-dame/</guid>
 +    </item>
 +    <item>
 +      <title>Les Misérables</title>
 +      <description>Written by Victor Hugo</description>
 +      <link>https://example.org/books/les-miserables/</link>
 +      <pubDate>Mon, 09 Oct 2023 09:27:11 -0700</pubDate>
 +      <guid>https://example.org/books/les-miserables/</guid>
 +    </item>
 +  </channel>
 +</rss>
 +```
 +
 +Get the remote data:
 +
 +```go-html-template
 +{{ $data := dict }}
 +{{ $url := "https://example.org/books/index.xml" }}
 +{{ with resources.GetRemote $url }}
 +  {{ with .Err }}
 +    {{ errorf "%s" . }}
 +  {{ else }}
 +    {{ $data = . | transform.Unmarshal }}
 +  {{ end }}
 +{{ else }}
 +  {{ errorf "Unable to get remote resource %q" $url }}
 +{{ end }}
 +```
 +
 +Inspect the data structure:
 +
 +```go-html-template
 +<pre>{{ debug.Dump $data }}</pre>
 +```
 +
 +List the book titles:
 +
 +```go-html-template
 +{{ with $data.channel.item }}
 +  <ul>
 +    {{ range . }}
 +      <li>{{ .title }}</li>
 +    {{ end }}
 +  </ul>
 +{{ end }}
 +```
 +
 +Hugo renders this to:
 +
 +```html
 +<ul>
 +  <li>The Hunchback of Notre Dame</li>
 +  <li>Les Misérables</li>
 +</ul>
 +```
 +
 +### XML attributes and namespaces
 +
 +Let's add a `lang` attribute to the `title` nodes of our RSS feed, and a namespaced node for the ISBN number:
 +
 +```xml
 +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 +<rss version="2.0"
 +  xmlns:atom="http://www.w3.org/2005/Atom"
 +  xmlns:isbn="http://schemas.isbn.org/ns/1999/basic.dtd"
 +>
 +  <channel>
 +    <title>Books on Example Site</title>
 +    <link>https://example.org/books/</link>
 +    <description>Recent content in Books on Example Site</description>
 +    <language>en-US</language>
 +    <atom:link href="https://example.org/books/index.xml" rel="self" type="application/rss+xml" />
 +    <item>
-       <title lang="en">Les Misérables</title>
++      <title lang="en">The Hunchback of Notre Dame</title>
 +      <description>Written by Victor Hugo</description>
 +      <isbn:number>9780140443530</isbn:number>
 +      <link>https://example.org/books/the-hunchback-of-notre-dame/</link>
 +      <pubDate>Mon, 09 Oct 2023 09:27:12 -0700</pubDate>
 +      <guid>https://example.org/books/the-hunchback-of-notre-dame/</guid>
 +    </item>
 +    <item>
-     "-lang": "fr"
++      <title lang="fr">Les Misérables</title>
 +      <description>Written by Victor Hugo</description>
 +      <isbn:number>9780451419439</isbn:number>
 +      <link>https://example.org/books/les-miserables/</link>
 +      <pubDate>Mon, 09 Oct 2023 09:27:11 -0700</pubDate>
 +      <guid>https://example.org/books/les-miserables/</guid>
 +    </item>
 +  </channel>
 +</rss>
 +```
 +
 +After retrieving the remote data, inspect the data structure:
 +
 +```go-html-template
 +<pre>{{ debug.Dump $data }}</pre>
 +```
 +
 +Each item node looks like this:
 +
 +```json
 +{
 +  "description": "Written by Victor Hugo",
 +  "guid": "https://example.org/books/the-hunchback-of-notre-dame/",
 +  "link": "https://example.org/books/the-hunchback-of-notre-dame/",
 +  "number": "9780140443530",
 +  "pubDate": "Mon, 09 Oct 2023 09:27:12 -0700",
 +  "title": {
 +    "#text": "The Hunchback of Notre Dame",
-   <li>The Hunchback of Notre Dame (fr) 9780140443530</li>
-   <li>Les Misérables (en) 9780451419439</li>
++    "-lang": "en"
 +  }
 +}
 +```
 +
 +The title keys do not begin with an underscore or a letter---they are not valid [identifiers]. Use the [`index`] function to access the values:
 +
 +```go-html-template
 +{{ with $data.channel.item }}
 +  <ul>
 +    {{ range . }}
 +      {{ $title := index .title "#text" }}
 +      {{ $lang := index .title "-lang" }}
 +      {{ $ISBN := .number }}
 +      <li>{{ $title }} ({{ $lang }}) {{ $ISBN }}</li>
 +    {{ end }}
 +  </ul>
 +{{ end }}
 +```
 +
 +Hugo renders this to:
 +
 +```html
 +<ul>
++  <li>The Hunchback of Notre Dame (en) 9780140443530</li>
++  <li>Les Misérables (fr) 9780451419439</li>
 +</ul>
 +```
 +
 +[`index`]: /functions/collections/indexfunction/
 +[identifiers]: https://go.dev/ref/spec#Identifiers
 +[resource]: /getting-started/glossary/#resource
 +[page bundle]: /content-management/page-bundles/
index f3939675a7cd3fc8f9a1d64aaa6468f38d1c88e8,0000000000000000000000000000000000000000..d8866ae059428f6cdaefd5b21c6716b26e8b6c62
mode 100644,000000..100644
--- /dev/null
@@@ -1,37 -1,0 +1,37 @@@
- : Compatible with GitHub. This is the default, and strongly recommended.
 +---
 +title: urls.Anchorize
 +description: Returns the given string, sanitized for usage in an HTML id attribute.
 +categories: []
 +keywords: []
 +action:
 +  aliases: [anchorize]
 +  related:
 +    - functions/urls/URLize
 +  returnType: string
 +  signatures: [urls.Anchorize INPUT]
 +aliases: [/functions/anchorize]
 +---
 +
 +{{% include "/functions/urls/_common/anchorize-vs-urlize.md" %}}
 +
 +## Sanitizing logic
 +
 +With the default Markdown renderer, Goldmark, the sanitizing logic is controlled by your site configuration:
 +
 +{{< code-toggle file=hugo >}}
 +[markup.goldmark.parser]
 +autoHeadingIDType = 'github'
 +{{< /code-toggle >}}
 +
 +This controls the behavior of the `anchorize` function and the generation of heading IDs when rendering Markdown to HTML.
 +
 +Set `autoHeadingIDType` to one of:
 +
 +github
- : Similar to the "github" setting, but removes non-ASCII characters. 
++: Compatible with GitHub. This is the default.
 +
 +github-ascii
++: Similar to the `github` setting, but removes non-ASCII characters. 
 +
 +blackfriday
 +: Provided for backwards compatibility with Hugo v0.59.1 and earlier. This option will be removed in a future release.
index 718c1409883478e18a70d535c5e19225272f6a9c,0000000000000000000000000000000000000000..710a3c59249961a65b7664cd627117d44f513d02
mode 100644,000000..100644
--- /dev/null
@@@ -1,35 -1,0 +1,35 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +The [`anchorize`] and [`urlize`] functions are similar: 
 +
 +[`anchorize`]: /functions/urls/anchorize/
 +[`urlize`]: /functions/urls/urlize/
 +
 +- Use the `anchorize` function to generate an HTML `id` attribute value
 +- Use the `urlize` function to sanitize a string for usage in a URL
 +
 +For example:
 +
 +```go-html-template
 +{{ $s := "A B C" }}
 +{{ $s | anchorize }} → a-b-c
 +{{ $s | urlize }} → a-b-c
 +
 +{{ $s := "a b   c" }}
 +{{ $s | anchorize }} → a-b---c
 +{{ $s | urlize }} → a-b-c
 +
 +{{ $s := "< a, b, & c >" }}
 +{{ $s | anchorize }} → -a-b--c-
 +{{ $s | urlize }} → a-b-c
 +
 +{{ $s := "main.go" }}
 +{{ $s | anchorize }} → maingo
 +{{ $s | urlize }} → main.go
 +
 +{{ $s := "Hugö" }}
 +{{ $s | anchorize }} → hugö
 +{{ $s | urlize }} → hug%C3%B6
 +```
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..bb98d974a804d9948054c8d1be72159db078f703
new file mode 100644 (file)
Binary files differ
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..2e9b96e2be17456a83562f8e9001f3212485ad8e
new file mode 100644 (file)
Binary files differ
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b3260157b073e0719892b130cfdedaa0b02ba5dc
new file mode 100644 (file)
Binary files differ
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..55e80e7100b0d8f977d9f149a7a56ed333fcb77c
new file mode 100644 (file)
Binary files differ
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b422e3ad6a4c7c7e4ad7e64c6a6e6859f0b62024
new file mode 100644 (file)
Binary files differ
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e147edfb9d23005de2ff5b5d3815f2ec9f2c2a45
new file mode 100644 (file)
Binary files differ
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b1a0f468cdf943858dba7a4844c6d44354e91281
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,151 @@@
++---
++title: Host on AWS Amplify
++description: Host your site on AWS Amplify with continuous deployment.
++categories: [hosting and deployment]
++keywords: [hosting]
++menu:
++  docs:
++    parent: hosting-and-deployment
++toc: true
++---
++
++## Prerequisites
++
++Please complete the following tasks before continuing:
++
++1. [Create an AWS account]
++2. [Install Git]
++3. [Create a Hugo site] and test it locally with `hugo server`
++4. Commit the changes to your local repository
++5. Push the local repository to your [GitHub], [GitLab], or [Bitbucket] account
++
++[Bitbucket]: https://bitbucket.org/product
++[Create a Hugo site]: /getting-started/quick-start/
++[Create an AWS account]: https://aws.amazon.com/resources/create-account/
++[GitHub]: https://github.com
++[GitLab]: https://about.gitlab.com/
++[Install Git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
++
++## Procedure
++
++This procedure will enable continuous deployment from a GitHub repository. The procedure is essentially the same if you are using GitLab or Bitbucket.
++
++Step 1
++: Create a file named `amplify.yml` in the root of your project.
++
++```sh
++touch amplify.yml
++```
++
++Step 2
++: Copy and paste the YAML below into the file you created. Change the application versions and time zone as needed.
++
++{{< code file=amplify.yml copy=true >}}
++version: 1
++env:
++  variables:
++    # Application versions
++    DART_SASS_VERSION: 1.81.0
++    GO_VERSION: 1.23.3
++    HUGO_VERSION: 0.139.3
++    # Time zone
++    TZ: America/Los_Angeles
++    # Cache
++    HUGO_CACHEDIR: ${PWD}/.hugo
++    NPM_CONFIG_CACHE: ${PWD}/.npm
++frontend:
++  phases:
++    preBuild:
++      commands:
++        # Install Dart Sass
++        - curl -LJO https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz
++        - sudo tar -C /usr/local/bin -xf dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz
++        - rm dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz
++        - export PATH=/usr/local/bin/dart-sass:$PATH
++
++        # Install Go
++        - curl -LJO https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz
++        - sudo tar -C /usr/local -xf go${GO_VERSION}.linux-amd64.tar.gz
++        - rm go${GO_VERSION}.linux-amd64.tar.gz
++        - export PATH=/usr/local/go/bin:$PATH
++
++        # Install Hugo
++        - curl -LJO https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.tar.gz
++        - sudo tar -C /usr/local/bin -xf hugo_extended_${HUGO_VERSION}_linux-amd64.tar.gz
++        - rm hugo_extended_${HUGO_VERSION}_linux-amd64.tar.gz
++        - export PATH=/usr/local/bin:$PATH
++
++        # Check installed versions
++        - go version
++        - hugo version
++        - node -v
++        - npm -v
++        - sass --embedded --version
++
++        # Install Node.JS dependencies
++        - "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci --prefer-offline || true"
++
++        # https://github.com/gohugoio/hugo/issues/9810
++        - git config --add core.quotepath false
++    build:
++      commands:
++        - hugo --gc --minify
++  artifacts:
++    baseDirectory: public
++    files:
++      - '**/*'
++  cache:
++    paths:
++      - ${HUGO_CACHEDIR}/**/*
++      - ${NPM_CONFIG_CACHE}/**/*
++{{< /code >}}
++
++Step 3
++: Commit and push the change to your GitHub repository.
++
++```sh
++git add -A
++git commit -m "Create amplify.yml"
++git push
++```
++
++Step 4
++: Log in to your AWS account, navigate to the [Amplify Console], then press the  **Deploy an app** button.
++
++[Amplify Console]: https://console.aws.amazon.com/amplify/apps
++
++Step 5
++: Choose a source code provider, then press the **Next** button.
++
++  ![screen capture](amplify-step-05.png)
++
++Step 6
++: Authorize AWS Amplify to access your GitHub account.
++
++  ![screen capture](amplify-step-06.png)
++
++Step 7
++: Select your personal account or relevant organization.
++
++  ![screen capture](amplify-step-07.png)
++
++Step 8
++: Authorize access to one or more repositories.
++
++  ![screen capture](amplify-step-08.png)
++
++Step 9
++: Select a repository and branch, then press the **Next** button.
++
++  ![screen capture](amplify-step-09.png)
++
++Step 10
++: On the "App settings" page, scroll to the bottom then press the **Next** button. Amplify reads the `amplify.yml` file you created in Steps 1-3 instead of using the values on this page.
++
++Step 11
++: On the "Review" page, scroll to the bottom then press the **Save and deploy** button.
++
++Step 12
++: When your site has finished deploying, press the **Visit deployed URL** button to view your published site.
++
++  ![screen capture](amplify-step-11.png)
index 28c5ff841d505c67f634754a685ad153d6e29d23,0000000000000000000000000000000000000000..45adeda1fa0da8386522d79e80bad383662875df
mode 100644,000000..100644
--- /dev/null
@@@ -1,188 -1,0 +1,197 @@@
- : Create an empty file in your local repository.
 +---
 +title: Host on GitHub Pages
 +description: Host your site on GitHub Pages with continuous deployment using project, user, or organization pages.
 +categories: [hosting and deployment]
 +keywords: [hosting]
 +menu:
 +  docs:
 +    parent: hosting-and-deployment
 +toc: true
 +aliases: [/tutorials/github-pages-blog/]
 +---
 +
 +## Prerequisites
 +
++Please complete the following tasks before continuing:
++
 +1. [Create a GitHub account]
 +2. [Install Git]
 +3. [Create a Hugo site] and test it locally with `hugo server`.
 +
 +[Create a GitHub account]: https://github.com/signup
 +[Install Git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
 +[Create a Hugo site]: /getting-started/quick-start/
 +
 +## Types of sites
 +
 +There are three types of GitHub Pages sites: project, user, and organization. Project sites are connected to a specific project hosted on GitHub. User and organization sites are connected to a specific account on GitHub.com.
 +
 +{{% note %}}
 +See the [GitHub Pages documentation] to understand the requirements for repository ownership and naming.
 +
 +[GitHub Pages documentation]: https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages#types-of-github-pages-sites
 +{{% /note %}}
 +
 +[GitHub Pages documentation]: https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages#types-of-github-pages-sites
 +
 +## Procedure
 +
 +Step 1
 +: Create a GitHub repository.
 +
 +Step 2
 +: Push your local repository to GitHub.
 +
 +Step 3
 +: Visit your GitHub repository. From the main menu choose **Settings**&nbsp;>&nbsp;**Pages**. In the center of your screen you will see this:
 +
 +![screen capture](gh-pages-1.png)
 +{style="max-width: 280px"}
 +
 +Step 4
 +: Change the **Source** to `GitHub Actions`. The change is immediate; you do not have to press a Save button.
 +
 +![screen capture](gh-pages-2.png)
 +{style="max-width: 280px"}
 +
 +Step 5
- .github/workflows/hugo.yaml
++: Create a file named `hugo.yaml` in a directory named `.github/workflows`.
 +
 +```text
- : Commit the change to your local repository with a commit message of something like "Add workflow", and push to GitHub.
++mkdir -p .github/workflows
++touch hugo.yaml
 +```
 +
 +Step 6
 +: Copy and paste the YAML below into the file you created. Change the branch name and Hugo version as needed.
 +
 +{{< code file=.github/workflows/hugo.yaml copy=true >}}
 +# Sample workflow for building and deploying a Hugo site to GitHub Pages
 +name: Deploy Hugo site to Pages
 +
 +on:
 +  # Runs on pushes targeting the default branch
 +  push:
 +    branches:
 +      - main
 +
 +  # Allows you to run this workflow manually from the Actions tab
 +  workflow_dispatch:
 +
 +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
 +permissions:
 +  contents: read
 +  pages: write
 +  id-token: write
 +
 +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
 +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
 +concurrency:
 +  group: "pages"
 +  cancel-in-progress: false
 +
 +# Default to bash
 +defaults:
 +  run:
 +    shell: bash
 +
 +jobs:
 +  # Build job
 +  build:
 +    runs-on: ubuntu-latest
 +    env:
 +      HUGO_VERSION: 0.137.1
 +    steps:
 +      - name: Install Hugo CLI
 +        run: |
 +          wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
 +          && sudo dpkg -i ${{ runner.temp }}/hugo.deb
 +      - name: Install Dart Sass
 +        run: sudo snap install dart-sass
 +      - name: Checkout
 +        uses: actions/checkout@v4
 +        with:
 +          submodules: recursive
 +          fetch-depth: 0
 +      - name: Setup Pages
 +        id: pages
 +        uses: actions/configure-pages@v5
 +      - name: Install Node.js dependencies
 +        run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
 +      - name: Build with Hugo
 +        env:
 +          HUGO_CACHEDIR: ${{ runner.temp }}/hugo_cache
 +          HUGO_ENVIRONMENT: production
 +          TZ: America/Los_Angeles
 +        run: |
 +          hugo \
 +            --gc \
 +            --minify \
 +            --baseURL "${{ steps.pages.outputs.base_url }}/"
 +      - name: Upload artifact
 +        uses: actions/upload-pages-artifact@v3
 +        with:
 +          path: ./public
 +
 +  # Deployment job
 +  deploy:
 +    environment:
 +      name: github-pages
 +      url: ${{ steps.deployment.outputs.page_url }}
 +    runs-on: ubuntu-latest
 +    needs: build
 +    steps:
 +      - name: Deploy to GitHub Pages
 +        id: deployment
 +        uses: actions/deploy-pages@v4
 +{{< /code >}}
 +
 +Step 7
- ## Additional resources
++: Commit and push the change to your GitHub repository.
++
++```sh
++git add -A
++git commit -m "Create hugo.yaml"
++git push
++```
 +
 +Step 8
 +: From GitHub's main menu, choose **Actions**. You will see something like this:
 +
 +![screen capture](gh-pages-3.png)
 +{style="max-width: 350px"}
 +
 +Step 9
 +: When GitHub has finished building and deploying your site, the color of the status indicator will change to green.
 +
 +![screen capture](gh-pages-4.png)
 +{style="max-width: 350px"}
 +
 +Step 10
 +: Click on the commit message as shown above. You will see this:
 +
 +![screen capture](gh-pages-5.png)
 +{style="max-width: 611px"}
 +
 +Under the deploy step, you will see a link to your live site.
 +
 +In the future, whenever you push a change from your local repository, GitHub will rebuild your site and deploy the changes.
 +
 +## Customize the workflow
 +
 +The example workflow above includes this step, which typically takes 10&#8209;15 seconds:
 +
 +```yaml
 +- name: Install Dart Sass
 +  run: sudo snap install dart-sass
 +```
 +
 +You may remove this step if your site, themes, and modules do not transpile Sass to CSS using the [Dart Sass] transpiler.
 +
 +[Dart Sass]: /hugo-pipes/transpile-sass-to-css/#dart-sass
 +
++## Other resources
 +
 +- [Learn more about GitHub Actions](https://docs.github.com/en/actions)
 +- [Caching dependencies to speed up workflows](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows)
 +- [Manage a custom domain for your GitHub Pages site](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/about-custom-domains-and-github-pages)
index a63451062701e5b171200cf02fcf30d9faf4f84d,0000000000000000000000000000000000000000..361a40e801a0d88ee50ce2b57308ac01f15558a0
mode 100644,000000..100644
--- /dev/null
@@@ -1,129 -1,0 +1,131 @@@
- 4. Push the local repository to your [GitHub], [GitLab], or [Bitbucket] account
 +---
 +title: Host on Netlify
 +description: Host your site on Netlify with continuous deployment.
 +categories: [hosting and deployment]
 +keywords: [hosting]
 +menu:
 +  docs:
 +    parent: hosting-and-deployment
 +toc: true
 +---
 +
 +## Prerequisites
 +
++Please complete the following tasks before continuing:
++
 +1. [Create a Netlify account]
 +2. [Install Git]
 +3. [Create a Hugo site] and test it locally with `hugo server`
 +4. Commit the changes to your local repository
- ![screen capture](netlify-step-02.png)
++5. Push the local repository to your [GitHub], [GitLab], or [Bitbucket] account
 +
 +[Bitbucket]: https://bitbucket.org/product
 +[Create a Hugo site]: /getting-started/quick-start/
 +[Create a Netlify account]: https://app.netlify.com/signup
 +[GitHub]: https://github.com
 +[GitLab]: https://about.gitlab.com/
 +[Install Git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
 +
 +## Procedure
 +
 +This procedure will enable continuous deployment from a GitHub repository. The procedure is essentially the same if you are using GitLab or Bitbucket.
 +
 +Step 1
 +: Log in to your Netlify account, navigate to the Sites page, press the **Add new site** button, and choose "Import an existing project" from the dropdown menu.
 +
 +Step 2
 +: Select your deployment method.
 +
- ![screen capture](netlify-step-03.png)
++  ![screen capture](netlify-step-02.png)
 +
 +Step 3
 +: Authorize Netlify to connect with your GitHub account by pressing the **Authorize Netlify** button.
 +
- ![screen capture](netlify-step-04.png)
++  ![screen capture](netlify-step-03.png)
 +
 +Step 4
 +: Press the **Configure Netlify on GitHub** button.
 +
- ![screen capture](netlify-step-05.png)
++  ![screen capture](netlify-step-04.png)
 +
 +Step 5
 +: Install the Netlify app by selecting your GitHub account.
 +
- ![screen capture](netlify-step-06.png)
++  ![screen capture](netlify-step-05.png)
 +
 +Step 6
 +: Press the **Install** button.
 +
- ![screen capture](netlify-step-07.png)
++  ![screen capture](netlify-step-06.png)
 +
 +Step 7
 +: Click on the site's repository from the list.
 +
- ![screen capture](netlify-step-08.png)
++  ![screen capture](netlify-step-07.png)
 +
 +Step 8
 +: Set the site name and branch from which to deploy.
 +
- ![screen capture](netlify-step-09.png)
++  ![screen capture](netlify-step-08.png)
 +
 +Step 9
 +: Define the build settings, press the **Add environment variables** button, then press the **New variable** button.
 +
- ![screen capture](netlify-step-10.png)
++  ![screen capture](netlify-step-09.png)
 +
 +Step 10
 +: Create a new environment variable named `HUGO_VERSION` and set the value to the [latest version].
 +
 +[latest version]: https://github.com/gohugoio/hugo/releases/latest
 +
- ![screen capture](netlify-step-11.png)
++  ![screen capture](netlify-step-10.png)
 +
 +Step 11
 +: Press the "Deploy my new site" button at the bottom of the page.
 +
- ![screen capture](netlify-step-12.png)
++  ![screen capture](netlify-step-11.png)
 +
 +Step 12
 +: At the bottom of the screen, wait for the deploy to complete, then click on the deploy log entry.
 +
- ![screen capture](netlify-step-13.png)
++  ![screen capture](netlify-step-12.png)
 +
 +Step 13
 +: Press the **Open production deploy** button to view the live site.
 +
++  ![screen capture](netlify-step-13.png)
 +
 +## Configuration file
 +
 +In the procedure above we configured our site using the Netlify user interface. Most site owners find it easier to use a configuration file checked into source control.
 +
 +Create a new file named netlify.toml in the root of your project directory. In its simplest form, the configuration file might look like this:
 +
 +{{< code file=netlify.toml >}}
 +[build.environment]
 +HUGO_VERSION = "0.137.1"
 +TZ = "America/Los_Angeles"
 +
 +[build]
 +publish = "public"
 +command = "hugo --gc --minify"
 +{{< /code >}}
 +
 +If your site requires Dart Sass to transpile Sass to CSS, the configuration file should look something like this:
 +
 +{{< code file=netlify.toml >}}
 +[build.environment]
 +HUGO_VERSION = "0.137.1"
 +DART_SASS_VERSION = "1.80.6"
 +TZ = "America/Los_Angeles"
 +
 +[build]
 +publish = "public"
 +command = """\
 +  curl -LJO https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \
 +  tar -xf dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \
 +  rm dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \
 +  export PATH=/opt/build/repo/dart-sass:$PATH && \
 +  hugo --gc --minify \
 +  """
 +{{< /code >}}
index 913e4f77566da5c3e6ee9b8aacb9791ee4f43920,0000000000000000000000000000000000000000..d14379a1068edc5736d8db7bc0fc95b213a9c8da
mode 100644,000000..100644
--- /dev/null
@@@ -1,161 -1,0 +1,159 @@@
- {{< new-in 0.109.0 >}}
 +---
 +title: Use Hugo Modules
 +description: How to use Hugo Modules to build and manage your site.
 +categories: [hugo modules]
 +keywords: [modules,themes]
 +menu:
 +  docs:
 +    parent: modules
 +    weight: 30
 +weight: 30
 +aliases: [/themes/usage/,/themes/installing/,/installing-and-using-themes/]
 +toc: true
 +---
 +
 +## Prerequisite
 +
 +{{< gomodules-info >}}
 +
 +## Initialize a new module
 +
 +Use `hugo mod init` to initialize a new Hugo Module. If it fails to guess the module path, you must provide it as an argument, e.g.:
 +
 +```sh
 +hugo mod init github.com/<your_user>/<your_project>
 +```
 +
 +Also see the [CLI Doc](/commands/hugo_mod_init/).
 +
 +## Use a module for a theme
 +
 +The easiest way to use a Module for a theme is to import it in the configuration.
 +
 +1. Initialize the hugo module system: `hugo mod init github.com/<your_user>/<your_project>`
 +2. Import the theme:
 +
 +{{< code-toggle file=hugo >}}
 +[module]
 +  [[module.imports]]
 +    path = "github.com/spf13/hyde"
 +{{< /code-toggle >}}
 +
 +## Update modules
 +
 +Modules will be downloaded and added when you add them as imports to your configuration, see [Module Imports](/hugo-modules/configuration/#module-configuration-imports).
 +
 +To update or manage versions, you can use `hugo mod get`.
 +
 +Some examples:
 +
 +### Update all modules
 +
 +```sh
 +hugo mod get -u
 +```
 +
 +### Update all modules recursively
 +
 +```sh
 +hugo mod get -u ./...
 +```
 +
 +### Update one module
 +
 +```sh
 +hugo mod get -u github.com/gohugoio/myShortcodes
 +```
 +
 +### Get a specific version
 +
 +```sh
 +hugo mod get github.com/gohugoio/myShortcodes@v1.0.7
 +```
 +
 +Also see the [CLI Doc](/commands/hugo_mod_get/).
 +
 +## Make and test changes in a module
 +
 +One way to do local development of a module imported in a project is to add a replace directive to a local directory with the source in `go.mod`:
 +
 +```sh
 +replace github.com/bep/hugotestmods/mypartials => /Users/bep/hugotestmods/mypartials
 +```
 +
 +If you have the `hugo server` running, the configuration will be reloaded and `/Users/bep/hugotestmods/mypartials` put on the watch list.
 +
 +Instead of modifying the `go.mod` files, you can also use the modules configuration [`replacements`](/hugo-modules/configuration/#module-configuration-top-level) option.
 +
 +## Print dependency graph
 +
 +Use `hugo mod graph` from the relevant module directory and it will print the dependency graph, including vendoring, module replacement or disabled status.
 +
 +E.g.:
 +
 +```txt
 +hugo mod graph
 +
 +github.com/bep/my-modular-site github.com/bep/hugotestmods/mymounts@v1.2.0
 +github.com/bep/my-modular-site github.com/bep/hugotestmods/mypartials@v1.0.7
 +github.com/bep/hugotestmods/mypartials@v1.0.7 github.com/bep/hugotestmods/myassets@v1.0.4
 +github.com/bep/hugotestmods/mypartials@v1.0.7 github.com/bep/hugotestmods/myv2@v1.0.0
 +DISABLED github.com/bep/my-modular-site github.com/spf13/hyde@v0.0.0-20190427180251-e36f5799b396
 +github.com/bep/my-modular-site github.com/bep/hugo-fresh@v1.0.1
 +github.com/bep/my-modular-site in-themesdir
 +```
 +
 +Also see the [CLI Doc](/commands/hugo_mod_graph/).
 +
 +## Vendor your modules
 +
 +`hugo mod vendor` will write all the module dependencies to a `_vendor` folder, which will then be used for all subsequent builds.
 +
 +Note that:
 +
 +* You can run `hugo mod vendor` on any level in the module tree.
 +* Vendoring will not store modules stored in your `themes` folder.
 +* Most commands accept a `--ignoreVendorPaths` flag, which will then not use the vendored modules in `_vendor` for the module paths matching the [Glob](https://github.com/gobwas/glob) pattern given.
 +
 +Also see the [CLI Doc](/commands/hugo_mod_vendor/).
 +
 +## Tidy go.mod, go.sum
 +
 +Run `hugo mod tidy` to remove unused entries in `go.mod` and `go.sum`.
 +
 +Also see the [CLI Doc](/commands/hugo_mod_clean/).
 +
 +## Clean module cache
 +
 +Run `hugo mod clean` to delete the entire modules cache.
 +
 +Note that you can also configure the `modules` cache with a `maxAge`, see [File Caches](/getting-started/configuration/#configure-file-caches).
 +
 +Also see the [CLI Doc](/commands/hugo_mod_clean/).
 +
 +## Module workspaces
 +
 +Workspace support was added in [Go 1.18](https://go.dev/blog/get-familiar-with-workspaces) and Hugo got solid support for it in the `v0.109.0` version.
 +
 +A common use case for a workspace is to simplify local development of a site with its theme modules.
 +
 +A workspace can be configured in a `*.work` file and activated with the [module.workspace](/hugo-modules/configuration/) setting, which for this use is commonly controlled via the `HUGO_MODULE_WORKSPACE` OS environment variable.
 +
 +See the [hugo.work](https://github.com/gohugoio/hugo/blob/master/docs/hugo.work) file in the Hugo Docs repo for an example:
 +
 +```text
 +go 1.20
 +
 +use .
 +use ../gohugoioTheme
 +```
 +
 +Using the `use` directive, list all the modules you want to work on, pointing to its relative location. As in the example above, it's recommended to always include the main project (the ".") in the list.
 +
 +With that you can start the Hugo server with that workspace enabled:
 +
 +```sh
 +HUGO_MODULE_WORKSPACE=hugo.work hugo server --ignoreVendorPaths "**"
 +```
 +
 +The `--ignoreVendorPaths` flag is added above to ignore any of the vendored dependencies inside `_vendor`. If you don't use vendoring, you don't need that flag. But now the server is set up watching the files and directories in the workspace and you can see your local edits reloaded.
index cf99049fe4625e575a0862cea7b334e137fc2cba,0000000000000000000000000000000000000000..57c71e8ab915589396748254b0f2becb617de78e
mode 100755,000000..100755
--- /dev/null
@@@ -1,104 -1,0 +1,104 @@@
- : {{< new-in 0.109.0 >}} The absolute path to the publish directory (the `public` directory). Note that the value will always point to a directory on disk even when running `hugo server` in memory mode. If you write to this folder from PostCSS when running the server, you could run the server with one of these flags:
 +---
 +title: PostProcess
 +description: Allows delaying of resource transformations to after the build.
 +categories: [asset management]
 +keywords: []
 +menu:
 +  docs:
 +    parent: hugo-pipes
 +    weight: 50
 +weight: 50
 +action:
 +  aliases: []
 +  returnType: postpub.PostPublishedResource
 +  signatures: [resources.PostProcess RESOURCE]
 +---
 +
 +## Usage
 +
 +Marking a resource with `resources.PostProcess` delays any transformations to after the build, typically because one or more of the steps in the transformation chain depends on the result of the build (e.g. files in `public`).
 +
 +A prime use case for this is [CSS purging with PostCSS](#css-purging-with-postcss).
 +
 +There are currently two limitations to this:
 +
 +1. This only works in `*.html` templates (i.e. templates that produces HTML files).
 +2. You cannot manipulate the values returned from the resource's methods. E.g. the `upper` in this example will not work as expected:
 +
 +    ```go-html-template
 +    {{ $css := resources.Get "css/main.css" }}
 +    {{ $css = $css | css.PostCSS | minify | fingerprint | resources.PostProcess }}
 +    {{ $css.RelPermalink | upper }}
 +    ```
 +
 +## CSS purging with PostCSS
 +
 +{{% note %}}
 +There are several ways to set up CSS purging with PostCSS in Hugo. If you have a simple project, you should consider going the simpler route and drop the use of `resources.PostProcess` and just extract keywords from the templates. See the [Tailwind documentation](https://tailwindcss.com/docs/controlling-file-size/#app) for some examples.
 +{{% /note %}}
 +
 +The below configuration will write a `hugo_stats.json` file to the project root as part of the build. If you're only using this for the production build, you should consider placing it below [config/production](/getting-started/configuration/#configuration-directory).
 +
 +{{< code-toggle file=hugo >}}
 +[build.buildStats]
 +  enable = true
 +{{< /code-toggle >}}
 +
 +See the [configure build] documentation for details and options.
 +
 +[configure build]: /getting-started/configuration/#configure-build
 +
 +`postcss.config.js`
 +
 +```js
 +const purgecss = require('@fullhuman/postcss-purgecss')({
 +    content: [ './hugo_stats.json' ],
 +    defaultExtractor: (content) => {
 +        let els = JSON.parse(content).htmlElements;
 +        return els.tags.concat(els.classes, els.ids);
 +    }
 +});
 +
 +module.exports = {
 +     plugins: [
 +         ...(process.env.HUGO_ENVIRONMENT === 'production' ? [ purgecss ] : [])
 +     ]
 + };
 +```
 +
 +Note that in the example above, the "CSS purge step" will only be applied to the production build. This means that you need to do something like this in your head template to build and include your CSS:
 +
 +```go-html-template
 +{{ $css := resources.Get "css/main.css" }}
 +{{ $css = $css | css.PostCSS }}
 +{{ if hugo.IsProduction }}
 +{{ $css = $css | minify | fingerprint | resources.PostProcess }}
 +{{ end }}
 +<link href="{{ $css.RelPermalink }}" rel="stylesheet" />
 +```
 +
 +## Hugo environment variables available in PostCSS
 +
 +These are the environment variables Hugo passes down to PostCSS (and Babel), which allows you do do `process.env.HUGO_ENVIRONMENT === 'production' ? [autoprefixer] : []` and similar:
 +
 +PWD
 +: The absolute path to the project working directory.
 +
 +HUGO_ENVIRONMENT
 +: The value e.g. set with `hugo -e production` (defaults to `production` for `hugo` and `development` for `hugo server`).
 +
 +HUGO_PUBLISHDIR
++: The absolute path to the publish directory (the `public` directory). Note that the value will always point to a directory on disk even when running `hugo server` in memory mode. If you write to this folder from PostCSS when running the server, you could run the server with one of these flags:
 +
 +```sh
 +hugo server --renderToDisk
 +hugo server --renderStaticToDisk
 +```
 +
 +Also, Hugo will add environment variables for all files mounted below `assets/_jsconfig`. A default mount will be set up with files in the project root matching this regexp: `(babel|postcss|tailwind)\.config\.js`.
 +
 +These will get environment variables named on the form `HUGO_FILE_:filename:` where `:filename:` is all upper case with periods replaced with underscore. This allows you to do this and similar:
 +
 +```js
 +let tailwindConfig = process.env.HUGO_FILE_TAILWIND_CONFIG_JS || './tailwind.config.js';
 +```
index 67ef4b7cdc7a00ae8702cdbbf83d9b8d74bdf348,0000000000000000000000000000000000000000..886488ca6a714f2b40fb2ac0254df92c1a49456e
mode 100644,000000..100644
--- /dev/null
@@@ -1,213 -1,0 +1,213 @@@
- vars {{< new-in 0.109.0 >}}
 +---
 +title: ToCSS
 +linkTitle: Transpile Sass to CSS
 +description: Transpile Sass to CSS.
 +categories: [asset management]
 +keywords: []
 +menu:
 +  docs:
 +    parent: hugo-pipes
 +    returnType: resource.Resource
 +    weight: 30
 +weight: 30
 +action:
 +  aliases: [toCSS]
 +  returnType: resource.Resource
 +  signatures: ['css.Sass [OPTIONS] RESOURCE']
 +toc: true
 +aliases: [/hugo-pipes/transform-to-css/]
 +---
 +
 +## Usage
 +
 +Transpile Sass to CSS using the LibSass transpiler included in Hugo's extended and extended/deploy editions, or [install Dart Sass](#dart-sass) to use the latest features of the Sass language.
 +
 +```go-html-template
 +{{ $opts := dict "transpiler" "libsass" "targetPath" "css/style.css" }}
 +{{ with resources.Get "sass/main.scss" | toCSS $opts | minify | fingerprint }}
 +  <link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
 +{{ end }}
 +```
 +
 +Sass has two forms of syntax: [SCSS] and [indented]. Hugo supports both.
 +
 +[scss]: https://sass-lang.com/documentation/syntax#scss
 +[indented]: https://sass-lang.com/documentation/syntax#the-indented-syntax
 +
 +## Options
 +
 +transpiler
 +: (`string`) The transpiler to use, either `libsass` (default) or `dartsass`. Hugo's extended and extended/deploy editions include the LibSass transpiler. To use the Dart Sass transpiler, see the [installation instructions](#dart-sass) below.
 +
 +targetPath
 +: (`string`) If not set, the transformed resource's target path will be the original path of the asset file with its extension replaced by `.css`.
 +
++vars
 +: (`map`) A map of key-value pairs that will be available in the `hugo:vars` namespace. Useful for [initializing Sass variables from Hugo templates](https://discourse.gohugo.io/t/42053/).
 +
 +```scss
 +// LibSass
 +@import "hugo:vars";
 +
 +// Dart Sass
 +@use "hugo:vars" as v;
 +```
 +
 +outputStyle
 +: (`string`) Output styles available to LibSass include `nested` (default), `expanded`, `compact`, and `compressed`. Output styles available to Dart Sass include `expanded` (default) and `compressed`.
 +
 +precision
 +: (`int`) Precision of floating point math. Not applicable to Dart Sass.
 +
 +enableSourceMap
 +: (`bool`) If `true`, generates a source map.
 +
 +sourceMapIncludeSources
 +: (`bool`) If `true`, embeds sources in the generated source map. Not applicable to LibSass.
 +
 +includePaths
 +: (`slice`) A slice of paths, relative to the project root, that the transpiler will use when resolving `@use` and `@import` statements.
 +
 +```go-html-template
 +{{ $opts := dict
 +  "transpiler" "dartsass"
 +  "targetPath" "css/style.css"
 +  "vars" site.Params.styles
 +  "enableSourceMap" (not hugo.IsProduction)
 +  "includePaths" (slice "node_modules/bootstrap/scss")
 +}}
 +{{ with resources.Get "sass/main.scss" | toCSS $opts | minify | fingerprint }}
 +  <link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
 +{{ end }}
 +```
 +
 +## Dart Sass
 +
 +The extended version of Hugo includes [LibSass] to transpile Sass to CSS. In 2020, the Sass team deprecated LibSass in favor of [Dart Sass].
 +
 +Use the latest features of the Sass language by installing Dart Sass in your development and production environments.
 +
 +### Installation overview
 +
 +Dart Sass is compatible with Hugo v0.114.0 and later.
 +
 +If you have been using Embedded Dart Sass[^1] with Hugo v0.113.0 and earlier, uninstall Embedded Dart Sass, then install Dart Sass. If you have installed both, Hugo will use Dart Sass.
 +
 +If you install Hugo as a [Snap package] there is no need to install Dart Sass. The Hugo Snap package includes Dart Sass.
 +
 +[^1]: In 2023, the Sass team deprecated Embedded Dart Sass in favor of Dart Sass.
 +
 +### Installing in a development environment
 +
 +When you install Dart Sass somewhere in your PATH, Hugo will find it.
 +
 +OS|Package manager|Site|Installation
 +:--|:--|:--|:--
 +Linux|Homebrew|[brew.sh]|`brew install sass/sass/sass`
 +Linux|Snap|[snapcraft.io]|`sudo snap install dart-sass`
 +macOS|Homebrew|[brew.sh]|`brew install sass/sass/sass`
 +Windows|Chocolatey|[chocolatey.org]|`choco install sass`
 +Windows|Scoop|[scoop.sh]|`scoop install sass`
 +
 +You may also install [prebuilt binaries] for Linux, macOS, and Windows.
 +
 +Run `hugo env` to list the active transpilers.
 +
 +### Installing in a production environment
 +
 +For [CI/CD] deployments (e.g., GitHub Pages, GitLab Pages, Netlify, etc.) you must edit the workflow to install Dart Sass before Hugo builds the site[^2]. Some providers allow you to use one of the package managers above, or you can download and extract one of the prebuilt binaries.
 +
 +[^2]: You do not have to do this if (a) you have not modified the assets cache location, and (b) you have not set `useResourceCacheWhen` to `never` in your [site configuration], and (c) you add and commit your resources directory to your repository.
 +
 +#### GitHub Pages
 +
 +To install Dart Sass for your builds on GitHub Pages, add this step to the GitHub Pages workflow file:
 +
 +```yaml
 +- name: Install Dart Sass
 +  run: sudo snap install dart-sass
 +```
 +
 +If you are using GitHub Pages for the first time with your repository, GitHub provides a [starter workflow] for Hugo that includes Dart Sass. This is the simplest way to get started.
 +
 +#### GitLab Pages
 +
 +To install Dart Sass for your builds on GitLab Pages, the `.gitlab-ci.yml` file should look something like this:
 +
 +```yaml
 +variables:
 +  HUGO_VERSION: 0.137.1
 +  DART_SASS_VERSION: 1.80.6
 +  GIT_DEPTH: 0
 +  GIT_STRATEGY: clone
 +  GIT_SUBMODULE_STRATEGY: recursive
 +  TZ: America/Los_Angeles
 +image:
 +  name: golang:1.20-buster
 +pages:
 +  script:
 +    # Install Dart Sass
 +    - curl -LJO https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz
 +    - tar -xf dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz
 +    - cp -r dart-sass/* /usr/local/bin
 +    - rm -rf dart-sass*
 +    # Install Hugo
 +    - curl -LJO https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb
 +    - apt install -y ./hugo_extended_${HUGO_VERSION}_linux-amd64.deb
 +    - rm hugo_extended_${HUGO_VERSION}_linux-amd64.deb
 +    # Build
 +    - hugo --gc --minify
 +  artifacts:
 +    paths:
 +      - public
 +  rules:
 +    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
 +```
 +
 +#### Netlify
 +
 +To install Dart Sass for your builds on Netlify, the `netlify.toml` file should look something like this:
 +
 +```toml
 +[build.environment]
 +HUGO_VERSION = "0.137.1"
 +DART_SASS_VERSION = "1.80.6"
 +TZ = "America/Los_Angeles"
 +
 +[build]
 +publish = "public"
 +command = """\
 +  curl -LJO https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \
 +  tar -xf dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \
 +  rm dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \
 +  export PATH=/opt/build/repo/dart-sass:$PATH && \
 +  hugo --gc --minify \
 +  """
 +```
 +
 +### Example
 +
 +To transpile with Dart Sass, set `transpiler` to `dartsass` in the options map passed to `css.Sass`. For example:
 +
 +```go-html-template
 +{{ $opts := dict "transpiler" "dartsass" "targetPath" "css/style.css" }}
 +{{ with resources.Get "sass/main.scss" | toCSS $opts | minify | fingerprint }}
 +  <link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
 +{{ end }}
 +```
 +
 +### Miscellaneous
 +
 +If you build Hugo from source and run `mage test -v`, the test will fail if you install Dart Sass as a Snap package. This is due to the Snap package's strict confinement model.
 +
 +[brew.sh]: https://brew.sh/
 +[chocolatey.org]: https://community.chocolatey.org/packages/sass
 +[ci/cd]: https://en.wikipedia.org/wiki/CI/CD
 +[dart sass]: https://sass-lang.com/dart-sass
 +[libsass]: https://sass-lang.com/libsass
 +[prebuilt binaries]: https://github.com/sass/dart-sass/releases/latest
 +[scoop.sh]: https://scoop.sh/#/apps?q=sass
 +[site configuration]: /getting-started/configuration/#configure-build
 +[snap package]: /installation/linux/#snap
 +[snapcraft.io]: https://snapcraft.io/dart-sass
 +[starter workflow]: https://github.com/actions/starter-workflows/blob/main/pages/hugo.yml
index 7a80a522e5599328ba7f05a90f719a88a330ff27,0000000000000000000000000000000000000000..b6fc23c74e749b4fb9cd9208faa4115cdcdc02bd
mode 100644,000000..100644
--- /dev/null
@@@ -1,16 -1,0 +1,16 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +Hugo is available in three editions: standard, extended, and extended/deploy. While the standard edition provides core functionality, the extended and extended/deploy editions offer advanced features.
 +
 +Feature|extended edition|extended/deploy edition
 +:--|:-:|:-:
 +Encode to the WebP format when [processing images]. You can decode WebP images with any edition.|:heavy_check_mark:|:heavy_check_mark:
 +[Transpile Sass to CSS] using the embedded LibSass transpiler. You can use the [Dart Sass] transpiler with any edition.|:heavy_check_mark:|:heavy_check_mark:
 +Deploy your site directly to a Google Cloud Storage bucket, an AWS S3 bucket, or an Azure Storage container. See [details].|:x:|:heavy_check_mark:
 +
 +[dart sass]: /hugo-pipes/transpile-sass-to-css/#dart-sass
 +[processing images]: /content-management/image-processing/
 +[transpile sass to css]: /hugo-pipes/transpile-sass-to-css/
 +[details]: /hosting-and-deployment/hugo-deploy/
index ea6eaa8fe45be8e877b9bf9bb54b321962c7c47b,0000000000000000000000000000000000000000..65ec2a12f2df16f806348e418c085160f326ae79
mode 100644,000000..100644
--- /dev/null
@@@ -1,40 -1,0 +1,40 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +## Prerequisites
 +
 +Although not required in all cases, [Git], [Go], and [Dart Sass] are commonly used when working with Hugo.
 +
 +Git is required to:
 +
 +- Build Hugo from source
 +- Use the [Hugo Modules] feature
 +- Install a theme as a Git submodule
 +- Access [commit information] from a local Git repository
 +- Host your site with services such as [CloudCannon], [Cloudflare Pages], [GitHub Pages], [GitLab Pages], and [Netlify]
 +
 +Go is required to:
 +
 +- Build Hugo from source
 +- Use the Hugo Modules feature
 +
 +Dart Sass is required to transpile Sass to CSS when using the latest features of the Sass language.
 +
 +Please refer to the relevant documentation for installation instructions:
 +
 +- [Git][git install]
 +- [Go][go install]
 +- [Dart Sass][dart sass install]
 +
 +[cloudcannon]: https://cloudcannon.com/
 +[cloudflare pages]: https://pages.cloudflare.com/
 +[dart sass install]: /hugo-pipes/transpile-sass-to-css/#dart-sass
 +[dart sass]: https://sass-lang.com/dart-sass
 +[git install]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
 +[git]: https://git-scm.com/
 +[github pages]: https://pages.github.com/
 +[gitlab pages]: https://docs.gitlab.com/ee/user/project/pages/
 +[go install]: https://go.dev/doc/install
 +[go]: https://go.dev/
 +[netlify]: https://www.netlify.com/
index 55f7cb85bd00db89cc6488ab50271d27f9201f46,0000000000000000000000000000000000000000..34411cddd1a82090b306bc197bf8f91c82d07060
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,23 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +## Prebuilt binaries
 +
 +Prebuilt binaries are available for a variety of operating systems and architectures. Visit the [latest release] page, and scroll down to the Assets section.
 +
 +1. Download the archive for the desired edition, operating system, and architecture
 +1. Extract the archive
 +1. Move the executable to the desired directory
 +1. Add this directory to the PATH environment variable
 +1. Verify that you have _execute_ permission on the file
 +
 +Please consult your operating system documentation if you need help setting file permissions or modifying your PATH environment variable.
 +
 +If you do not see a prebuilt binary for the desired edition, operating system, and architecture, install Hugo using one of the methods described below.
 +
 +[commit information]: /methods/page/gitinfo/
 +[Git]: https://git-scm.com/
 +[Go]: https://go.dev/
 +[Hugo Modules]: /hugo-modules/
 +[latest release]: https://github.com/gohugoio/hugo/releases/latest
index 6829c50ce18eeb8c6012da725360879c3313f348,0000000000000000000000000000000000000000..b3039d18ae18b0553afcad187593945968f57817
mode 100644,000000..100644
--- /dev/null
@@@ -1,38 -1,0 +1,38 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +## Build from source
 +
 +To build the extended or extended/deploy edition from source you must:
 +
 +1. Install [Git]
 +1. Install [Go] version 1.20 or later
 +1. Install a C compiler, either [GCC] or [Clang]
 +1. Update your `PATH` environment variable as described in the [Go documentation]
 +
 +> The install directory is controlled by the `GOPATH` and `GOBIN` environment variables. If `GOBIN` is set, binaries are installed to that directory. If `GOPATH` is set, binaries are installed to the bin subdirectory of the first directory in the `GOPATH` list. Otherwise, binaries are installed to the bin subdirectory of the default `GOPATH` (`$HOME/go` or `%USERPROFILE%\go`).
 +
 +To build the standard edition:
 +
 +```sh
 +go install github.com/gohugoio/hugo@latest
 +```
 +
 +To build the extended edition:
 +
 +```sh
 +CGO_ENABLED=1 go install -tags extended github.com/gohugoio/hugo@latest
 +```
 +
 +To build the extended/deploy edition:
 +
 +```sh
 +CGO_ENABLED=1 go install -tags extended,withdeploy github.com/gohugoio/hugo@latest
 +```
 +
 +[Clang]: https://clang.llvm.org/
 +[GCC]: https://gcc.gnu.org/
 +[Git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
 +[Go documentation]: https://go.dev/doc/code#Command
 +[Go]: https://go.dev/doc/install
index 6cd7a524fde4d6994b517cd90beeb78029614a4e,0000000000000000000000000000000000000000..14f48174ef68e0e9cd8e0915007a6d1a5b30f6de
mode 100644,000000..100644
--- /dev/null
@@@ -1,13 -1,0 +1,13 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +### Homebrew
 +
 +[Homebrew] is a free and open-source package manager for macOS and Linux. To install the extended edition of Hugo:
 +
 +```sh
 +brew install hugo
 +```
 +
 +[Homebrew]: https://brew.sh/
index 2403bf47b59a82fe0f1afc820f44f78ba63bb982,0000000000000000000000000000000000000000..14479d00446cdc7f9e2cfad04d559908c7aa5657
mode 100644,000000..100644
--- /dev/null
@@@ -1,208 -1,0 +1,218 @@@
 +---
 +title: Linux
 +description: Install Hugo on Linux.
 +categories: [installation]
 +keywords: []
 +menu:
 +  docs:
 +    parent: installation
 +    weight: 30
 +weight: 30
 +toc: true
 +---
 +
 +## Editions
 +
 +{{% include "installation/_common/01-editions.md" %}}
 +
 +Unless your specific deployment needs require the extended/deploy edition, we recommend the extended edition.
 +
 +{{% include "installation/_common/02-prerequisites.md" %}}
 +
 +{{% include "installation/_common/03-prebuilt-binaries.md" %}}
 +
 +## Package managers
 +
 +### Snap
 +
 +[Snap] is a free and open-source package manager for Linux. Available for [most distributions], snap packages are simple to install and are automatically updated.
 +
 +The Hugo snap package is [strictly confined]. Strictly confined snaps run in complete isolation, up to a minimal access level that’s deemed always safe. The sites you create and build must be located within your home directory, or on removable media.
 +
 +To install the extended edition of Hugo:
 +
 +```sh
 +sudo snap install hugo
 +```
 +
 +To enable or revoke access to removable media:
 +
 +```sh
 +sudo snap connect hugo:removable-media
 +sudo snap disconnect hugo:removable-media
 +```
 +
 +To enable or revoke access to SSH keys:
 +
 +```sh
 +sudo snap connect hugo:ssh-keys
 +sudo snap disconnect hugo:ssh-keys
 +```
 +
 +[most distributions]: https://snapcraft.io/docs/installing-snapd
 +[strictly confined]: https://snapcraft.io/docs/snap-confinement
 +[Snap]: https://snapcraft.io/
 +
 +{{% include "installation/_common/homebrew.md" %}}
 +
 +## Repository packages
 +
 +Most Linux distributions maintain a repository for commonly installed applications.
 +
 +{{% note %}}
 +The Hugo version available in package repositories varies based on Linux distribution and release, and in some cases will not be the [latest version].
 +
 +Use one of the other installation methods if your package repository does not provide the desired version.
 +
 +[latest version]: https://github.com/gohugoio/hugo/releases/latest
 +{{% /note %}}
 +
 +### Alpine Linux
 +
 +To install the extended edition of Hugo on [Alpine Linux]:
 +
 +```sh
 +doas apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community hugo
 +```
 +
 +[Alpine Linux]: https://alpinelinux.org/
 +
 +### Arch Linux
 +
 +Derivatives of the [Arch Linux] distribution of Linux include [EndeavourOS], [Garuda Linux], [Manjaro], and others. To install the extended edition of Hugo:
 +
 +```sh
 +sudo pacman -S hugo
 +```
 +
 +[Arch Linux]: https://archlinux.org/
 +[EndeavourOS]: https://endeavouros.com/
 +[Manjaro]: https://manjaro.org/
 +[Garuda Linux]: https://garudalinux.org/
 +
 +### Debian
 +
 +Derivatives of the [Debian] distribution of Linux include [elementary OS], [KDE neon], [Linux Lite], [Linux Mint], [MX Linux], [Pop!_OS], [Ubuntu], [Zorin OS], and others. To install the extended edition of Hugo:
 +
 +```sh
 +sudo apt install hugo
 +```
 +
 +You can also download Debian packages from the [latest release] page.
 +
 +[Debian]: https://www.debian.org/
 +[Exherbo]: https://www.exherbolinux.org/
 +[elementary OS]: https://elementary.io/
 +[KDE neon]: https://neon.kde.org/
 +[Linux Lite]: https://www.linuxliteos.com/
 +[Linux Mint]: https://linuxmint.com/
 +[MX Linux]: https://mxlinux.org/
 +[Pop!_OS]: https://pop.system76.com/
 +[Ubuntu]: https://ubuntu.com/
 +[Zorin OS]: https://zorin.com/os/
 +
 +### Exherbo
 +
 +To install the extended edition of Hugo on [Exherbo]:
 +
 +1. Add this line to /etc/paludis/options.conf:
 +
 +   ```text
 +   www-apps/hugo extended
 +   ```
 +
 +2. Install using the Paludis package manager:
 +
 +
 +   ```sh
 +   cave resolve -x repository/heirecka
 +   cave resolve -x hugo
 +   ```
 +
 +### Fedora
 +
 +Derivatives of the [Fedora] distribution of Linux include [CentOS], [Red Hat Enterprise Linux], and others. To install the extended edition of Hugo:
 +
 +```sh
 +sudo dnf install hugo
 +```
 +
 +[CentOS]: https://www.centos.org/
 +[Fedora]: https://getfedora.org/
 +[Red Hat Enterprise Linux]: https://www.redhat.com/
 +
 +### Gentoo
 +
 +Derivatives of the [Gentoo] distribution of Linux include [Calculate Linux], [Funtoo], and others. To install the extended edition of Hugo:
 +
 +1. Specify the `extended` [USE] flag in /etc/portage/package.use/hugo:
 +
 +    ```text
 +    www-apps/hugo extended
 +    ```
 +
 +2. Build using the Portage package manager:
 +
 +    ```sh
 +    sudo emerge www-apps/hugo
 +    ```
 +
 +[Calculate Linux]: https://www.calculate-linux.org/
 +[Funtoo]: https://www.funtoo.org/
 +[Gentoo]: https://www.gentoo.org/
 +[USE]: https://packages.gentoo.org/packages/www-apps/hugo
 +
 +### NixOS
 +
 +The NixOS distribution of Linux includes Hugo in its package repository. To install the extended edition of Hugo:
 +
 +```sh
 +nix-env -iA nixos.hugo
 +```
 +
 +### openSUSE
 +
 +Derivatives of the [openSUSE] distribution of Linux include [GeckoLinux], [Linux Karmada], and others. To install the extended edition of Hugo:
 +
 +```sh
 +sudo zypper install hugo
 +```
 +
 +[GeckoLinux]: https://geckolinux.github.io/
 +[Linux Karmada]: https://linuxkamarada.com/
 +[openSUSE]: https://www.opensuse.org/
 +
 +### Solus
 +
 +The [Solus] distribution of Linux includes Hugo in its package repository. To install the extended edition of Hugo:
 +
 +```sh
 +sudo eopkg install hugo
 +```
 +
 +[Solus]: https://getsol.us/
 +
++### Void Linux
++
++To install the extended edition of Hugo on [Void Linux]:
++
++```sh
++sudo xbps-install -S hugo
++```
++
++[Void Linux]: https://voidlinux.org/
++
 +{{% include "installation/_common/04-build-from-source.md" %}}
 +
 +## Comparison
 +
 +||Prebuilt binaries|Package managers|Repository packages|Build from source
 +:--|:--:|:--:|:--:|:--:
 +Easy to install?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
 +Easy to upgrade?|:heavy_check_mark:|:heavy_check_mark:|varies|:heavy_check_mark:
 +Easy to downgrade?|:heavy_check_mark:|:heavy_check_mark: [^1]|varies|:heavy_check_mark:
 +Automatic updates?|:x:|varies [^2]|:x:|:x:
 +Latest version available?|:heavy_check_mark:|:heavy_check_mark:|varies|:heavy_check_mark:
 +
 +[^1]: Easy if a previous version is still installed.
 +[^2]: Snap packages are automatically updated. Homebrew requires advanced configuration.
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..5d99d628cf46bbaa9c67ffde5be7e686044a5ae8
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,120 @@@
++---
++title: PageRef
++description: Returns the `pageRef` property of the given menu entry.
++categories: []
++keywords: []
++action:
++  related:
++    - /methods/menu-entry/URL
++  returnType: string
++  signatures: [MENUENTRY.PageRef]
++toc: true
++---
++
++The use case for this method is rare.
++
++In almost also scenarios you should use the [`URL`] method instead.
++
++## Explanation
++
++If you specify a `pageRef` property when [defining a menu entry] in your site configuration, Hugo looks for a matching page when rendering the entry.
++
++If a matching page is found:
++
++- The [`URL`] method returns the page's relative permalink
++- The [`Page`] method returns the corresponding `Page` object
++- The [`HasMenuCurrent`] and [`IsMenuCurrent`] methods on a `Page` object return the expected values
++
++If a matching page is not found:
++
++- The [`URL`] method returns the entry's `url` property if set, else an empty string
++- The [`Page`] method returns nil
++- The [`HasMenuCurrent`] and [`IsMenuCurrent`] methods on a `Page` object return `false`
++
++{{% note %}}
++In almost also scenarios you should use the [`URL`] method instead.
++
++[`URL`]: /methods/menu-entry/url/
++{{% /note %}}
++
++[defining a menu entry]: /content-management/menus/#define-in-site-configuration
++[`Page`]: /methods/menu-entry/page/
++[`URL`]: /methods/menu-entry/url/
++[`IsMenuCurrent`]: /methods/page/ismenucurrent/
++[`HasMenuCurrent`]: /methods/page/hasmenucurrent/
++[`RelPermalink`]: /methods/page/relpermalink/
++
++## Example
++
++This example is contrived.
++
++{{% note %}}
++In almost also scenarios you should use the [`URL`] method instead.
++
++[`URL`]: /methods/menu-entry/url/
++{{% /note %}}
++
++
++Consider this content structure:
++
++```text
++content/
++├── products.md
++└── _index.md
++```
++
++And this menu definition:
++
++{{< code-toggle file=hugo >}}
++[[menus.main]]
++name = 'Products'
++pageRef = '/products'
++weight = 10
++[[menus.main]]
++name = 'Services'
++pageRef = '/services'
++weight = 20
++{{< /code-toggle >}}
++
++With this template code:
++
++{{< code file=layouts/partials/menu.html >}}
++<ul>
++  {{ range .Site.Menus.main }}
++    <li><a href="{{ .URL }}">{{ .Name }}</a></li>
++  {{ end }}
++</ul>
++{{< /code >}}
++
++Hugo render this HTML:
++
++```html
++<ul>
++  <li><a href="/products/">Products</a></li>
++  <li><a href="">Services</a></li>
++</ul>
++```
++
++In the above note that the `href` attribute of the second `anchor` element is blank because Hugo was unable to find the "services" page.
++
++With this template code:
++
++
++{{< code file=layouts/partials/menu.html >}}
++<ul>
++  {{ range .Site.Menus.main }}
++    <li><a href="{{ or .URL .PageRef }}">{{ .Name }}</a></li>
++  {{ end }}
++</ul>
++{{< /code >}}
++
++Hugo renders this HTML:
++
++```html
++<ul>
++  <li><a href="/products/">Products</a></li>
++  <li><a href="/services">Services</a></li>
++</ul>
++```
++
++In the above note that Hugo populates the `href` attribute of the second `anchor` element with the `pageRef` property as defined in the site configuration because the template code falls back to the `PageRef` method.
index fbfce062a53cef03e780361221759de257c694a2,0000000000000000000000000000000000000000..da3d584d17206395eace2f7fa986488c2c5a87ac
mode 100644,000000..100644
--- /dev/null
@@@ -1,39 -1,0 +1,39 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +In this site configuration we enable rendering of [emoji shortcodes], and add emoji shortcodes before (pre) and after (post) each menu entry:
 +
 +{{< code-toggle file=hugo >}}
 +enableEmoji = true
 +
 +[[menus.main]]
 +name = 'About'
 +pageRef = '/about'
 +post = ':point_left:'
 +pre = ':point_right:'
 +weight = 10
 +
 +[[menus.main]]
 +name = 'Contact'
 +pageRef = '/contact'
 +post = ':arrow_left:'
 +pre = ':arrow_right:'
 +weight = 20
 +{{< /code-toggle >}}
 +
 +To render the menu:
 +
 +```go-html-template
 +<ul>
 +  {{ range .Site.Menus.main }}
 +    <li>
 +      {{ .Pre | markdownify }}
 +      <a href="{{ .URL }}">{{ .Name }}</a>
 +      {{ .Post | markdownify }}
 +    </li>
 +  {{ end }}
 +</ul>
 +```
 +
 +[emoji shortcodes]: /quick-reference/emojis/
index 3bf36d9aaa22033df272921e68bee30ab052d3e6,0000000000000000000000000000000000000000..da5cf2ca3d1f9ecf13afd5bda450fa07c3e99dea
mode 100644,000000..100644
--- /dev/null
@@@ -1,87 -1,0 +1,85 @@@
- {{< new-in 0.109.0 >}}
 +---
 +title: Ancestors
 +description: Returns a collection of Page objects, one for each ancestor section of the given page. 
 +categories: []
 +keywords: []
 +action:
 +  related:
 +    - methods/page/CurrentSection
 +    - methods/page/FirstSection
 +    - methods/page/InSection
 +    - methods/page/IsAncestor
 +    - methods/page/IsDescendant
 +    - methods/page/Parent
 +    - methods/page/Sections
 +  returnType: page.Pages
 +  signatures: [PAGE.Ancestors]
 +---
 +
 +{{% include "methods/page/_common/definition-of-section.md" %}}
 +
 +With this content structure:
 +
 +```text
 +content/
 +├── auctions/
 +│   ├── 2023-11/
 +│   │   ├── _index.md     <-- front matter: weight = 202311
 +│   │   ├── auction-1.md
 +│   │   └── auction-2.md
 +│   ├── 2023-12/
 +│   │   ├── _index.md     <-- front matter: weight = 202312
 +│   │   ├── auction-3.md
 +│   │   └── auction-4.md
 +│   ├── _index.md         <-- front matter: weight = 30
 +│   ├── bidding.md
 +│   └── payment.md
 +├── books/
 +│   ├── _index.md         <-- front matter: weight = 10
 +│   ├── book-1.md
 +│   └── book-2.md
 +├── films/
 +│   ├── _index.md         <-- front matter: weight = 20
 +│   ├── film-1.md
 +│   └── film-2.md
 +└── _index.md
 +```
 +
 +And this template:
 +
 +```go-html-template
 +{{ range .Ancestors }}
 +  <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
 +{{ end }}
 +```
 +
 +On the November 2023 auctions page, Hugo renders:
 +
 +```html
 +<a href="/auctions/2023-11/">Auctions in November 2023</a>
 +<a href="/auctions/">Auctions</a>
 +<a href="/">Home</a>
 +```
 +
 +In the example above, notice that Hugo orders the ancestors from closest to furthest. This makes breadcrumb navigation simple:
 +
 +```go-html-template
 +<nav aria-label="breadcrumb" class="breadcrumb">
 +  <ol>
 +    {{ range .Ancestors.Reverse }}
 +      <li>
 +        <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
 +      </li>
 +    {{ end }}
 +    <li class="active">
 +      <a aria-current="page" href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
 +    </li>
 +  </ol>
 +</nav>
 +```
 +
 +With some CSS, the code above renders something like this, where each breadcrumb links to its page:
 +
 +```text
 +Home > Auctions > Auctions in November 2023 > Auction 1
 +```
index c54a77371e87a8315f1de8495b9e318057b33e9d,0000000000000000000000000000000000000000..a05916d79d901b9f16e649aaab78ed63f9b7f5f1
mode 100644,000000..100644
--- /dev/null
@@@ -1,156 -1,0 +1,157 @@@
 +---
 +title: GitInfo
 +description: Returns Git information related to the last commit of the given page.
 +categories: []
 +keywords: []
 +action:
 +  related:
 +    - methods/page/CodeOwners
 +  returnType: source.GitInfo
 +  signatures: [PAGE.GitInfo]
 +toc: true
 +---
 +
 +The `GitInfo` method on a `Page` object returns an object with additional methods.
 +
 +{{% note %}}
 +Hugo's Git integration is performant, but may increase build times on large sites.
 +{{% /note %}}
 +
 +## Prerequisites
 +
 +Install [Git], create a repository, and commit your project files.
 +
 +You must also allow Hugo to access your repository. In your site configuration:
 +
 +{{< code-toggle file=hugo >}}
 +enableGitInfo = true
 +{{< /code-toggle >}}
 +
 +Alternatively, use the command line flag when building your site:
 +
 +```sh
 +hugo --enableGitInfo
 +```
 +
 +{{% note %}}
 +When you set `enableGitInfo` to `true`, or enable the feature with the command line flag, the last modification date for each content page will be the Author Date of the last commit for that file.
 +
 +This is configurable. See&nbsp;[details].
 +
 +[details]: /getting-started/configuration/#configure-dates
 +{{% /note %}}
 +
 +## Methods
 +
 +###### AbbreviatedHash
 +
 +(`string`) The abbreviated commit hash.
 +
 +```go-html-template
 +{{ with .GitInfo }}
 +  {{ .AbbreviatedHash }} → aab9ec0b3
 +{{ end }}
 +```
 +
 +###### AuthorDate
 +
 +(`time.Time`) The author date.
 +
 +```go-html-template
 +{{ with .GitInfo }}
 +  {{ .AuthorDate.Format "2006-01-02" }} → 2023-10-09
 +{{ end }}
 +```
 +
 +###### AuthorEmail
 +
 +(`string`) The author's email address, respecting [gitmailmap].
 +
 +```go-html-template
 +{{ with .GitInfo }}
 +  {{ .AuthorEmail }} → jsmith@example.org
 +{{ end }}
 +```
 +
 +###### AuthorName
 +
 +(`string`) The author's name, respecting [gitmailmap].
 +
 +```go-html-template
 +{{ with .GitInfo }}
 +  {{ .AuthorName }} → John Smith
 +{{ end }}
 +```
 +
 +###### CommitDate
 +
 +(`time.Time`) The commit date.
 +
 +```go-html-template
 +{{ with .GitInfo }}
 +  {{ .CommitDate.Format "2006-01-02" }} → 2023-10-09
 +{{ end }}
 +```
 +
 +###### Hash
 +
 +(`string`) The commit hash.
 +
 +```go-html-template
 +{{ with .GitInfo }}
 +  {{ .Hash }} → aab9ec0b31ebac916a1468c4c9c305f2bebf78d4
 +{{ end }}
 +```
 +
 +###### Subject
 +
 +(`string`) The commit message subject.
 +
 +```go-html-template
 +{{ with .GitInfo }}
 +  {{ .Subject }} → Add tutorials
 +{{ end }}
 +```
 +
 +###### Body
 +
 +(`string`) The commit message body.
 +
 +```go-html-template
 +{{ with .GitInfo }}
 +  {{ .Body }} → - Two new pages added.
 +{{ end }}
 +```
 +
 +## Last modified date
 +
 +By default, when `enableGitInfo` is `true`, the `Lastmod` method on a `Page` object returns the Git AuthorDate of the last commit that included the file.
 +
 +You can change this behavior in your [site configuration].
 +
 +[git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
 +[gitmailmap]: https://git-scm.com/docs/gitmailmap
 +[site configuration]: /getting-started/configuration/#configure-front-matter
 +
 +## Hosting considerations
 +
 +When hosting your site in a CI/CD environment, the step that clones your project repository must perform a deep clone. If the clone is shallow, the Git information for a given file may not be accurate---it may reflect the most recent repository commit, not the commit that last modified the file.
 +
 +Some providers perform deep clones by default, others allow you to configure the clone depth, and some providers only perform shallow clones.
 +
 +Hosting service | Default clone depth | Configurable
 +:-- | :-- | :--
++AWS Amplify | Deep | N/A
 +Cloudflare Pages | Shallow | Yes [^CFP]
 +DigitalOcean App Platform | Deep | N/A
 +GitHub Pages | Shallow | Yes [^GHP]
 +GitLab Pages | Shallow | Yes [^GLP]
 +Netlify | Deep | N/A
 +Render | Shallow | No
 +Vercel | Shallow | No
 +
 +[^CFP]: To configure a Cloudflare Pages site for deep cloning, preface the site's normal Hugo build command with `git fetch --unshallow &&` (*e.g.*, `git fetch --unshallow && hugo`).
 +
 +[^GHP]: You can configure the GitHub Action to do a deep clone by specifying `fetch-depth: 0` in the applicable "checkout" step of your workflow file, as shown in the Hugo documentation's [example workflow file](/hosting-and-deployment/hosting-on-github/#procedure).
 +
 +[^GLP]: You can configure the GitLab Runner's clone depth [as explained in the GitLab documentation](https://docs.gitlab.com/ee/ci/large_repositories/#shallow-cloning); see also the Hugo documentation's [example workflow file](/hosting-and-deployment/hosting-on-gitlab/#configure-gitlab-cicd).
index a092f22c03ba46da14ea4b29d64a4c41d8cb41c3,0000000000000000000000000000000000000000..24ce462c923b3fef12f9f512d3b5f162cf31a8db
mode 100644,000000..100644
--- /dev/null
@@@ -1,31 -1,0 +1,35 @@@
 +---
 +title: HasMenuCurrent
 +description: Reports whether the given Page object matches the Page object associated with one of the child menu entries under the given menu entry in the given menu.
 +categories: []
 +keywords: []
 +action:
 +  related:
 +    - methods/page/IsMenuCurrent
 +  returnType: bool
 +  signatures: [PAGE.HasMenuCurrent MENU MENUENTRY]
 +aliases: [/functions/hasmenucurrent]
 +---
 +
 +If the `Page` object associated with the menu entry is a section, this method also returns `true` for any descendant of that section.
 +
 +```go-html-template
 +{{ $currentPage := . }}
 +{{ range site.Menus.main }}
 +  {{ if $currentPage.IsMenuCurrent .Menu . }}
 +    <a class="active" aria-current="page" href="{{ .URL }}">{{ .Name }}</a>
 +  {{ else if $currentPage.HasMenuCurrent .Menu . }}
 +    <a class="ancestor" aria-current="true" href="{{ .URL }}">{{ .Name }}</a>
 +  {{ else }}
 +    <a href="{{ .URL }}">{{ .Name }}</a>
 +  {{ end }}
 +{{ end }}
 +```
 +
 +See [menu templates] for a complete example.
 +
++{{% note %}}
++When using this method you must either define the menu entry in front matter, or specify a `pageRef` property when defining the menu entry in your site configuration.
++{{% /note %}}
++
 +[menu templates]: /templates/menu/#example
index 8a939b1a123b9ed13fe729b8b6ab4ed2d4f1257d,0000000000000000000000000000000000000000..a16be51eef65f5824225f19b57aa31be12a383c5
mode 100644,000000..100644
--- /dev/null
@@@ -1,29 -1,0 +1,33 @@@
 +---
 +title: IsMenuCurrent
 +description: Reports whether the given Page object matches the Page object associated with the given menu entry in the given menu.
 +categories: []
 +keywords: []
 +action:
 +  related:
 +    - methods/page/HasMenuCurrent
 +  returnType: bool
 +  signatures: [PAGE.IsMenuCurrent MENU MENUENTRY]
 +aliases: [/functions/ismenucurrent]
 +---
 +
 +```go-html-template
 +{{ $currentPage := . }}
 +{{ range site.Menus.main }}
 +  {{ if $currentPage.IsMenuCurrent .Menu . }}
 +    <a class="active" aria-current="page" href="{{ .URL }}">{{ .Name }}</a>
 +  {{ else if $currentPage.HasMenuCurrent .Menu . }}
 +    <a class="ancestor" aria-current="true" href="{{ .URL }}">{{ .Name }}</a>
 +  {{ else }}
 +    <a href="{{ .URL }}">{{ .Name }}</a>
 +  {{ end }}
 +{{ end }}
 +```
 +
 +See [menu templates] for a complete example.
 +
++{{% note %}}
++When using this method you must either define the menu entry in front matter, or specify a `pageRef` property when defining the menu entry in your site configuration.
++{{% /note %}}
++
 +[menu templates]: /templates/menu/#example
index a81fa71a38db9fee1125ca3133f24130e2776bac,0000000000000000000000000000000000000000..484c27fd5c694dda99a8ba6ec111066004466774
mode 100644,000000..100644
--- /dev/null
@@@ -1,123 -1,0 +1,126 @@@
 +---
 +title: Store
++linktitle: PAGE.Store
 +description: Returns a persistent "scratch pad" on the given page to store and manipulate data.
 +categories: []
 +keywords: []
 +action:
 +  related:
 +  - methods/page/scratch
++  - methods/site/store
++  - functions/hugo/store
 +  - functions/collections/NewScratch
 +  returnType: maps.Scratch
 +  signatures: [PAGE.Store]
 +toc: true
 +aliases: [/functions/store]
 +---
 +
 +The `Store` method on a `Page` object creates a persistent [scratch pad] to store and manipulate data. To create a locally scoped scratch pad that is not attached to a `Page` object, use the [`newScratch`] function.
 +
 +[`Scratch`]: /methods/page/scratch/
 +[`newScratch`]: /functions/collections/newscratch/
 +[scratch pad]: /getting-started/glossary/#scratch-pad
 +
 +## Methods
 +
 +###### Set
 +
 +Sets the value of a given key.
 +
 +```go-html-template
 +{{ .Store.Set "greeting" "Hello" }}
 +```
 +
 +###### Get
 +
 +Gets the value of a given key.
 +
 +```go-html-template
 +{{ .Store.Set "greeting" "Hello" }}
 +{{ .Store.Get "greeting" }} → Hello
 +```
 +
 +###### Add
 +
 +Adds a given value to existing value(s) of the given key.
 +
 +For single values, `Add` accepts values that support Go's `+` operator. If the first `Add` for a key is an array or slice, the following adds will be appended to that list.
 +
 +```go-html-template
 +{{ .Store.Set "greeting" "Hello" }}
 +{{ .Store.Add "greeting" "Welcome" }}
 +{{ .Store.Get "greeting" }} → HelloWelcome
 +```
 +
 +```go-html-template
 +{{ .Store.Set "total" 3 }}
 +{{ .Store.Add "total" 7 }}
 +{{ .Store.Get "total" }} → 10
 +```
 +
 +```go-html-template
 +{{ .Store.Set "greetings" (slice "Hello") }}
 +{{ .Store.Add "greetings" (slice "Welcome" "Cheers") }}
 +{{ .Store.Get "greetings" }} → [Hello Welcome Cheers]
 +```
 +
 +###### SetInMap
 +
 +Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to the given `key`.
 +
 +```go-html-template
 +{{ .Store.SetInMap "greetings" "english" "Hello" }}
 +{{ .Store.SetInMap "greetings" "french" "Bonjour" }}
 +{{ .Store.Get "greetings" }} → map[english:Hello french:Bonjour]
 +```
 +
 +###### DeleteInMap
 +
 +Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`.
 +
 +```go-html-template
 +{{ .Store.SetInMap "greetings" "english" "Hello" }}
 +{{ .Store.SetInMap "greetings" "french" "Bonjour" }}
 +{{ .Store.DeleteInMap "greetings" "english" }}
 +{{ .Store.Get "greetings" }} → map[french:Bonjour]
 +```
 +
 +###### GetSortedMapValues
 +
 +Returns an array of values from `key` sorted by `mapKey`.
 +
 +```go-html-template
 +{{ .Store.SetInMap "greetings" "english" "Hello" }}
 +{{ .Store.SetInMap "greetings" "french" "Bonjour" }}
 +{{ .Store.GetSortedMapValues "greetings" }} → [Hello Bonjour]
 +```
 +
 +###### Delete
 +
 +Removes the given key.
 +
 +```go-html-template
 +{{ .Store.Set "greeting" "Hello" }}
 +{{ .Store.Delete "greeting" }}
 +```
 +
 +## Determinate values
 +
 +The `Store` method is often used to set scratch pad values within a shortcode, a partial template called by a shortcode, or by a Markdown render hook. In all three cases, the scratch pad values are indeterminate until Hugo renders the page content.
 +
 +If you need to access a scratch pad value from a parent template, and the parent template has not yet rendered the page content, you can trigger content rendering by assigning the returned value to a [noop] variable:
 +
 +[noop]: /getting-started/glossary/#noop
 +
 +```go-html-template
 +{{ $noop := .Content }}
 +{{ .Store.Get "mykey" }}
 +```
 +
 +You can also trigger content rendering with the `ContentWithoutSummary`, `FuzzyWordCount`, `Len`, `Plain`, `PlainWords`, `ReadingTime`, `Summary`, `Truncated`, and `WordCount` methods. For example:
 +
 +```go-html-template
 +{{ $noop := .WordCount }}
 +{{ .Store.Get "mykey" }}
 +```
index 7dc60078939450a9bf83148ceda3b0bc4122fea8,0000000000000000000000000000000000000000..79e22b10dbebe022a03a60b4b0e70c64634ed628
mode 100644,000000..100644
--- /dev/null
@@@ -1,5 -1,0 +1,5 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +A _section_ is a top-level content directory, or any content directory with an&nbsp;_index.md&nbsp;file.
index 0d1436e11fbc9270bf379c8bd7a7c514d62b4197,0000000000000000000000000000000000000000..c71392c8fc99027fe38f9c639d81287f381ed89d
mode 100644,000000..100644
--- /dev/null
@@@ -1,60 -1,0 +1,60 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +Hugo determines the _next_ and _previous_ page by sorting the site's collection of regular pages according to this sorting hierarchy:
 +
 +Field|Precedence|Sort direction
 +:--|:--|:--
 +[`weight`]|1|descending
 +[`date`]|2|descending
 +[`linkTitle`]|3|descending
 +[`path`]|4|descending
 +
 +[`date`]: /methods/page/date/
 +[`weight`]: /methods/page/weight/
 +[`linkTitle`]: /methods/page/linktitle/
 +[`path`]: /methods/page/path/
 +
 +The sorted page collection used to determine the _next_ and _previous_ page is independent of other page collections, which may lead to unexpected behavior.
 +
 +For example, with this content structure:
 +
 +```text
 +content/
 +├── pages/
 +│   ├── _index.md
 +│   ├── page-1.md   <-- front matter: weight = 10
 +│   ├── page-2.md   <-- front matter: weight = 20
 +│   └── page-3.md   <-- front matter: weight = 30
 +└── _index.md
 +```
 +
 +And these templates:
 +
 +{{< code file=layouts/_default/list.html >}}
 +{{ range .Pages.ByWeight }}
 +  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
 +{{ end }}
 +{{< /code >}}
 +
 +{{< code file=layouts/_default/single.html >}}
 +{{ with .Prev }}
 +  <a href="{{ .RelPermalink }}">Previous</a>
 +{{ end }}
 +
 +{{ with .Next }}
 +  <a href="{{ .RelPermalink }}">Next</a>
 +{{ end }}
 +{{< /code >}}
 +
 +When you visit page-2:
 +
 +- The `Prev` method points to page-3
 +- The `Next` method points to page-1
 +
 +To reverse the meaning of _next_ and _previous_ you can change the sort direction in your [site configuration], or use the [`Next`] and [`Prev`] methods on a `Pages` object for more flexibility.
 +
 +[site configuration]: getting-started/configuration/#configure-page
 +[`Next`]: /methods/pages/prev
 +[`Prev`]: /methods/pages/prev
index 6c558b69edace2e1fab1a3ab3916e458e929e856,0000000000000000000000000000000000000000..f2126eaeed13490ecb7aa8bcf459da0d6774f17a
mode 100644,000000..100644
--- /dev/null
@@@ -1,78 -1,0 +1,78 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +Hugo determines the _next_ and _previous_ page by sorting the current section's regular pages according to this sorting hierarchy:
 +
 +Field|Precedence|Sort direction
 +:--|:--|:--
 +[`weight`]|1|descending
 +[`date`]|2|descending
 +[`linkTitle`]|3|descending
 +[`path`]|4|descending
 +
 +[`date`]: /methods/page/date/
 +[`weight`]: /methods/page/weight/
 +[`linkTitle`]: /methods/page/linktitle/
 +[`path`]: /methods/page/path/
 +
 +The sorted page collection used to determine the _next_ and _previous_ page is independent of other page collections, which may lead to unexpected behavior.
 +
 +For example, with this content structure:
 +
 +```text
 +content/
 +├── pages/
 +│   ├── _index.md
 +│   ├── page-1.md   <-- front matter: weight = 10
 +│   ├── page-2.md   <-- front matter: weight = 20
 +│   └── page-3.md   <-- front matter: weight = 30
 +└── _index.md
 +```
 +
 +And these templates:
 +
 +{{< code file=layouts/_default/list.html >}}
 +{{ range .Pages.ByWeight }}
 +  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
 +{{ end }}
 +{{< /code >}}
 +
 +{{< code file=layouts/_default/single.html >}}
 +{{ with .PrevInSection }}
 +  <a href="{{ .RelPermalink }}">Previous</a>
 +{{ end }}
 +
 +{{ with .NextInSection }}
 +  <a href="{{ .RelPermalink }}">Next</a>
 +{{ end }}
 +{{< /code >}}
 +
 +When you visit page-2:
 +
 +- The `PrevInSection` method points to page-3
 +- The `NextInSection` method points to page-1
 +
 +To reverse the meaning of _next_ and _previous_ you can change the sort direction in your [site configuration], or use the [`Next`] and [`Prev`] methods on a `Pages` object for more flexibility.
 +
 +[site configuration]: getting-started/configuration/#configure-page
 +[`Next`]: /methods/pages/prev
 +[`Prev`]: /methods/pages/prev
 +
 +## Example
 +
 +Code defensively by checking for page existence:
 +
 +```go-html-template
 +{{ with .PrevInSection }}
 +  <a href="{{ .RelPermalink }}">Previous</a>
 +{{ end }}
 +
 +{{ with .NextInSection }}
 +  <a href="{{ .RelPermalink }}">Next</a>
 +{{ end }}
 +```
 +
 +## Alternative
 +
 +Use the [`Next`] and [`Prev`] methods on a `Pages` object for more flexibility.
index d21211a3d8b3d900e18367ef232c6972534864dd,0000000000000000000000000000000000000000..df89447f73c1718aae72558a5e05cf027c762878
mode 100644,000000..100644
--- /dev/null
@@@ -1,10 -1,0 +1,10 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +Hugo generates one or more files per page when building a site. For example, when rendering home, [section], [taxonomy], and [term] pages, Hugo generates an HTML file and an RSS file. Both HTML and RSS are built-in _output formats_. Create multiple output formats, and control generation based on [page kind], or by enabling one or more output formats for one or more pages. See&nbsp;[details].
 +
 +[section]: /getting-started/glossary/#section
 +[taxonomy]: /getting-started/glossary/#taxonomy
 +[term]: /getting-started/glossary/#term
 +[page kind]: /getting-started/glossary/#page-kind
 +[details]: /templates/output-formats/
index 5e7111fe52bd3a7b7229de60742396c2c72703b3,0000000000000000000000000000000000000000..5390e7b46547f602df13032a78644f9127e84ae9
mode 100644,000000..100644
--- /dev/null
@@@ -1,27 -1,0 +1,27 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +Get IDENTIFIER
 +: (`any`) Returns the `OutputFormat` object with the given identifier.
 +
 +MediaType
 +: (`media.Type`) Returns the media type of the output format.
 +
 +MediaType.MainType
 +: (`string`) Returns the main type of the output format's media type.
 +
 +MediaType.SubType
 +: (`string`) Returns the subtype of the current format's media type.
 +
 +Name
 +: (`string`) Returns the output identifier of the output format.
 +
 +Permalink
 +: (`string`) Returns the permalink of the page generated by the current output format.
 +
 +Rel
 +: (`string`) Returns the `rel` value of the output format, either the default or as defined in the site configuration.
 +
 +RelPermalink
 +: (`string`) Returns the relative permalink of the page generated by the current output format.
index b2650cddefe9c083a851a64b5bb84c26588cda80,0000000000000000000000000000000000000000..92a97cdd512ecba7122f6eb5dd518a7518eeb974
mode 100644,000000..100644
--- /dev/null
@@@ -1,86 -1,0 +1,86 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +## Methods
 +
 +###### Set
 +
 +Sets the value of a given key.
 +
 +```go-html-template
 +{{ .Scratch.Set "greeting" "Hello" }}
 +```
 +
 +###### Get
 +
 +Gets the value of a given key.
 +
 +```go-html-template
 +{{ .Scratch.Set "greeting" "Hello" }}
 +{{ .Scratch.Get "greeting" }} → Hello
 +```
 +
 +###### Add
 +
 +Adds a given value to existing value(s) of the given key.
 +
 +For single values, `Add` accepts values that support Go's `+` operator. If the first `Add` for a key is an array or slice, the following adds will be appended to that list.
 +
 +```go-html-template
 +{{ .Scratch.Set "greeting" "Hello" }}
 +{{ .Scratch.Add "greeting" "Welcome" }}
 +{{ .Scratch.Get "greeting" }} → HelloWelcome
 +```
 +
 +```go-html-template
 +{{ .Scratch.Set "total" 3 }}
 +{{ .Scratch.Add "total" 7 }}
 +{{ .Scratch.Get "total" }} → 10
 +```
 +
 +```go-html-template
 +{{ .Scratch.Set "greetings" (slice "Hello") }}
 +{{ .Scratch.Add "greetings" (slice "Welcome" "Cheers") }}
 +{{ .Scratch.Get "greetings" }} → [Hello Welcome Cheers]
 +```
 +
 +###### SetInMap
 +
 +Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to the given `key`.
 +
 +```go-html-template
 +{{ .Scratch.SetInMap "greetings" "english" "Hello" }}
 +{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }}
 +{{ .Scratch.Get "greetings" }} → map[english:Hello french:Bonjour]
 +```
 +
 +###### DeleteInMap
 +
 +Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`.
 +
 +```go-html-template
 +{{ .Scratch.SetInMap "greetings" "english" "Hello" }}
 +{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }}
 +{{ .Scratch.DeleteInMap "greetings" "english" }}
 +{{ .Scratch.Get "greetings" }} → map[french:Bonjour]
 +```
 +
 +###### GetSortedMapValues
 +
 +Returns an array of values from `key` sorted by `mapKey`.
 +
 +```go-html-template
 +{{ .Scratch.SetInMap "greetings" "english" "Hello" }}
 +{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }}
 +{{ .Scratch.GetSortedMapValues "greetings" }} → [Hello Bonjour]
 +```
 +
 +###### Delete
 +
 +Removes the given key.
 +
 +```go-html-template
 +{{ .Scratch.Set "greeting" "Hello" }}
 +{{ .Scratch.Delete "greeting" }}
 +```
index bb5be82f6c340dd6a95f003fff04ff2bea432652,0000000000000000000000000000000000000000..e2997a1bd24d8ba4d4c5e3216ee7edf01c3e908b
mode 100644,000000..100644
--- /dev/null
@@@ -1,5 -1,0 +1,5 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +For the optional sort order, specify either `asc` for ascending order, or `desc` for descending order.
index e0d05de845cf6c9437c7d1f9e443c4e4ddf4b205,0000000000000000000000000000000000000000..5407839927a46f872a29286c06f60c20ab40adef
mode 100644,000000..100644
--- /dev/null
@@@ -1,72 -1,0 +1,72 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +Hugo determines the _next_ and _previous_ page by sorting the page collection according to this sorting hierarchy:
 +
 +Field|Precedence|Sort direction
 +:--|:--|:--
 +[`weight`]|1|descending
 +[`date`]|2|descending
 +[`linkTitle`]|3|descending
 +[`path`]|4|descending
 +
 +[`date`]: /methods/page/date/
 +[`weight`]: /methods/page/weight/
 +[`linkTitle`]: /methods/page/linktitle/
 +[`path`]: /methods/page/path/
 +
 +The sorted page collection used to determine the _next_ and _previous_ page is independent of other page collections, which may lead to unexpected behavior.
 +
 +For example, with this content structure:
 +
 +```text
 +content/
 +├── pages/
 +│   ├── _index.md
 +│   ├── page-1.md   <-- front matter: weight = 10
 +│   ├── page-2.md   <-- front matter: weight = 20
 +│   └── page-3.md   <-- front matter: weight = 30
 +└── _index.md
 +```
 +
 +And these templates:
 +
 +{{< code file=layouts/_default/list.html >}}
 +{{ range .Pages.ByWeight}}
 +  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
 +{{ end }}
 +{{< /code >}}
 +
 +{{< code file=layouts/_default/single.html >}}
 +{{ $pages := .CurrentSection.Pages.ByWeight }}
 +
 +{{ with $pages.Prev . }}
 +  <a href="{{ .RelPermalink }}">Previous</a>
 +{{ end }}
 +
 +{{ with $pages.Next . }}
 +  <a href="{{ .RelPermalink }}">Next</a>
 +{{ end }}
 +{{< /code >}}
 +
 +When you visit page-2:
 +
 +- The `Prev` method points to page-3
 +- The `Next` method points to page-1
 +
 +To reverse the meaning of _next_ and _previous_ you can chain the [`Reverse`] method to the page collection definition:
 +
 +{{< code file=layouts/_default/single.html >}}
 +{{ $pages := .CurrentSection.Pages.ByWeight.Reverse }}
 +
 +{{ with $pages.Prev . }}
 +  <a href="{{ .RelPermalink }}">Previous</a>
 +{{ end }}
 +
 +{{ with $pages.Next . }}
 +  <a href="{{ .RelPermalink }}">Next</a>
 +{{ end }}
 +{{< /code >}}
 +
 +[`Reverse`]: /methods/pages/reverse/
index 4ea4d1b8745e5fadbec5fc1732fc37e237396f11,0000000000000000000000000000000000000000..5df2963e39a58ea342cf6dcbd05ff3a809cedca0
mode 100644,000000..100644
--- /dev/null
@@@ -1,13 -1,0 +1,13 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +{{% note %}}
 +
 +Use this method with [global], [page], or [remote] resources.
 +
 +[global]: /getting-started/glossary/#global-resource
 +[page]: /getting-started/glossary/#page-resource
 +[remote]: /getting-started/glossary/#remote-resource
 +
 +{{% /note %}}
index b12a21d3a607e7d8d87331d03e8db14acd6653b5,0000000000000000000000000000000000000000..395217328e2831cfeb6e4b1019b4ce007aae984e
mode 100644,000000..100644
--- /dev/null
@@@ -1,36 -1,0 +1,36 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +## Process specification
 +
 +The process specification is a space-delimited, case-insensitive list of one or more of the following in any sequence:
 +
 +action
 +: Applicable to the [`Process`](/methods/resource/process) method only. Specify zero or one of `crop`, `fill`, `fit`, or `resize`. If you specify an action you must also provide dimensions.
 +
 +dimensions
 +: Provide width _or_ height when using the [`Resize`](/methods/resource/resize) method, else provide both width _and_ height. See&nbsp;[details](/content-management/image-processing/#dimensions).
 +
 +anchor
 +: Use with the [`Crop`](/methods/resource/crop) and [`Fill`](/methods/resource/fill) methods. Specify zero or one of `TopLeft`, `Top`, `TopRight`, `Left`, `Center`, `Right`, `BottomLeft`, `Bottom`, `BottomRight`, or `Smart`. Default is `Smart`. See&nbsp;[details](/content-management/image-processing/#anchor).
 +
 +rotation
 +: Typically specify zero or one of `r90`, `r180`, or `r270`. Also supports arbitrary rotation angles. See&nbsp;[details](/content-management/image-processing/#rotation).
 +
 +target format
 +: Specify zero or one of `gif`, `jpeg`, `png`, `tiff`, or `webp`. See&nbsp;[details](/content-management/image-processing/#target-format).
 +
 +quality
 +: Applicable to JPEG and WebP images. Optionally specify `qN` where `N` is an integer in the range [0, 100]. Default is `75`. See&nbsp;[details](/content-management/image-processing/#quality).
 +
 +hint
 +: Applicable to WebP images and equivalent to the `-preset` flag for the [`cwebp`] encoder. Specify zero or one of `drawing`, `icon`, `photo`, `picture`, or `text`. Default is `photo`. See&nbsp;[details](/content-management/image-processing/#hint).
 +
 +[`cwebp`]: https://developers.google.com/speed/webp/docs/cwebp
 +
 +background color
 +: When converting a PNG or WebP with transparency to a format that does not support transparency, optionally specify a background color using a 3-digit or a 6-digit hexadecimal color code. Default is `#ffffff` (white). See&nbsp;[details](/content-management/image-processing/#background-color).
 +
 +resampling filter
 +: Typically specify zero or one of `Box`, `Lanczos`, `CatmullRom`, `MitchellNetravali`, `Linear`, or `NearestNeighbor`. Other resampling filters are available. See&nbsp;[details](/content-management/image-processing/#resampling-filter).
index 6f3580d0fcfa433b4a454e22b98bcb644e2c4bc1,0000000000000000000000000000000000000000..41393fa222c8cc0389df623f297f167d3b5072ce
mode 100644,000000..100644
--- /dev/null
@@@ -1,50 -1,0 +1,54 @@@
 +---
 +title: Ordinal
 +description: Returns the zero-based ordinal of the shortcode in relation to its parent.
 +categories: []
 +keywords: []
 +action:
 +  related: []
 +  returnType: int
 +  signatures: [SHORTCODE.Ordinal]
 +---
 +
 +The `Ordinal` method returns the zero-based ordinal of the shortcode in relation to its parent. If the parent is the page itself, the ordinal represents the position of this shortcode in the page content.
 +
++{{% note %}}
++Hugo  increments the ordinal with each shortcode call, regardless of the specific shortcode type. This means that the ordinal value is tracked sequentially across all shortcodes within a given page.
++{{% /note %}}
++
 +This method is useful for, among other things, assigning unique element IDs when a shortcode is called two or more times from the same page. For example:
 +
 +{{< code file=content/about.md lang=md >}}
 +{{</* img src="images/a.jpg" */>}}
 +
 +{{</* img src="images/b.jpg" */>}}
 +{{< /code >}}
 +
 +This shortcode performs error checking, then renders an HTML `img` element with a unique `id` attribute:
 +
 +{{< code file=layouts/shortcodes/img.html  >}}
 +{{ $src := "" }}
 +{{ with .Get "src" }}
 +  {{ $src = . }}
 +  {{ with resources.Get $src }}
 +    {{ $id := printf "img-%03d" $.Ordinal }}
 +    <img id="{{ $id }}" src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt="">
 +  {{ else }}
 +    {{ errorf "The %q shortcode was unable to find %s. See %s" $.Name $src $.Position }}
 +  {{ end }}
 +{{ else }}
 +  {{ errorf "The %q shortcode requires a 'src' argument. See %s" .Name .Position }}
 +{{ end }}
 +{{< /code >}}
 +
 +Hugo renders the page to:
 +
 +```html
 +<img id="img-000" src="/images/a.jpg" width="600" height="400" alt="">
 +<img id="img-001" src="/images/b.jpg" width="600" height="400" alt="">
 +```
 +
 +{{% note %}}
 +In the shortcode template above, the [`with`] statement is used to create conditional blocks. Remember that the `with` statement binds context (the dot) to its expression. Inside of a `with` block, preface shortcode method calls with a `$` to access the top level context passed into the template.
 +
 +[`with`]: /functions/go-template/with/
 +{{% /note %}}
index fcfc99d53860d5782c24fcb0e7b80a192044f0cb,0000000000000000000000000000000000000000..811d9f9eebcfe6312947efe51644a09fa9b19298
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,34 @@@
- The `Scratch` method within a shortcode creates a [scratch pad] to store and manipulate data. The scratch pad is scoped to the shortcode, and is reset on server rebuilds.
 +---
 +title: Scratch
 +description: Returns a "scratch pad" scoped to the shortcode to store and manipulate data. 
 +categories: []
 +keywords: []
 +action:
 +  related:
 +    - functions/collections/NewScratch
 +  returnType: maps.Scratch
 +  signatures: [SHORTCODE.Scratch]
 +---
 +
++{{% deprecated-in 0.139.0 %}}
++Use the [`SHORTCODE.Store`] method instead.
++
++This is a soft deprecation. This method will be removed in a future release, but the removal date has not been established. Although Hugo will not emit a warning if you continue to use this method, you should begin using `SHORTCODE.Store` as soon as possible.
++
++Beginning with v0.139.0 the `SHORTCODE.Scratch` method is aliased to `SHORTCODE.Store`.
++
++[`SHORTCODE.Store`]: /methods/shortcode/store/
++{{% /deprecated-in %}}
++
++The `Scratch` method within a shortcode creates a [scratch pad] to store and manipulate data. The scratch pad is scoped to the shortcode.
 +
 +{{% note %}}
 +With the introduction of the [`newScratch`] function, and the ability to [assign values to template variables] after initialization, the `Scratch` method within a shortcode is obsolete.
 +
 +[assign values to template variables]: https://go.dev/doc/go1.11#text/template
 +[`newScratch`]: /functions/collections/newscratch/
 +{{% /note %}}
 +
 +[scratch pad]: /getting-started/glossary/#scratch-pad
 +
 +{{% include "methods/page/_common/scratch-methods.md" %}}
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..f7be8c8d0a407bd19dbf67b894021011db6c6c1c
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,29 @@@
++---
++title: Store
++description: Returns a "Store pad" scoped to the shortcode to store and manipulate data. 
++categories: []
++keywords: []
++action:
++  related:
++    - functions/collections/NewScratch
++    - methods/page/Store
++    - methods/site/Store
++    - functions/hugo/Store
++  returnType: maps.Store
++  signatures: [SHORTCODE.Store]
++---
++
++{{< new-in 0.139.0 >}}
++
++The `Store` method within a shortcode creates a [scratch pad] to store and manipulate data. The scratch pad is scoped to the shortcode.
++
++{{% note %}}
++With the introduction of the [`newScratch`] function, and the ability to [assign values to template variables] after initialization, the `Store` method within a shortcode is mostly obsolete.
++
++[assign values to template variables]: https://go.dev/doc/go1.11#text/template
++[`newScratch`]: /functions/collections/newScratch/
++{{% /note %}}
++
++[Store pad]: /getting-started/glossary/#scratch-pad
++
++{{% include "methods/page/_common/scratch-methods.md" %}}
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..1c54007ab2b0d6519fff8c4c2c6de8c341982b2d
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,126 @@@
++---
++title: Store
++linktitle: site.Store
++description: Returns a persistent "scratch pad" on the given site to store and manipulate data.
++categories: []
++keywords: []
++action:
++  related:
++  - methods/page/store
++  - functions/hugo/store
++  - functions/collections/NewScratch
++  returnType: maps.Scratch
++  signatures: [site.Store]
++toc: true
++---
++
++{{< new-in 0.139.0 >}}
++
++The `Store` method on a `Site` object creates a persistent [scratch pad] to store and manipulate data. To create a locally scoped scratch pad that is not attached to a `Site` object, use the [`newScratch`] function.
++
++[`Scratch`]: /methods/site/scratch/
++[`newScratch`]: /functions/collections/newscratch/
++[scratch pad]: /getting-started/glossary/#scratch-pad
++
++## Methods
++
++###### Set
++
++Sets the value of a given key.
++
++```go-html-template
++{{ site.Store.Set "greeting" "Hello" }}
++```
++
++###### Get
++
++Gets the value of a given key.
++
++```go-html-template
++{{ site.Store.Set "greeting" "Hello" }}
++{{ site.Store.Get "greeting" }} → Hello
++```
++
++###### Add
++
++Adds a given value to existing value(s) of the given key.
++
++For single values, `Add` accepts values that support Go's `+` operator. If the first `Add` for a key is an array or slice, the following adds will be appended to that list.
++
++```go-html-template
++{{ site.Store.Set "greeting" "Hello" }}
++{{ site.Store.Add "greeting" "Welcome" }}
++{{ site.Store.Get "greeting" }} → HelloWelcome
++```
++
++```go-html-template
++{{ site.Store.Set "total" 3 }}
++{{ site.Store.Add "total" 7 }}
++{{ site.Store.Get "total" }} → 10
++```
++
++```go-html-template
++{{ site.Store.Set "greetings" (slice "Hello") }}
++{{ site.Store.Add "greetings" (slice "Welcome" "Cheers") }}
++{{ site.Store.Get "greetings" }} → [Hello Welcome Cheers]
++```
++
++###### SetInMap
++
++Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to the given `key`.
++
++```go-html-template
++{{ site.Store.SetInMap "greetings" "english" "Hello" }}
++{{ site.Store.SetInMap "greetings" "french" "Bonjour" }}
++{{ site.Store.Get "greetings" }} → map[english:Hello french:Bonjour]
++```
++
++###### DeleteInMap
++
++Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`.
++
++```go-html-template
++{{ site.Store.SetInMap "greetings" "english" "Hello" }}
++{{ site.Store.SetInMap "greetings" "french" "Bonjour" }}
++{{ site.Store.DeleteInMap "greetings" "english" }}
++{{ site.Store.Get "greetings" }} → map[french:Bonjour]
++```
++
++###### GetSortedMapValues
++
++Returns an array of values from `key` sorted by `mapKey`.
++
++```go-html-template
++{{ site.Store.SetInMap "greetings" "english" "Hello" }}
++{{ site.Store.SetInMap "greetings" "french" "Bonjour" }}
++{{ site.Store.GetSortedMapValues "greetings" }} → [Hello Bonjour]
++```
++
++###### Delete
++
++Removes the given key.
++
++```go-html-template
++{{ site.Store.Set "greeting" "Hello" }}
++{{ site.Store.Delete "greeting" }}
++```
++
++## Determinate values
++
++The `Store` method is often used to set scratch pad values within a shortcode, a partial template called by a shortcode, or by a Markdown render hook. In all three cases, the scratch pad values are indeterminate until Hugo renders the page content.
++
++If you need to access a scratch pad value from a parent template, and the parent template has not yet rendered the page content, you can trigger content rendering by assigning the returned value to a [noop] variable:
++
++[noop]: /getting-started/glossary/#noop
++
++```go-html-template
++{{ $noop := .Content }}
++{{ site.Store.Get "mykey" }}
++```
++
++You can also trigger content rendering with the `ContentWithoutSummary`, `FuzzyWordCount`, `Len`, `Plain`, `PlainWords`, `ReadingTime`, `Summary`, `Truncated`, and `WordCount` methods. For example:
++
++```go-html-template
++{{ $noop := .WordCount }}
++{{ site.Store.Get "mykey" }}
++```
index ef78c8eaeb1fa6f5ac4a15d053233824a45f9c87,0000000000000000000000000000000000000000..928ec085aa61a0070186538791ff6163a40ddfa3
mode 100644,000000..100644
--- /dev/null
@@@ -1,68 -1,0 +1,68 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +Before we can use a `Taxonomy` method, we need to capture a `Taxonomy` object.
 +
 +## Capture a Taxonomy object
 +
 +Consider this site configuration:
 +
 +{{< code-toggle file=hugo >}}
 +[taxonomies]
 +genre = 'genres'
 +author = 'authors'
 +{{< /code-toggle >}}
 +
 +And this content structure:
 +
 +```text
 +content/
 +├── books/
 +│   ├── and-then-there-were-none.md --> genres: suspense
 +│   ├── death-on-the-nile.md        --> genres: suspense
 +│   └── jamaica-inn.md              --> genres: suspense, romance
 +│   └── pride-and-prejudice.md      --> genres: romance
 +└── _index.md
 +```
 +
 +To capture the "genres" `Taxonomy` object from within any template, use the [`Taxonomies`] method on a `Site` object.
 +
 +```go-html-template
 +{{ $taxonomyObject := .Site.Taxonomies.genres }}
 +```
 +
 +To capture the "genres" `Taxonomy` object when rendering its page with a taxonomy template, use the [`Terms`] method on the page's [`Data`] object:
 +
 +{{< code file=layouts/_default/taxonomy.html  >}}
 +{{ $taxonomyObject := .Data.Terms }}
 +{{< /code >}}
 +
 +To inspect the data structure:
 +
 +```go-html-template
 +<pre>{{ debug.Dump $taxonomyObject }}</pre>
 +```
 +
 +Although the [`Alphabetical`] and [`ByCount`] methods provide a better data structure for ranging through the taxonomy, you can render the weighted pages by term directly from the `Taxonomy` object:
 +
 +```go-html-template
 +{{ range $term, $weightedPages := $taxonomyObject }}
 +  <h2><a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a></h2>
 +  <ul>
 +    {{ range $weightedPages }}
 +      <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
 +    {{ end }}
 +  </ul>
 +{{ end }}
 +```
 +
 +In the example above, the first anchor element is a link to the term page.
 +
 +
 +[`Alphabetical`]: /methods/taxonomy/alphabetical/
 +[`ByCount`]: /methods/taxonomy/bycount/
 +
 +[`data`]: /methods/page/data/
 +[`terms`]: /methods/page/data/#in-a-taxonomy-template
 +[`taxonomies`]: /methods/site/taxonomies/
index 7201ad3188a6d30ed741c9ea672fa8b61a228aeb,0000000000000000000000000000000000000000..a23c26ef54dfad0939babf04402239acd39b410e
mode 100644,000000..100644
--- /dev/null
@@@ -1,25 -1,0 +1,25 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +An ordered taxonomy is a slice, where each element is an object that contains the term and a slice of its weighted pages.
 +
 +Each element of the slice provides these methods:
 +
 +Count
 +: (`int`) Returns the number of pages to which the term is assigned.
 +
 +Page
 +: (`page.Page`) Returns the term's `Page` object, useful for linking to the term page.
 +
 +Pages
 +: (`page.Pages`) Returns a `Pages` object containing the `Page` objects to which the term is assigned, sorted by [taxonomic weight]. To sort or group, use any of the [methods] available to the `Pages` object. For example, sort by the last modification date.
 +
 +Term
 +: (`string`) Returns the term name.
 +
 +WeightedPages
 +: (`page.WeightedPages`) Returns a slice of weighted pages to which the term is assigned, sorted by [taxonomic weight]. The `Pages` method above is more flexible, allowing you to sort and group.
 +
 +[methods]: /methods/pages/
 +[taxonomic weight]: /getting-started/glossary/#taxonomic-weight
index de1316cbab7cc63b853bf2a43336bb3d096b7bd2,0000000000000000000000000000000000000000..1d467aeefe372a06921365d0e0036f2b3b482339
mode 100644,000000..100644
--- /dev/null
@@@ -1,42 -1,0 +1,42 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +## PageInner details
 +
 +{{< new-in 0.125.0 >}}
 +
 +The primary use case for `PageInner` is to resolve links and [page resources] relative to an included `Page`. For example, create an "include" shortcode to compose a page from multiple content files, while preserving a global context for footnotes and the table of contents:
 +
 +{{< code file=layouts/shortcodes/include.html >}}
 +{{ with site.GetPage (.Get 0) }}
 +  {{ .RenderShortcodes }}
 +{{ end }}
 +{{< /code >}}
 +
 +Then call the shortcode in your Markdown:
 +
 +{{< code file=content/posts/p1.md >}}
 +{{%/* include "/posts/p2" */%}}
 +{{< /code >}}
 +
 +Any render hook triggered while rendering `/posts/p2` will get:
 +
 +- `/posts/p1` when calling `Page`
 +- `/posts/p2` when calling `PageInner`
 +
 +`PageInner` falls back to the value of `Page` if not relevant, and always returns a value.
 +
 +{{% note %}}
 +The `PageInner` method is only relevant for shortcodes that invoke the [`RenderShortcodes`] method, and you must call the shortcode using the `{{%/*..*/%}}` notation.
 +
 +[`RenderShortcodes`]: /methods/page/rendershortcodes/
 +{{% /note %}}
 +
 +As a practical example, Hugo's embedded link and image render hooks use the `PageInner` method to resolve markdown link and image destinations. See the source code for each:
 +
 +- [Embedded link render hook]({{% eturl render-link %}})
 +- [Embedded image render hook]({{% eturl render-image %}})
 +
 +[`RenderShortcodes`]: /methods/page/rendershortcodes/
 +[page resources]: /getting-started/glossary/#page-resource
index d322cb88dc7de66e797179588c5443e53984fe80,0000000000000000000000000000000000000000..f43df06c7c6070b3c09040a5ecaac2aab572d88c
mode 100755,000000..100755
--- /dev/null
@@@ -1,152 -1,0 +1,152 @@@
-   {{- .Inner | safeHTML }}
 +---
 +title: Code block render hooks
 +linkTitle: Code blocks
 +description: Create a code block render hook to override the rendering of Markdown code blocks to HTML.
 +categories: [render hooks]
 +keywords: []
 +menu:
 +  docs:
 +    parent: render-hooks
 +    weight: 40
 +weight: 40
 +toc: true
 +---
 +
 +## Markdown
 +
 +This Markdown example contains a fenced code block:
 +
 +{{< code file=content/example.md lang=text >}}
 +```bash {class="my-class" id="my-codeblock" lineNos=inline tabWidth=2}
 +declare a=1
 +echo "$a"
 +exit
 +```
 +{{< /code >}}
 +
 +A fenced code block consists of:
 +
 +- A leading [code fence]
 +- An optional [info string]
 +- A code sample
 +- A trailing code fence
 +
 +[code fence]: https://spec.commonmark.org/0.31.2/#code-fence
 +[info string]: https://spec.commonmark.org/0.31.2/#info-string
 +
 +In the previous example, the info string contains:
 +
 +- The language of the code sample (the first word)
 +- An optional space-delimited or comma-delimited list of attributes (everything within braces)
 +
 +The attributes in the info string can be generic attributes or highlighting options.
 +
 +In the example above, the _generic attributes_ are `class` and `id`. In the absence of special handling within a code block render hook, Hugo adds each generic attribute to the HTML element surrounding the rendered code block. Consistent with its content security model, Hugo removes HTML event attributes such as `onclick` and `onmouseover`. Generic attributes are typically global HTML attributes, but you may include custom attributes as well.
 +
 +In the example above, the _highlighting options_ are `lineNos` and `tabWidth`. Hugo uses the [Chroma] syntax highlighter to render the code sample. You can control the appearance of the rendered code by specifying one or more [highlighting options].
 +
 +[Chroma]: https://github.com/alecthomas/chroma/
 +[highlighting options]: /functions/transform/highlight/#options
 +
 +{{% note %}}
 +Although `style` is a global HTML attribute, when used in an info string it is a highlighting option.
 +{{% /note %}}
 +
 +## Context
 +
 +Code block render hook templates receive the following [context]:
 +
 +[context]: /getting-started/glossary/#context
 +
 +###### Attributes
 +
 +(`map`) The generic attributes from the info string.
 +
 +###### Inner
 +
 +(`string`) The content between the leading and trailing code fences, excluding the info string.
 +
 +###### Options
 +
 +(`map`) The highlighting options from the info string.
 +
 +###### Ordinal
 +
 +(`int`) The zero-based ordinal of the code block on the page.
 +
 +###### Page
 +
 +(`page`) A reference to the current page.
 +
 +###### PageInner
 +
 +{{< new-in 0.125.0 >}}
 +
 +(`page`) A reference to a page nested via the [`RenderShortcodes`] method. [See details](#pageinner-details).
 +
 +[`RenderShortcodes`]: /methods/page/rendershortcodes
 +
 +###### Position
 +
 +(`text.Position`) The position of the code block within the page content.
 +
 +###### Type
 +
 +(`string`) The first word of the info string, typically the code language.
 +
 +## Examples
 +
 +In its default configuration, Hugo renders fenced code blocks by passing the code sample through the Chroma syntax highlighter and wrapping the result. To create a render hook that does the same thing:
 +
 +[CommonMark specification]: https://spec.commonmark.org/current/
 +
 +{{< code file=layouts/_default/_markup/render-codeblock.html copy=true >}}
 +{{ $result := transform.HighlightCodeBlock . }}
 +{{ $result.Wrapped }}
 +{{< /code >}}
 +
 +Although you can use one template with conditional logic to control the behavior on a per-language basis, you can also create language-specific templates.
 +
 +```text
 +layouts/
 +└── _default/
 +    └── _markup/
 +        ├── render-codeblock-mermaid.html
 +        ├── render-codeblock-python.html
 +        └── render-codeblock.html
 +```
 +
 +For example, to create a code block render hook to render [Mermaid] diagrams:
 +
 +[Mermaid]: https://mermaid.js.org/
 +
 +{{< code file=layouts/_default/_markup/render-codeblock-mermaid.html copy=true >}}
 +<pre class="mermaid">
++  {{- .Inner | htmlEscape | safeHTML }}
 +</pre>
 +{{ .Page.Store.Set "hasMermaid" true }}
 +{{< /code >}}
 +
 +Then include this snippet at the bottom of the your base template:
 +
 +{{< code file=layouts/_default/baseof.html copy=true >}}
 +{{ if .Store.Get "hasMermaid" }}
 +  <script type="module">
 +    import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
 +    mermaid.initialize({ startOnLoad: true });
 +  </script>
 +{{ end }}
 +{{< /code >}}
 +
 +See the [diagrams] page for details.
 +
 +[diagrams]: /content-management/diagrams/#mermaid-diagrams
 +
 +## Embedded
 +
 +Hugo includes an [embedded code block render hook] to render [GoAT diagrams].
 +
 +[embedded code block render hook]: {{% eturl render-codeblock-goat %}}
 +[GoAT diagrams]: /content-management/diagrams/#goat-diagrams-ascii
 +
 +{{% include "/render-hooks/_common/pageinner.md" %}}
index 89cc095f5f126ba48756cc1d72b8bfed4169d88e,0000000000000000000000000000000000000000..24bbee96ead1cee2261d61493d34caf6ac52b08c
mode 100644,000000..100644
--- /dev/null
@@@ -1,9 -1,0 +1,9 @@@
- # Do not remove front matter.
 +---
++_comment: Do not remove front matter.
 +---
 +
 +{{% note %}}
 +The [page collections quick reference guide] describes methods and functions to filter, sort, and group page collections.
 +
 +[page collections quick reference guide]: /quick-reference/page-collections/
 +{{% /note %}}
index e5650149a4b241a149fe6430dfbfd5289b0485d3,0000000000000000000000000000000000000000..f8f50dfaa187af906fa0bdd313337e535170a0fe
mode 100644,000000..100644
--- /dev/null
@@@ -1,577 -1,0 +1,577 @@@
- Within a template action you may [pipe] a value to function or method. The piped value becomes the final argument to the function or method. For example, these are equivalent:
 +---
 +title: Introduction to templating
 +linkTitle: Introduction
 +description: Create templates to render your content, resources, and data.
 +categories: [templates,fundamentals]
 +keywords: []
 +menu:
 +  docs:
 +    identifier: templates-introduction
 +    parent: templates
 +    weight: 20
 +weight: 20
 +toc: true
 +---
 +
 +A template is a file in the layouts directory of a project, theme, or module. Templates use [variables] , [functions], and [methods] to transform your content, resources, and data into a published page.
 +
 +[functions]: /functions/
 +[methods]: /methods/
 +[variables]: #variables
 +
 +{{% note %}}
 +Hugo uses Go's [text/template] and [html/template] packages.
 +
 +The text/template package implements data-driven templates for generating textual output, while the html/template package implements data-driven templates for generating HTML output safe against code injection.
 +
 +By default, Hugo uses the html/template package when rendering HTML files.
 +
 +[text/template]: https://pkg.go.dev/text/template
 +[html/template]: https://pkg.go.dev/html/template
 +{{% /note %}}
 +
 +For example, this HTML template initializes the `$v1` and `$v2` variables, then displays them and their product within an HTML paragraph.
 +
 +```go-html-template
 +{{ $v1 := 6 }}
 +{{ $v2 := 7 }}
 +<p>The product of {{ $v1 }} and {{ $v2 }} is {{ mul $v1 $v2 }}.</p>
 +```
 +
 +While HTML templates are the most common, you can create templates for any [output format] including CSV, JSON, RSS, and plain text.
 +
 +[output format]: /templates/output-formats/
 +
 +## Context
 +
 +The most important concept to understand before creating a template is _context_, the data passed into each template. The data may be a simple value, or more commonly [objects] and associated [methods].
 +
 +[objects]: /getting-started/glossary/#object
 +[methods]: /getting-started/glossary/#method
 +
 +For example, a template for a single page receives a `Page` object, and the `Page` object provides methods to return values or perform actions.
 +
 +### Current context
 +
 +Within a template, the dot (`.`) represents the current context.
 +
 +{{< code file=layouts/_default/single.html >}}
 +<h2>{{ .Title }}</h2>
 +{{< /code >}}
 +
 +In the example above the dot represents the `Page` object, and we call its [`Title`] method to return the title as defined in [front matter].
 +
 +[front matter]: /content-management/front-matter/
 +[`Title`]: /methods/page/title
 +
 +The current context may change within a template. For example, at the top of a template the context might be a `Page` object, but we rebind the context to another value or object within [`range`] or [`with`] blocks.
 +
 +[`range`]: /functions/go-template/range/
 +[`with`]: /functions/go-template/with/
 +
 +{{< code file=layouts/_default/single.html >}}
 +<h2>{{ .Title }}</h2>
 +
 +{{ range slice "foo" "bar" }}
 +  <p>{{ . }}</p>
 +{{ end }}
 +
 +{{ with "baz" }}
 +  <p>{{ . }}</p>
 +{{ end }}
 +{{< /code >}}
 +
 +In the example above, the context changes as we `range` through the [slice] of values. In the first iteration the context is "foo", and in the second iteration the context is "bar". Inside of the `with` block the context is "baz". Hugo renders the above to:
 +
 +[slice]: /getting-started/glossary/#slice
 +
 +```html
 +<h2>My Page Title</h2>
 +<p>foo</p>
 +<p>bar</p>
 +<p>baz</p>
 +```
 +
 +### Template context
 +
 +Within a `range` or `with` block you can access the context passed into the template by prepending a dollar sign (`$`) to the dot:
 +
 +{{< code file=layouts/_default/single.html >}}
 +{{ with "foo" }}
 +  <p>{{ $.Title }} - {{ . }}</p>
 +{{ end }}
 +{{< /code >}}
 +
 +Hugo renders this to:
 +
 +```html
 +<p>My Page Title - foo</p>
 +```
 +
 +{{% note %}}
 +Make sure that you thoroughly understand the concept of _context_ before you continue reading. The most common templating errors made by new users relate to context.
 +{{% /note %}}
 +
 +## Actions
 +
 +In the examples above the paired opening and closing braces represent the beginning and end of a template action, a data evaluation or control structure within a template.
 +
 +A template action may contain literal values ([boolean], [string], [integer], and [float]), variables, functions, and methods.
 +
 +[boolean]: /getting-started/glossary/#boolean
 +[string]: /getting-started/glossary/#string
 +[integer]: /getting-started/glossary/#integer
 +[float]: /getting-started/glossary/#float
 +
 +{{< code file=layouts/_default/single.html >}}
 +{{ $convertToLower := true }}
 +{{ if $convertToLower }}
 +  <h2>{{ strings.ToLower .Title }}</h2>
 +{{ end }}
 +{{< /code >}}
 +
 +In the example above:
 +
 +- `$convertToLower` is a variable
 +- `true` is a literal boolean value
 +- `strings.ToLower` is a function that converts all characters to lowercase
 +- `Title` is a method on a the `Page` object
 +
 +Hugo renders the above to:
 +
 +```html
 +  
 +  
 +    <h2>my page title</h2>
 +  
 +```
 +
 +### Whitespace
 +
 +Notice the blank lines and indentation in the previous example? Although irrelevant in production when you typically minify the output, you can remove the adjacent whitespace by using template action delimiters with hyphens:
 +
 +{{< code file=layouts/_default/single.html >}}
 +{{- $convertToLower := true -}}
 +{{- if $convertToLower -}}
 +  <h2>{{ strings.ToLower .Title }}</h2>
 +{{- end -}}
 +{{< /code >}}
 +
 +Hugo renders this to:
 +
 +```html
 +<h2>my page title</h2>
 +```
 +
 +Whitespace includes spaces, horizontal tabs, carriage returns, and newlines.
 +
 +### Pipes
 +
++Within a template action you may [pipe] a value to a function or method. The piped value becomes the final argument to the function or method. For example, these are equivalent:
 +
 +[pipe]: /getting-started/glossary/#pipeline
 +
 +```go-html-template
 +{{ strings.ToLower "Hugo" }} → hugo
 +{{ "Hugo" | strings.ToLower }} → hugo
 +```
 +
 +You can pipe the result of one function or method into another. For example, these are equivalent:
 +
 +```go-html-template
 +{{ strings.TrimSuffix "o" (strings.ToLower "Hugo") }} → hug
 +{{ "Hugo" | strings.ToLower | strings.TrimSuffix "o" }} → hug
 +```
 +
 +These are also equivalent:
 +
 +```go-html-template
 +{{ mul 6 (add 2 5) }} → 42
 +{{ 5 | add 2 | mul 6 }} → 42
 +```
 +
 +{{% note %}}
 +Remember that the piped value becomes the final argument to the function or method to which you are piping.
 +{{% /note %}}
 +
 +### Line splitting
 +
 +You can split a template action over two or more lines. For example, these are equivalent:
 +
 +```go-html-template
 +{{ $v := or $arg1 $arg2 }}
 +
 +{{ $v := or 
 +  $arg1
 +  $arg2
 +}}
 +```
 +
 +You can also split [raw string literals] over two or more lines. For example, these are equivalent:
 +
 +[raw string literals]: /getting-started/glossary/#string-literal-raw
 +
 +```go-html-template
 +{{ $msg := "This is line one.\nThis is line two." }}
 +
 +{{ $msg := `This is line one.
 +This is line two.`
 +}}
 +```
 +
 +## Variables
 +
 +A variable is a user-defined [identifier] prepended with a dollar sign (`$`), representing a value of any data type, initialized or assigned within a template action. For example, `$foo` and `$bar` are variables.
 +
 +[identifier]: /getting-started/glossary/#identifier
 +
 +Variables may contain [scalars], [slices], [maps], or [objects].
 +
 +[scalars]: /getting-started/glossary/#scalar
 +[slices]: /getting-started/glossary/#slice
 +[maps]: /getting-started/glossary/#map
 +[objects]: /getting-started/glossary/#object
 +
 +Use `:=` to initialize a variable, and use `=` to assign a value to a variable that has been previously initialized. For example:
 +
 +```go-html-template
 +{{ $total := 3 }}
 +{{ range slice 7 11 21 }}
 +  {{ $total = add $total . }}
 +{{ end }}
 +{{ $total }} → 42
 +```
 +
 +Variables initialized inside of an `if`, `range`, or `with` block are scoped to the block. Variables initialized outside of these blocks are scoped to the template.
 +
 +With variables that represent a slice or map, use the [`index`] function to return the desired value.
 +
 +[`index`]: /functions/collections/indexfunction/
 +
 +```go-html-template
 +{{ $slice := slice "foo" "bar" "baz" }}
 +{{ index $slice 2 }} → baz
 +
 +{{ $map := dict "a" "foo" "b" "bar" "c" "baz" }}
 +{{ index $map "c" }} → baz
 +```
 +
 +{{% note %}}
 +Slices and arrays are zero-based; element 0 is the first element.
 +{{% /note %}}
 +
 +With variables that represent a map or object, [chain] identifiers to return the desired value or to access the desired method.
 +
 +[chain]: /getting-started/glossary/#chain
 +
 +```go-html-template
 +{{ $map := dict "a" "foo" "b" "bar" "c" "baz" }}
 +{{ $map.c }} → baz
 +
 +{{ $homePage := .Site.Home }}
 +{{ $homePage.Title }} → My Homepage
 +```
 +
 +{{% note %}}
 +As seen above, object and method names are capitalized. Although not required, to avoid confusion we recommend beginning variable and map key names with a lowercase letter or underscore.
 +{{% /note %}}
 +
 +## Functions
 +
 +Used within a template action, a function takes one or more arguments and returns a value. Unlike methods, functions are not associated with an object.
 +
 +Go's text/template and html/template packages provide a small set of functions, operators, and statements for general use. See the [go-templates] section of the function documentation for details.
 +
 +[go-templates]: /functions/go-template/
 +
 +Hugo provides hundreds of custom [functions] categorized by namespace. For example, the `strings` namespace includes these and other functions:
 +
 +[functions]: /functions
 +
 +Function|Alias
 +:--|:--
 +[`strings.ToLower`](/functions/strings/tolower)|`lower`
 +[`strings.ToUpper`](/functions/strings/toupper)|`upper`
 +[`strings.Replace`](/functions/strings/replace)|`replace`
 +
 +As shown above, frequently used functions have an alias. Use aliases in your templates to reduce code length.
 +
 +When calling a function, separate the arguments from the function, and from each other, with a space. For example:
 +
 +```go-html-template
 +{{ $total := add 1 2 3 4 }}
 +```
 +
 +## Methods
 +
 +Used within a template action and associated with an object, a method takes zero or more arguments and either returns a value or performs an action.
 +
 +The most commonly accessed objects are the [`Page`] and [`Site`] objects. This is a small sampling of the [methods] available to each object.
 +
 +[`Site`]: /methods/site/
 +[`Page`]: /methods/page/
 +[methods]: /methods/
 +
 +Object|Method|Description
 +:--|:--|:--
 +`Page`|[`Date`](methods/page/date/)|Returns the date of the given page.
 +`Page`|[`Params`](methods/page/params/)|Returns a map of custom parameters as defined in the front matter of the given page.
 +`Page`|[`Title`](methods/page/title/)|Returns the title of the given page.
 +`Site`|[`Data`](methods/site/data/)|Returns a data structure composed from the files in the data directory.
 +`Site`|[`Params`](methods/site/params/)|Returns a map of custom parameters as defined in the site configuration.
 +`Site`|[`Title`](methods/site/title/)|Returns the title as defined in the site configuration.
 +
 +Chain the method to its object with a dot (`.`) as shown below, remembering that the leading dot represents the [current context].
 +
 +[current context]: #current-context
 +
 +{{< code file=layouts/_default/single.html >}}
 +{{ .Site.Title }} → My Site Title
 +{{ .Page.Title }} → My Page Title
 +{{< /code >}}
 +
 +The context passed into most templates is a `Page` object, so this is equivalent to the previous example:
 +
 +{{< code file=layouts/_default/single.html >}}
 +{{ .Site.Title }} → My Site Title
 +{{ .Title }} → My Page Title
 +{{< /code >}}
 +
 +Some methods take an argument. Separate the argument from the method with a space. For example:
 +
 +{{< code file=layouts/_default/single.html >}}
 +{{ $page := .Page.GetPage "/books/les-miserables" }}
 +{{ $page.Title }} → Les Misérables
 +{{< /code >}}
 +
 +## Comments
 +
 +{{% note %}}
 +Do not attempt to use HTML comment delimiters to comment out template code.
 +
 +Hugo strips HTML comments when rendering a page, but first evaluates any template code within the HTML comment delimiters. Depending on the template code within the HTML comment delimiters, this could cause unexpected results or fail the build.
 +{{% /note %}}
 +
 +Template comments are similar to template actions. Paired opening and closing braces represent the beginning and end of a comment. For example:
 +
 +```text
 +{{/* This is an inline comment. */}}
 +{{- /* This is an inline comment with adjacent whitespace removed. */ -}}
 +```
 +
 +Code within a comment is not parsed, executed, or displayed. Comments may be inline, as shown above, or in block form:
 +
 +```text
 +{{/*
 +This is a block comment.
 +*/}}
 +
 +{{- /*
 +This is a block comment with
 +adjacent whitespace removed.
 +*/ -}}
 +```
 +
 +You may not nest one comment inside of another.
 +
 +To render an HTML comment, pass a string through the [`safeHTML`] template function. For example:
 +
 +[`safeHTML`]: /functions/safe/html
 +
 +```go-html-template
 +{{ "<!-- I am an HTML comment. -->" | safeHTML }}
 +{{ printf "<!-- This is the %s site. -->" .Site.Title | safeHTML }}
 +```
 +
 +## Include
 +
 +Use the [`template`] function to include one or more of Hugo's [embedded templates]:
 +
 +[embedded templates]: /templates/embedded/
 +
 +```go-html-template
 +{{ template "_internal/google_analytics.html" . }}
 +{{ template "_internal/opengraph" . }}
 +{{ template "_internal/pagination.html" . }}
 +{{ template "_internal/schema.html" . }}
 +{{ template "_internal/twitter_cards.html" . }}
 +```
 +
 +[`partial`]: /functions/partials/include/
 +[`partialCached`]: /functions/partials/includecached/
 +[`template`]: functions/go-template/template/
 +
 +Use the [`partial`] or [`partialCached`] function to include one or more [partial templates]:
 +
 +[partial templates]: /templates/partial
 +
 +```go-html-template
 +{{ partial "breadcrumbs.html" . }}
 +{{ partialCached "css.html" . }}
 +```
 +
 +Create your partial templates in the layouts/partials directory.
 +
 +{{% note %}}
 +In the examples above, note that we are passing the current context (the dot) to each of the templates.
 +{{% /note %}}
 +
 +## Examples
 +
 +This limited set of contrived examples demonstrates some of concepts described above. Please see the [functions], [methods], and [templates] documentation for specific examples.
 +
 +[templates]: /templates/
 +
 +### Conditional blocks
 +
 +See documentation for [`if`], [`else`], and [`end`].
 +
 +[`if`]: /functions/go-template/if/
 +[`else`]: /functions/go-template/else/
 +[`end`]: /functions/go-template/end/
 +
 +```go-html-template
 +{{ $var := 42 }}
 +{{ if eq $var 6 }}
 +  {{ print "var is 6" }}
 +{{ else if eq $var 7 }}
 +  {{ print "var is 7" }}
 +{{ else if eq $var 42 }}
 +  {{ print "var is 42" }}
 +{{ else }}
 +  {{ print "var is something else" }}
 +{{ end }}
 +```
 +
 +### Logical operators
 +
 +See documentation for [`and`] and [`or`].
 +
 +[`and`]: /functions/go-template/and
 +[`or`]: /functions/go-template/or
 +
 +```go-html-template
 +{{ $v1 := true }}
 +{{ $v2 := false }}
 +{{ $v3 := false }}
 +{{ $result := false }}
 +
 +{{ if and $v1 $v2 $v3 }}
 +  {{ $result = true }}
 +{{ end }}
 +{{ $result }} → false
 +
 +{{ if or $v1 $v2 $v3 }}
 +  {{ $result = true }}
 +{{ end }}
 +{{ $result }} → true
 +```
 +
 +### Loops
 +
 +See documentation for [`range`], [`else`], and [`end`].
 +
 +[`range`]: /functions/go-template/range/
 +
 +```go-html-template
 +{{ $s := slice "foo" "bar" "baz" }}
 +{{ range $s }}
 +  <p>{{ . }}</p>
 +{{ else }}
 +  <p>The collection is empty</p>
 +{{ end }}
 +```
 +
 +Use the [`seq`] function to loop a specified number of times:
 +
 +[`seq`]: /functions/collections/seq
 +
 +```go-html-template
 +{{ $total := 0 }}
 +{{ range seq 4 }}
 +  {{ $total = add $total . }}
 +{{ end }}
 +{{ $total }} → 10
 +```
 +
 +### Rebind context
 +
 +See documentation for [`with`], [`else`], and [`end`].
 +
 +[`with`]: /functions/go-template/with/
 +
 +```go-html-template
 +{{ $var := "foo" }}
 +{{ with $var }}
 +  {{ . }} → foo
 +{{ else }}
 +  {{ print "var is falsy" }}
 +{{ end }}
 +```
 +
 +To test multiple conditions:
 +
 +```go-html-template
 +{{ $v1 := 0 }}
 +{{ $v2 := 42 }}
 +{{ with $v1 }}
 +  {{ . }}
 +{{ else with $v2 }}
 +  {{ . }} → 42
 +{{ else }}
 +  {{ print "v1 and v2 are falsy" }}
 +{{ end }}
 +```
 +
 +### Access site parameters
 +
 +See documentation for the [`Params`](/methods/site/params/) method on a `Site` object.
 +
 +With this site configuration:
 +
 +{{< code-toggle file=hugo >}}
 +title = 'ABC Widgets'
 +baseURL = 'https://example.org'
 +[params]
 +  subtitle = 'The Best Widgets on Earth'
 +  copyright-year = '2023'
 +  [params.author]
 +    email = 'jsmith@example.org'
 +    name = 'John Smith'
 +  [params.layouts]
 +    rfc_1123 = 'Mon, 02 Jan 2006 15:04:05 MST'
 +    rfc_3339 = '2006-01-02T15:04:05-07:00'
 +{{< /code-toggle >}}
 +
 +Access the custom site parameters by chaining the identifiers:
 +
 +```go-html-template
 +{{ .Site.Params.subtitle }} → The Best Widgets on Earth
 +{{ .Site.Params.author.name }} → John Smith
 +
 +{{ $layout := .Site.Params.layouts.rfc_1123 }}
 +{{ .Site.Lastmod.Format $layout }} → Tue, 17 Oct 2023 13:21:02 PDT
 +```
 +
 +### Access page parameters
 +
 +See documentation for the [`Params`](/methods/page/params/) method on a `Page` object.
 +
 +With this front matter:
 +
 +{{< code-toggle file=content/news/annual-conference.md >}}
 +title = 'Annual conference'
 +date = 2023-10-17T15:11:37-07:00
 +[params]
 +display_related = true
 +[params.author]
 +  email = 'jsmith@example.org'
 +  name = 'John Smith'
 +{{< /code-toggle >}}
 +
 +Access the custom page parameters by chaining the identifiers:
 +
 +```go-html-template
 +{{ .Params.display_related }} → true
 +{{ .Params.author.name }} → John Smith
 +```
index 8d97c21e067a86e10873f6ff86ec7b04575b32cd,0000000000000000000000000000000000000000..4999bfc0b82257a7b9281d40c8aedb89bad41d13
mode 100644,000000..100644
--- /dev/null
@@@ -1,4801 -1,0 +1,4780 @@@
-       EchoParam:
-         Aliases:
-         - echoParam
-         Args:
-         - c
-         - k
-         Description: |-
-           EchoParam returns the value in the collection c with key k if is set; otherwise, it returns an
-           empty string.
-           Deprecated: Use the index function instead.
-         Examples: []
 +chroma:
 +  lexers:
 +  - Aliases:
 +    - abap
 +    Name: ABAP
 +  - Aliases:
 +    - abnf
 +    Name: ABNF
 +  - Aliases:
 +    - as
 +    - actionscript
 +    Name: ActionScript
 +  - Aliases:
 +    - as3
 +    - actionscript3
 +    Name: ActionScript 3
 +  - Aliases:
 +    - ada
 +    - ada95
 +    - ada2005
 +    Name: Ada
 +  - Aliases:
 +    - agda
 +    Name: Agda
 +  - Aliases:
 +    - al
 +    Name: AL
 +  - Aliases:
 +    - alloy
 +    Name: Alloy
 +  - Aliases:
 +    - ng2
 +    Name: Angular2
 +  - Aliases:
 +    - antlr
 +    Name: ANTLR
 +  - Aliases:
 +    - apacheconf
 +    - aconf
 +    - apache
 +    Name: ApacheConf
 +  - Aliases:
 +    - apl
 +    Name: APL
 +  - Aliases:
 +    - applescript
 +    Name: AppleScript
 +  - Aliases:
 +    - aql
 +    Name: ArangoDB AQL
 +  - Aliases:
 +    - arduino
 +    Name: Arduino
 +  - Aliases:
 +    - armasm
 +    Name: ArmAsm
 +  - Aliases:
 +    - autohotkey
 +    - ahk
 +    Name: AutoHotkey
 +  - Aliases:
 +    - autoit
 +    Name: AutoIt
 +  - Aliases:
 +    - awk
 +    - gawk
 +    - mawk
 +    - nawk
 +    Name: Awk
 +  - Aliases:
 +    - ballerina
 +    Name: Ballerina
 +  - Aliases:
 +    - bash
 +    - sh
 +    - ksh
 +    - zsh
 +    - shell
 +    Name: Bash
 +  - Aliases:
 +    - bash-session
 +    - console
 +    - shell-session
 +    Name: Bash Session
 +  - Aliases:
 +    - bat
 +    - batch
 +    - dosbatch
 +    - winbatch
 +    Name: Batchfile
 +  - Aliases:
 +    - bib
 +    - bibtex
 +    Name: BibTeX
 +  - Aliases:
 +    - bicep
 +    Name: Bicep
 +  - Aliases:
 +    - blitzbasic
 +    - b3d
 +    - bplus
 +    Name: BlitzBasic
 +  - Aliases:
 +    - bnf
 +    Name: BNF
 +  - Aliases:
 +    - bqn
 +    Name: BQN
 +  - Aliases:
 +    - brainfuck
 +    - bf
 +    Name: Brainfuck
 +  - Aliases:
 +    - c
 +    Name: C
 +  - Aliases:
 +    - csharp
 +    - c#
 +    Name: C#
 +  - Aliases:
 +    - cpp
 +    - c++
 +    Name: C++
 +  - Aliases:
 +    - caddyfile
 +    - caddy
 +    Name: Caddyfile
 +  - Aliases:
 +    - caddyfile-directives
 +    - caddyfile-d
 +    - caddy-d
 +    Name: Caddyfile Directives
 +  - Aliases:
 +    - capnp
 +    Name: Cap'n Proto
 +  - Aliases:
 +    - cassandra
 +    - cql
 +    Name: Cassandra CQL
 +  - Aliases:
 +    - ceylon
 +    Name: Ceylon
 +  - Aliases:
 +    - cfengine3
 +    - cf3
 +    Name: CFEngine3
 +  - Aliases:
 +    - cfs
 +    Name: cfstatement
 +  - Aliases:
 +    - chai
 +    - chaiscript
 +    Name: ChaiScript
 +  - Aliases:
 +    - chapel
 +    - chpl
 +    Name: Chapel
 +  - Aliases:
 +    - cheetah
 +    - spitfire
 +    Name: Cheetah
 +  - Aliases:
 +    - clojure
 +    - clj
 +    - edn
 +    Name: Clojure
 +  - Aliases:
 +    - cmake
 +    Name: CMake
 +  - Aliases:
 +    - cobol
 +    Name: COBOL
 +  - Aliases:
 +    - coffee-script
 +    - coffeescript
 +    - coffee
 +    Name: CoffeeScript
 +  - Aliases:
 +    - common-lisp
 +    - cl
 +    - lisp
 +    Name: Common Lisp
 +  - Aliases:
 +    - coq
 +    Name: Coq
 +  - Aliases:
 +    - cr
 +    - crystal
 +    Name: Crystal
 +  - Aliases:
 +    - css
 +    Name: CSS
 +  - Aliases:
 +    - cue
 +    Name: CUE
 +  - Aliases:
 +    - cython
 +    - pyx
 +    - pyrex
 +    Name: Cython
 +  - Aliases:
 +    - d
 +    Name: D
 +  - Aliases:
 +    - dart
 +    Name: Dart
 +  - Aliases:
 +    - dax
 +    Name: Dax
 +  - Aliases:
 +    - desktop
 +    - desktop_entry
 +    Name: Desktop file
 +  - Aliases:
 +    - diff
 +    - udiff
 +    Name: Diff
 +  - Aliases:
 +    - django
 +    - jinja
 +    Name: Django/Jinja
 +  - Aliases:
 +    - zone
 +    - bind
 +    Name: dns
 +  - Aliases:
 +    - docker
 +    - dockerfile
 +    Name: Docker
 +  - Aliases:
 +    - dtd
 +    Name: DTD
 +  - Aliases:
 +    - dylan
 +    Name: Dylan
 +  - Aliases:
 +    - ebnf
 +    Name: EBNF
 +  - Aliases:
 +    - elixir
 +    - ex
 +    - exs
 +    Name: Elixir
 +  - Aliases:
 +    - elm
 +    Name: Elm
 +  - Aliases:
 +    - emacs
 +    - elisp
 +    - emacs-lisp
 +    Name: EmacsLisp
 +  - Aliases:
 +    - erlang
 +    Name: Erlang
 +  - Aliases:
 +    - factor
 +    Name: Factor
 +  - Aliases:
 +    - fennel
 +    - fnl
 +    Name: Fennel
 +  - Aliases:
 +    - fish
 +    - fishshell
 +    Name: Fish
 +  - Aliases:
 +    - forth
 +    Name: Forth
 +  - Aliases:
 +    - fortran
 +    - f90
 +    Name: Fortran
 +  - Aliases:
 +    - fortranfixed
 +    Name: FortranFixed
 +  - Aliases:
 +    - fsharp
 +    Name: FSharp
 +  - Aliases:
 +    - gas
 +    - asm
 +    Name: GAS
 +  - Aliases:
 +    - gdscript
 +    - gd
 +    Name: GDScript
 +  - Aliases:
 +    - gdscript3
 +    - gd3
 +    Name: GDScript3
 +  - Aliases:
 +    - genshi
 +    - kid
 +    - xml+genshi
 +    - xml+kid
 +    Name: Genshi
 +  - Aliases:
 +    - html+genshi
 +    - html+kid
 +    Name: Genshi HTML
 +  - Aliases:
 +    - genshitext
 +    Name: Genshi Text
 +  - Aliases:
 +    - cucumber
 +    - Cucumber
 +    - gherkin
 +    - Gherkin
 +    Name: Gherkin
 +  - Aliases:
 +    - gleam>
 +    Name: Gleam
 +  - Aliases:
 +    - glsl
 +    Name: GLSL
 +  - Aliases:
 +    - gnuplot
 +    Name: Gnuplot
 +  - Aliases:
 +    - go
 +    - golang
 +    Name: Go
 +  - Aliases:
 +    - go-html-template
 +    Name: Go HTML Template
 +  - Aliases:
 +    - go-template
 +    Name: Go Template
 +  - Aliases:
 +    - go-text-template
 +    Name: Go Text Template
 +  - Aliases:
 +    - graphql
 +    - graphqls
 +    - gql
 +    Name: GraphQL
 +  - Aliases:
 +    - groff
 +    - nroff
 +    - man
 +    Name: Groff
 +  - Aliases:
 +    - groovy
 +    Name: Groovy
 +  - Aliases:
 +    - handlebars
 +    - hbs
 +    Name: Handlebars
 +  - Aliases:
 +    - hare
 +    Name: Hare
 +  - Aliases:
 +    - haskell
 +    - hs
 +    Name: Haskell
 +  - Aliases:
 +    - hx
 +    - haxe
 +    - hxsl
 +    Name: Haxe
 +  - Aliases:
 +    - hcl
 +    Name: HCL
 +  - Aliases:
 +    - hexdump
 +    Name: Hexdump
 +  - Aliases:
 +    - hlb
 +    Name: HLB
 +  - Aliases:
 +    - hlsl
 +    Name: HLSL
 +  - Aliases:
 +    - holyc
 +    Name: HolyC
 +  - Aliases:
 +    - html
 +    Name: HTML
 +  - Aliases:
 +    - http
 +    Name: HTTP
 +  - Aliases:
 +    - hylang
 +    Name: Hy
 +  - Aliases:
 +    - idris
 +    - idr
 +    Name: Idris
 +  - Aliases:
 +    - igor
 +    - igorpro
 +    Name: Igor
 +  - Aliases:
 +    - ini
 +    - cfg
 +    - dosini
 +    Name: INI
 +  - Aliases:
 +    - io
 +    Name: Io
 +  - Aliases:
 +    - iscdhcpd
 +    Name: ISCdhcpd
 +  - Aliases:
 +    - j
 +    Name: J
 +  - Aliases:
 +    - java
 +    Name: Java
 +  - Aliases:
 +    - js
 +    - javascript
 +    Name: JavaScript
 +  - Aliases:
 +    - json
 +    Name: JSON
 +  - Aliases:
 +    - julia
 +    - jl
 +    Name: Julia
 +  - Aliases:
 +    - jungle
 +    Name: Jungle
 +  - Aliases:
 +    - kotlin
 +    Name: Kotlin
 +  - Aliases:
 +    - lighty
 +    - lighttpd
 +    Name: Lighttpd configuration file
 +  - Aliases:
 +    - llvm
 +    Name: LLVM
 +  - Aliases:
 +    - lua
 +    Name: Lua
 +  - Aliases:
 +    - make
 +    - makefile
 +    - mf
 +    - bsdmake
 +    Name: Makefile
 +  - Aliases:
 +    - mako
 +    Name: Mako
 +  - Aliases:
 +    - md
 +    - mkd
 +    Name: markdown
 +  - Aliases:
 +    - mason
 +    Name: Mason
 +  - Aliases:
 +    - materialize
 +    - mzsql
 +    Name: Materialize SQL dialect
 +  - Aliases:
 +    - mathematica
 +    - mma
 +    - nb
 +    Name: Mathematica
 +  - Aliases:
 +    - matlab
 +    Name: Matlab
 +  - Aliases:
 +    - mcfunction
 +    Name: mcfunction
 +  - Aliases:
 +    - meson
 +    - meson.build
 +    Name: Meson
 +  - Aliases:
 +    - metal
 +    Name: Metal
 +  - Aliases:
 +    - minizinc
 +    - MZN
 +    - mzn
 +    Name: MiniZinc
 +  - Aliases:
 +    - mlir
 +    Name: MLIR
 +  - Aliases:
 +    - modula2
 +    - m2
 +    Name: Modula-2
 +  - Aliases:
 +    - monkeyc
 +    Name: MonkeyC
 +  - Aliases:
 +    - morrowind
 +    - mwscript
 +    Name: MorrowindScript
 +  - Aliases:
 +    - myghty
 +    Name: Myghty
 +  - Aliases:
 +    - mysql
 +    - mariadb
 +    Name: MySQL
 +  - Aliases:
 +    - nasm
 +    Name: NASM
 +  - Aliases:
 +    - natural
 +    Name: Natural
 +  - Aliases:
 +    - ndisasm
 +    Name: NDISASM
 +  - Aliases:
 +    - newspeak
 +    Name: Newspeak
 +  - Aliases:
 +    - nginx
 +    Name: Nginx configuration file
 +  - Aliases:
 +    - nim
 +    - nimrod
 +    Name: Nim
 +  - Aliases:
 +    - nixos
 +    - nix
 +    Name: Nix
 +  - Aliases:
 +    - objective-c
 +    - objectivec
 +    - obj-c
 +    - objc
 +    Name: Objective-C
 +  - Aliases:
 +    - objectpascal
 +    Name: ObjectPascal
 +  - Aliases:
 +    - ocaml
 +    Name: OCaml
 +  - Aliases:
 +    - octave
 +    Name: Octave
 +  - Aliases:
 +    - odin
 +    Name: Odin
 +  - Aliases:
 +    - ones
 +    - onesenterprise
 +    - 1S
 +    - 1S:Enterprise
 +    Name: OnesEnterprise
 +  - Aliases:
 +    - openedge
 +    - abl
 +    - progress
 +    - openedgeabl
 +    Name: OpenEdge ABL
 +  - Aliases:
 +    - openscad
 +    Name: OpenSCAD
 +  - Aliases:
 +    - org
 +    - orgmode
 +    Name: Org Mode
 +  - Aliases:
 +    - pacmanconf
 +    Name: PacmanConf
 +  - Aliases:
 +    - perl
 +    - pl
 +    Name: Perl
 +  - Aliases:
 +    - php
 +    - php3
 +    - php4
 +    - php5
 +    Name: PHP
 +  - Aliases:
 +    - phtml
 +    Name: PHTML
 +  - Aliases:
 +    - pig
 +    Name: Pig
 +  - Aliases:
 +    - pkgconfig
 +    Name: PkgConfig
 +  - Aliases:
 +    - plpgsql
 +    Name: PL/pgSQL
 +  - Aliases:
 +    - text
 +    - plain
 +    - no-highlight
 +    Name: plaintext
 +  - Aliases:
 +    - plutus-core
 +    - plc
 +    Name: Plutus Core
 +  - Aliases:
 +    - pony
 +    Name: Pony
 +  - Aliases:
 +    - postgresql
 +    - postgres
 +    Name: PostgreSQL SQL dialect
 +  - Aliases:
 +    - postscript
 +    - postscr
 +    Name: PostScript
 +  - Aliases:
 +    - pov
 +    Name: POVRay
 +  - Aliases:
 +    - powerquery
 +    - pq
 +    Name: PowerQuery
 +  - Aliases:
 +    - powershell
 +    - posh
 +    - ps1
 +    - psm1
 +    - psd1
 +    - pwsh
 +    Name: PowerShell
 +  - Aliases:
 +    - prolog
 +    Name: Prolog
 +  - Aliases:
 +    - promela
 +    Name: Promela
 +  - Aliases:
 +    - promql
 +    Name: PromQL
 +  - Aliases:
 +    - java-properties
 +    Name: properties
 +  - Aliases:
 +    - protobuf
 +    - proto
 +    Name: Protocol Buffer
 +  - Aliases:
 +    - prql
 +    Name: PRQL
 +  - Aliases:
 +    - psl
 +    Name: PSL
 +  - Aliases:
 +    - puppet
 +    Name: Puppet
 +  - Aliases:
 +    - python
 +    - py
 +    - sage
 +    - python3
 +    - py3
 +    Name: Python
 +  - Aliases:
 +    - python2
 +    - py2
 +    Name: Python 2
 +  - Aliases:
 +    - qbasic
 +    - basic
 +    Name: QBasic
 +  - Aliases:
 +    - qml
 +    - qbs
 +    Name: QML
 +  - Aliases:
 +    - splus
 +    - s
 +    - r
 +    Name: R
 +  - Aliases:
 +    - racket
 +    - rkt
 +    Name: Racket
 +  - Aliases:
 +    - ragel
 +    Name: Ragel
 +  - Aliases:
 +    - perl6
 +    - pl6
 +    - raku
 +    Name: Raku
 +  - Aliases:
 +    - jsx
 +    - react
 +    Name: react
 +  - Aliases:
 +    - reason
 +    - reasonml
 +    Name: ReasonML
 +  - Aliases:
 +    - registry
 +    Name: reg
 +  - Aliases:
 +    - rego
 +    Name: Rego
 +  - Aliases:
 +    - rst
 +    - rest
 +    - restructuredtext
 +    Name: reStructuredText
 +  - Aliases:
 +    - rexx
 +    - arexx
 +    Name: Rexx
 +  - Aliases:
 +    - spec
 +    Name: RPMSpec
 +  - Aliases:
 +    - rb
 +    - ruby
 +    - duby
 +    Name: Ruby
 +  - Aliases:
 +    - rust
 +    - rs
 +    Name: Rust
 +  - Aliases:
 +    - sas
 +    Name: SAS
 +  - Aliases:
 +    - sass
 +    Name: Sass
 +  - Aliases:
 +    - scala
 +    Name: Scala
 +  - Aliases:
 +    - scheme
 +    - scm
 +    Name: Scheme
 +  - Aliases:
 +    - scilab
 +    Name: Scilab
 +  - Aliases:
 +    - scss
 +    Name: SCSS
 +  - Aliases:
 +    - sed
 +    - gsed
 +    - ssed
 +    Name: Sed
 +  - Aliases:
 +    - sieve
 +    Name: Sieve
 +  - Aliases:
 +    - smali
 +    Name: Smali
 +  - Aliases:
 +    - smalltalk
 +    - squeak
 +    - st
 +    Name: Smalltalk
 +  - Aliases:
 +    - smarty
 +    Name: Smarty
 +  - Aliases:
 +    - snobol
 +    Name: Snobol
 +  - Aliases:
 +    - sol
 +    - solidity
 +    Name: Solidity
 +  - Aliases:
 +    - sp
 +    Name: SourcePawn
 +  - Aliases:
 +    - sparql
 +    Name: SPARQL
 +  - Aliases:
 +    - sql
 +    Name: SQL
 +  - Aliases:
 +    - squidconf
 +    - squid.conf
 +    - squid
 +    Name: SquidConf
 +  - Aliases:
 +    - sml
 +    Name: Standard ML
 +  - Aliases: null
 +    Name: stas
 +  - Aliases:
 +    - stylus
 +    Name: Stylus
 +  - Aliases:
 +    - svelte
 +    Name: Svelte
 +  - Aliases:
 +    - swift
 +    Name: Swift
 +  - Aliases:
 +    - systemd
 +    Name: SYSTEMD
 +  - Aliases:
 +    - systemverilog
 +    - sv
 +    Name: systemverilog
 +  - Aliases:
 +    - tablegen
 +    Name: TableGen
 +  - Aliases:
 +    - tal
 +    - uxntal
 +    Name: Tal
 +  - Aliases:
 +    - tasm
 +    Name: TASM
 +  - Aliases:
 +    - tcl
 +    Name: Tcl
 +  - Aliases:
 +    - tcsh
 +    - csh
 +    Name: Tcsh
 +  - Aliases:
 +    - termcap
 +    Name: Termcap
 +  - Aliases:
 +    - terminfo
 +    Name: Terminfo
 +  - Aliases:
 +    - terraform
 +    - tf
 +    Name: Terraform
 +  - Aliases:
 +    - tex
 +    - latex
 +    Name: TeX
 +  - Aliases:
 +    - thrift
 +    Name: Thrift
 +  - Aliases:
 +    - toml
 +    Name: TOML
 +  - Aliases:
 +    - tradingview
 +    - tv
 +    Name: TradingView
 +  - Aliases:
 +    - tsql
 +    - t-sql
 +    Name: Transact-SQL
 +  - Aliases:
 +    - turing
 +    Name: Turing
 +  - Aliases:
 +    - turtle
 +    Name: Turtle
 +  - Aliases:
 +    - twig
 +    Name: Twig
 +  - Aliases:
 +    - ts
 +    - tsx
 +    - typescript
 +    Name: TypeScript
 +  - Aliases:
 +    - typoscript
 +    Name: TypoScript
 +  - Aliases:
 +    - typoscriptcssdata
 +    Name: TypoScriptCssData
 +  - Aliases:
 +    - typoscripthtmldata
 +    Name: TypoScriptHtmlData
 +  - Aliases: null
 +    Name: ucode
 +  - Aliases:
 +    - v
 +    - vlang
 +    Name: V
 +  - Aliases:
 +    - vsh
 +    - vshell
 +    Name: V shell
 +  - Aliases:
 +    - vala
 +    - vapi
 +    Name: Vala
 +  - Aliases:
 +    - vb.net
 +    - vbnet
 +    Name: VB.net
 +  - Aliases:
 +    - verilog
 +    - v
 +    Name: verilog
 +  - Aliases:
 +    - vhdl
 +    Name: VHDL
 +  - Aliases:
 +    - vhs
 +    - tape
 +    - cassette
 +    Name: VHS
 +  - Aliases:
 +    - vim
 +    Name: VimL
 +  - Aliases:
 +    - vue
 +    - vuejs
 +    Name: vue
 +  - Aliases: null
 +    Name: WDTE
 +  - Aliases:
 +    - wgsl
 +    Name: WebGPU Shading Language
 +  - Aliases:
 +    - whiley
 +    Name: Whiley
 +  - Aliases:
 +    - xml
 +    Name: XML
 +  - Aliases:
 +    - xorg.conf
 +    Name: Xorg
 +  - Aliases:
 +    - yaml
 +    Name: YAML
 +  - Aliases:
 +    - yang
 +    Name: YANG
 +  - Aliases:
 +    - z80
 +    Name: Z80 Assembly
 +  - Aliases:
 +    - zed
 +    Name: Zed
 +  - Aliases:
 +    - zig
 +    Name: Zig
 +config:
 +  HTTPCache:
 +    cache:
 +      for:
 +        excludes:
 +        - '**'
 +        includes: null
 +    polls:
 +    - disable: true
 +      for:
 +        excludes: null
 +        includes:
 +        - '**'
 +      high: 0s
 +      low: 0s
 +  archeTypeDir: archetypes
 +  assetDir: assets
 +  author: {}
 +  baseURL: ""
 +  build:
 +    buildStats:
 +      disableClasses: false
 +      disableIDs: false
 +      disableTags: false
 +      enable: false
 +    cacheBusters:
 +    - source: (postcss|tailwind)\.config\.js
 +      target: (css|styles|scss|sass)
 +    noJSConfigInAssets: false
 +    useResourceCacheWhen: fallback
 +  buildDrafts: false
 +  buildExpired: false
 +  buildFuture: false
 +  cacheDir: ""
 +  caches:
 +    assets:
 +      dir: :resourceDir/_gen
 +      maxAge: -1
 +    getcsv:
 +      dir: :cacheDir/:project
 +      maxAge: -1
 +    getjson:
 +      dir: :cacheDir/:project
 +      maxAge: -1
 +    getresource:
 +      dir: :cacheDir/:project
 +      maxAge: -1
 +    images:
 +      dir: :resourceDir/_gen
 +      maxAge: -1
 +    misc:
 +      dir: :cacheDir/:project
 +      maxAge: -1
 +    modules:
 +      dir: :cacheDir/modules
 +      maxAge: -1
 +  canonifyURLs: false
 +  capitalizeListTitles: true
 +  cascade: []
 +  cleanDestinationDir: false
 +  contentDir: content
 +  copyright: ""
 +  dataDir: data
 +  defaultContentLanguage: en
 +  defaultContentLanguageInSubdir: false
 +  deployment:
 +    confirm: false
 +    dryRun: false
 +    force: false
 +    invalidateCDN: true
 +    matchers: null
 +    maxDeletes: 256
 +    order: null
 +    target: ""
 +    targets: null
 +    workers: 10
 +  disableAliases: false
 +  disableHugoGeneratorInject: false
 +  disableKinds: null
 +  disableLanguages: null
 +  disableLiveReload: false
 +  disablePathToLower: false
 +  enableEmoji: false
 +  enableGitInfo: false
 +  enableMissingTranslationPlaceholders: false
 +  enableRobotsTXT: false
 +  environment: production
 +  frontmatter:
 +    date:
 +    - date
 +    - publishdate
 +    - pubdate
 +    - published
 +    - lastmod
 +    - modified
 +    expiryDate:
 +    - expirydate
 +    - unpublishdate
 +    lastmod:
 +    - :git
 +    - lastmod
 +    - modified
 +    - date
 +    - publishdate
 +    - pubdate
 +    - published
 +    publishDate:
 +    - publishdate
 +    - pubdate
 +    - published
 +    - date
 +  hasCJKLanguage: false
 +  i18nDir: i18n
 +  ignoreCache: false
 +  ignoreFiles: []
 +  ignoreLogs: null
 +  ignoreVendorPaths: ""
 +  imaging:
 +    bgColor: '#ffffff'
 +    hint: photo
 +    quality: 75
 +    resampleFilter: box
 +  languageCode: ""
 +  languages:
 +    en:
 +      disabled: false
 +      languageCode: ""
 +      languageDirection: ""
 +      languageName: ""
 +      title: ""
 +      weight: 0
 +  layoutDir: layouts
 +  mainSections: null
 +  markup:
 +    asciidocExt:
 +      attributes: {}
 +      backend: html5
 +      extensions: []
 +      failureLevel: fatal
 +      noHeaderOrFooter: true
 +      preserveTOC: false
 +      safeMode: unsafe
 +      sectionNumbers: false
 +      trace: false
 +      verbose: false
 +      workingFolderCurrent: false
 +    defaultMarkdownHandler: goldmark
 +    goldmark:
 +      duplicateResourceFiles: false
 +      extensions:
 +        cjk:
 +          eastAsianLineBreaks: false
 +          eastAsianLineBreaksStyle: simple
 +          enable: false
 +          escapedSpace: false
 +        definitionList: true
 +        extras:
 +          delete:
 +            enable: false
 +          insert:
 +            enable: false
 +          mark:
 +            enable: false
 +          subscript:
 +            enable: false
 +          superscript:
 +            enable: false
 +        footnote: true
 +        linkify: true
 +        linkifyProtocol: https
 +        passthrough:
 +          delimiters:
 +            block: []
 +            inline: []
 +          enable: false
 +        strikethrough: true
 +        table: true
 +        taskList: true
 +        typographer:
 +          apostrophe: '&rsquo;'
 +          disable: false
 +          ellipsis: '&hellip;'
 +          emDash: '&mdash;'
 +          enDash: '&ndash;'
 +          leftAngleQuote: '&laquo;'
 +          leftDoubleQuote: '&ldquo;'
 +          leftSingleQuote: '&lsquo;'
 +          rightAngleQuote: '&raquo;'
 +          rightDoubleQuote: '&rdquo;'
 +          rightSingleQuote: '&rsquo;'
 +      parser:
 +        attribute:
 +          block: false
 +          title: true
 +        autoHeadingID: true
 +        autoHeadingIDType: github
 +        wrapStandAloneImageWithinParagraph: true
 +      renderHooks:
 +        image:
 +          enableDefault: false
 +        link:
 +          enableDefault: false
 +      renderer:
 +        hardWraps: false
 +        unsafe: false
 +        xhtml: false
 +    highlight:
 +      anchorLineNos: false
 +      codeFences: true
 +      guessSyntax: false
 +      hl_Lines: ""
 +      hl_inline: false
 +      lineAnchors: ""
 +      lineNoStart: 1
 +      lineNos: false
 +      lineNumbersInTable: true
 +      noClasses: true
 +      noHl: false
 +      style: monokai
 +      tabWidth: 4
 +    tableOfContents:
 +      endLevel: 3
 +      ordered: false
 +      startLevel: 2
 +  mediaTypes:
 +    application/json:
 +      delimiter: .
 +      suffixes:
 +      - json
 +    application/manifest+json:
 +      delimiter: .
 +      suffixes:
 +      - webmanifest
 +    application/octet-stream:
 +      delimiter: .
 +    application/pdf:
 +      delimiter: .
 +      suffixes:
 +      - pdf
 +    application/rss+xml:
 +      delimiter: .
 +      suffixes:
 +      - xml
 +      - rss
 +    application/toml:
 +      delimiter: .
 +      suffixes:
 +      - toml
 +    application/wasm:
 +      delimiter: .
 +      suffixes:
 +      - wasm
 +    application/xml:
 +      delimiter: .
 +      suffixes:
 +      - xml
 +    application/yaml:
 +      delimiter: .
 +      suffixes:
 +      - yaml
 +      - yml
 +    font/otf:
 +      delimiter: .
 +      suffixes:
 +      - otf
 +    font/ttf:
 +      delimiter: .
 +      suffixes:
 +      - ttf
 +    image/bmp:
 +      delimiter: .
 +      suffixes:
 +      - bmp
 +    image/gif:
 +      delimiter: .
 +      suffixes:
 +      - gif
 +    image/jpeg:
 +      delimiter: .
 +      suffixes:
 +      - jpg
 +      - jpeg
 +      - jpe
 +      - jif
 +      - jfif
 +    image/png:
 +      delimiter: .
 +      suffixes:
 +      - png
 +    image/svg+xml:
 +      delimiter: .
 +      suffixes:
 +      - svg
 +    image/tiff:
 +      delimiter: .
 +      suffixes:
 +      - tif
 +      - tiff
 +    image/webp:
 +      delimiter: .
 +      suffixes:
 +      - webp
 +    text/asciidoc:
 +      delimiter: .
 +      suffixes:
 +      - adoc
 +      - asciidoc
 +      - ad
 +    text/calendar:
 +      delimiter: .
 +      suffixes:
 +      - ics
 +    text/css:
 +      delimiter: .
 +      suffixes:
 +      - css
 +    text/csv:
 +      delimiter: .
 +      suffixes:
 +      - csv
 +    text/html:
 +      delimiter: .
 +      suffixes:
 +      - html
 +      - htm
 +    text/javascript:
 +      delimiter: .
 +      suffixes:
 +      - js
 +      - jsm
 +      - mjs
 +    text/jsx:
 +      delimiter: .
 +      suffixes:
 +      - jsx
 +    text/markdown:
 +      delimiter: .
 +      suffixes:
 +      - md
 +      - mdown
 +      - markdown
 +    text/org:
 +      delimiter: .
 +      suffixes:
 +      - org
 +    text/pandoc:
 +      delimiter: .
 +      suffixes:
 +      - pandoc
 +      - pdc
 +    text/plain:
 +      delimiter: .
 +      suffixes:
 +      - txt
 +    text/rst:
 +      delimiter: .
 +      suffixes:
 +      - rst
 +    text/tsx:
 +      delimiter: .
 +      suffixes:
 +      - tsx
 +    text/typescript:
 +      delimiter: .
 +      suffixes:
 +      - ts
 +    text/x-sass:
 +      delimiter: .
 +      suffixes:
 +      - sass
 +    text/x-scss:
 +      delimiter: .
 +      suffixes:
 +      - scss
 +    video/3gpp:
 +      delimiter: .
 +      suffixes:
 +      - 3gpp
 +      - 3gp
 +    video/mp4:
 +      delimiter: .
 +      suffixes:
 +      - mp4
 +    video/mpeg:
 +      delimiter: .
 +      suffixes:
 +      - mpg
 +      - mpeg
 +    video/ogg:
 +      delimiter: .
 +      suffixes:
 +      - ogv
 +    video/webm:
 +      delimiter: .
 +      suffixes:
 +      - webm
 +    video/x-msvideo:
 +      delimiter: .
 +      suffixes:
 +      - avi
 +  menus: {}
 +  minify:
 +    disableCSS: false
 +    disableHTML: false
 +    disableJS: false
 +    disableJSON: false
 +    disableSVG: false
 +    disableXML: false
 +    minifyOutput: false
 +    tdewolff:
 +      css:
 +        inline: false
 +        keepCSS2: true
 +        precision: 0
 +      html:
 +        keepComments: false
 +        keepConditionalComments: false
 +        keepDefaultAttrVals: true
 +        keepDocumentTags: true
 +        keepEndTags: true
 +        keepQuotes: false
 +        keepSpecialComments: true
 +        keepWhitespace: false
 +        templateDelims:
 +        - ""
 +        - ""
 +      js:
 +        keepVarNames: false
 +        precision: 0
 +        version: 2022
 +      json:
 +        keepNumbers: false
 +        precision: 0
 +      svg:
 +        inline: false
 +        keepComments: false
 +        precision: 0
 +      xml:
 +        keepWhitespace: false
 +  module:
 +    hugoVersion:
 +      extended: false
 +      max: ""
 +      min: ""
 +    imports: null
 +    mounts:
 +    - disableWatch: false
 +      excludeFiles: null
 +      includeFiles: null
 +      lang: ""
 +      source: content
 +      target: content
 +    - disableWatch: false
 +      excludeFiles: null
 +      includeFiles: null
 +      lang: ""
 +      source: data
 +      target: data
 +    - disableWatch: false
 +      excludeFiles: null
 +      includeFiles: null
 +      lang: ""
 +      source: layouts
 +      target: layouts
 +    - disableWatch: false
 +      excludeFiles: null
 +      includeFiles: null
 +      lang: ""
 +      source: i18n
 +      target: i18n
 +    - disableWatch: false
 +      excludeFiles: null
 +      includeFiles: null
 +      lang: ""
 +      source: archetypes
 +      target: archetypes
 +    - disableWatch: false
 +      excludeFiles: null
 +      includeFiles: null
 +      lang: ""
 +      source: assets
 +      target: assets
 +    - disableWatch: false
 +      excludeFiles: null
 +      includeFiles: null
 +      lang: ""
 +      source: static
 +      target: static
 +    noProxy: none
 +    noVendor: ""
 +    params: null
 +    private: '*.*'
 +    proxy: direct
 +    replacements: null
 +    vendorClosest: false
 +    workspace: "off"
 +  newContentEditor: ""
 +  noBuildLock: false
 +  noChmod: false
 +  noTimes: false
 +  outputFormats:
 +    amp:
 +      baseName: index
 +      isHTML: true
 +      isPlainText: false
 +      mediaType: text/html
 +      noUgly: false
 +      notAlternative: false
 +      path: amp
 +      permalinkable: true
 +      protocol: ""
 +      rel: amphtml
 +      root: false
 +      ugly: false
 +      weight: 0
 +    calendar:
 +      baseName: index
 +      isHTML: false
 +      isPlainText: true
 +      mediaType: text/calendar
 +      noUgly: false
 +      notAlternative: false
 +      path: ""
 +      permalinkable: false
 +      protocol: webcal://
 +      rel: alternate
 +      root: false
 +      ugly: false
 +      weight: 0
 +    css:
 +      baseName: styles
 +      isHTML: false
 +      isPlainText: true
 +      mediaType: text/css
 +      noUgly: false
 +      notAlternative: true
 +      path: ""
 +      permalinkable: false
 +      protocol: ""
 +      rel: stylesheet
 +      root: false
 +      ugly: false
 +      weight: 0
 +    csv:
 +      baseName: index
 +      isHTML: false
 +      isPlainText: true
 +      mediaType: text/csv
 +      noUgly: false
 +      notAlternative: false
 +      path: ""
 +      permalinkable: false
 +      protocol: ""
 +      rel: alternate
 +      root: false
 +      ugly: false
 +      weight: 0
 +    html:
 +      baseName: index
 +      isHTML: true
 +      isPlainText: false
 +      mediaType: text/html
 +      noUgly: false
 +      notAlternative: false
 +      path: ""
 +      permalinkable: true
 +      protocol: ""
 +      rel: canonical
 +      root: false
 +      ugly: false
 +      weight: 10
 +    json:
 +      baseName: index
 +      isHTML: false
 +      isPlainText: true
 +      mediaType: application/json
 +      noUgly: false
 +      notAlternative: false
 +      path: ""
 +      permalinkable: false
 +      protocol: ""
 +      rel: alternate
 +      root: false
 +      ugly: false
 +      weight: 0
 +    markdown:
 +      baseName: index
 +      isHTML: false
 +      isPlainText: true
 +      mediaType: text/markdown
 +      noUgly: false
 +      notAlternative: false
 +      path: ""
 +      permalinkable: false
 +      protocol: ""
 +      rel: alternate
 +      root: false
 +      ugly: false
 +      weight: 0
 +    robots:
 +      baseName: robots
 +      isHTML: false
 +      isPlainText: true
 +      mediaType: text/plain
 +      noUgly: false
 +      notAlternative: false
 +      path: ""
 +      permalinkable: false
 +      protocol: ""
 +      rel: alternate
 +      root: true
 +      ugly: false
 +      weight: 0
 +    rss:
 +      baseName: index
 +      isHTML: false
 +      isPlainText: false
 +      mediaType: application/rss+xml
 +      noUgly: true
 +      notAlternative: false
 +      path: ""
 +      permalinkable: false
 +      protocol: ""
 +      rel: alternate
 +      root: false
 +      ugly: false
 +      weight: 0
 +    sitemap:
 +      baseName: sitemap
 +      isHTML: false
 +      isPlainText: false
 +      mediaType: application/xml
 +      noUgly: false
 +      notAlternative: false
 +      path: ""
 +      permalinkable: false
 +      protocol: ""
 +      rel: sitemap
 +      root: false
 +      ugly: true
 +      weight: 0
 +    webappmanifest:
 +      baseName: manifest
 +      isHTML: false
 +      isPlainText: true
 +      mediaType: application/manifest+json
 +      noUgly: false
 +      notAlternative: true
 +      path: ""
 +      permalinkable: false
 +      protocol: ""
 +      rel: manifest
 +      root: false
 +      ugly: false
 +      weight: 0
 +  outputs:
 +    home:
 +    - html
 +    - rss
 +    page:
 +    - html
 +    rss:
 +    - rss
 +    section:
 +    - html
 +    - rss
 +    taxonomy:
 +    - html
 +    - rss
 +    term:
 +    - html
 +    - rss
 +  page:
 +    nextPrevInSectionSortOrder: desc
 +    nextPrevSortOrder: desc
 +  paginate: 0
 +  paginatePath: ""
 +  pagination:
 +    disableAliases: false
 +    pagerSize: 10
 +    path: page
 +  panicOnWarning: false
 +  params: {}
 +  permalinks:
 +    page: {}
 +    section: {}
 +    taxonomy: {}
 +    term: {}
 +  pluralizeListTitles: true
 +  printI18nWarnings: false
 +  printPathWarnings: false
 +  printUnusedTemplates: false
 +  privacy:
 +    disqus:
 +      disable: false
 +    googleAnalytics:
 +      disable: false
 +      respectDoNotTrack: false
 +    instagram:
 +      disable: false
 +      simple: false
 +    twitter:
 +      disable: false
 +      enableDNT: false
 +      simple: false
 +    vimeo:
 +      disable: false
 +      enableDNT: false
 +      simple: false
 +    youTube:
 +      disable: false
 +      privacyEnhanced: false
 +  publishDir: public
 +  refLinksErrorLevel: ""
 +  refLinksNotFoundURL: ""
 +  related:
 +    includeNewer: false
 +    indices:
 +    - applyFilter: false
 +      cardinalityThreshold: 0
 +      name: keywords
 +      pattern: ""
 +      toLower: false
 +      type: basic
 +      weight: 100
 +    - applyFilter: false
 +      cardinalityThreshold: 0
 +      name: date
 +      pattern: ""
 +      toLower: false
 +      type: basic
 +      weight: 10
 +    - applyFilter: false
 +      cardinalityThreshold: 0
 +      name: tags
 +      pattern: ""
 +      toLower: false
 +      type: basic
 +      weight: 80
 +    threshold: 80
 +    toLower: false
 +  relativeURLs: false
 +  removePathAccents: false
 +  renderSegments: null
 +  resourceDir: resources
 +  sectionPagesMenu: ""
 +  security:
 +    enableInlineShortcodes: false
 +    exec:
 +      allow:
 +      - ^(dart-)?sass(-embedded)?$
 +      - ^go$
 +      - ^git$
 +      - ^npx$
 +      - ^postcss$
 +      - ^tailwindcss$
 +      osEnv:
 +      - (?i)^((HTTPS?|NO)_PROXY|PATH(EXT)?|APPDATA|TE?MP|TERM|GO\w+|(XDG_CONFIG_)?HOME|USERPROFILE|SSH_AUTH_SOCK|DISPLAY|LANG|SYSTEMDRIVE)$
 +    funcs:
 +      getenv:
 +      - ^HUGO_
 +      - ^CI$
 +    http:
 +      mediaTypes: null
 +      methods:
 +      - (?i)GET|POST
 +      urls:
 +      - .*
 +  segments: {}
 +  server:
 +    headers: null
 +    redirects:
 +    - force: false
 +      from: '**'
 +      status: 404
 +      to: /404.html
 +  services:
 +    disqus:
 +      shortname: ""
 +    googleAnalytics:
 +      id: ""
 +    instagram:
 +      accessToken: ""
 +      disableInlineCSS: false
 +    rss:
 +      limit: -1
 +    twitter:
 +      disableInlineCSS: false
 +  sitemap:
 +    changeFreq: ""
 +    disable: false
 +    filename: sitemap.xml
 +    priority: -1
 +  social: null
 +  staticDir:
 +  - static
 +  staticDir0: null
 +  staticDir1: null
 +  staticDir2: null
 +  staticDir3: null
 +  staticDir4: null
 +  staticDir5: null
 +  staticDir6: null
 +  staticDir7: null
 +  staticDir8: null
 +  staticDir9: null
 +  staticDir10: null
 +  summaryLength: 70
 +  taxonomies:
 +    category: categories
 +    tag: tags
 +  templateMetrics: false
 +  templateMetricsHints: false
 +  theme: null
 +  themesDir: themes
 +  timeZone: ""
 +  timeout: 30s
 +  title: ""
 +  titleCaseStyle: AP
 +  uglyURLs: false
 +  workingDir: ""
 +config_helpers:
 +  mergeStrategy:
 +    build:
 +      _merge: none
 +    caches:
 +      _merge: none
 +    cascade:
 +      _merge: none
 +    deployment:
 +      _merge: none
 +    frontmatter:
 +      _merge: none
 +    httpcache:
 +      _merge: none
 +    imaging:
 +      _merge: none
 +    languages:
 +      _merge: none
 +      en:
 +        _merge: none
 +        menus:
 +          _merge: shallow
 +        params:
 +          _merge: deep
 +    markup:
 +      _merge: none
 +    mediatypes:
 +      _merge: shallow
 +    menus:
 +      _merge: shallow
 +    minify:
 +      _merge: none
 +    module:
 +      _merge: none
 +    outputformats:
 +      _merge: shallow
 +    outputs:
 +      _merge: none
 +    page:
 +      _merge: none
 +    pagination:
 +      _merge: none
 +    params:
 +      _merge: deep
 +    permalinks:
 +      _merge: none
 +    privacy:
 +      _merge: none
 +    related:
 +      _merge: none
 +    security:
 +      _merge: none
 +    segments:
 +      _merge: none
 +    server:
 +      _merge: none
 +    services:
 +      _merge: none
 +    sitemap:
 +      _merge: none
 +    taxonomies:
 +      _merge: none
 +output:
 +  layouts:
 +  - Example: Single page in "posts" section
 +    Kind: page
 +    OutputFormat: html
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/posts/single.html.html
 +    - layouts/posts/single.html
 +    - layouts/_default/single.html.html
 +    - layouts/_default/single.html
 +  - Example: Base template for single page in "posts" section
 +    Kind: page
 +    OutputFormat: html
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/posts/single-baseof.html.html
 +    - layouts/posts/baseof.html.html
 +    - layouts/posts/single-baseof.html
 +    - layouts/posts/baseof.html
 +    - layouts/_default/single-baseof.html.html
 +    - layouts/_default/baseof.html.html
 +    - layouts/_default/single-baseof.html
 +    - layouts/_default/baseof.html
 +  - Example: Single page in "posts" section with layout set to "demolayout"
 +    Kind: page
 +    OutputFormat: html
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/posts/demolayout.html.html
 +    - layouts/posts/single.html.html
 +    - layouts/posts/demolayout.html
 +    - layouts/posts/single.html
 +    - layouts/_default/demolayout.html.html
 +    - layouts/_default/single.html.html
 +    - layouts/_default/demolayout.html
 +    - layouts/_default/single.html
 +  - Example: Base template for single page in "posts" section with layout set to "demolayout"
 +    Kind: page
 +    OutputFormat: html
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/posts/demolayout-baseof.html.html
 +    - layouts/posts/single-baseof.html.html
 +    - layouts/posts/baseof.html.html
 +    - layouts/posts/demolayout-baseof.html
 +    - layouts/posts/single-baseof.html
 +    - layouts/posts/baseof.html
 +    - layouts/_default/demolayout-baseof.html.html
 +    - layouts/_default/single-baseof.html.html
 +    - layouts/_default/baseof.html.html
 +    - layouts/_default/demolayout-baseof.html
 +    - layouts/_default/single-baseof.html
 +    - layouts/_default/baseof.html
 +  - Example: AMP single page in "posts" section
 +    Kind: page
 +    OutputFormat: amp
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/posts/single.amp.html
 +    - layouts/posts/single.html
 +    - layouts/_default/single.amp.html
 +    - layouts/_default/single.html
 +  - Example: AMP single page in "posts" section, French language
 +    Kind: page
 +    OutputFormat: amp
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/posts/single.fr.amp.html
 +    - layouts/posts/single.amp.html
 +    - layouts/posts/single.fr.html
 +    - layouts/posts/single.html
 +    - layouts/_default/single.fr.amp.html
 +    - layouts/_default/single.amp.html
 +    - layouts/_default/single.fr.html
 +    - layouts/_default/single.html
 +  - Example: Home page
 +    Kind: home
 +    OutputFormat: html
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/index.html.html
 +    - layouts/home.html.html
 +    - layouts/list.html.html
 +    - layouts/index.html
 +    - layouts/home.html
 +    - layouts/list.html
 +    - layouts/_default/index.html.html
 +    - layouts/_default/home.html.html
 +    - layouts/_default/list.html.html
 +    - layouts/_default/index.html
 +    - layouts/_default/home.html
 +    - layouts/_default/list.html
 +  - Example: Base template for home page
 +    Kind: home
 +    OutputFormat: html
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/index-baseof.html.html
 +    - layouts/home-baseof.html.html
 +    - layouts/list-baseof.html.html
 +    - layouts/baseof.html.html
 +    - layouts/index-baseof.html
 +    - layouts/home-baseof.html
 +    - layouts/list-baseof.html
 +    - layouts/baseof.html
 +    - layouts/_default/index-baseof.html.html
 +    - layouts/_default/home-baseof.html.html
 +    - layouts/_default/list-baseof.html.html
 +    - layouts/_default/baseof.html.html
 +    - layouts/_default/index-baseof.html
 +    - layouts/_default/home-baseof.html
 +    - layouts/_default/list-baseof.html
 +    - layouts/_default/baseof.html
 +  - Example: Home page with type set to "demotype"
 +    Kind: home
 +    OutputFormat: html
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/demotype/index.html.html
 +    - layouts/demotype/home.html.html
 +    - layouts/demotype/list.html.html
 +    - layouts/demotype/index.html
 +    - layouts/demotype/home.html
 +    - layouts/demotype/list.html
 +    - layouts/index.html.html
 +    - layouts/home.html.html
 +    - layouts/list.html.html
 +    - layouts/index.html
 +    - layouts/home.html
 +    - layouts/list.html
 +    - layouts/_default/index.html.html
 +    - layouts/_default/home.html.html
 +    - layouts/_default/list.html.html
 +    - layouts/_default/index.html
 +    - layouts/_default/home.html
 +    - layouts/_default/list.html
 +  - Example: Base template for home page with type set to "demotype"
 +    Kind: home
 +    OutputFormat: html
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/demotype/index-baseof.html.html
 +    - layouts/demotype/home-baseof.html.html
 +    - layouts/demotype/list-baseof.html.html
 +    - layouts/demotype/baseof.html.html
 +    - layouts/demotype/index-baseof.html
 +    - layouts/demotype/home-baseof.html
 +    - layouts/demotype/list-baseof.html
 +    - layouts/demotype/baseof.html
 +    - layouts/index-baseof.html.html
 +    - layouts/home-baseof.html.html
 +    - layouts/list-baseof.html.html
 +    - layouts/baseof.html.html
 +    - layouts/index-baseof.html
 +    - layouts/home-baseof.html
 +    - layouts/list-baseof.html
 +    - layouts/baseof.html
 +    - layouts/_default/index-baseof.html.html
 +    - layouts/_default/home-baseof.html.html
 +    - layouts/_default/list-baseof.html.html
 +    - layouts/_default/baseof.html.html
 +    - layouts/_default/index-baseof.html
 +    - layouts/_default/home-baseof.html
 +    - layouts/_default/list-baseof.html
 +    - layouts/_default/baseof.html
 +  - Example: Home page with layout set to "demolayout"
 +    Kind: home
 +    OutputFormat: html
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/demolayout.html.html
 +    - layouts/index.html.html
 +    - layouts/home.html.html
 +    - layouts/list.html.html
 +    - layouts/demolayout.html
 +    - layouts/index.html
 +    - layouts/home.html
 +    - layouts/list.html
 +    - layouts/_default/demolayout.html.html
 +    - layouts/_default/index.html.html
 +    - layouts/_default/home.html.html
 +    - layouts/_default/list.html.html
 +    - layouts/_default/demolayout.html
 +    - layouts/_default/index.html
 +    - layouts/_default/home.html
 +    - layouts/_default/list.html
 +  - Example: AMP home, French language
 +    Kind: home
 +    OutputFormat: amp
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/index.fr.amp.html
 +    - layouts/home.fr.amp.html
 +    - layouts/list.fr.amp.html
 +    - layouts/index.amp.html
 +    - layouts/home.amp.html
 +    - layouts/list.amp.html
 +    - layouts/index.fr.html
 +    - layouts/home.fr.html
 +    - layouts/list.fr.html
 +    - layouts/index.html
 +    - layouts/home.html
 +    - layouts/list.html
 +    - layouts/_default/index.fr.amp.html
 +    - layouts/_default/home.fr.amp.html
 +    - layouts/_default/list.fr.amp.html
 +    - layouts/_default/index.amp.html
 +    - layouts/_default/home.amp.html
 +    - layouts/_default/list.amp.html
 +    - layouts/_default/index.fr.html
 +    - layouts/_default/home.fr.html
 +    - layouts/_default/list.fr.html
 +    - layouts/_default/index.html
 +    - layouts/_default/home.html
 +    - layouts/_default/list.html
 +  - Example: JSON home
 +    Kind: home
 +    OutputFormat: json
 +    Suffix: json
 +    Template Lookup Order:
 +    - layouts/index.json.json
 +    - layouts/home.json.json
 +    - layouts/list.json.json
 +    - layouts/index.json
 +    - layouts/home.json
 +    - layouts/list.json
 +    - layouts/_default/index.json.json
 +    - layouts/_default/home.json.json
 +    - layouts/_default/list.json.json
 +    - layouts/_default/index.json
 +    - layouts/_default/home.json
 +    - layouts/_default/list.json
 +  - Example: RSS home
 +    Kind: home
 +    OutputFormat: rss
 +    Suffix: xml
 +    Template Lookup Order:
 +    - layouts/index.rss.xml
 +    - layouts/home.rss.xml
 +    - layouts/rss.xml
 +    - layouts/list.rss.xml
 +    - layouts/index.xml
 +    - layouts/home.xml
 +    - layouts/list.xml
 +    - layouts/_default/index.rss.xml
 +    - layouts/_default/home.rss.xml
 +    - layouts/_default/rss.xml
 +    - layouts/_default/list.rss.xml
 +    - layouts/_default/index.xml
 +    - layouts/_default/home.xml
 +    - layouts/_default/list.xml
 +    - layouts/_internal/_default/rss.xml
 +  - Example: Section list for "posts"
 +    Kind: section
 +    OutputFormat: html
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/posts/posts.html.html
 +    - layouts/posts/section.html.html
 +    - layouts/posts/list.html.html
 +    - layouts/posts/posts.html
 +    - layouts/posts/section.html
 +    - layouts/posts/list.html
 +    - layouts/section/posts.html.html
 +    - layouts/section/section.html.html
 +    - layouts/section/list.html.html
 +    - layouts/section/posts.html
 +    - layouts/section/section.html
 +    - layouts/section/list.html
 +    - layouts/_default/posts.html.html
 +    - layouts/_default/section.html.html
 +    - layouts/_default/list.html.html
 +    - layouts/_default/posts.html
 +    - layouts/_default/section.html
 +    - layouts/_default/list.html
 +  - Example: Section list for "posts" with type set to "blog"
 +    Kind: section
 +    OutputFormat: html
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/blog/posts.html.html
 +    - layouts/blog/section.html.html
 +    - layouts/blog/list.html.html
 +    - layouts/blog/posts.html
 +    - layouts/blog/section.html
 +    - layouts/blog/list.html
 +    - layouts/posts/posts.html.html
 +    - layouts/posts/section.html.html
 +    - layouts/posts/list.html.html
 +    - layouts/posts/posts.html
 +    - layouts/posts/section.html
 +    - layouts/posts/list.html
 +    - layouts/section/posts.html.html
 +    - layouts/section/section.html.html
 +    - layouts/section/list.html.html
 +    - layouts/section/posts.html
 +    - layouts/section/section.html
 +    - layouts/section/list.html
 +    - layouts/_default/posts.html.html
 +    - layouts/_default/section.html.html
 +    - layouts/_default/list.html.html
 +    - layouts/_default/posts.html
 +    - layouts/_default/section.html
 +    - layouts/_default/list.html
 +  - Example: Section list for "posts" with layout set to "demolayout"
 +    Kind: section
 +    OutputFormat: html
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/posts/demolayout.html.html
 +    - layouts/posts/posts.html.html
 +    - layouts/posts/section.html.html
 +    - layouts/posts/list.html.html
 +    - layouts/posts/demolayout.html
 +    - layouts/posts/posts.html
 +    - layouts/posts/section.html
 +    - layouts/posts/list.html
 +    - layouts/section/demolayout.html.html
 +    - layouts/section/posts.html.html
 +    - layouts/section/section.html.html
 +    - layouts/section/list.html.html
 +    - layouts/section/demolayout.html
 +    - layouts/section/posts.html
 +    - layouts/section/section.html
 +    - layouts/section/list.html
 +    - layouts/_default/demolayout.html.html
 +    - layouts/_default/posts.html.html
 +    - layouts/_default/section.html.html
 +    - layouts/_default/list.html.html
 +    - layouts/_default/demolayout.html
 +    - layouts/_default/posts.html
 +    - layouts/_default/section.html
 +    - layouts/_default/list.html
 +  - Example: Section list for "posts"
 +    Kind: section
 +    OutputFormat: rss
 +    Suffix: xml
 +    Template Lookup Order:
 +    - layouts/posts/section.rss.xml
 +    - layouts/posts/rss.xml
 +    - layouts/posts/list.rss.xml
 +    - layouts/posts/section.xml
 +    - layouts/posts/list.xml
 +    - layouts/section/section.rss.xml
 +    - layouts/section/rss.xml
 +    - layouts/section/list.rss.xml
 +    - layouts/section/section.xml
 +    - layouts/section/list.xml
 +    - layouts/_default/section.rss.xml
 +    - layouts/_default/rss.xml
 +    - layouts/_default/list.rss.xml
 +    - layouts/_default/section.xml
 +    - layouts/_default/list.xml
 +    - layouts/_internal/_default/rss.xml
 +  - Example: Taxonomy list for "categories"
 +    Kind: taxonomy
 +    OutputFormat: html
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/categories/category.terms.html.html
 +    - layouts/categories/terms.html.html
 +    - layouts/categories/taxonomy.html.html
 +    - layouts/categories/list.html.html
 +    - layouts/categories/category.terms.html
 +    - layouts/categories/terms.html
 +    - layouts/categories/taxonomy.html
 +    - layouts/categories/list.html
 +    - layouts/category/category.terms.html.html
 +    - layouts/category/terms.html.html
 +    - layouts/category/taxonomy.html.html
 +    - layouts/category/list.html.html
 +    - layouts/category/category.terms.html
 +    - layouts/category/terms.html
 +    - layouts/category/taxonomy.html
 +    - layouts/category/list.html
 +    - layouts/taxonomy/category.terms.html.html
 +    - layouts/taxonomy/terms.html.html
 +    - layouts/taxonomy/taxonomy.html.html
 +    - layouts/taxonomy/list.html.html
 +    - layouts/taxonomy/category.terms.html
 +    - layouts/taxonomy/terms.html
 +    - layouts/taxonomy/taxonomy.html
 +    - layouts/taxonomy/list.html
 +    - layouts/_default/category.terms.html.html
 +    - layouts/_default/terms.html.html
 +    - layouts/_default/taxonomy.html.html
 +    - layouts/_default/list.html.html
 +    - layouts/_default/category.terms.html
 +    - layouts/_default/terms.html
 +    - layouts/_default/taxonomy.html
 +    - layouts/_default/list.html
 +  - Example: Taxonomy list for "categories"
 +    Kind: taxonomy
 +    OutputFormat: rss
 +    Suffix: xml
 +    Template Lookup Order:
 +    - layouts/categories/category.terms.rss.xml
 +    - layouts/categories/terms.rss.xml
 +    - layouts/categories/taxonomy.rss.xml
 +    - layouts/categories/rss.xml
 +    - layouts/categories/list.rss.xml
 +    - layouts/categories/category.terms.xml
 +    - layouts/categories/terms.xml
 +    - layouts/categories/taxonomy.xml
 +    - layouts/categories/list.xml
 +    - layouts/category/category.terms.rss.xml
 +    - layouts/category/terms.rss.xml
 +    - layouts/category/taxonomy.rss.xml
 +    - layouts/category/rss.xml
 +    - layouts/category/list.rss.xml
 +    - layouts/category/category.terms.xml
 +    - layouts/category/terms.xml
 +    - layouts/category/taxonomy.xml
 +    - layouts/category/list.xml
 +    - layouts/taxonomy/category.terms.rss.xml
 +    - layouts/taxonomy/terms.rss.xml
 +    - layouts/taxonomy/taxonomy.rss.xml
 +    - layouts/taxonomy/rss.xml
 +    - layouts/taxonomy/list.rss.xml
 +    - layouts/taxonomy/category.terms.xml
 +    - layouts/taxonomy/terms.xml
 +    - layouts/taxonomy/taxonomy.xml
 +    - layouts/taxonomy/list.xml
 +    - layouts/_default/category.terms.rss.xml
 +    - layouts/_default/terms.rss.xml
 +    - layouts/_default/taxonomy.rss.xml
 +    - layouts/_default/rss.xml
 +    - layouts/_default/list.rss.xml
 +    - layouts/_default/category.terms.xml
 +    - layouts/_default/terms.xml
 +    - layouts/_default/taxonomy.xml
 +    - layouts/_default/list.xml
 +    - layouts/_internal/_default/rss.xml
 +  - Example: Term list for "categories"
 +    Kind: term
 +    OutputFormat: html
 +    Suffix: html
 +    Template Lookup Order:
 +    - layouts/categories/term.html.html
 +    - layouts/categories/category.html.html
 +    - layouts/categories/taxonomy.html.html
 +    - layouts/categories/list.html.html
 +    - layouts/categories/term.html
 +    - layouts/categories/category.html
 +    - layouts/categories/taxonomy.html
 +    - layouts/categories/list.html
 +    - layouts/term/term.html.html
 +    - layouts/term/category.html.html
 +    - layouts/term/taxonomy.html.html
 +    - layouts/term/list.html.html
 +    - layouts/term/term.html
 +    - layouts/term/category.html
 +    - layouts/term/taxonomy.html
 +    - layouts/term/list.html
 +    - layouts/taxonomy/term.html.html
 +    - layouts/taxonomy/category.html.html
 +    - layouts/taxonomy/taxonomy.html.html
 +    - layouts/taxonomy/list.html.html
 +    - layouts/taxonomy/term.html
 +    - layouts/taxonomy/category.html
 +    - layouts/taxonomy/taxonomy.html
 +    - layouts/taxonomy/list.html
 +    - layouts/category/term.html.html
 +    - layouts/category/category.html.html
 +    - layouts/category/taxonomy.html.html
 +    - layouts/category/list.html.html
 +    - layouts/category/term.html
 +    - layouts/category/category.html
 +    - layouts/category/taxonomy.html
 +    - layouts/category/list.html
 +    - layouts/_default/term.html.html
 +    - layouts/_default/category.html.html
 +    - layouts/_default/taxonomy.html.html
 +    - layouts/_default/list.html.html
 +    - layouts/_default/term.html
 +    - layouts/_default/category.html
 +    - layouts/_default/taxonomy.html
 +    - layouts/_default/list.html
 +  - Example: Term list for "categories"
 +    Kind: term
 +    OutputFormat: rss
 +    Suffix: xml
 +    Template Lookup Order:
 +    - layouts/categories/term.rss.xml
 +    - layouts/categories/category.rss.xml
 +    - layouts/categories/taxonomy.rss.xml
 +    - layouts/categories/rss.xml
 +    - layouts/categories/list.rss.xml
 +    - layouts/categories/term.xml
 +    - layouts/categories/category.xml
 +    - layouts/categories/taxonomy.xml
 +    - layouts/categories/list.xml
 +    - layouts/term/term.rss.xml
 +    - layouts/term/category.rss.xml
 +    - layouts/term/taxonomy.rss.xml
 +    - layouts/term/rss.xml
 +    - layouts/term/list.rss.xml
 +    - layouts/term/term.xml
 +    - layouts/term/category.xml
 +    - layouts/term/taxonomy.xml
 +    - layouts/term/list.xml
 +    - layouts/taxonomy/term.rss.xml
 +    - layouts/taxonomy/category.rss.xml
 +    - layouts/taxonomy/taxonomy.rss.xml
 +    - layouts/taxonomy/rss.xml
 +    - layouts/taxonomy/list.rss.xml
 +    - layouts/taxonomy/term.xml
 +    - layouts/taxonomy/category.xml
 +    - layouts/taxonomy/taxonomy.xml
 +    - layouts/taxonomy/list.xml
 +    - layouts/category/term.rss.xml
 +    - layouts/category/category.rss.xml
 +    - layouts/category/taxonomy.rss.xml
 +    - layouts/category/rss.xml
 +    - layouts/category/list.rss.xml
 +    - layouts/category/term.xml
 +    - layouts/category/category.xml
 +    - layouts/category/taxonomy.xml
 +    - layouts/category/list.xml
 +    - layouts/_default/term.rss.xml
 +    - layouts/_default/category.rss.xml
 +    - layouts/_default/taxonomy.rss.xml
 +    - layouts/_default/rss.xml
 +    - layouts/_default/list.rss.xml
 +    - layouts/_default/term.xml
 +    - layouts/_default/category.xml
 +    - layouts/_default/taxonomy.xml
 +    - layouts/_default/list.xml
 +    - layouts/_internal/_default/rss.xml
 +tpl:
 +  funcs:
 +    cast:
 +      ToFloat:
 +        Aliases:
 +        - float
 +        Args:
 +        - v
 +        Description: ToFloat converts v to a float.
 +        Examples:
 +        - - '{{ "1234" | float | printf "%T" }}'
 +          - float64
 +      ToInt:
 +        Aliases:
 +        - int
 +        Args:
 +        - v
 +        Description: ToInt converts v to an int.
 +        Examples:
 +        - - '{{ "1234" | int | printf "%T" }}'
 +          - int
 +      ToString:
 +        Aliases:
 +        - string
 +        Args:
 +        - v
 +        Description: ToString converts v to a string.
 +        Examples:
 +        - - '{{ 1234 | string | printf "%T" }}'
 +          - string
 +    collections:
 +      After:
 +        Aliases:
 +        - after
 +        Args:
 +        - "n"
 +        - l
 +        Description: After returns all the items after the first n items in list l.
 +        Examples: []
 +      Append:
 +        Aliases:
 +        - append
 +        Args:
 +        - args
 +        Description: "Append appends args up to the last one to the slice in the last
 +          argument.\nThis construct allows template constructs like this:\n\n\t{{
 +          $pages = $pages | append $p2 $p1 }}\n\nNote that with 2 arguments where
 +          both are slices of the same type,\nthe first slice will be appended to the
 +          second:\n\n\t{{ $pages = $pages | append .Site.RegularPages }}"
 +        Examples: []
 +      Apply:
 +        Aliases:
 +        - apply
 +        Args:
 +        - ctx
 +        - c
 +        - fname
 +        - args
 +        Description: Apply takes an array or slice c and returns a new slice with
 +          the function fname applied over it.
 +        Examples: []
 +      Complement:
 +        Aliases:
 +        - complement
 +        Args:
 +        - ls
 +        Description: "Complement gives the elements in the last element of ls that
 +          are not in\nany of the others.\n\nAll elements of ls must be slices or arrays
 +          of comparable types.\n\nThe reasoning behind this rather clumsy API is so
 +          we can do this in the templates:\n\n\t{{ $c := .Pages | complement $last4
 +          }}"
 +        Examples:
 +        - - '{{ slice "a" "b" "c" "d" "e" "f" | complement (slice "b" "c") (slice
 +            "d" "e") }}'
 +          - '[a f]'
 +      Delimit:
 +        Aliases:
 +        - delimit
 +        Args:
 +        - ctx
 +        - l
 +        - sep
 +        - last
 +        Description: |-
 +          Delimit takes a given list l and returns a string delimited by sep.
 +          If last is passed to the function, it will be used as the final delimiter.
 +        Examples:
 +        - - '{{ delimit (slice "A" "B" "C") ", " " and " }}'
 +          - A, B and C
 +      Dictionary:
 +        Aliases:
 +        - dict
 +        Args:
 +        - values
 +        Description: |-
 +          Dictionary creates a new map from the given parameters by
 +          treating values as key-value pairs.  The number of values must be even.
 +          The keys can be string slices, which will create the needed nested structure.
 +        Examples: []
-       NumFmt:
-         Aliases: null
-         Args: null
-         Description: ""
-         Examples: null
 +      First:
 +        Aliases:
 +        - first
 +        Args:
 +        - limit
 +        - l
 +        Description: First returns the first limit items in list l.
 +        Examples: []
 +      Group:
 +        Aliases:
 +        - group
 +        Args:
 +        - key
 +        - items
 +        Description: |-
 +          Group groups a set of items by the given key.
 +          This is currently only supported for Pages.
 +        Examples: []
 +      In:
 +        Aliases:
 +        - in
 +        Args:
 +        - l
 +        - v
 +        Description: In returns whether v is in the list l.  l may be an array or
 +          slice.
 +        Examples:
 +        - - '{{ if in "this string contains a substring" "substring" }}Substring found!{{
 +            end }}'
 +          - Substring found!
 +      Index:
 +        Aliases:
 +        - index
 +        Args:
 +        - item
 +        - args
 +        Description: |-
 +          Index returns the result of indexing its first argument by the following
 +          arguments. Thus "index x 1 2 3" is, in Go syntax, x[1][2][3]. Each
 +          indexed item must be a map, slice, or array.
 +
 +          Adapted from Go stdlib src/text/template/funcs.go.
 +
 +          We deviate from the stdlib mostly because of https://github.com/golang/go/issues/14751.
 +        Examples: []
 +      Intersect:
 +        Aliases:
 +        - intersect
 +        Args:
 +        - l1
 +        - l2
 +        Description: |-
 +          Intersect returns the common elements in the given sets, l1 and l2.  l1 and
 +          l2 must be of the same type and may be either arrays or slices.
 +        Examples: []
 +      IsSet:
 +        Aliases:
 +        - isSet
 +        - isset
 +        Args:
 +        - c
 +        - key
 +        Description: |-
 +          IsSet returns whether a given array, channel, slice, or map in c has the given key
 +          defined.
 +        Examples: []
 +      KeyVals:
 +        Aliases:
 +        - keyVals
 +        Args:
 +        - key
 +        - values
 +        Description: KeyVals creates a key and values wrapper.
 +        Examples:
 +        - - '{{ keyVals "key" "a" "b" }}'
 +          - 'key: [a b]'
 +      Last:
 +        Aliases:
 +        - last
 +        Args:
 +        - limit
 +        - l
 +        Description: Last returns the last limit items in the list l.
 +        Examples: []
 +      Merge:
 +        Aliases:
 +        - merge
 +        Args:
 +        - params
 +        Description: |-
 +          Merge creates a copy of the final parameter in params and merges the preceding
 +          parameters into it in reverse order.
 +
 +          Currently only maps are supported. Key handling is case insensitive.
 +        Examples:
 +        - - '{{ dict "title" "Hugo Rocks!" | collections.Merge (dict "title" "Default
 +            Title" "description" "Yes, Hugo Rocks!") | sort }}'
 +          - '[Yes, Hugo Rocks! Hugo Rocks!]'
 +        - - '{{ merge (dict "title" "Default Title" "description" "Yes, Hugo Rocks!")
 +            (dict "title" "Hugo Rocks!") | sort }}'
 +          - '[Yes, Hugo Rocks! Hugo Rocks!]'
 +        - - '{{ merge (dict "title" "Default Title" "description" "Yes, Hugo Rocks!")
 +            (dict "title" "Hugo Rocks!") (dict "extra" "For reals!") | sort }}'
 +          - '[Yes, Hugo Rocks! For reals! Hugo Rocks!]'
 +      NewScratch:
 +        Aliases:
 +        - newScratch
 +        Args: null
 +        Description: |-
 +          NewScratch creates a new Scratch which can be used to store values in a
 +          thread safe way.
 +        Examples:
 +        - - '{{ $scratch := newScratch }}{{ $scratch.Add "b" 2 }}{{ $scratch.Add "b"
 +            2 }}{{ $scratch.Get "b" }}'
 +          - "4"
 +      Querify:
 +        Aliases:
 +        - querify
 +        Args:
 +        - params
 +        Description: Querify encodes the given params in URL-encoded form ("bar=baz&foo=quux")
 +          sorted by key.
 +        Examples:
 +        - - '{{ (querify "foo" 1 "bar" 2 "baz" "with spaces" "qux" "this&that=those")
 +            | safeHTML }}'
 +          - bar=2&baz=with+spaces&foo=1&qux=this%26that%3Dthose
 +        - - <a href="https://www.google.com?{{ (querify "q" "test" "page" 3) | safeURL
 +            }}">Search</a>
 +          - <a href="https://www.google.com?page=3&amp;q=test">Search</a>
 +        - - '{{ slice "foo" 1 "bar" 2 | querify | safeHTML }}'
 +          - bar=2&foo=1
 +      Reverse:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Seq:
 +        Aliases:
 +        - seq
 +        Args:
 +        - args
 +        Description: "Seq creates a sequence of integers from args. It's named and
 +          used as GNU's seq.\n\nExamples:\n\n\t3 => 1, 2, 3\n\t1 2 4 => 1, 3\n\t-3
 +          => -1, -2, -3\n\t1 4 => 1, 2, 3, 4\n\t1 -2 => 1, 0, -1, -2"
 +        Examples:
 +        - - '{{ seq 3 }}'
 +          - '[1 2 3]'
 +      Shuffle:
 +        Aliases:
 +        - shuffle
 +        Args:
 +        - l
 +        Description: Shuffle returns list l in a randomized order.
 +        Examples: []
 +      Slice:
 +        Aliases:
 +        - slice
 +        Args:
 +        - args
 +        Description: Slice returns a slice of all passed arguments.
 +        Examples:
 +        - - '{{ slice "B" "C" "A" | sort }}'
 +          - '[A B C]'
 +      Sort:
 +        Aliases:
 +        - sort
 +        Args:
 +        - ctx
 +        - l
 +        - args
 +        Description: Sort returns a sorted copy of the list l.
 +        Examples: []
 +      SymDiff:
 +        Aliases:
 +        - symdiff
 +        Args:
 +        - s2
 +        - s1
 +        Description: |-
 +          SymDiff returns the symmetric difference of s1 and s2.
 +          Arguments must be either a slice or an array of comparable types.
 +        Examples:
 +        - - '{{ slice 1 2 3 | symdiff (slice 3 4) }}'
 +          - '[1 2 4]'
 +      Union:
 +        Aliases:
 +        - union
 +        Args:
 +        - l1
 +        - l2
 +        Description: |-
 +          Union returns the union of the given sets, l1 and l2. l1 and
 +          l2 must be of the same type and may be either arrays or slices.
 +          If l1 and l2 aren't of the same type then l1 will be returned.
 +          If either l1 or l2 is nil then the non-nil list will be returned.
 +        Examples:
 +        - - '{{ union (slice 1 2 3) (slice 3 4 5) }}'
 +          - '[1 2 3 4 5]'
 +      Uniq:
 +        Aliases:
 +        - uniq
 +        Args:
 +        - l
 +        Description: Uniq returns a new list with duplicate elements in the list l
 +          removed.
 +        Examples:
 +        - - '{{ slice 1 2 3 2 | uniq }}'
 +          - '[1 2 3]'
 +      Where:
 +        Aliases:
 +        - where
 +        Args:
 +        - ctx
 +        - c
 +        - key
 +        - args
 +        Description: Where returns a filtered subset of collection c.
 +        Examples: []
 +    compare:
 +      Conditional:
 +        Aliases:
 +        - cond
 +        Args:
 +        - cond
 +        - v1
 +        - v2
 +        Description: |-
 +          Conditional can be used as a ternary operator.
 +
 +          It returns v1 if cond is true, else v2.
 +        Examples:
 +        - - '{{ cond (eq (add 2 2) 4) "2+2 is 4" "what?" | safeHTML }}'
 +          - 2+2 is 4
 +      Default:
 +        Aliases:
 +        - default
 +        Args:
 +        - defaultv
 +        - givenv
 +        Description: |-
 +          Default checks whether a givenv is set and returns the default value defaultv if it
 +          is not.  "Set" in this context means non-zero for numeric types and times;
 +          non-zero length for strings, arrays, slices, and maps;
 +          any boolean or struct value; or non-nil for any other types.
 +        Examples:
 +        - - '{{ "Hugo Rocks!" | default "Hugo Rules!" }}'
 +          - Hugo Rocks!
 +        - - '{{ "" | default "Hugo Rules!" }}'
 +          - Hugo Rules!
 +      Eq:
 +        Aliases:
 +        - eq
 +        Args:
 +        - first
 +        - others
 +        Description: Eq returns the boolean truth of arg1 == arg2 || arg1 == arg3
 +          || arg1 == arg4.
 +        Examples:
 +        - - '{{ if eq .Section "blog" }}current-section{{ end }}'
 +          - current-section
 +      Ge:
 +        Aliases:
 +        - ge
 +        Args:
 +        - first
 +        - others
 +        Description: Ge returns the boolean truth of arg1 >= arg2 && arg1 >= arg3
 +          && arg1 >= arg4.
 +        Examples:
 +        - - '{{ if ge hugo.Version "0.80" }}Reasonable new Hugo version!{{ end }}'
 +          - Reasonable new Hugo version!
 +      Gt:
 +        Aliases:
 +        - gt
 +        Args:
 +        - first
 +        - others
 +        Description: Gt returns the boolean truth of arg1 > arg2 && arg1 > arg3 &&
 +          arg1 > arg4.
 +        Examples: []
 +      Le:
 +        Aliases:
 +        - le
 +        Args:
 +        - first
 +        - others
 +        Description: Le returns the boolean truth of arg1 <= arg2 && arg1 <= arg3
 +          && arg1 <= arg4.
 +        Examples: []
 +      Lt:
 +        Aliases:
 +        - lt
 +        Args:
 +        - first
 +        - others
 +        Description: Lt returns the boolean truth of arg1 < arg2 && arg1 < arg3 &&
 +          arg1 < arg4.
 +        Examples: []
 +      LtCollate:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Ne:
 +        Aliases:
 +        - ne
 +        Args:
 +        - first
 +        - others
 +        Description: Ne returns the boolean truth of arg1 != arg2 && arg1 != arg3
 +          && arg1 != arg4.
 +        Examples: []
 +    crypto:
 +      FNV32a:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      HMAC:
 +        Aliases:
 +        - hmac
 +        Args:
 +        - h
 +        - k
 +        - m
 +        - e
 +        Description: HMAC returns a cryptographic hash that uses a key to sign a message.
 +        Examples:
 +        - - '{{ hmac "sha256" "Secret key" "Hello world, gophers!" }}'
 +          - b6d11b6c53830b9d87036272ca9fe9d19306b8f9d8aa07b15da27d89e6e34f40
 +      MD5:
 +        Aliases:
 +        - md5
 +        Args:
 +        - v
 +        Description: MD5 hashes the v and returns its MD5 checksum.
 +        Examples:
 +        - - '{{ md5 "Hello world, gophers!" }}'
 +          - b3029f756f98f79e7f1b7f1d1f0dd53b
 +        - - '{{ crypto.MD5 "Hello world, gophers!" }}'
 +          - b3029f756f98f79e7f1b7f1d1f0dd53b
 +      SHA1:
 +        Aliases:
 +        - sha1
 +        Args:
 +        - v
 +        Description: SHA1 hashes v and returns its SHA1 checksum.
 +        Examples:
 +        - - '{{ sha1 "Hello world, gophers!" }}'
 +          - c8b5b0e33d408246e30f53e32b8f7627a7a649d4
 +      SHA256:
 +        Aliases:
 +        - sha256
 +        Args:
 +        - v
 +        Description: SHA256 hashes v and returns its SHA256 checksum.
 +        Examples:
 +        - - '{{ sha256 "Hello world, gophers!" }}'
 +          - 6ec43b78da9669f50e4e422575c54bf87536954ccd58280219c393f2ce352b46
 +    css:
 +      PostCSS:
 +        Aliases:
 +        - postCSS
 +        Args:
 +        - args
 +        Description: PostCSS processes the given Resource with PostCSS.
 +        Examples: []
 +      Quoted:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Sass:
 +        Aliases:
 +        - toCSS
 +        Args:
 +        - args
 +        Description: Sass processes the given Resource with SASS.
 +        Examples: []
 +      TailwindCSS:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Unquoted:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +    data:
 +      GetCSV:
 +        Aliases:
 +        - getCSV
 +        Args:
 +        - sep
 +        - args
 +        Description: |-
 +          GetCSV expects the separator sep and one or n-parts of a URL to a resource which
 +          can either be a local or a remote one.
 +          The data separator can be a comma, semi-colon, pipe, etc, but only one character.
 +          If you provide multiple parts for the URL they will be joined together to the final URL.
 +          GetCSV returns nil or a slice slice to use in a short code.
 +        Examples: []
 +      GetJSON:
 +        Aliases:
 +        - getJSON
 +        Args:
 +        - args
 +        Description: |-
 +          GetJSON expects one or n-parts of a URL in args to a resource which can either be a local or a remote one.
 +          If you provide multiple parts they will be joined together to the final URL.
 +          GetJSON returns nil or parsed JSON to use in a short code.
 +        Examples: []
 +    debug:
 +      Dump:
 +        Aliases: null
 +        Args:
 +        - val
 +        Description: |-
 +          Dump returns a object dump of val as a string.
 +          Note that not every value passed to Dump will print so nicely, but
 +          we'll improve on that.
 +
 +          We recommend using the "go" Chroma lexer to format the output
 +          nicely.
 +
 +          Also note that the output from Dump may change from Hugo version to the next,
 +          so don't depend on a specific output.
 +        Examples:
 +        - - |-
 +            {{ $m := newScratch }}
 +            {{ $m.Set "Hugo" "Rocks!" }}
 +            {{ $m.Values | debug.Dump | safeHTML }}
 +          - |-
 +            {
 +              "Hugo": "Rocks!"
 +            }
 +      TestDeprecationErr:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      TestDeprecationInfo:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      TestDeprecationWarn:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Timer:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      VisualizeSpaces:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +    diagrams:
 +      Goat:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +    encoding:
 +      Base64Decode:
 +        Aliases:
 +        - base64Decode
 +        Args:
 +        - content
 +        Description: Base64Decode returns the base64 decoding of the given content.
 +        Examples:
 +        - - '{{ "SGVsbG8gd29ybGQ=" | base64Decode }}'
 +          - Hello world
 +        - - '{{ 42 | base64Encode | base64Decode }}'
 +          - "42"
 +      Base64Encode:
 +        Aliases:
 +        - base64Encode
 +        Args:
 +        - content
 +        Description: Base64Encode returns the base64 encoding of the given content.
 +        Examples:
 +        - - '{{ "Hello world" | base64Encode }}'
 +          - SGVsbG8gd29ybGQ=
 +      Jsonify:
 +        Aliases:
 +        - jsonify
 +        Args:
 +        - args
 +        Description: |-
 +          Jsonify encodes a given object to JSON.  To pretty print the JSON, pass a map
 +          or dictionary of options as the first value in args.  Supported options are
 +          "prefix" and "indent".  Each JSON element in the output will begin on a new
 +          line beginning with prefix followed by one or more copies of indent according
 +          to the indentation nesting.
 +        Examples:
 +        - - '{{ (slice "A" "B" "C") | jsonify }}'
 +          - '["A","B","C"]'
 +        - - '{{ (slice "A" "B" "C") | jsonify (dict "indent" "  ") }}'
 +          - |-
 +            [
 +              "A",
 +              "B",
 +              "C"
 +            ]
 +    fmt:
 +      Errorf:
 +        Aliases:
 +        - errorf
 +        Args:
 +        - format
 +        - args
 +        Description: |-
 +          Errorf formats args according to a format specifier and logs an ERROR.
 +          It returns an empty string.
 +        Examples:
 +        - - '{{ errorf "%s." "failed" }}'
 +          - ""
 +      Erroridf:
 +        Aliases:
 +        - erroridf
 +        Args:
 +        - id
 +        - format
 +        - args
 +        Description: |-
 +          Erroridf formats args according to a format specifier and logs an ERROR and
 +          an information text that the error with the given id can be suppressed in config.
 +          It returns an empty string.
 +        Examples:
 +        - - '{{ erroridf "my-err-id" "%s." "failed" }}'
 +          - ""
 +      Errormf:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Print:
 +        Aliases:
 +        - print
 +        Args:
 +        - args
 +        Description: Print returns a string representation of args.
 +        Examples:
 +        - - '{{ print "works!" }}'
 +          - works!
 +      Printf:
 +        Aliases:
 +        - printf
 +        Args:
 +        - format
 +        - args
 +        Description: Printf returns string representation of args formatted with the
 +          layout in format.
 +        Examples:
 +        - - '{{ printf "%s!" "works" }}'
 +          - works!
 +      Println:
 +        Aliases:
 +        - println
 +        Args:
 +        - args
 +        Description: Println returns string representation of args  ending with a
 +          newline.
 +        Examples:
 +        - - '{{ println "works!" }}'
 +          - |
 +            works!
 +      Warnf:
 +        Aliases:
 +        - warnf
 +        Args:
 +        - format
 +        - args
 +        Description: |-
 +          Warnf formats args according to a format specifier and logs a WARNING.
 +          It returns an empty string.
 +        Examples:
 +        - - '{{ warnf "%s." "warning" }}'
 +          - ""
 +      Warnidf:
 +        Aliases:
 +        - warnidf
 +        Args:
 +        - id
 +        - format
 +        - args
 +        Description: |-
 +          Warnidf formats args according to a format specifier and logs an WARNING and
 +          an information text that the warning with the given id can be suppressed in config.
 +          It returns an empty string.
 +        Examples:
 +        - - '{{ warnidf "my-warn-id" "%s." "warning" }}'
 +          - ""
 +      Warnmf:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +    hash:
 +      FNV32a:
 +        Aliases: null
 +        Args:
 +        - v
 +        Description: FNV32a hashes v using fnv32a algorithm.
 +        Examples:
 +        - - '{{ hash.FNV32a "Hugo Rocks!!" }}'
 +          - "1515779328"
 +      XxHash:
 +        Aliases:
 +        - xxhash
 +        Args:
 +        - v
 +        Description: XxHash returns the xxHash of the input string.
 +        Examples:
 +        - - '{{ hash.XxHash "The quick brown fox jumps over the lazy dog" }}'
 +          - 0b242d361fda71bc
 +    hugo:
 +      Deps:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Generator:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      IsDevelopment:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      IsExtended:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      IsMultiHost:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      IsMultihost:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      IsMultilingual:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      IsProduction:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      IsServer:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
++      Store:
++        Aliases: null
++        Args: null
++        Description: ""
++        Examples: null
 +      Version:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      WorkingDir:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +    images:
 +      AutoOrient:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Brightness:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      ColorBalance:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Colorize:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Config:
 +        Aliases:
 +        - imageConfig
 +        Args:
 +        - path
 +        Description: |-
 +          Config returns the image.Config for the specified path relative to the
 +          working directory.
 +        Examples: []
 +      Contrast:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Dither:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Filter:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Gamma:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      GaussianBlur:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Grayscale:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Hue:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Invert:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Opacity:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Overlay:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Padding:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Pixelate:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Process:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Saturation:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Sepia:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Sigmoid:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Text:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      UnsharpMask:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +    inflect:
 +      Humanize:
 +        Aliases:
 +        - humanize
 +        Args:
 +        - v
 +        Description: |-
 +          Humanize returns the humanized form of v.
 +
 +          If v is either an integer or a string containing an integer
 +          value, the behavior is to add the appropriate ordinal.
 +        Examples:
 +        - - '{{ humanize "my-first-post" }}'
 +          - My first post
 +        - - '{{ humanize "myCamelPost" }}'
 +          - My camel post
 +        - - '{{ humanize "52" }}'
 +          - 52nd
 +        - - '{{ humanize 103 }}'
 +          - 103rd
 +      Pluralize:
 +        Aliases:
 +        - pluralize
 +        Args:
 +        - v
 +        Description: Pluralize returns the plural form of the single word in v.
 +        Examples:
 +        - - '{{ "cat" | pluralize }}'
 +          - cats
 +      Singularize:
 +        Aliases:
 +        - singularize
 +        Args:
 +        - v
 +        Description: Singularize returns the singular form of a single word in v.
 +        Examples:
 +        - - '{{ "cats" | singularize }}'
 +          - cat
 +    js:
 +      Babel:
 +        Aliases:
 +        - babel
 +        Args:
 +        - args
 +        Description: Babel processes the given Resource with Babel.
 +        Examples: []
 +      Build:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +    lang:
 +      FormatAccounting:
 +        Aliases: null
 +        Args:
 +        - precision
 +        - currency
 +        - number
 +        Description: |-
 +          FormatAccounting returns the currency representation of number for the given currency and precision
 +          for the current language in accounting notation.
 +
 +          The return value is formatted with at least two decimal places.
 +        Examples:
 +        - - '{{ 512.5032 | lang.FormatAccounting 2 "NOK" }}'
 +          - NOK512.50
 +      FormatCurrency:
 +        Aliases: null
 +        Args:
 +        - precision
 +        - currency
 +        - number
 +        Description: |-
 +          FormatCurrency returns the currency representation of number for the given currency and precision
 +          for the current language.
 +
 +          The return value is formatted with at least two decimal places.
 +        Examples:
 +        - - '{{ 512.5032 | lang.FormatCurrency 2 "USD" }}'
 +          - $512.50
 +      FormatNumber:
 +        Aliases: null
 +        Args:
 +        - precision
 +        - number
 +        Description: FormatNumber formats number with the given precision for the
 +          current language.
 +        Examples:
 +        - - '{{ 512.5032 | lang.FormatNumber 2 }}'
 +          - "512.50"
 +      FormatNumberCustom:
 +        Aliases: null
 +        Args:
 +        - precision
 +        - number
 +        - options
 +        Description: |-
 +          FormatNumberCustom formats a number with the given precision. The first
 +          options parameter is a space-delimited string of characters to represent
 +          negativity, the decimal point, and grouping. The default value is `- . ,`.
 +          The second options parameter defines an alternate delimiting character.
 +
 +          Note that numbers are rounded up at 5 or greater.
 +          So, with precision set to 0, 1.5 becomes `2`, and 1.4 becomes `1`.
 +
 +          For a simpler function that adapts to the current language, see FormatNumber.
 +        Examples:
 +        - - '{{ lang.FormatNumberCustom 2 12345.6789 }}'
 +          - 12,345.68
 +        - - '{{ lang.FormatNumberCustom 2 12345.6789 "- , ." }}'
 +          - 12.345,68
 +        - - '{{ lang.FormatNumberCustom 6 -12345.6789 "- ." }}'
 +          - "-12345.678900"
 +        - - '{{ lang.FormatNumberCustom 0 -12345.6789 "- . ," }}'
 +          - -12,346
 +        - - '{{ lang.FormatNumberCustom 0 -12345.6789 "-|.| " "|" }}'
 +          - -12 346
 +        - - '{{ -98765.4321 | lang.FormatNumberCustom 2 }}'
 +          - -98,765.43
 +      FormatPercent:
 +        Aliases: null
 +        Args:
 +        - precision
 +        - number
 +        Description: |-
 +          FormatPercent formats number with the given precision for the current language.
 +          Note that the number is assumed to be a percentage.
 +        Examples:
 +        - - '{{ 512.5032 | lang.FormatPercent 2 }}'
 +          - 512.50%
 +      Merge:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
-       DisqusShortname:
-         Aliases: null
-         Args: null
-         Description: ""
-         Examples: null
 +      Translate:
 +        Aliases:
 +        - i18n
 +        - T
 +        Args:
 +        - ctx
 +        - id
 +        - args
 +        Description: Translate returns a translated string for id.
 +        Examples: []
 +    math:
 +      Abs:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        Description: Abs returns the absolute value of n.
 +        Examples:
 +        - - '{{ math.Abs -2.1 }}'
 +          - "2.1"
 +      Acos:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        Description: Acos returns the arccosine, in radians, of n.
 +        Examples:
 +        - - '{{ math.Acos 1 }}'
 +          - "0"
 +      Add:
 +        Aliases:
 +        - add
 +        Args:
 +        - inputs
 +        Description: Add adds the multivalued addends n1 and n2 or more values.
 +        Examples:
 +        - - '{{ add 1 2 }}'
 +          - "3"
 +      Asin:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        Description: Asin returns the arcsine, in radians, of n.
 +        Examples:
 +        - - '{{ math.Asin 1 }}'
 +          - "1.5707963267948966"
 +      Atan:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        Description: Atan returns the arctangent, in radians, of n.
 +        Examples:
 +        - - '{{ math.Atan 1 }}'
 +          - "0.7853981633974483"
 +      Atan2:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        - m
 +        Description: Atan2 returns the arc tangent of n/m, using the signs of the
 +          two to determine the quadrant of the return value.
 +        Examples:
 +        - - '{{ math.Atan2 1 2 }}'
 +          - "0.4636476090008061"
 +      Ceil:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        Description: Ceil returns the least integer value greater than or equal to
 +          n.
 +        Examples:
 +        - - '{{ math.Ceil 2.1 }}'
 +          - "3"
 +      Cos:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        Description: Cos returns the cosine of the radian argument n.
 +        Examples:
 +        - - '{{ math.Cos 1 }}'
 +          - "0.5403023058681398"
 +      Counter:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Div:
 +        Aliases:
 +        - div
 +        Args:
 +        - inputs
 +        Description: Div divides n1 by n2.
 +        Examples:
 +        - - '{{ div 6 3 }}'
 +          - "2"
 +      Floor:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        Description: Floor returns the greatest integer value less than or equal to
 +          n.
 +        Examples:
 +        - - '{{ math.Floor 1.9 }}'
 +          - "1"
 +      Log:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        Description: Log returns the natural logarithm of the number n.
 +        Examples:
 +        - - '{{ math.Log 1 }}'
 +          - "0"
 +      Max:
 +        Aliases: null
 +        Args:
 +        - inputs
 +        Description: Max returns the greater of all numbers in inputs. Any slices
 +          in inputs are flattened.
 +        Examples:
 +        - - '{{ math.Max 1 2 }}'
 +          - "2"
 +      Min:
 +        Aliases: null
 +        Args:
 +        - inputs
 +        Description: Min returns the smaller of all numbers in inputs. Any slices
 +          in inputs are flattened.
 +        Examples:
 +        - - '{{ math.Min 1 2 }}'
 +          - "1"
 +      Mod:
 +        Aliases:
 +        - mod
 +        Args:
 +        - n1
 +        - n2
 +        Description: Mod returns n1 % n2.
 +        Examples:
 +        - - '{{ mod 15 3 }}'
 +          - "0"
 +      ModBool:
 +        Aliases:
 +        - modBool
 +        Args:
 +        - n1
 +        - n2
 +        Description: ModBool returns the boolean of n1 % n2.  If n1 % n2 == 0, return
 +          true.
 +        Examples:
 +        - - '{{ modBool 15 3 }}'
 +          - "true"
 +      Mul:
 +        Aliases:
 +        - mul
 +        Args:
 +        - inputs
 +        Description: Mul multiplies the multivalued numbers n1 and n2 or more values.
 +        Examples:
 +        - - '{{ mul 2 3 }}'
 +          - "6"
 +      Pi:
 +        Aliases: null
 +        Args: null
 +        Description: Pi returns the mathematical constant pi.
 +        Examples:
 +        - - '{{ math.Pi }}'
 +          - "3.141592653589793"
 +      Pow:
 +        Aliases:
 +        - pow
 +        Args:
 +        - n1
 +        - n2
 +        Description: Pow returns n1 raised to the power of n2.
 +        Examples:
 +        - - '{{ math.Pow 2 3 }}'
 +          - "8"
 +      Product:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Rand:
 +        Aliases: null
 +        Args: null
 +        Description: Rand returns, as a float64, a pseudo-random number in the half-open
 +          interval [0.0,1.0).
 +        Examples:
 +        - - '{{ math.Rand }}'
 +          - "0.6312770459590062"
 +      Round:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        Description: Round returns the integer nearest to n, rounding half away from
 +          zero.
 +        Examples:
 +        - - '{{ math.Round 1.5 }}'
 +          - "2"
 +      Sin:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        Description: Sin returns the sine of the radian argument n.
 +        Examples:
 +        - - '{{ math.Sin 1 }}'
 +          - "0.8414709848078965"
 +      Sqrt:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        Description: Sqrt returns the square root of the number n.
 +        Examples:
 +        - - '{{ math.Sqrt 81 }}'
 +          - "9"
 +      Sub:
 +        Aliases:
 +        - sub
 +        Args:
 +        - inputs
 +        Description: Sub subtracts multivalued.
 +        Examples:
 +        - - '{{ sub 3 2 }}'
 +          - "1"
 +      Sum:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Tan:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        Description: Tan returns the tangent of the radian argument n.
 +        Examples:
 +        - - '{{ math.Tan 1 }}'
 +          - "1.557407724654902"
 +      ToDegrees:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        Description: ToDegrees converts radians into degrees.
 +        Examples:
 +        - - '{{ math.ToDegrees 1.5707963267948966 }}'
 +          - "90"
 +      ToRadians:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        Description: ToRadians converts degrees into radians.
 +        Examples:
 +        - - '{{ math.ToRadians 90 }}'
 +          - "1.5707963267948966"
 +    openapi3:
 +      Unmarshal:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: []
 +    os:
 +      FileExists:
 +        Aliases:
 +        - fileExists
 +        Args:
 +        - i
 +        Description: FileExists checks whether a file exists under the given path.
 +        Examples:
 +        - - '{{ fileExists "foo.txt" }}'
 +          - "false"
 +      Getenv:
 +        Aliases:
 +        - getenv
 +        Args:
 +        - key
 +        Description: |-
 +          Getenv retrieves the value of the environment variable named by the key.
 +          It returns the value, which will be empty if the variable is not present.
 +        Examples: []
 +      ReadDir:
 +        Aliases:
 +        - readDir
 +        Args:
 +        - i
 +        Description: ReadDir lists the directory contents relative to the configured
 +          WorkingDir.
 +        Examples:
 +        - - '{{ range (readDir "files") }}{{ .Name }}{{ end }}'
 +          - README.txt
 +      ReadFile:
 +        Aliases:
 +        - readFile
 +        Args:
 +        - i
 +        Description: |-
 +          ReadFile reads the file named by filename relative to the configured WorkingDir.
 +          It returns the contents as a string.
 +          There is an upper size limit set at 1 megabytes.
 +        Examples:
 +        - - '{{ readFile "files/README.txt" }}'
 +          - Hugo Rocks!
 +      Stat:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +    partials:
 +      Include:
 +        Aliases:
 +        - partial
 +        Args:
 +        - ctx
 +        - name
 +        - contextList
 +        Description: |-
 +          Include executes the named partial.
 +          If the partial contains a return statement, that value will be returned.
 +          Else, the rendered output will be returned:
 +          A string if the partial is a text/template, or template.HTML when html/template.
 +          Note that ctx is provided by Hugo, not the end user.
 +        Examples:
 +        - - '{{ partial "header.html" . }}'
 +          - <title>Hugo Rocks!</title>
 +      IncludeCached:
 +        Aliases:
 +        - partialCached
 +        Args:
 +        - ctx
 +        - name
 +        - context
 +        - variants
 +        Description: |-
 +          IncludeCached executes and caches partial templates.  The cache is created with name+variants as the key.
 +          Note that ctx is provided by Hugo, not the end user.
 +        Examples: []
 +    path:
 +      Base:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      BaseName:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Clean:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Dir:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Ext:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Join:
 +        Aliases: null
 +        Args:
 +        - elements
 +        Description: |-
 +          Join joins any number of path elements into a single path, adding a
 +          separating slash if necessary. All the input
 +          path elements are passed into filepath.ToSlash converting any Windows slashes
 +          to forward slashes.
 +          The result is Cleaned; in particular,
 +          all empty strings are ignored.
 +        Examples:
 +        - - '{{ slice "my/path" "filename.txt" | path.Join }}'
 +          - my/path/filename.txt
 +        - - '{{ path.Join "my" "path" "filename.txt" }}'
 +          - my/path/filename.txt
 +        - - '{{ "my/path/filename.txt" | path.Ext }}'
 +          - .txt
 +        - - '{{ "my/path/filename.txt" | path.Base }}'
 +          - filename.txt
 +        - - '{{ "my/path/filename.txt" | path.Dir }}'
 +          - my/path
 +      Split:
 +        Aliases: null
 +        Args:
 +        - path
 +        Description: |-
 +          Split splits path immediately following the final slash,
 +          separating it into a directory and file name component.
 +          If there is no slash in path, Split returns an empty dir and
 +          file set to path.
 +          The input path is passed into filepath.ToSlash converting any Windows slashes
 +          to forward slashes.
 +          The returned values have the property that path = dir+file.
 +        Examples:
 +        - - '{{ "/my/path/filename.txt" | path.Split }}'
 +          - /my/path/|filename.txt
 +        - - '{{ "/my/path/filename.txt" | path.Split }}'
 +          - /my/path/|filename.txt
 +    reflect:
 +      IsMap:
 +        Aliases: null
 +        Args:
 +        - v
 +        Description: IsMap reports whether v is a map.
 +        Examples:
 +        - - '{{ if reflect.IsMap (dict "a" 1) }}Map{{ end }}'
 +          - Map
 +      IsSlice:
 +        Aliases: null
 +        Args:
 +        - v
 +        Description: IsSlice reports whether v is a slice.
 +        Examples:
 +        - - '{{ if reflect.IsSlice (slice 1 2 3) }}Slice{{ end }}'
 +          - Slice
 +    resources:
 +      Babel:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      ByType:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Concat:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Copy:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      ExecuteAsTemplate:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Fingerprint:
 +        Aliases:
 +        - fingerprint
 +        Args:
 +        - args
 +        Description: |-
 +          Fingerprint transforms the given Resource with a MD5 hash of the content in
 +          the RelPermalink and Permalink.
 +        Examples: []
 +      FromString:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Get:
 +        Aliases: null
 +        Args:
 +        - filename
 +        Description: |-
 +          Get locates the filename given in Hugo's assets filesystem
 +          and creates a Resource object that can be used for further transformations.
 +        Examples: []
 +      GetMatch:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      GetRemote:
 +        Aliases: null
 +        Args:
 +        - args
 +        Description: |-
 +          GetRemote gets the URL (via HTTP(s)) in the first argument in args and creates Resource object that can be used for
 +          further transformations.
 +
 +          A second argument may be provided with an option map.
 +
 +          Note: This method does not return any error as a second return value,
 +          for any error situations the error can be checked in .Err.
 +        Examples: []
 +      Match:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Minify:
 +        Aliases:
 +        - minify
 +        Args:
 +        - r
 +        Description: |-
 +          Minify minifies the given Resource using the MediaType to pick the correct
 +          minifier.
 +        Examples: []
 +      PostCSS:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      PostProcess:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      ToCSS:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +    safe:
 +      CSS:
 +        Aliases:
 +        - safeCSS
 +        Args:
 +        - s
 +        Description: CSS returns the string s as html/template CSS content.
 +        Examples:
 +        - - '{{ "Bat&Man" | safeCSS | safeCSS }}'
 +          - Bat&amp;Man
 +      HTML:
 +        Aliases:
 +        - safeHTML
 +        Args:
 +        - s
 +        Description: HTML returns the string s as html/template HTML content.
 +        Examples:
 +        - - '{{ "Bat&Man" | safeHTML | safeHTML }}'
 +          - Bat&Man
 +        - - '{{ "Bat&Man" | safeHTML }}'
 +          - Bat&Man
 +      HTMLAttr:
 +        Aliases:
 +        - safeHTMLAttr
 +        Args:
 +        - s
 +        Description: HTMLAttr returns the string s as html/template HTMLAttr content.
 +        Examples: []
 +      JS:
 +        Aliases:
 +        - safeJS
 +        Args:
 +        - s
 +        Description: JS returns the given string as a html/template JS content.
 +        Examples:
 +        - - '{{ "(1*2)" | safeJS | safeJS }}'
 +          - (1*2)
 +      JSStr:
 +        Aliases:
 +        - safeJSStr
 +        Args:
 +        - s
 +        Description: JSStr returns the given string as a html/template JSStr content.
 +        Examples: []
 +      URL:
 +        Aliases:
 +        - safeURL
 +        Args:
 +        - s
 +        Description: URL returns the string s as html/template URL content.
 +        Examples:
 +        - - '{{ "http://gohugo.io" | safeURL | safeURL }}'
 +          - http://gohugo.io
 +    site:
 +      AllPages:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Author:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Authors:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      BaseURL:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      BuildDrafts:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      CheckReady:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Config:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Copyright:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Current:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Data:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
-       GoogleAnalytics:
-         Aliases: null
-         Args: null
-         Description: ""
-         Examples: null
 +      ForEeachIdentityByName:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      GetPage:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
-       IsServer:
-         Aliases: null
-         Args: null
-         Description: ""
-         Examples: null
 +      Home:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Hugo:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      IsMultiLingual:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
-       RSSLink:
-         Aliases: null
-         Args: null
-         Description: ""
-         Examples: null
 +      Key:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Language:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      LanguageCode:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      LanguagePrefix:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Languages:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      LastChange:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Lastmod:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      MainSections:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Menus:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Pages:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Param:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Params:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      RegularPages:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Sections:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      ServerPort:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Sites:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Social:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
++      Store:
++        Aliases: null
++        Args: null
++        Description: ""
++        Examples: null
 +      Taxonomies:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Title:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +    strings:
 +      Chomp:
 +        Aliases:
 +        - chomp
 +        Args:
 +        - s
 +        Description: Chomp returns a copy of s with all trailing newline characters
 +          removed.
 +        Examples:
 +        - - '{{ chomp "<p>Blockhead</p>\n" | safeHTML }}'
 +          - <p>Blockhead</p>
 +      Contains:
 +        Aliases: null
 +        Args:
 +        - s
 +        - substr
 +        Description: Contains reports whether substr is in s.
 +        Examples:
 +        - - '{{ strings.Contains "abc" "b" }}'
 +          - "true"
 +        - - '{{ strings.Contains "abc" "d" }}'
 +          - "false"
 +      ContainsAny:
 +        Aliases: null
 +        Args:
 +        - s
 +        - chars
 +        Description: ContainsAny reports whether any Unicode code points in chars
 +          are within s.
 +        Examples:
 +        - - '{{ strings.ContainsAny "abc" "bcd" }}'
 +          - "true"
 +        - - '{{ strings.ContainsAny "abc" "def" }}'
 +          - "false"
 +      ContainsNonSpace:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Count:
 +        Aliases: null
 +        Args:
 +        - substr
 +        - s
 +        Description: |-
 +          Count counts the number of non-overlapping instances of substr in s.
 +          If substr is an empty string, Count returns 1 + the number of Unicode code points in s.
 +        Examples:
 +        - - '{{ "aabab" | strings.Count "a" }}'
 +          - "3"
 +      CountRunes:
 +        Aliases:
 +        - countrunes
 +        Args:
 +        - s
 +        Description: CountRunes returns the number of runes in s, excluding whitespace.
 +        Examples: []
 +      CountWords:
 +        Aliases:
 +        - countwords
 +        Args:
 +        - s
 +        Description: CountWords returns the approximate word count in s.
 +        Examples: []
 +      Diff:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      FindRE:
 +        Aliases:
 +        - findRE
 +        Args:
 +        - expr
 +        - content
 +        - limit
 +        Description: |-
 +          FindRE returns a list of strings that match the regular expression. By default all matches
 +          will be included. The number of matches can be limited with an optional third parameter.
 +        Examples:
 +        - - '{{ findRE "[G|g]o" "Hugo is a static side generator written in Go." 1
 +            }}'
 +          - '[go]'
 +      FindRESubmatch:
 +        Aliases:
 +        - findRESubmatch
 +        Args:
 +        - expr
 +        - content
 +        - limit
 +        Description: |-
 +          FindRESubmatch returns a slice of all successive matches of the regular
 +          expression in content. Each element is a slice of strings holding the text
 +          of the leftmost match of the regular expression and the matches, if any, of
 +          its subexpressions.
 +
 +          By default all matches will be included. The number of matches can be
 +          limited with the optional limit parameter. A return value of nil indicates
 +          no match.
 +        Examples:
 +        - - '{{ findRESubmatch `<a\s*href="(.+?)">(.+?)</a>` `<li><a href="#foo">Foo</a></li>
 +            <li><a href="#bar">Bar</a></li>` | print | safeHTML }}'
 +          - '[[<a href="#foo">Foo</a> #foo Foo] [<a href="#bar">Bar</a> #bar Bar]]'
 +      FirstUpper:
 +        Aliases: null
 +        Args:
 +        - s
 +        Description: FirstUpper converts s making  the first character upper case.
 +        Examples:
 +        - - '{{ "hugo rocks!" | strings.FirstUpper }}'
 +          - Hugo rocks!
 +      HasPrefix:
 +        Aliases:
 +        - hasPrefix
 +        Args:
 +        - s
 +        - prefix
 +        Description: HasPrefix tests whether the input s begins with prefix.
 +        Examples:
 +        - - '{{ hasPrefix "Hugo" "Hu" }}'
 +          - "true"
 +        - - '{{ hasPrefix "Hugo" "Fu" }}'
 +          - "false"
 +      HasSuffix:
 +        Aliases:
 +        - hasSuffix
 +        Args:
 +        - s
 +        - suffix
 +        Description: HasSuffix tests whether the input s begins with suffix.
 +        Examples:
 +        - - '{{ hasSuffix "Hugo" "go" }}'
 +          - "true"
 +        - - '{{ hasSuffix "Hugo" "du" }}'
 +          - "false"
 +      Repeat:
 +        Aliases: null
 +        Args:
 +        - "n"
 +        - s
 +        Description: Repeat returns a new string consisting of n copies of the string
 +          s.
 +        Examples:
 +        - - '{{ "yo" | strings.Repeat 4 }}'
 +          - yoyoyoyo
 +      Replace:
 +        Aliases:
 +        - replace
 +        Args:
 +        - s
 +        - old
 +        - new
 +        - limit
 +        Description: |-
 +          Replace returns a copy of the string s with all occurrences of old replaced
 +          with new.  The number of replacements can be limited with an optional fourth
 +          parameter.
 +        Examples:
 +        - - '{{ replace "Batman and Robin" "Robin" "Catwoman" }}'
 +          - Batman and Catwoman
 +        - - '{{ replace "aabbaabb" "a" "z" 2 }}'
 +          - zzbbaabb
 +      ReplaceRE:
 +        Aliases:
 +        - replaceRE
 +        Args:
 +        - pattern
 +        - repl
 +        - s
 +        - "n"
 +        Description: |-
 +          ReplaceRE returns a copy of s, replacing all matches of the regular
 +          expression pattern with the replacement text repl. The number of replacements
 +          can be limited with an optional fourth parameter.
 +        Examples:
 +        - - '{{ replaceRE "a+b" "X" "aabbaabbab" }}'
 +          - XbXbX
 +        - - '{{ replaceRE "a+b" "X" "aabbaabbab" 1 }}'
 +          - Xbaabbab
 +      RuneCount:
 +        Aliases: null
 +        Args:
 +        - s
 +        Description: RuneCount returns the number of runes in s.
 +        Examples: []
 +      SliceString:
 +        Aliases:
 +        - slicestr
 +        Args:
 +        - a
 +        - startEnd
 +        Description: |-
 +          SliceString slices a string by specifying a half-open range with
 +          two indices, start and end. 1 and 4 creates a slice including elements 1 through 3.
 +          The end index can be omitted, it defaults to the string's length.
 +        Examples:
 +        - - '{{ slicestr "BatMan" 0 3 }}'
 +          - Bat
 +        - - '{{ slicestr "BatMan" 3 }}'
 +          - Man
 +      Split:
 +        Aliases:
 +        - split
 +        Args:
 +        - a
 +        - delimiter
 +        Description: Split slices an input string into all substrings separated by
 +          delimiter.
 +        Examples: []
 +      Substr:
 +        Aliases:
 +        - substr
 +        Args:
 +        - a
 +        - nums
 +        Description: |-
 +          Substr extracts parts of a string, beginning at the character at the specified
 +          position, and returns the specified number of characters.
 +
 +          It normally takes two parameters: start and length.
 +          It can also take one parameter: start, i.e. length is omitted, in which case
 +          the substring starting from start until the end of the string will be returned.
 +
 +          To extract characters from the end of the string, use a negative start number.
 +
 +          In addition, borrowing from the extended behavior described at http://php.net/substr,
 +          if length is given and is negative, then that many characters will be omitted from
 +          the end of string.
 +        Examples:
 +        - - '{{ substr "BatMan" 0 -3 }}'
 +          - Bat
 +        - - '{{ substr "BatMan" 3 3 }}'
 +          - Man
 +      Title:
 +        Aliases:
 +        - title
 +        Args:
 +        - s
 +        Description: |-
 +          Title returns a copy of the input s with all Unicode letters that begin words
 +          mapped to their title case.
 +        Examples:
 +        - - '{{ title "Bat man" }}'
 +          - Bat Man
 +        - - '{{ title "somewhere over the rainbow" }}'
 +          - Somewhere Over the Rainbow
 +      ToLower:
 +        Aliases:
 +        - lower
 +        Args:
 +        - s
 +        Description: |-
 +          ToLower returns a copy of the input s with all Unicode letters mapped to their
 +          lower case.
 +        Examples:
 +        - - '{{ lower "BatMan" }}'
 +          - batman
 +      ToUpper:
 +        Aliases:
 +        - upper
 +        Args:
 +        - s
 +        Description: |-
 +          ToUpper returns a copy of the input s with all Unicode letters mapped to their
 +          upper case.
 +        Examples:
 +        - - '{{ upper "BatMan" }}'
 +          - BATMAN
 +      Trim:
 +        Aliases:
 +        - trim
 +        Args:
 +        - s
 +        - cutset
 +        Description: |-
 +          Trim returns converts the strings s removing all leading and trailing characters defined
 +          contained.
 +        Examples:
 +        - - '{{ trim "++Batman--" "+-" }}'
 +          - Batman
 +      TrimLeft:
 +        Aliases: null
 +        Args:
 +        - cutset
 +        - s
 +        Description: |-
 +          TrimLeft returns a slice of the string s with all leading characters
 +          contained in cutset removed.
 +        Examples:
 +        - - '{{ "aabbaa" | strings.TrimLeft "a" }}'
 +          - bbaa
 +      TrimPrefix:
 +        Aliases: null
 +        Args:
 +        - prefix
 +        - s
 +        Description: |-
 +          TrimPrefix returns s without the provided leading prefix string. If s doesn't
 +          start with prefix, s is returned unchanged.
 +        Examples:
 +        - - '{{ "aabbaa" | strings.TrimPrefix "a" }}'
 +          - abbaa
 +        - - '{{ "aabbaa" | strings.TrimPrefix "aa" }}'
 +          - bbaa
 +      TrimRight:
 +        Aliases: null
 +        Args:
 +        - cutset
 +        - s
 +        Description: |-
 +          TrimRight returns a slice of the string s with all trailing characters
 +          contained in cutset removed.
 +        Examples:
 +        - - '{{ "aabbaa" | strings.TrimRight "a" }}'
 +          - aabb
++      TrimSpace:
++        Aliases: null
++        Args: null
++        Description: ""
++        Examples: null
 +      TrimSuffix:
 +        Aliases: null
 +        Args:
 +        - suffix
 +        - s
 +        Description: |-
 +          TrimSuffix returns s without the provided trailing suffix string. If s
 +          doesn't end with suffix, s is returned unchanged.
 +        Examples:
 +        - - '{{ "aabbaa" | strings.TrimSuffix "a" }}'
 +          - aabba
 +        - - '{{ "aabbaa" | strings.TrimSuffix "aa" }}'
 +          - aabb
 +      Truncate:
 +        Aliases:
 +        - truncate
 +        Args:
 +        - s
 +        - options
 +        Description: Truncate truncates the string in s to the specified length.
 +        Examples:
 +        - - '{{ "this is a very long text" | truncate 10 " ..." }}'
 +          - this is a ...
 +        - - '{{ "With [Markdown](/markdown) inside." | markdownify | truncate 14 }}'
 +          - With <a href="/markdown">Markdown …</a>
 +    templates:
 +      Defer:
 +        Aliases: null
 +        Args:
 +        - args
 +        Description: Defer defers the execution of a template block.
 +        Examples: []
 +      DoDefer:
 +        Aliases:
 +        - doDefer
 +        Args:
 +        - ctx
 +        - id
 +        - optsv
 +        Description: |-
 +          DoDefer defers the execution of a template block.
 +          For internal use only.
 +        Examples: []
 +      Exists:
 +        Aliases: null
 +        Args:
 +        - name
 +        Description: |-
 +          Exists returns whether the template with the given name exists.
 +          Note that this is the Unix-styled relative path including filename suffix,
 +          e.g. partials/header.html
 +        Examples:
 +        - - '{{ if (templates.Exists "partials/header.html") }}Yes!{{ end }}'
 +          - Yes!
 +        - - '{{ if not (templates.Exists "partials/doesnotexist.html") }}No!{{ end
 +            }}'
 +          - No!
 +    time:
 +      AsTime:
 +        Aliases: null
 +        Args:
 +        - v
 +        - args
 +        Description: |-
 +          AsTime converts the textual representation of the datetime string into
 +          a time.Time interface.
 +        Examples:
 +        - - '{{ (time "2015-01-21").Year }}'
 +          - "2015"
 +      Duration:
 +        Aliases:
 +        - duration
 +        Args:
 +        - unit
 +        - number
 +        Description: |-
 +          Duration converts the given number to a time.Duration.
 +          Unit is one of nanosecond/ns, microsecond/us/µs, millisecond/ms, second/s, minute/m or hour/h.
 +        Examples:
 +        - - '{{ mul 60 60 | duration "second" }}'
 +          - 1h0m0s
 +      Format:
 +        Aliases:
 +        - dateFormat
 +        Args:
 +        - layout
 +        - v
 +        Description: |-
 +          Format converts the textual representation of the datetime string in v into
 +          time.Time if needed and formats it with the given layout.
 +        Examples:
 +        - - 'dateFormat: {{ dateFormat "Monday, Jan 2, 2006" "2015-01-21" }}'
 +          - 'dateFormat: Wednesday, Jan 21, 2015'
 +      Now:
 +        Aliases:
 +        - now
 +        Args: null
 +        Description: Now returns the current local time or `clock` time
 +        Examples: []
 +      ParseDuration:
 +        Aliases: null
 +        Args:
 +        - s
 +        Description: |-
 +          ParseDuration parses the duration string s.
 +          A duration string is a possibly signed sequence of
 +          decimal numbers, each with optional fraction and a unit suffix,
 +          such as "300ms", "-1.5h" or "2h45m".
 +          Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
 +          See https://golang.org/pkg/time/#ParseDuration
 +        Examples:
 +        - - '{{ "1h12m10s" | time.ParseDuration }}'
 +          - 1h12m10s
 +    transform:
 +      CanHighlight:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Emojify:
 +        Aliases:
 +        - emojify
 +        Args:
 +        - s
 +        Description: |-
 +          Emojify returns a copy of s with all emoji codes replaced with actual emojis.
 +
 +          See http://www.emoji-cheat-sheet.com/
 +        Examples:
 +        - - '{{ "I :heart: Hugo" | emojify }}'
 +          - I ❤️ Hugo
 +      HTMLEscape:
 +        Aliases:
 +        - htmlEscape
 +        Args:
 +        - s
 +        Description: HTMLEscape returns a copy of s with reserved HTML characters
 +          escaped.
 +        Examples:
 +        - - '{{ htmlEscape "Cathal Garvey & The Sunshine Band <cathal@foo.bar>" |
 +            safeHTML }}'
 +          - Cathal Garvey &amp; The Sunshine Band &lt;cathal@foo.bar&gt;
 +        - - '{{ htmlEscape "Cathal Garvey & The Sunshine Band <cathal@foo.bar>" }}'
 +          - Cathal Garvey &amp;amp; The Sunshine Band &amp;lt;cathal@foo.bar&amp;gt;
 +        - - '{{ htmlEscape "Cathal Garvey & The Sunshine Band <cathal@foo.bar>" |
 +            htmlUnescape | safeHTML }}'
 +          - Cathal Garvey & The Sunshine Band <cathal@foo.bar>
 +      HTMLUnescape:
 +        Aliases:
 +        - htmlUnescape
 +        Args:
 +        - s
 +        Description: |-
 +          HTMLUnescape returns a copy of s with HTML escape requences converted to plain
 +          text.
 +        Examples:
 +        - - '{{ htmlUnescape "Cathal Garvey &amp; The Sunshine Band &lt;cathal@foo.bar&gt;"
 +            | safeHTML }}'
 +          - Cathal Garvey & The Sunshine Band <cathal@foo.bar>
 +        - - '{{ "Cathal Garvey &amp;amp; The Sunshine Band &amp;lt;cathal@foo.bar&amp;gt;"
 +            | htmlUnescape | htmlUnescape | safeHTML }}'
 +          - Cathal Garvey & The Sunshine Band <cathal@foo.bar>
 +        - - '{{ "Cathal Garvey &amp;amp; The Sunshine Band &amp;lt;cathal@foo.bar&amp;gt;"
 +            | htmlUnescape | htmlUnescape }}'
 +          - Cathal Garvey &amp; The Sunshine Band &lt;cathal@foo.bar&gt;
 +        - - '{{ htmlUnescape "Cathal Garvey &amp; The Sunshine Band &lt;cathal@foo.bar&gt;"
 +            | htmlEscape | safeHTML }}'
 +          - Cathal Garvey &amp; The Sunshine Band &lt;cathal@foo.bar&gt;
 +      Highlight:
 +        Aliases:
 +        - highlight
 +        Args:
 +        - s
 +        - lang
 +        - opts
 +        Description: |-
 +          Highlight returns a copy of s as an HTML string with syntax
 +          highlighting applied.
 +        Examples: []
 +      HighlightCodeBlock:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Markdownify:
 +        Aliases:
 +        - markdownify
 +        Args:
 +        - ctx
 +        - s
 +        Description: Markdownify renders s from Markdown to HTML.
 +        Examples:
 +        - - '{{ .Title | markdownify }}'
 +          - <strong>BatMan</strong>
 +      Plainify:
 +        Aliases:
 +        - plainify
 +        Args:
 +        - s
 +        Description: Plainify returns a copy of s with all HTML tags removed.
 +        Examples:
 +        - - '{{ plainify  "Hello <strong>world</strong>, gophers!" }}'
 +          - Hello world, gophers!
 +      Remarshal:
 +        Aliases: null
 +        Args:
 +        - format
 +        - data
 +        Description: |-
 +          Remarshal is used in the Hugo documentation to convert configuration
 +          examples from YAML to JSON, TOML (and possibly the other way around).
 +          The is primarily a helper for the Hugo docs site.
 +          It is not a general purpose YAML to TOML converter etc., and may
 +          change without notice if it serves a purpose in the docs.
 +          Format is one of json, yaml or toml.
 +        Examples:
 +        - - '{{ "title = \"Hello World\"" | transform.Remarshal "json" | safeHTML
 +            }}'
 +          - |
 +            {
 +               "title": "Hello World"
 +            }
 +      ToMath:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Unmarshal:
 +        Aliases:
 +        - unmarshal
 +        Args:
 +        - args
 +        Description: |-
 +          Unmarshal unmarshals the data given, which can be either a string, json.RawMessage
 +          or a Resource. Supported formats are JSON, TOML, YAML, and CSV.
 +          You can optionally provide an options map as the first argument.
 +        Examples:
 +        - - '{{ "hello = \"Hello World\"" | transform.Unmarshal }}'
 +          - map[hello:Hello World]
 +        - - '{{ "hello = \"Hello World\"" | resources.FromString "data/greetings.toml"
 +            | transform.Unmarshal }}'
 +          - map[hello:Hello World]
 +      XMLEscape:
 +        Aliases: null
 +        Args:
 +        - s
 +        Description: |-
 +          XMLEscape returns the given string, removing disallowed characters then
 +          escaping the result to its XML equivalent.
 +        Examples:
 +        - - '{{ transform.XMLEscape "<p>abc</p>" }}'
 +          - '&lt;p&gt;abc&lt;/p&gt;'
 +    urls:
 +      AbsLangURL:
 +        Aliases:
 +        - absLangURL
 +        Args:
 +        - s
 +        Description: |-
 +          AbsLangURL the string s and converts it to an absolute URL according
 +          to a page's position in the project directory structure and the current
 +          language.
 +        Examples: []
 +      AbsURL:
 +        Aliases:
 +        - absURL
 +        Args:
 +        - s
 +        Description: AbsURL takes the string s and converts it to an absolute URL.
 +        Examples: []
 +      Anchorize:
 +        Aliases:
 +        - anchorize
 +        Args:
 +        - s
 +        Description: |-
 +          Anchorize creates sanitized anchor name version of the string s that is compatible
 +          with how your configured markdown renderer does it.
 +        Examples:
 +        - - '{{ "This is a title" | anchorize }}'
 +          - this-is-a-title
 +      JoinPath:
 +        Aliases: null
 +        Args:
 +        - elements
 +        Description: |-
 +          JoinPath joins the provided elements into a URL string and cleans the result
 +          of any ./ or ../ elements. If the argument list is empty, JoinPath returns
 +          an empty string.
 +        Examples:
 +        - - '{{ urls.JoinPath "https://example.org" "foo" }}'
 +          - https://example.org/foo
 +        - - '{{ urls.JoinPath (slice "a" "b") }}'
 +          - a/b
 +      Parse:
 +        Aliases: null
 +        Args: null
 +        Description: ""
 +        Examples: null
 +      Ref:
 +        Aliases:
 +        - ref
 +        Args:
 +        - p
 +        - args
 +        Description: Ref returns the absolute URL path to a given content item from
 +          Page p.
 +        Examples: []
 +      RelLangURL:
 +        Aliases:
 +        - relLangURL
 +        Args:
 +        - s
 +        Description: |-
 +          RelLangURL takes the string s and prepends the relative path according to a
 +          page's position in the project directory structure and the current language.
 +        Examples: []
 +      RelRef:
 +        Aliases:
 +        - relref
 +        Args:
 +        - p
 +        - args
 +        Description: RelRef returns the relative URL path to a given content item
 +          from Page p.
 +        Examples: []
 +      RelURL:
 +        Aliases:
 +        - relURL
 +        Args:
 +        - s
 +        Description: |-
 +          RelURL takes the string s and prepends the relative path according to a
 +          page's position in the project directory structure.
 +        Examples: []
 +      URLize:
 +        Aliases:
 +        - urlize
 +        Args:
 +        - s
 +        Description: URLize returns the strings s formatted as an URL.
 +        Examples: []
diff --cc docs/go.mod
index a9d63af19c06935f06c4d02e246929f721a0af60,0000000000000000000000000000000000000000..5e909630fcacb5b07e4b8da9e938dbdff3ef5f3b
mode 100644,000000..100644
--- /dev/null
@@@ -1,5 -1,0 +1,5 @@@
- go 1.16
 +module github.com/gohugoio/hugoDocs
 +
- require github.com/gohugoio/gohugoioTheme v0.0.0-20241105120803-6c6e5fb8f8af // indirect
++go 1.22.0
 +
++require github.com/gohugoio/gohugoioTheme v0.0.0-20241119115653-b92d27ede3e1 // indirect
diff --cc docs/go.sum
index 5c0e10736f96673b1dea3b26f1da4598137aa3e0,0000000000000000000000000000000000000000..e1863b60e602dc2f7c95ad8c69494ac25a37bda5
mode 100644,000000..100644
--- /dev/null
@@@ -1,4 -1,0 +1,2 @@@
- github.com/gohugoio/gohugoioTheme v0.0.0-20241105040910-e9dac9458255 h1:kaSc7cVAifWPRzmECr7il0YXgXBM+H2ZrGcNnb03S8k=
- github.com/gohugoio/gohugoioTheme v0.0.0-20241105040910-e9dac9458255/go.mod h1:GOYeAPQJ/ok8z7oz1cjfcSlsFpXrmx6VkzQ5RpnyhZM=
- github.com/gohugoio/gohugoioTheme v0.0.0-20241105120803-6c6e5fb8f8af h1:H8Oa4AEJs2yz8w1Gq9hEGBJNukkKo05OAaIEsHMd63k=
- github.com/gohugoio/gohugoioTheme v0.0.0-20241105120803-6c6e5fb8f8af/go.mod h1:GOYeAPQJ/ok8z7oz1cjfcSlsFpXrmx6VkzQ5RpnyhZM=
++github.com/gohugoio/gohugoioTheme v0.0.0-20241119115653-b92d27ede3e1 h1:d6XNQ4QYvJGIE8vMejUFTD89AWaPDywcLivzWpEU0qE=
++github.com/gohugoio/gohugoioTheme v0.0.0-20241119115653-b92d27ede3e1/go.mod h1:GOYeAPQJ/ok8z7oz1cjfcSlsFpXrmx6VkzQ5RpnyhZM=
index 5079ac44d532236f3474cf3f72ee16203fa772b5,0000000000000000000000000000000000000000..995057a7551410b2bc48a3629c070e8ac052a799
mode 100644,000000..100644
--- /dev/null
@@@ -1,30 -1,0 +1,30 @@@
-     HUGO_VERSION = "0.138.0"
 +[build]
 +  publish = "public"
 +  command = "hugo --gc --minify"
 +
 +  [build.environment]
++    HUGO_VERSION = "0.139.4"
 +
 +[context.production.environment]
 +  HUGO_ENV           = "production"
 +  HUGO_ENABLEGITINFO = "true"
 +
 +[context.split1]
 +  command = "hugo --gc --minify --enableGitInfo"
 +
 +  [context.split1.environment]
 +    HUGO_ENV = "production"
 +
 +[context.deploy-preview]
 +  command = "hugo --gc --minify --buildFuture -b $DEPLOY_PRIME_URL"
 +
 +[context.branch-deploy]
 +  command = "hugo --gc --minify -b $DEPLOY_PRIME_URL"
 +
 +[context.next.environment]
 +  HUGO_ENABLEGITINFO = "true"
 +
 +[[redirects]]
 +  from   = "/npmjs/*"
 +  to     = "/npmjs/"
 +  status = 200