summaryrefslogtreecommitdiffstats
path: root/docs/content/en/_common
diff options
context:
space:
mode:
Diffstat (limited to 'docs/content/en/_common')
-rw-r--r--docs/content/en/_common/_index.md4
-rw-r--r--docs/content/en/_common/content-format-table.md13
-rw-r--r--docs/content/en/_common/filter-sort-group.md8
-rw-r--r--docs/content/en/_common/functions/fmt/format-string.md7
-rw-r--r--docs/content/en/_common/functions/go-html-template-package.md14
-rw-r--r--docs/content/en/_common/functions/go-template/text-template.md7
-rw-r--r--docs/content/en/_common/functions/images/apply-image-filter.md27
-rw-r--r--docs/content/en/_common/functions/js/options.md108
-rw-r--r--docs/content/en/_common/functions/locales.md8
-rw-r--r--docs/content/en/_common/functions/regular-expressions.md12
-rw-r--r--docs/content/en/_common/functions/truthy-falsy.md7
-rw-r--r--docs/content/en/_common/functions/urls/anchorize-vs-urlize.md35
-rw-r--r--docs/content/en/_common/glob-patterns.md23
-rw-r--r--docs/content/en/_common/gomodules-info.md13
-rw-r--r--docs/content/en/_common/installation/01-editions.md16
-rw-r--r--docs/content/en/_common/installation/02-prerequisites.md40
-rw-r--r--docs/content/en/_common/installation/03-prebuilt-binaries.md23
-rw-r--r--docs/content/en/_common/installation/04-build-from-source.md38
-rw-r--r--docs/content/en/_common/installation/homebrew.md13
-rw-r--r--docs/content/en/_common/menu-entries/pre-and-post.md39
-rw-r--r--docs/content/en/_common/menu-entry-properties.md31
-rw-r--r--docs/content/en/_common/methods/page/next-and-prev.md60
-rw-r--r--docs/content/en/_common/methods/page/nextinsection-and-previnsection.md78
-rw-r--r--docs/content/en/_common/methods/page/output-format-methods.md35
-rw-r--r--docs/content/en/_common/methods/pages/group-sort-order.md5
-rw-r--r--docs/content/en/_common/methods/pages/next-and-prev.md72
-rw-r--r--docs/content/en/_common/methods/resource/global-page-remote-resources.md6
-rw-r--r--docs/content/en/_common/methods/resource/processing-spec.md36
-rw-r--r--docs/content/en/_common/methods/taxonomy/get-a-taxonomy-object.md67
-rw-r--r--docs/content/en/_common/methods/taxonomy/ordered-taxonomy-element-methods.md24
-rw-r--r--docs/content/en/_common/parsable-date-time-strings.md14
-rw-r--r--docs/content/en/_common/permalink-tokens.md71
-rw-r--r--docs/content/en/_common/ref-and-relref-error-handling.md10
-rw-r--r--docs/content/en/_common/ref-and-relref-options.md12
-rw-r--r--docs/content/en/_common/render-hooks/pageinner.md47
-rw-r--r--docs/content/en/_common/store-methods.md16
-rw-r--r--docs/content/en/_common/syntax-highlighting-options.md56
-rw-r--r--docs/content/en/_common/time-layout-string.md46
38 files changed, 1131 insertions, 10 deletions
diff --git a/docs/content/en/_common/_index.md b/docs/content/en/_common/_index.md
index 4328d4d14..612165e5c 100644
--- a/docs/content/en/_common/_index.md
+++ b/docs/content/en/_common/_index.md
@@ -1,6 +1,6 @@
---
cascade:
- _build:
+ build:
list: never
publishResources: false
render: never
@@ -9,5 +9,5 @@ cascade:
<!--
Files within this headless branch bundle are Markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required.
-Include the rendered content using the "include" shortcode.
+Include the rendered content using the "include" shortcode.
-->
diff --git a/docs/content/en/_common/content-format-table.md b/docs/content/en/_common/content-format-table.md
new file mode 100644
index 000000000..c0a66a146
--- /dev/null
+++ b/docs/content/en/_common/content-format-table.md
@@ -0,0 +1,13 @@
+---
+_comment: Do not remove front matter.
+---
+
+Content format|Media type|Identifier|File extensions
+:--|:--|:--|:--
+Markdown|`text/markdown`|`markdown`|`markdown`,`md`, `mdown`
+HTML|`text/html`|`html`|`htm`, `html`
+Emacs Org Mode|`text/org`|`org`|`org`
+AsciiDoc|`text/asciidoc`|`asciidoc`|`ad`, `adoc`, `asciidoc`
+Pandoc|`text/pandoc`|`pandoc`|`pandoc`, `pdc`
+reStructuredText|`text/rst`|`rst`|`rst`
+<!-- do not remove this comment -->
diff --git a/docs/content/en/_common/filter-sort-group.md b/docs/content/en/_common/filter-sort-group.md
new file mode 100644
index 000000000..ac73766da
--- /dev/null
+++ b/docs/content/en/_common/filter-sort-group.md
@@ -0,0 +1,8 @@
+---
+_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/
diff --git a/docs/content/en/_common/functions/fmt/format-string.md b/docs/content/en/_common/functions/fmt/format-string.md
new file mode 100644
index 000000000..09a9ee867
--- /dev/null
+++ b/docs/content/en/_common/functions/fmt/format-string.md
@@ -0,0 +1,7 @@
+---
+_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
diff --git a/docs/content/en/_common/functions/go-html-template-package.md b/docs/content/en/_common/functions/go-html-template-package.md
new file mode 100644
index 000000000..57992ea66
--- /dev/null
+++ b/docs/content/en/_common/functions/go-html-template-package.md
@@ -0,0 +1,14 @@
+---
+_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
diff --git a/docs/content/en/_common/functions/go-template/text-template.md b/docs/content/en/_common/functions/go-template/text-template.md
new file mode 100644
index 000000000..4b934c1e9
--- /dev/null
+++ b/docs/content/en/_common/functions/go-template/text-template.md
@@ -0,0 +1,7 @@
+---
+_comment: Do not remove front matter.
+---
+
+See Go's [text/template] documentation for more information.
+
+[text/template]: https://pkg.go.dev/text/template
diff --git a/docs/content/en/_common/functions/images/apply-image-filter.md b/docs/content/en/_common/functions/images/apply-image-filter.md
new file mode 100644
index 000000000..08e08238f
--- /dev/null
+++ b/docs/content/en/_common/functions/images/apply-image-filter.md
@@ -0,0 +1,27 @@
+---
+_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 }}
+```
diff --git a/docs/content/en/_common/functions/js/options.md b/docs/content/en/_common/functions/js/options.md
new file mode 100644
index 000000000..475429d05
--- /dev/null
+++ b/docs/content/en/_common/functions/js/options.md
@@ -0,0 +1,108 @@
+---
+_comment: Do not remove front matter.
+---
+
+params
+: (`map` or `slice`) Params that can be imported as JSON in your JS files, e.g.
+
+ ```go-html-template
+ {{ $js := resources.Get "js/main.js" | js.Build (dict "params" (dict "api" "https://example.org/api")) }}
+ ```
+ And then in your JS file:
+
+ ```js
+ import * as params from '@params';
+ ```
+
+ Note that this is meant for small data sets, e.g., configuration settings. For larger data sets, please put/mount the files into `assets` and import them directly.
+
+minify
+: (`bool`) Whether to let `js.Build` handle the minification.
+
+loaders
+: {{< new-in 0.140.0 />}}
+: (`map`) Configuring a loader for a given file type lets you load that file type with an `import` statement or a `require` call. For example, configuring the `.png` file extension to use the data URL loader means importing a `.png` file gives you a data URL containing the contents of that image. Loaders available are `none`, `base64`, `binary`, `copy`, `css`, `dataurl`, `default`, `empty`, `file`, `global-css`, `js`, `json`, `jsx`, `local-css`, `text`, `ts`, `tsx`. See https://esbuild.github.io/api/#loader.
+
+inject
+: (`slice`) This option allows you to automatically replace a global variable with an import from another file. The path names must be relative to `assets`. See https://esbuild.github.io/api/#inject.
+
+shims
+: (`map`) This option allows swapping out a component with another. A common use case is to load dependencies like React from a CDN (with _shims_) when in production, but running with the full bundled `node_modules` dependency during development:
+
+ ```go-html-template
+ {{ $shims := dict "react" "js/shims/react.js" "react-dom" "js/shims/react-dom.js" }}
+ {{ $js = $js | js.Build dict "shims" $shims }}
+ ```
+
+ The _shim_ files may look like these:
+
+ ```js
+ // js/shims/react.js
+ module.exports = window.React;
+ ```
+
+ ```js
+ // js/shims/react-dom.js
+ module.exports = window.ReactDOM;
+ ```
+
+ With the above, these imports should work in both scenarios:
+
+ ```js
+ import * as React from 'react';
+ import * as ReactDOM from 'react-dom/client';
+ ```
+
+target
+: (`string`) The language target. One of: `es5`, `es2015`, `es2016`, `es2017`, `es2018`, `es2019`, `es2020`, `es2021`, `es2022`, `es2023`, `es2024`, or `esnext`. Default is `esnext`.
+
+platform
+: {{< new-in 0.140.0 />}}
+: (`string`) One of `browser`, `node`, `neutral`. Default is `browser`. See https://esbuild.github.io/api/#platform.
+
+externals
+: (`slice`) External dependencies. Use this to trim dependencies you know will never be executed. See https://esbuild.github.io/api/#external.
+
+defines
+: (`map`) This option allows you to define a set of string replacements to be performed when building. It must be a map where each key will be replaced by its value.
+
+ ```go-html-template
+ {{ $defines := dict "process.env.NODE_ENV" `"development"` }}
+ ```
+
+drop
+: {{< new-in 0.144.0 />}}
+: (`string`) Edit your source code before building to drop certain constructs: One of `debugger` or `console`.
+: See https://esbuild.github.io/api/#drop
+
+sourceMap
+: (`string`) Whether to generate `inline`, `linked`, or `external` source maps from esbuild. Linked and external source maps will be written to the target with the output file name + ".map". When `linked` a `sourceMappingURL` will also be written to the output file. By default, source maps are not created. Note that the `linked` option was added in Hugo 0.140.0.
+
+sourcesContent
+: {{< new-in 0.140.0 />}}
+: (`bool`) Whether to include the content of the source files in the source map. By default, this is `true`.
+
+JSX
+: {{< new-in 0.124.0 />}}
+: (`string`) How to handle/transform JSX syntax. One of: `transform`, `preserve`, `automatic`. Default is `transform`. Notably, the `automatic` transform was introduced in React 17+ and will cause the necessary JSX helper functions to be imported automatically. See https://esbuild.github.io/api/#jsx.
+
+JSXImportSource
+: {{< new-in 0.124.0 />}}
+: (`string`) Which library to use to automatically import its JSX helper functions from. This only works if `JSX` is set to `automatic`. The specified library needs to be installed through npm and expose certain exports. See https://esbuild.github.io/api/#jsx-import-source.
+
+ The combination of `JSX` and `JSXImportSource` is helpful if you want to use a non-React JSX library like Preact, e.g.:
+
+ ```go-html-template
+ {{ $js := resources.Get "js/main.jsx" | js.Build (dict "JSX" "automatic" "JSXImportSource" "preact") }}
+ ```
+
+ With the above, you can use Preact components and JSX without having to manually import `h` and `Fragment` every time:
+
+ ```jsx
+ import { render } from 'preact';
+
+ const App = () => <>Hello world!</>;
+
+ const container = document.getElementById('app');
+ if (container) render(<App />, container);
+ ```
diff --git a/docs/content/en/_common/functions/locales.md b/docs/content/en/_common/functions/locales.md
new file mode 100644
index 000000000..1cfd7a1e6
--- /dev/null
+++ b/docs/content/en/_common/functions/locales.md
@@ -0,0 +1,8 @@
+---
+_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
diff --git a/docs/content/en/_common/functions/regular-expressions.md b/docs/content/en/_common/functions/regular-expressions.md
new file mode 100644
index 000000000..58f81a2ee
--- /dev/null
+++ b/docs/content/en/_common/functions/regular-expressions.md
@@ -0,0 +1,12 @@
+---
+_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
diff --git a/docs/content/en/_common/functions/truthy-falsy.md b/docs/content/en/_common/functions/truthy-falsy.md
new file mode 100644
index 000000000..e15e58d61
--- /dev/null
+++ b/docs/content/en/_common/functions/truthy-falsy.md
@@ -0,0 +1,7 @@
+---
+_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.
diff --git a/docs/content/en/_common/functions/urls/anchorize-vs-urlize.md b/docs/content/en/_common/functions/urls/anchorize-vs-urlize.md
new file mode 100644
index 000000000..e00c181b8
--- /dev/null
+++ b/docs/content/en/_common/functions/urls/anchorize-vs-urlize.md
@@ -0,0 +1,35 @@
+---
+_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
+```
diff --git a/docs/content/en/_common/glob-patterns.md b/docs/content/en/_common/glob-patterns.md
new file mode 100644
index 000000000..d3092dece
--- /dev/null
+++ b/docs/content/en/_common/glob-patterns.md
@@ -0,0 +1,23 @@
+---
+_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`
diff --git a/docs/content/en/_common/gomodules-info.md b/docs/content/en/_common/gomodules-info.md
new file mode 100644
index 000000000..5d88a6f9d
--- /dev/null
+++ b/docs/content/en/_common/gomodules-info.md
@@ -0,0 +1,13 @@
+---
+_comment: Do not remove front matter.
+---
+
+> [!note] Hugo Modules are Go Modules
+> You need [Go] version 1.18 or later and [Git] to use Hugo Modules. For older sites hosted on Netlify, please ensure the `GO_VERSION` environment variable is set to `1.18` or higher.
+>
+> Go Modules resources:
+> - [go.dev/wiki/Modules](https://go.dev/wiki/Modules)
+> - [blog.golang.org/using-go-modules](https://go.dev/blog/using-go-modules)
+
+[Git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
+[Go]: https://go.dev/doc/install
diff --git a/docs/content/en/_common/installation/01-editions.md b/docs/content/en/_common/installation/01-editions.md
new file mode 100644
index 000000000..634002822
--- /dev/null
+++ b/docs/content/en/_common/installation/01-editions.md
@@ -0,0 +1,16 @@
+---
+_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&nbsp;[details].|:x:|:heavy_check_mark:
+
+[dart sass]: /functions/css/sass/#dart-sass
+[processing images]: /content-management/image-processing/
+[transpile sass to css]: /functions/css/sass/
+[details]: /host-and-deploy/deploy-with-hugo-deploy/
diff --git a/docs/content/en/_common/installation/02-prerequisites.md b/docs/content/en/_common/installation/02-prerequisites.md
new file mode 100644
index 000000000..f27d9d56b
--- /dev/null
+++ b/docs/content/en/_common/installation/02-prerequisites.md
@@ -0,0 +1,40 @@
+---
+_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]: /functions/css/sass/#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/
diff --git a/docs/content/en/_common/installation/03-prebuilt-binaries.md b/docs/content/en/_common/installation/03-prebuilt-binaries.md
new file mode 100644
index 000000000..34411cddd
--- /dev/null
+++ b/docs/content/en/_common/installation/03-prebuilt-binaries.md
@@ -0,0 +1,23 @@
+---
+_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
diff --git a/docs/content/en/_common/installation/04-build-from-source.md b/docs/content/en/_common/installation/04-build-from-source.md
new file mode 100644
index 000000000..3ce245f4a
--- /dev/null
+++ b/docs/content/en/_common/installation/04-build-from-source.md
@@ -0,0 +1,38 @@
+---
+_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.23.0 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
diff --git a/docs/content/en/_common/installation/homebrew.md b/docs/content/en/_common/installation/homebrew.md
new file mode 100644
index 000000000..14f48174e
--- /dev/null
+++ b/docs/content/en/_common/installation/homebrew.md
@@ -0,0 +1,13 @@
+---
+_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/
diff --git a/docs/content/en/_common/menu-entries/pre-and-post.md b/docs/content/en/_common/menu-entries/pre-and-post.md
new file mode 100644
index 000000000..da3d584d1
--- /dev/null
+++ b/docs/content/en/_common/menu-entries/pre-and-post.md
@@ -0,0 +1,39 @@
+---
+_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/
diff --git a/docs/content/en/_common/menu-entry-properties.md b/docs/content/en/_common/menu-entry-properties.md
new file mode 100644
index 000000000..daeadd79d
--- /dev/null
+++ b/docs/content/en/_common/menu-entry-properties.md
@@ -0,0 +1,31 @@
+---
+_comment: Do not remove front matter.
+---
+
+<!--
+This description list intentionally excludes the `pageRef` and `url` properties. Add those properties manually after using the include shortcode to include this list.
+-->
+
+identifier
+: (`string`) Required when two or more menu entries have the same `name`, or when localizing the `name` using translation tables. Must start with a letter, followed by letters, digits, or underscores.
+
+name
+: (`string`) The text to display when rendering the menu entry.
+
+params
+: (`map`) User-defined properties for the menu entry.
+
+parent
+: (`string`) The `identifier` of the parent menu entry. If `identifier` is not defined, use `name`. Required for child entries in a nested menu.
+
+post
+: (`string`) The HTML to append when rendering the menu entry.
+
+pre
+: (`string`) The HTML to prepend when rendering the menu entry.
+
+title
+: (`string`) The HTML `title` attribute of the rendered menu entry.
+
+weight
+: (`int`) A non-zero integer indicating the entry's position relative the root of the menu, or to its parent for a child entry. Lighter entries float to the top, while heavier entries sink to the bottom.
diff --git a/docs/content/en/_common/methods/page/next-and-prev.md b/docs/content/en/_common/methods/page/next-and-prev.md
new file mode 100644
index 000000000..f859961a4
--- /dev/null
+++ b/docs/content/en/_common/methods/page/next-and-prev.md
@@ -0,0 +1,60 @@
+---
+_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:
+
+```go-html-template {file="layouts/_default/list.html"}
+{{ range .Pages.ByWeight }}
+ <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
+{{ end }}
+```
+
+```go-html-template {file="layouts/_default/single.html"}
+{{ with .Prev }}
+ <a href="{{ .RelPermalink }}">Previous</a>
+{{ end }}
+
+{{ with .Next }}
+ <a href="{{ .RelPermalink }}">Next</a>
+{{ end }}
+```
+
+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]: /configuration/page/
+[`Next`]: /methods/pages/prev
+[`Prev`]: /methods/pages/prev
diff --git a/docs/content/en/_common/methods/page/nextinsection-and-previnsection.md b/docs/content/en/_common/methods/page/nextinsection-and-previnsection.md
new file mode 100644
index 000000000..54d240eb4
--- /dev/null
+++ b/docs/content/en/_common/methods/page/nextinsection-and-previnsection.md
@@ -0,0 +1,78 @@
+---
+_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:
+
+```go-html-template {file="layouts/_default/list.html"}
+{{ range .Pages.ByWeight }}
+ <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
+{{ end }}
+```
+
+```go-html-template {file="layouts/_default/single.html"}
+{{ with .PrevInSection }}
+ <a href="{{ .RelPermalink }}">Previous</a>
+{{ end }}
+
+{{ with .NextInSection }}
+ <a href="{{ .RelPermalink }}">Next</a>
+{{ end }}
+```
+
+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]: /configuration/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.
diff --git a/docs/content/en/_common/methods/page/output-format-methods.md b/docs/content/en/_common/methods/page/output-format-methods.md
new file mode 100644
index 000000000..1e914db03
--- /dev/null
+++ b/docs/content/en/_common/methods/page/output-format-methods.md
@@ -0,0 +1,35 @@
+---
+_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.
diff --git a/docs/content/en/_common/methods/pages/group-sort-order.md b/docs/content/en/_common/methods/pages/group-sort-order.md
new file mode 100644
index 000000000..e2997a1bd
--- /dev/null
+++ b/docs/content/en/_common/methods/pages/group-sort-order.md
@@ -0,0 +1,5 @@
+---
+_comment: Do not remove front matter.
+---
+
+For the optional sort order, specify either `asc` for ascending order, or `desc` for descending order.
diff --git a/docs/content/en/_common/methods/pages/next-and-prev.md b/docs/content/en/_common/methods/pages/next-and-prev.md
new file mode 100644
index 000000000..462545c3f
--- /dev/null
+++ b/docs/content/en/_common/methods/pages/next-and-prev.md
@@ -0,0 +1,72 @@
+---
+_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:
+
+```go-html-template {file="layouts/_default/list.html"}
+{{ range .Pages.ByWeight }}
+ <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
+{{ end }}
+```
+
+```go-html-template {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 }}
+```
+
+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:
+
+```go-html-template {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 }}
+```
+
+[`Reverse`]: /methods/pages/reverse/
diff --git a/docs/content/en/_common/methods/resource/global-page-remote-resources.md b/docs/content/en/_common/methods/resource/global-page-remote-resources.md
new file mode 100644
index 000000000..49146aed4
--- /dev/null
+++ b/docs/content/en/_common/methods/resource/global-page-remote-resources.md
@@ -0,0 +1,6 @@
+---
+_comment: Do not remove front matter.
+---
+
+> [!note]
+> Use this method with [global resources](g), [page resources](g), or [remote resources](g).
diff --git a/docs/content/en/_common/methods/resource/processing-spec.md b/docs/content/en/_common/methods/resource/processing-spec.md
new file mode 100644
index 000000000..395217328
--- /dev/null
+++ b/docs/content/en/_common/methods/resource/processing-spec.md
@@ -0,0 +1,36 @@
+---
+_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).
diff --git a/docs/content/en/_common/methods/taxonomy/get-a-taxonomy-object.md b/docs/content/en/_common/methods/taxonomy/get-a-taxonomy-object.md
new file mode 100644
index 000000000..6fb729c17
--- /dev/null
+++ b/docs/content/en/_common/methods/taxonomy/get-a-taxonomy-object.md
@@ -0,0 +1,67 @@
+---
+_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:
+
+```go-html-template {file="layouts/_default/taxonomy.html"}
+{{ $taxonomyObject := .Data.Terms }}
+```
+
+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/
diff --git a/docs/content/en/_common/methods/taxonomy/ordered-taxonomy-element-methods.md b/docs/content/en/_common/methods/taxonomy/ordered-taxonomy-element-methods.md
new file mode 100644
index 000000000..ec5f8e406
--- /dev/null
+++ b/docs/content/en/_common/methods/taxonomy/ordered-taxonomy-element-methods.md
@@ -0,0 +1,24 @@
+---
+_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](g). 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/
diff --git a/docs/content/en/_common/parsable-date-time-strings.md b/docs/content/en/_common/parsable-date-time-strings.md
new file mode 100644
index 000000000..92842767e
--- /dev/null
+++ b/docs/content/en/_common/parsable-date-time-strings.md
@@ -0,0 +1,14 @@
+---
+_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.
diff --git a/docs/content/en/_common/permalink-tokens.md b/docs/content/en/_common/permalink-tokens.md
new file mode 100644
index 000000000..4aec68fb8
--- /dev/null
+++ b/docs/content/en/_common/permalink-tokens.md
@@ -0,0 +1,71 @@
+---
+_comment: Do not remove front matter.
+---
+
+`:year`
+: The 4-digit year as defined in the front matter `date` field.
+
+`:month`
+: The 2-digit month as defined in the front matter `date` field.
+
+`:monthname`
+: The name of the month as defined in the front matter `date` field.
+
+`:day`
+: The 2-digit day as defined in the front matter `date` field.
+
+`:weekday`
+: The 1-digit day of the week as defined in the front matter `date` field (Sunday = `0`).
+
+`:weekdayname`
+: The name of the day of the week as defined in the front matter `date` field.
+
+`:yearday`
+: The 1- to 3-digit day of the year as defined in the front matter `date` field.
+
+`:section`
+: The content's section.
+
+`:sections`
+: The content's sections hierarchy. You can use a selection of the sections using _slice syntax_: `:sections[1:]` includes all but the first, `:sections[:last]` includes all but the last, `:sections[last]` includes only the last, `:sections[1:2]` includes section 2 and 3. Note that this slice access will not throw any out-of-bounds errors, so you don't have to be exact.
+
+`:title`
+: The `title` as defined in front matter, else the automatic title. Hugo generates titles automatically for section, taxonomy, and term pages that are not backed by a file.
+
+`:slug`
+: The `slug` as defined in front matter, else the `title` as defined in front matter, else the automatic title. Hugo generates titles automatically for section, taxonomy, and term pages that are not backed by a file.
+
+`:filename`
+: The content's file name without extension, applicable to the `page` page kind.
+
+ {{< deprecated-in v0.144.0 >}}
+ The `:filename` token has been deprecated. Use `:contentbasename` instead.
+ {{< /deprecated-in >}}
+
+`:slugorfilename`
+: The `slug` as defined in front matter, else the content's file name without extension, applicable to the `page` page kind.
+
+ {{< deprecated-in v0.144.0 >}}
+ The `:slugorfilename` token has been deprecated. Use `:slugorcontentbasename` instead.
+ {{< /deprecated-in >}}
+
+`:contentbasename`
+: {{< new-in 0.144.0 />}}
+: The [content base name].
+
+[content base name]: /methods/page/file/#contentbasename
+
+`:slugorcontentbasename`
+: {{< new-in 0.144.0 />}}
+: The `slug` as defined in front matter, else the [content base name].
+
+For time-related values, you can also use the layout string components defined in Go's [time package]. For example:
+
+[time package]: https://pkg.go.dev/time#pkg-constants
+
+{{< code-toggle file=hugo >}}
+permalinks:
+ posts: /:06/:1/:2/:title/
+{{< /code-toggle >}}
+
+[content base name]: /methods/page/file/#contentbasename
diff --git a/docs/content/en/_common/ref-and-relref-error-handling.md b/docs/content/en/_common/ref-and-relref-error-handling.md
new file mode 100644
index 000000000..1d67bbc1f
--- /dev/null
+++ b/docs/content/en/_common/ref-and-relref-error-handling.md
@@ -0,0 +1,10 @@
+---
+_comment: Do not remove front matter.
+---
+
+By default, Hugo will throw an error and fail the build if it cannot resolve the path. You can change this to a warning in your site configuration, and specify a URL to return when the path cannot be resolved.
+
+{{< code-toggle file=hugo >}}
+refLinksErrorLevel = 'warning'
+refLinksNotFoundURL = '/some/other/url'
+{{< /code-toggle >}}
diff --git a/docs/content/en/_common/ref-and-relref-options.md b/docs/content/en/_common/ref-and-relref-options.md
new file mode 100644
index 000000000..ed0dd14c6
--- /dev/null
+++ b/docs/content/en/_common/ref-and-relref-options.md
@@ -0,0 +1,12 @@
+---
+_comment: Do not remove front matter.
+---
+
+path
+: (`string`) The path to the target page. Paths without a leading slash (`/`) are resolved first relative to the current page, and then relative to the rest of the site.
+
+lang
+: (`string`) The language of the target page. Default is the current language. Optional.
+
+outputFormat
+: (`string`) The output format of the target page. Default is the current output format. Optional.
diff --git a/docs/content/en/_common/render-hooks/pageinner.md b/docs/content/en/_common/render-hooks/pageinner.md
new file mode 100644
index 000000000..a598b880a
--- /dev/null
+++ b/docs/content/en/_common/render-hooks/pageinner.md
@@ -0,0 +1,47 @@
+---
+_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](g) 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:
+
+```go-html-template {file="layouts/shortcodes/include.html" copy=true}
+{{ with .Get 0 }}
+ {{ with $.Page.GetPage . }}
+ {{- .RenderShortcodes }}
+ {{ else }}
+ {{ errorf "The %q shortcode was unable to find %q. See %s" $.Name . $.Position }}
+ {{ end }}
+{{ else }}
+ {{ errorf "The %q shortcode requires a positional parameter indicating the logical path of the file to include. See %s" .Name .Position }}
+{{ end }}
+```
+
+Then call the shortcode in your Markdown:
+
+```text {file="content/posts/p1.md"}
+{{%/* include "/posts/p2" */%}}
+```
+
+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 [Markdown notation].
+
+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]
+- [Embedded image render hook]
+
+[`RenderShortcodes`]: /methods/page/rendershortcodes/
+[Markdown notation]: /content-management/shortcodes/#notation
+[Embedded link render hook]: {{% eturl render-link %}}
+[Embedded image render hook]: {{% eturl render-image %}}
diff --git a/docs/content/en/_common/store-methods.md b/docs/content/en/_common/store-methods.md
index 074216f7b..1dd776130 100644
--- a/docs/content/en/_common/store-methods.md
+++ b/docs/content/en/_common/store-methods.md
@@ -4,7 +4,7 @@
## Methods
-###### Set
+### Set
Sets the value of the given key.
@@ -12,7 +12,7 @@ Sets the value of the given key.
{{ .Store.Set "greeting" "Hello" }}
```
-###### Get
+### Get
Gets the value of the given key.
@@ -21,7 +21,7 @@ Gets the value of the given key.
{{ .Store.Get "greeting" }} → Hello
```
-###### Add
+### Add
Adds the given value to the existing value(s) of the given key.
@@ -45,7 +45,7 @@ For single values, `Add` accepts values that support Go's `+` operator. If the f
{{ .Store.Get "greetings" }} → [Hello Welcome Cheers]
```
-###### SetInMap
+### SetInMap
Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to the given `key`.
@@ -53,9 +53,9 @@ Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to th
{{ .Store.SetInMap "greetings" "english" "Hello" }}
{{ .Store.SetInMap "greetings" "french" "Bonjour" }}
{{ .Store.Get "greetings" }} → map[english:Hello french:Bonjour]
-```
+ ```
-###### DeleteInMap
+### DeleteInMap
Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`.
@@ -66,7 +66,7 @@ Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`.
{{ .Store.Get "greetings" }} → map[french:Bonjour]
```
-###### GetSortedMapValues
+### GetSortedMapValues
Returns an array of values from `key` sorted by `mapKey`.
@@ -76,7 +76,7 @@ Returns an array of values from `key` sorted by `mapKey`.
{{ .Store.GetSortedMapValues "greetings" }} → [Hello Bonjour]
```
-###### Delete
+### Delete
Removes the given key.
diff --git a/docs/content/en/_common/syntax-highlighting-options.md b/docs/content/en/_common/syntax-highlighting-options.md
new file mode 100644
index 000000000..36144e090
--- /dev/null
+++ b/docs/content/en/_common/syntax-highlighting-options.md
@@ -0,0 +1,56 @@
+---
+_comment: Do not remove front matter.
+---
+
+anchorLineNos
+: (`bool`) Whether to render each line number as an HTML anchor element, setting the `id` attribute of the surrounding `span` element to the line number. Irrelevant if `lineNos` is `false`. Default is `false`.
+
+codeFences
+: (`bool`) Whether to highlight fenced code blocks. Default is `true`.
+
+guessSyntax
+: (`bool`) Whether to automatically detect the language if the `LANG` argument is blank or set to a language for which there is no corresponding [lexer](g). Falls back to a plain text lexer if unable to automatically detect the language. Default is `false`.
+
+ > [!note]
+ > The Chroma syntax highlighter includes lexers for approximately 250 languages, but only 5 of these have implemented automatic language detection.
+
+hl_Lines
+: (`string`) A space-delimited list of lines to emphasize within the highlighted code. To emphasize lines 2, 3, 4, and 7, set this value to `2-4 7`. This option is independent of the `lineNoStart` option.
+
+hl_inline
+: (`bool`) Whether to render the highlighted code without a wrapping container. Default is `false`.
+
+lineAnchors
+: (`string`) When rendering a line number as an HTML anchor element, prepend this value to the `id` attribute of the surrounding `span` element. This provides unique `id` attributes when a page contains two or more code blocks. Irrelevant if `lineNos` or `anchorLineNos` is `false`.
+
+lineNoStart
+: (`int`) The number to display at the beginning of the first line. Irrelevant if `lineNos` is `false`. Default is `1`.
+
+lineNos
+: (`any`) Controls line number display. Default is `false`.
+ - `true`: Enable line numbers, controlled by `lineNumbersInTable`.
+ - `false`: Disable line numbers.
+ - `inline`: Enable inline line numbers (sets `lineNumbersInTable` to `false`).
+ - `table`: Enable table-based line numbers (sets `lineNumbersInTable` to `true`).
+
+lineNumbersInTable
+: (`bool`) Whether to render the highlighted code in an HTML table with two cells. The left table cell contains the line numbers, while the right table cell contains the code. Irrelevant if `lineNos` is `false`. Default is `true`.
+
+noClasses
+: (`bool`) Whether to use inline CSS styles instead of an external CSS file. Default is `true`. To use an external CSS file, set this value to `false` and generate the CSS file from the command line:
+
+ ```text
+ hugo gen chromastyles --style=monokai > syntax.css
+ ```
+
+style
+: (`string`) The CSS styles to apply to the highlighted code. Case-sensitive. Default is `monokai`. See [syntax highlighting styles].
+
+tabWidth
+: (`int`) Substitute this number of spaces for each tab character in your highlighted code. Irrelevant if `noClasses` is `false`. Default is `4`.
+
+wrapperClass
+: {{< new-in 0.140.2 />}}
+: (`string`) The class or classes to use for the outermost element of the highlighted code. Default is `highlight`.
+
+[syntax highlighting styles]: /quick-reference/syntax-highlighting-styles/
diff --git a/docs/content/en/_common/time-layout-string.md b/docs/content/en/_common/time-layout-string.md
new file mode 100644
index 000000000..3664eaef2
--- /dev/null
+++ b/docs/content/en/_common/time-layout-string.md
@@ -0,0 +1,46 @@
+---
+_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`.