]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Merge commit 'f96384a3b596f9bc0a3a035970b09b2c601f0ccb'
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 22 May 2023 14:47:07 +0000 (16:47 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 22 May 2023 14:47:07 +0000 (16:47 +0200)
306 files changed:
1  2 
docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/your-company-dark.svg
docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/your-company.svg
docs/_vendor/github.com/gohugoio/gohugoioTheme/data/sponsors.toml
docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/sponsors.html
docs/_vendor/modules.txt
docs/archetypes/functions.md
docs/content/en/about/_index.md
docs/content/en/about/benefits.md
docs/content/en/about/features.md
docs/content/en/about/hugo-and-gdpr.md
docs/content/en/about/license.md
docs/content/en/about/security-model/index.md
docs/content/en/about/what-is-hugo.md
docs/content/en/content-management/_index.md
docs/content/en/content-management/archetypes.md
docs/content/en/content-management/build-options.md
docs/content/en/content-management/comments.md
docs/content/en/content-management/diagrams.md
docs/content/en/content-management/formats.md
docs/content/en/content-management/front-matter.md
docs/content/en/content-management/image-processing/index.md
docs/content/en/content-management/menus.md
docs/content/en/content-management/multilingual.md
docs/content/en/content-management/organization/index.md
docs/content/en/content-management/page-bundles.md
docs/content/en/content-management/page-resources.md
docs/content/en/content-management/related.md
docs/content/en/content-management/sections.md
docs/content/en/content-management/shortcodes.md
docs/content/en/content-management/static-files.md
docs/content/en/content-management/summaries.md
docs/content/en/content-management/syntax-highlighting.md
docs/content/en/content-management/taxonomies.md
docs/content/en/content-management/toc.md
docs/content/en/content-management/types.md
docs/content/en/content-management/urls.md
docs/content/en/contribute/_index.md
docs/content/en/contribute/development.md
docs/content/en/contribute/documentation.md
docs/content/en/contribute/themes.md
docs/content/en/documentation.md
docs/content/en/functions/GetPage.md
docs/content/en/functions/RenderString.md
docs/content/en/functions/_index.md
docs/content/en/functions/adddate.md
docs/content/en/functions/after.md
docs/content/en/functions/anchorize.md
docs/content/en/functions/append.md
docs/content/en/functions/apply.md
docs/content/en/functions/base64.md
docs/content/en/functions/chomp.md
docs/content/en/functions/complement.md
docs/content/en/functions/cond.md
docs/content/en/functions/countrunes.md
docs/content/en/functions/countwords.md
docs/content/en/functions/crypto.FNV32a.md
docs/content/en/functions/dateformat.md
docs/content/en/functions/default.md
docs/content/en/functions/delimit.md
docs/content/en/functions/dict.md
docs/content/en/functions/duration.md
docs/content/en/functions/echoparam.md
docs/content/en/functions/emojify.md
docs/content/en/functions/eq.md
docs/content/en/functions/errorf.md
docs/content/en/functions/fileExists.md
docs/content/en/functions/findRe.md
docs/content/en/functions/findresubmatch.md
docs/content/en/functions/first.md
docs/content/en/functions/float.md
docs/content/en/functions/format.md
docs/content/en/functions/ge.md
docs/content/en/functions/get.md
docs/content/en/functions/getenv.md
docs/content/en/functions/group.md
docs/content/en/functions/gt.md
docs/content/en/functions/hasmenucurrent.md
docs/content/en/functions/highlight.md
docs/content/en/functions/hmac.md
docs/content/en/functions/htmlEscape.md
docs/content/en/functions/htmlUnescape.md
docs/content/en/functions/hugo.md
docs/content/en/functions/humanize.md
docs/content/en/functions/i18n.md
docs/content/en/functions/images/index.md
docs/content/en/functions/in.md
docs/content/en/functions/index-function.md
docs/content/en/functions/int.md
docs/content/en/functions/intersect.md
docs/content/en/functions/ismenucurrent.md
docs/content/en/functions/isset.md
docs/content/en/functions/jsonify.md
docs/content/en/functions/lang.Merge.md
docs/content/en/functions/lang.md
docs/content/en/functions/last.md
docs/content/en/functions/le.md
docs/content/en/functions/len.md
docs/content/en/functions/lower.md
docs/content/en/functions/lt.md
docs/content/en/functions/markdownify.md
docs/content/en/functions/math.md
docs/content/en/functions/md5.md
docs/content/en/functions/merge.md
docs/content/en/functions/ne.md
docs/content/en/functions/now.md
docs/content/en/functions/os.Stat.md
docs/content/en/functions/param.md
docs/content/en/functions/partialCached.md
docs/content/en/functions/path.Base.md
docs/content/en/functions/path.BaseName.md
docs/content/en/functions/path.Clean.md
docs/content/en/functions/path.Dir.md
docs/content/en/functions/path.Ext.md
docs/content/en/functions/path.Join.md
docs/content/en/functions/path.Split.md
docs/content/en/functions/plainify.md
docs/content/en/functions/pluralize.md
docs/content/en/functions/print.md
docs/content/en/functions/printf.md
docs/content/en/functions/println.md
docs/content/en/functions/querify.md
docs/content/en/functions/range.md
docs/content/en/functions/readdir.md
docs/content/en/functions/readfile.md
docs/content/en/functions/ref.md
docs/content/en/functions/reflect.IsMap.md
docs/content/en/functions/reflect.IsSlice.md
docs/content/en/functions/relref.md
docs/content/en/functions/render.md
docs/content/en/functions/replace.md
docs/content/en/functions/replacere.md
docs/content/en/functions/safeCSS.md
docs/content/en/functions/safeHTML.md
docs/content/en/functions/safeHTMLAttr.md
docs/content/en/functions/safeJS.md
docs/content/en/functions/safeURL.md
docs/content/en/functions/scratch.md
docs/content/en/functions/seq.md
docs/content/en/functions/sha.md
docs/content/en/functions/shuffle.md
docs/content/en/functions/singularize.md
docs/content/en/functions/site.md
docs/content/en/functions/slice.md
docs/content/en/functions/slicestr.md
docs/content/en/functions/sort.md
docs/content/en/functions/split.md
docs/content/en/functions/store.md
docs/content/en/functions/string.md
docs/content/en/functions/strings.Contains.md
docs/content/en/functions/strings.ContainsAny.md
docs/content/en/functions/strings.Count.md
docs/content/en/functions/strings.FirstUpper.md
docs/content/en/functions/strings.HasPrefix.md
docs/content/en/functions/strings.HasSuffix.md
docs/content/en/functions/strings.Repeat.md
docs/content/en/functions/strings.RuneCount.md
docs/content/en/functions/strings.TrimLeft.md
docs/content/en/functions/strings.TrimPrefix.md
docs/content/en/functions/strings.TrimRight.md
docs/content/en/functions/strings.TrimSuffix.md
docs/content/en/functions/substr.md
docs/content/en/functions/symdiff.md
docs/content/en/functions/templates.Exists.md
docs/content/en/functions/time.ParseDuration.md
docs/content/en/functions/time.md
docs/content/en/functions/title.md
docs/content/en/functions/transform.Unmarshal.md
docs/content/en/functions/trim.md
docs/content/en/functions/truncate.md
docs/content/en/functions/union.md
docs/content/en/functions/uniq.md
docs/content/en/functions/unix.md
docs/content/en/functions/upper.md
docs/content/en/functions/urlize.md
docs/content/en/functions/urlquery.md
docs/content/en/functions/urls.Parse.md
docs/content/en/functions/where.md
docs/content/en/functions/with.md
docs/content/en/getting-started/_index.md
docs/content/en/getting-started/configuration-markup.md
docs/content/en/getting-started/configuration.md
docs/content/en/getting-started/directory-structure.md
docs/content/en/getting-started/external-learning-resources/index.md
docs/content/en/getting-started/quick-start.md
docs/content/en/getting-started/usage.md
docs/content/en/hosting-and-deployment/_index.md
docs/content/en/hosting-and-deployment/deployment-with-rclone.md
docs/content/en/hosting-and-deployment/deployment-with-rsync.md
docs/content/en/hosting-and-deployment/hosting-on-21yunbox.md
docs/content/en/hosting-and-deployment/hosting-on-aws-amplify.md
docs/content/en/hosting-and-deployment/hosting-on-azure-static-web-apps.md
docs/content/en/hosting-and-deployment/hosting-on-azure.md
docs/content/en/hosting-and-deployment/hosting-on-cloudflare-pages.md
docs/content/en/hosting-and-deployment/hosting-on-firebase.md
docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-1.png
docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-2.png
docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-3.png
docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-4.png
docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-5.png
docs/content/en/hosting-and-deployment/hosting-on-github/index.md
docs/content/en/hosting-and-deployment/hosting-on-gitlab.md
docs/content/en/hosting-and-deployment/hosting-on-keycdn.md
docs/content/en/hosting-and-deployment/hosting-on-netlify.md
docs/content/en/hosting-and-deployment/hosting-on-render.md
docs/content/en/hosting-and-deployment/hugo-deploy.md
docs/content/en/hugo-modules/_index.md
docs/content/en/hugo-modules/configuration.md
docs/content/en/hugo-modules/theme-components.md
docs/content/en/hugo-modules/use-modules.md
docs/content/en/hugo-pipes/_index.md
docs/content/en/hugo-pipes/babel.md
docs/content/en/hugo-pipes/bundling.md
docs/content/en/hugo-pipes/fingerprint.md
docs/content/en/hugo-pipes/introduction.md
docs/content/en/hugo-pipes/js.md
docs/content/en/hugo-pipes/minification.md
docs/content/en/hugo-pipes/postcss.md
docs/content/en/hugo-pipes/postprocess.md
docs/content/en/hugo-pipes/resource-from-string.md
docs/content/en/hugo-pipes/resource-from-template.md
docs/content/en/hugo-pipes/transform-to-css.md
docs/content/en/installation/_index.md
docs/content/en/installation/bsd.md
docs/content/en/installation/linux.md
docs/content/en/installation/macos.md
docs/content/en/installation/windows.md
docs/content/en/maintenance/_index.md
docs/content/en/news/0.11-relnotes/index.md
docs/content/en/news/0.12-relnotes/index.md
docs/content/en/news/0.14-relnotes/index.md
docs/content/en/news/0.17-relnotes/index.md
docs/content/en/news/0.18-relnotes/index.md
docs/content/en/news/0.19-relnotes/index.md
docs/content/en/news/0.20-relnotes/index.md
docs/content/en/news/0.20.1-relnotes/index.md
docs/content/en/news/0.20.2-relnotes/index.md
docs/content/en/news/0.20.3-relnotes/index.md
docs/content/en/news/0.20.4-relnotes/index.md
docs/content/en/news/0.20.5-relnotes/index.md
docs/content/en/news/0.20.6-relnotes/index.md
docs/content/en/news/0.20.7-relnotes/index.md
docs/content/en/news/0.21-relnotes/index.md
docs/content/en/news/0.22-relnotes/index.md
docs/content/en/news/0.22.1-relnotes/index.md
docs/content/en/news/0.23-relnotes/index.md
docs/content/en/news/0.24-relnotes/index.md
docs/content/en/news/0.24.1-relnotes/index.md
docs/content/en/news/0.25-relnotes/index.md
docs/content/en/news/0.25.1-relnotes/index.md
docs/content/en/news/0.59.0-relnotes/index.md
docs/content/en/news/0.63.0-relnotes/index.md
docs/content/en/news/0.80.0-relnotes/index.md
docs/content/en/news/0.81.0-relnotes/index.md
docs/content/en/news/lets-celebrate-hugos-5th-birthday/index.md
docs/content/en/readfiles/dateformatting.md
docs/content/en/templates/404.md
docs/content/en/templates/_index.md
docs/content/en/templates/base.md
docs/content/en/templates/data-templates.md
docs/content/en/templates/files.md
docs/content/en/templates/homepage.md
docs/content/en/templates/internal.md
docs/content/en/templates/introduction.md
docs/content/en/templates/lists/index.md
docs/content/en/templates/lists/site-hierarchy.svg
docs/content/en/templates/lookup-order.md
docs/content/en/templates/menu-templates.md
docs/content/en/templates/output-formats.md
docs/content/en/templates/pagination.md
docs/content/en/templates/partials.md
docs/content/en/templates/render-hooks.md
docs/content/en/templates/robots.md
docs/content/en/templates/rss.md
docs/content/en/templates/section-templates.md
docs/content/en/templates/shortcode-templates.md
docs/content/en/templates/single-page-templates.md
docs/content/en/templates/sitemap-template.md
docs/content/en/templates/taxonomy-templates.md
docs/content/en/templates/template-debugging.md
docs/content/en/templates/views.md
docs/content/en/tools/_index.md
docs/content/en/tools/editors.md
docs/content/en/tools/frontends.md
docs/content/en/tools/migrations.md
docs/content/en/tools/other.md
docs/content/en/tools/search.md
docs/content/en/tools/starter-kits.md
docs/content/en/troubleshooting/_index.md
docs/content/en/troubleshooting/build-performance.md
docs/content/en/troubleshooting/faq.md
docs/content/en/variables/_index.md
docs/content/en/variables/files.md
docs/content/en/variables/git.md
docs/content/en/variables/menus.md
docs/content/en/variables/page.md
docs/content/en/variables/pages.md
docs/content/en/variables/shortcodes.md
docs/content/en/variables/site.md
docs/content/en/variables/sitemap.md
docs/content/en/variables/taxonomy.md
docs/go.mod
docs/go.sum
docs/hugo.toml
docs/layouts/shortcodes/code-toggle.html
docs/layouts/shortcodes/code.html
docs/netlify.toml

index 1793cb6446ac42e6b5cc52a71bb5192ce091a933,0000000000000000000000000000000000000000..58fd601f55cb228f89235b71692c51652e592a9a
mode 100644,000000..100644
--- /dev/null
@@@ -1,4 -1,0 +1,4 @@@
- <svg width="298" height="144" viewBox="0 0 298 144"  xmlns="http://www.w3.org/2000/svg">
++<svg viewBox="0 0 298 144"  xmlns="http://www.w3.org/2000/svg">
 +<path d="M92.056 39.544H86.68L68.536 66.616V80.056H78.712V91H46.072V80.056H55.672V66.52L36.952 39.544H31.384V28.6H57.208V39.544H52.024L62.488 55.288H63.064L73.432 39.544H67.48V28.6H92.056V39.544ZM134.601 69.4C134.601 76.248 132.361 81.72 127.881 85.816C123.401 89.912 117.705 91.96 110.793 91.96C104.137 91.96 98.6965 90.04 94.4725 86.2C90.3125 82.296 88.2325 76.856 88.2325 69.88C88.2325 63.544 90.1525 58.104 93.9925 53.56C97.8325 49.016 103.657 46.744 111.465 46.744C119.273 46.744 125.065 49.016 128.841 53.56C132.681 58.04 134.601 63.32 134.601 69.4ZM121.833 69.016C121.833 64.6 120.809 61.368 118.761 59.32C116.713 57.272 114.217 56.248 111.273 56.248C108.073 56.248 105.545 57.4 103.689 59.704C101.897 61.944 101.001 65.112 101.001 69.208C101.001 72.92 101.833 76.056 103.497 78.616C105.225 81.176 107.785 82.456 111.177 82.456C114.377 82.456 116.937 81.272 118.857 78.904C120.841 76.472 121.833 73.176 121.833 69.016ZM191.379 91H172.755V84.376C169.875 89.368 165.235 91.864 158.835 91.864C154.739 91.864 151.187 90.648 148.179 88.216C145.171 85.784 143.667 82.008 143.667 76.888V57.016H137.907V47.704H156.051V72.088C156.051 75.864 156.659 78.552 157.875 80.152C159.155 81.688 161.011 82.456 163.443 82.456C166.387 82.456 168.659 81.496 170.259 79.576C171.923 77.656 172.755 75.192 172.755 72.184V57.016H165.747V47.704H185.139V81.688H191.379V91ZM222.863 47.128C224.079 47.128 225.423 47.32 226.895 47.704C228.431 48.024 229.935 48.632 231.407 49.528L233.327 64.696L223.919 65.752L222.287 58.36C221.007 57.592 219.887 57.208 218.927 57.208C217.519 57.208 216.271 57.752 215.183 58.84C214.159 59.928 213.647 61.528 213.647 63.64V81.688H221.327V91H195.503V81.688H201.263V57.112H195.023V47.704H212.687V55.96C213.391 53.464 214.511 51.384 216.047 49.72C217.647 47.992 219.919 47.128 222.863 47.128Z" fill="#004887"/>
 +<path d="M37.568 124.032C36.0747 125.44 33.9413 126.571 31.168 127.424C28.4373 128.235 25.6 128.64 22.656 128.64C16.64 128.64 11.6693 126.699 7.744 122.816C3.86133 118.891 1.92 113.856 1.92 107.712C1.92 104.256 2.64533 100.843 4.096 97.472C5.54667 94.1013 7.808 91.3067 10.88 89.088C13.952 86.8693 17.8773 85.76 22.656 85.76C26.1547 85.76 29.1413 86.2507 31.616 87.232C34.0907 88.2133 36.0533 89.3653 37.504 90.688L38.592 99.712L32.768 100.288L31.744 94.528C29.184 92.864 26.112 92.032 22.528 92.032C18.6027 92.032 15.4453 93.3973 13.056 96.128C10.7093 98.8587 9.536 102.592 9.536 107.328C9.536 112.277 10.7947 116.032 13.312 118.592C15.8293 121.109 19.136 122.368 23.232 122.368C26.6453 122.368 29.44 121.771 31.616 120.576L32.64 114.368L38.464 114.944L37.568 124.032ZM72.802 113.664C72.802 118.144 71.3727 121.771 68.514 124.544C65.698 127.275 62.0287 128.64 57.506 128.64C53.1113 128.64 49.57 127.317 46.882 124.672C44.2367 122.027 42.914 118.443 42.914 113.92C42.914 109.739 44.1727 106.155 46.69 103.168C49.2073 100.139 52.9407 98.624 57.89 98.624C62.882 98.624 66.6153 100.117 69.09 103.104C71.5647 106.091 72.802 109.611 72.802 113.664ZM65.698 113.472C65.698 110.4 64.9513 108.053 63.458 106.432C62.0073 104.811 60.1087 104 57.762 104C55.33 104 53.4313 104.875 52.066 106.624C50.7007 108.331 50.018 110.635 50.018 113.536C50.018 116.267 50.658 118.571 51.938 120.448C53.2607 122.325 55.202 123.264 57.762 123.264C60.2367 123.264 62.178 122.368 63.586 120.576C64.994 118.741 65.698 116.373 65.698 113.472ZM129.478 128H116.806V122.752H118.406V111.488C118.406 108.757 117.915 106.837 116.934 105.728C115.995 104.576 114.651 104 112.902 104C110.64 104 108.976 104.768 107.91 106.304C106.886 107.84 106.352 109.589 106.31 111.552V122.752H110.597V128H97.9255V122.752H99.4615V111.488C99.4615 108.757 98.9708 106.837 97.9895 105.728C97.0508 104.576 95.7282 104 94.0215 104C91.8028 104 90.1602 104.768 89.0935 106.304C88.0268 107.797 87.4722 109.525 87.4295 111.488V122.752H92.8055V128H76.2935V122.752H80.5815V104.576H76.3575V99.264H87.4295V104C88.3255 102.421 89.5202 101.141 91.0135 100.16C92.5068 99.1787 94.3202 98.688 96.4535 98.688C98.5868 98.688 100.507 99.2213 102.214 100.288C103.92 101.312 105.115 102.933 105.798 105.152C106.651 103.189 107.888 101.632 109.51 100.48C111.131 99.2853 113.115 98.688 115.462 98.688C118.064 98.688 120.347 99.52 122.31 101.184C124.272 102.848 125.254 105.451 125.254 108.992V122.752H129.478V128ZM164.428 112.896C164.428 116.992 163.34 120.64 161.164 123.84C159.03 127.04 155.724 128.64 151.244 128.64C147.105 128.64 144.097 127.147 142.22 124.16V136.256H147.916V141.632H131.084V136.256H135.372V104.512H130.892V99.264H142.22V104.96C143.03 103.253 144.204 101.781 145.74 100.544C147.318 99.3067 149.43 98.688 152.076 98.688C155.745 98.688 158.71 99.9467 160.972 102.464C163.276 104.939 164.428 108.416 164.428 112.896ZM157.324 113.6C157.324 110.528 156.62 108.203 155.212 106.624C153.804 105.003 152.012 104.192 149.836 104.192C147.532 104.192 145.718 105.067 144.396 106.816C143.073 108.565 142.369 110.613 142.284 112.96L142.22 115.2C142.22 117.589 142.902 119.509 144.268 120.96C145.676 122.411 147.468 123.136 149.644 123.136C152.076 123.136 153.953 122.283 155.276 120.576C156.641 118.869 157.324 116.544 157.324 113.6ZM170.922 101.376C173.055 100.352 174.954 99.648 176.618 99.264C178.282 98.88 180.202 98.688 182.378 98.688C185.578 98.688 188.202 99.4987 190.25 101.12C192.341 102.741 193.386 105.173 193.386 108.416V121.344C193.386 123.051 194.09 123.904 195.498 123.904C195.882 123.904 196.373 123.819 196.97 123.648L197.034 127.424C195.626 128.235 194.09 128.64 192.426 128.64C188.799 128.64 186.837 126.741 186.538 122.944V122.816C185.685 124.309 184.469 125.653 182.89 126.848C181.354 128.043 179.434 128.64 177.13 128.64C175.125 128.64 173.141 128.043 171.178 126.848C169.258 125.611 168.298 123.477 168.298 120.448C168.298 116.907 169.706 114.581 172.522 113.472C175.338 112.32 178.389 111.744 181.674 111.744C182.485 111.744 183.317 111.765 184.17 111.808C185.023 111.851 185.813 111.915 186.538 112V110.4C186.538 108.693 186.239 107.157 185.642 105.792C185.045 104.427 183.551 103.744 181.162 103.744C180.266 103.744 179.413 103.808 178.602 103.936C177.834 104.064 177.087 104.32 176.362 104.704L175.21 109.12L169.706 108.544L170.922 101.376ZM186.538 116.608V115.584C185.813 115.499 185.066 115.413 184.298 115.328C183.53 115.243 182.741 115.2 181.93 115.2C180.223 115.2 178.687 115.499 177.322 116.096C175.999 116.693 175.338 117.888 175.338 119.68C175.338 122.283 176.725 123.584 179.498 123.584C181.119 123.584 182.655 123.008 184.106 121.856C185.557 120.661 186.367 118.912 186.538 116.608ZM234.863 128H219.503V122.752H223.727V111.488C223.727 108.757 223.236 106.837 222.255 105.728C221.273 104.576 219.908 104 218.159 104C215.983 104 214.255 104.704 212.975 106.112C211.737 107.52 211.097 109.248 211.055 111.296V122.752H215.343V128H199.919V122.752H204.207V104.576H199.727V99.264H211.055V103.936C213.06 100.437 216.239 98.688 220.591 98.688C223.321 98.688 225.668 99.52 227.631 101.184C229.593 102.848 230.575 105.451 230.575 108.992V122.752H234.863V128ZM267.085 104.512H264.077L254.477 128L251.277 136.256H255.501V141.632H240.141V136.256H245.005L247.821 128.256L237.645 104.512H234.509V99.264H248.653V104.512H245.005L251.661 120.064H252.045L257.421 104.512H254.157V99.264H267.085V104.512ZM275.625 98.688L270.121 98.176L271.145 89.152C273.15 88.0427 275.22 87.2107 277.353 86.656C279.486 86.1013 281.449 85.824 283.241 85.824C286.825 85.824 289.812 86.6347 292.201 88.256C294.633 89.8347 295.849 92.032 295.849 94.848C295.849 97.024 295.209 98.7947 293.929 100.16C292.649 101.483 291.177 102.592 289.513 103.488C287.892 104.384 286.441 105.237 285.161 106.048C283.881 106.859 283.241 107.84 283.241 108.992C283.241 110.4 284.201 111.104 286.121 111.104V115.456C279.252 116.139 275.817 114.24 275.817 109.76C275.817 107.755 276.436 106.197 277.673 105.088C278.91 103.936 280.34 102.976 281.961 102.208C283.582 101.44 285.012 100.608 286.249 99.712C287.486 98.7733 288.105 97.536 288.105 96C288.105 93.3547 286.206 92.032 282.409 92.032C281.428 92.032 280.382 92.16 279.273 92.416C278.206 92.672 277.289 93.056 276.521 93.568L275.625 98.688ZM277.673 128V119.872H285.865V128H277.673Z" fill="#004887"/>
 +</svg>
index 6f3082b548a32d6b403612dbbb231403ce7297aa,0000000000000000000000000000000000000000..3b85ece5c645c681bd5fb149a204b34bbc9ad767
mode 100644,000000..100644
--- /dev/null
@@@ -1,4 -1,0 +1,4 @@@
- <svg width="298" height="144" viewBox="0 0 298 144" fill="none" xmlns="http://www.w3.org/2000/svg">
++<svg viewBox="0 0 298 144" fill="none" xmlns="http://www.w3.org/2000/svg">
 +<path d="M92.056 39.544H86.68L68.536 66.616V80.056H78.712V91H46.072V80.056H55.672V66.52L36.952 39.544H31.384V28.6H57.208V39.544H52.024L62.488 55.288H63.064L73.432 39.544H67.48V28.6H92.056V39.544ZM134.601 69.4C134.601 76.248 132.361 81.72 127.881 85.816C123.401 89.912 117.705 91.96 110.793 91.96C104.137 91.96 98.6965 90.04 94.4725 86.2C90.3125 82.296 88.2325 76.856 88.2325 69.88C88.2325 63.544 90.1525 58.104 93.9925 53.56C97.8325 49.016 103.657 46.744 111.465 46.744C119.273 46.744 125.065 49.016 128.841 53.56C132.681 58.04 134.601 63.32 134.601 69.4ZM121.833 69.016C121.833 64.6 120.809 61.368 118.761 59.32C116.713 57.272 114.217 56.248 111.273 56.248C108.073 56.248 105.545 57.4 103.689 59.704C101.897 61.944 101.001 65.112 101.001 69.208C101.001 72.92 101.833 76.056 103.497 78.616C105.225 81.176 107.785 82.456 111.177 82.456C114.377 82.456 116.937 81.272 118.857 78.904C120.841 76.472 121.833 73.176 121.833 69.016ZM191.379 91H172.755V84.376C169.875 89.368 165.235 91.864 158.835 91.864C154.739 91.864 151.187 90.648 148.179 88.216C145.171 85.784 143.667 82.008 143.667 76.888V57.016H137.907V47.704H156.051V72.088C156.051 75.864 156.659 78.552 157.875 80.152C159.155 81.688 161.011 82.456 163.443 82.456C166.387 82.456 168.659 81.496 170.259 79.576C171.923 77.656 172.755 75.192 172.755 72.184V57.016H165.747V47.704H185.139V81.688H191.379V91ZM222.863 47.128C224.079 47.128 225.423 47.32 226.895 47.704C228.431 48.024 229.935 48.632 231.407 49.528L233.327 64.696L223.919 65.752L222.287 58.36C221.007 57.592 219.887 57.208 218.927 57.208C217.519 57.208 216.271 57.752 215.183 58.84C214.159 59.928 213.647 61.528 213.647 63.64V81.688H221.327V91H195.503V81.688H201.263V57.112H195.023V47.704H212.687V55.96C213.391 53.464 214.511 51.384 216.047 49.72C217.647 47.992 219.919 47.128 222.863 47.128Z" fill="white"/>
 +<path d="M37.568 124.032C36.0747 125.44 33.9413 126.571 31.168 127.424C28.4373 128.235 25.6 128.64 22.656 128.64C16.64 128.64 11.6693 126.699 7.744 122.816C3.86133 118.891 1.92 113.856 1.92 107.712C1.92 104.256 2.64533 100.843 4.096 97.472C5.54667 94.1013 7.808 91.3067 10.88 89.088C13.952 86.8693 17.8773 85.76 22.656 85.76C26.1547 85.76 29.1413 86.2507 31.616 87.232C34.0907 88.2133 36.0533 89.3653 37.504 90.688L38.592 99.712L32.768 100.288L31.744 94.528C29.184 92.864 26.112 92.032 22.528 92.032C18.6027 92.032 15.4453 93.3973 13.056 96.128C10.7093 98.8587 9.536 102.592 9.536 107.328C9.536 112.277 10.7947 116.032 13.312 118.592C15.8293 121.109 19.136 122.368 23.232 122.368C26.6453 122.368 29.44 121.771 31.616 120.576L32.64 114.368L38.464 114.944L37.568 124.032ZM72.802 113.664C72.802 118.144 71.3727 121.771 68.514 124.544C65.698 127.275 62.0287 128.64 57.506 128.64C53.1113 128.64 49.57 127.317 46.882 124.672C44.2367 122.027 42.914 118.443 42.914 113.92C42.914 109.739 44.1727 106.155 46.69 103.168C49.2073 100.139 52.9407 98.624 57.89 98.624C62.882 98.624 66.6153 100.117 69.09 103.104C71.5647 106.091 72.802 109.611 72.802 113.664ZM65.698 113.472C65.698 110.4 64.9513 108.053 63.458 106.432C62.0073 104.811 60.1087 104 57.762 104C55.33 104 53.4313 104.875 52.066 106.624C50.7007 108.331 50.018 110.635 50.018 113.536C50.018 116.267 50.658 118.571 51.938 120.448C53.2607 122.325 55.202 123.264 57.762 123.264C60.2367 123.264 62.178 122.368 63.586 120.576C64.994 118.741 65.698 116.373 65.698 113.472ZM129.478 128H116.806V122.752H118.406V111.488C118.406 108.757 117.915 106.837 116.934 105.728C115.995 104.576 114.651 104 112.902 104C110.64 104 108.976 104.768 107.91 106.304C106.886 107.84 106.352 109.589 106.31 111.552V122.752H110.597V128H97.9255V122.752H99.4615V111.488C99.4615 108.757 98.9708 106.837 97.9895 105.728C97.0508 104.576 95.7282 104 94.0215 104C91.8028 104 90.1602 104.768 89.0935 106.304C88.0268 107.797 87.4722 109.525 87.4295 111.488V122.752H92.8055V128H76.2935V122.752H80.5815V104.576H76.3575V99.264H87.4295V104C88.3255 102.421 89.5202 101.141 91.0135 100.16C92.5068 99.1787 94.3202 98.688 96.4535 98.688C98.5868 98.688 100.507 99.2213 102.214 100.288C103.92 101.312 105.115 102.933 105.798 105.152C106.651 103.189 107.888 101.632 109.51 100.48C111.131 99.2853 113.115 98.688 115.462 98.688C118.064 98.688 120.347 99.52 122.31 101.184C124.272 102.848 125.254 105.451 125.254 108.992V122.752H129.478V128ZM164.428 112.896C164.428 116.992 163.34 120.64 161.164 123.84C159.03 127.04 155.724 128.64 151.244 128.64C147.105 128.64 144.097 127.147 142.22 124.16V136.256H147.916V141.632H131.084V136.256H135.372V104.512H130.892V99.264H142.22V104.96C143.03 103.253 144.204 101.781 145.74 100.544C147.318 99.3067 149.43 98.688 152.076 98.688C155.745 98.688 158.71 99.9467 160.972 102.464C163.276 104.939 164.428 108.416 164.428 112.896ZM157.324 113.6C157.324 110.528 156.62 108.203 155.212 106.624C153.804 105.003 152.012 104.192 149.836 104.192C147.532 104.192 145.718 105.067 144.396 106.816C143.073 108.565 142.369 110.613 142.284 112.96L142.22 115.2C142.22 117.589 142.902 119.509 144.268 120.96C145.676 122.411 147.468 123.136 149.644 123.136C152.076 123.136 153.953 122.283 155.276 120.576C156.641 118.869 157.324 116.544 157.324 113.6ZM170.922 101.376C173.055 100.352 174.954 99.648 176.618 99.264C178.282 98.88 180.202 98.688 182.378 98.688C185.578 98.688 188.202 99.4987 190.25 101.12C192.341 102.741 193.386 105.173 193.386 108.416V121.344C193.386 123.051 194.09 123.904 195.498 123.904C195.882 123.904 196.373 123.819 196.97 123.648L197.034 127.424C195.626 128.235 194.09 128.64 192.426 128.64C188.799 128.64 186.837 126.741 186.538 122.944V122.816C185.685 124.309 184.469 125.653 182.89 126.848C181.354 128.043 179.434 128.64 177.13 128.64C175.125 128.64 173.141 128.043 171.178 126.848C169.258 125.611 168.298 123.477 168.298 120.448C168.298 116.907 169.706 114.581 172.522 113.472C175.338 112.32 178.389 111.744 181.674 111.744C182.485 111.744 183.317 111.765 184.17 111.808C185.023 111.851 185.813 111.915 186.538 112V110.4C186.538 108.693 186.239 107.157 185.642 105.792C185.045 104.427 183.551 103.744 181.162 103.744C180.266 103.744 179.413 103.808 178.602 103.936C177.834 104.064 177.087 104.32 176.362 104.704L175.21 109.12L169.706 108.544L170.922 101.376ZM186.538 116.608V115.584C185.813 115.499 185.066 115.413 184.298 115.328C183.53 115.243 182.741 115.2 181.93 115.2C180.223 115.2 178.687 115.499 177.322 116.096C175.999 116.693 175.338 117.888 175.338 119.68C175.338 122.283 176.725 123.584 179.498 123.584C181.119 123.584 182.655 123.008 184.106 121.856C185.557 120.661 186.367 118.912 186.538 116.608ZM234.863 128H219.503V122.752H223.727V111.488C223.727 108.757 223.236 106.837 222.255 105.728C221.273 104.576 219.908 104 218.159 104C215.983 104 214.255 104.704 212.975 106.112C211.737 107.52 211.097 109.248 211.055 111.296V122.752H215.343V128H199.919V122.752H204.207V104.576H199.727V99.264H211.055V103.936C213.06 100.437 216.239 98.688 220.591 98.688C223.321 98.688 225.668 99.52 227.631 101.184C229.593 102.848 230.575 105.451 230.575 108.992V122.752H234.863V128ZM267.085 104.512H264.077L254.477 128L251.277 136.256H255.501V141.632H240.141V136.256H245.005L247.821 128.256L237.645 104.512H234.509V99.264H248.653V104.512H245.005L251.661 120.064H252.045L257.421 104.512H254.157V99.264H267.085V104.512ZM275.625 98.688L270.121 98.176L271.145 89.152C273.15 88.0427 275.22 87.2107 277.353 86.656C279.486 86.1013 281.449 85.824 283.241 85.824C286.825 85.824 289.812 86.6347 292.201 88.256C294.633 89.8347 295.849 92.032 295.849 94.848C295.849 97.024 295.209 98.7947 293.929 100.16C292.649 101.483 291.177 102.592 289.513 103.488C287.892 104.384 286.441 105.237 285.161 106.048C283.881 106.859 283.241 107.84 283.241 108.992C283.241 110.4 284.201 111.104 286.121 111.104V115.456C279.252 116.139 275.817 114.24 275.817 109.76C275.817 107.755 276.436 106.197 277.673 105.088C278.91 103.936 280.34 102.976 281.961 102.208C283.582 101.44 285.012 100.608 286.249 99.712C287.486 98.7733 288.105 97.536 288.105 96C288.105 93.3547 286.206 92.032 282.409 92.032C281.428 92.032 280.382 92.16 279.273 92.416C278.206 92.672 277.289 93.056 276.521 93.568L275.625 98.688ZM277.673 128V119.872H285.865V128H277.673Z" fill="white"/>
 +</svg>
index c31178c923536d85e486ec53adfe313a1cbfe105,0000000000000000000000000000000000000000..71167bfd4efbff8354268156cce31922beef0bcb
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,21 @@@
-     name         = "ButterCMS"
-     link         = "https://buttercms.com/hugo-cms/"
-     logo         = "images/sponsors/butter-light.svg"
-     utm_campaign = "sponsorship"
-     bgcolor      = "#131A3E"
 +[[banners]]
 +    name         = "Linode"
 +    link         = "https://www.linode.com/"
 +    logo         = "images/sponsors/linode-logo.svg"
 +    utm_campaign = "hugosponsor"
 +
 +[[banners]]
-     name         = "Gravity Kit"
-     link         = "https://www.gravitykit.com/"
-     logo         = "images/sponsors/graitykit-dark.svg"
-     query_params = "ref=532&campaign=hugo&"
-     utm_campaign = "hugosponsor"
-     bgcolor      = "#e0ecf3"
-     #hugohome
-     #hugofooter
-     #hugogithub
++    name          = "Your Company?"
++    link          = "https://bep.is/en/hugo-sponsor-2023-01/"
++    logo          = "/images/sponsors/your-company.svg"
++    utm_campaign  = "hugosponsor"
++    show_on_hover = true
++    bgcolor       = "#004887"
 +
 +[[banners]]
++    name          = "Your Company?"
++    link          = "https://bep.is/en/hugo-sponsor-2023-01/"
++    logo          = "/images/sponsors/your-company.svg"
++    utm_campaign  = "hugosponsor"
++    show_on_hover = true
++    bgcolor       = "#004887"
index b2915e109c10f63fedefe9273fcec6bfc84d5046,0000000000000000000000000000000000000000..32bc44f6a65487bbe8886a19ee4fe73450534c56
mode 100644,000000..100644
--- /dev/null
@@@ -1,38 -1,0 +1,53 @@@
-                 class="w-100 grow pa3">
 +{{ $classes_box := "ba b--dark-gray bg-light-gray br3 flex flex-column flex-wrap items-center justify-center ph3 pv4 mb4 w-100 w-30-l " }}
 +{{ $gtag := .gtag | default "unknown" }}
 +{{ $classes_box := "ba b--dark-gray bg-light-gray br3 flex flex-column flex-wrap items-center justify-center ph3 pv4 mb4 w-100 w-30-l " }}
 +{{ $gtag := .gtag | default "unknown" }}
 +{{ $isFooter := (eq $gtag "footer") }}
 +{{ $utmSource := cond $isFooter "hugofooter" "hugohome" }}
 +{{ with .cx.Site.Data.sponsors }}
++  <style>
++    a.show-on-hover {
++      opacity: 0;
++    }
++    a.show-on-hover:hover {
++      opacity: 1;
++    }
++  </style>
 +  <section
 +    class="{{ $.classes_section | default "bg-primary-color-dark b--dark-gray bb bt ph5 pv4 w-100" }}">
 +    <div class="center mw9">
 +      <h3 class="b f3 mv0 light-gray">Hugo Sponsors</h3>
 +      <div class="flex-ns flex-wrap center justify-between pt3">
 +        {{ range .banners }}
 +          <div
 +            class="{{ $classes_box }} o-100"
 +            style="background-color: {{ .bgcolor }};">
 +            {{ $query_params := .query_params | default "" }}
 +            {{ $url := printf "%s?%s%s" .link $query_params (querify "utm_source" $utmSource "utm_medium" "banner" "utm_campaign" (.utm_campaign | default "hugosponsor")) | safeURL }}
 +            {{ $logo := resources.Get .logo }}
 +            {{ if hugo.IsProduction }}
 +              {{ $gtagID := printf "Sponsor %s %s" .name $gtag | title }}
 +              <a
 +                href="{{ $url }}"
 +                onclick="trackOutboundLink({{ printf "'%s', '%s'" $gtagID $url | safeJS }});"
-               <a href="{{ $url }}" class="w-100 grow pa3" style="">
++                class="w-100 grow pa3{{ if .show_on_hover }}
++                  show-on-hover
++                {{ end }}"
++                style="">
 +                {{ $logo.Content | safeHTML }}
 +              </a>
 +            {{ else }}
++              <a
++                href="{{ $url }}"
++                class="w-100 grow pa3{{ if .show_on_hover }}
++                  show-on-hover
++                {{ end }}">
 +                {{ $logo.Content | safeHTML }}
 +              </a>
 +            {{ end }}
 +          </div>
 +        {{ end }}
 +      </div>
 +    </div>
 +  </section>
 +{{ end }}
index 9e5b08998d872cc7673da02c5748241c85b6a10c,0000000000000000000000000000000000000000..5c4b5327102a5eaba9231c704e7af4c1ca00f2a4
mode 100644,000000..100644
--- /dev/null
@@@ -1,1 -1,0 +1,1 @@@
- # github.com/gohugoio/gohugoioTheme v0.0.0-20230124135550-462d5fe4a87f
++# github.com/gohugoio/gohugoioTheme v0.0.0-20230418063032-99f9185b8e11
index c2bb3113ecaeb9662953bd38b28a7a5fdabb018e,0000000000000000000000000000000000000000..891458daa865e4ed7a3ef5d14f52ad3bd259e632
mode 100644,000000..100644
--- /dev/null
@@@ -1,12 -1,0 +1,11 @@@
- linktitle: ""
 +---
- categories: [functions]
- tags: []
- ns: ""
++title: {{ replace .Name "-" " " | title }}
 +description: ""
- hugoversion: ""
- aliases: []
 +signature: []
- toc: false
++categories: [functions]
++keywords: []
++menu:
++  docs:
++    parent: functions
 +relatedfuncs: []
 +---
index 8ed441b61ed2ddd45691df2058994a5af7c856db,0000000000000000000000000000000000000000..91260a4a6a0cec731ed3ff0c9d1a0c99c1099b40
mode 100644,000000..100644
--- /dev/null
@@@ -1,20 -1,0 +1,15 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: About Hugo
 +linktitle: Overview
 +description: Hugo's features, roadmap, license, and motivation.
-     parent: "about"
 +categories: []
 +keywords: []
 +menu:
 +  docs:
- draft: false
++    parent: about
 +    weight: 1
 +weight: 1
- toc: false
 +aliases: [/about-hugo/,/docs/]
 +---
 +
 +Hugo is not your average static site generator.
index 925da17324f7600d3440a25e973597264e39ca60,0000000000000000000000000000000000000000..91c243413db8872b9b0216f82a9f95479c17641c
mode 100644,000000..100644
--- /dev/null
@@@ -1,42 -1,0 +1,35 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: The Benefits of Static Site Generators
 +linktitle: The Benefits of Static
 +description: Improved performance, security and ease of use are just a few of the reasons static site generators are so appealing.
-     parent: "about"
 +keywords: [ssg,static,performance,security]
 +menu:
 +  docs:
- sections_weight: 30
- draft: false
- aliases: []
- toc: false
++    parent: about
 +    weight: 30
 +weight: 30
 +---
 +
 +The purpose of website generators is to render content into HTML files. Most are "dynamic site generators." That means the HTTP server---i.e., the program that sends files to the browser to be viewed---runs the generator to create a new HTML file every time an end user requests a page.
 +
 +Over time, dynamic site generators were programmed to cache their HTML files to prevent unnecessary delays in delivering pages to end users. A cached page is a static version of a web page.
 +
 +Hugo takes caching a step further and all HTML files are rendered on your computer. You can review the files locally before copying them to the computer hosting the HTTP server. Since the HTML files aren't generated dynamically, we say that Hugo is a *static site generator*.
 +
 +This has many benefits. The most noticeable is performance. HTTP servers are *very* good at sending files---so good, in fact, that you can effectively serve the same number of pages with a fraction of the memory and CPU needed for a dynamic site.
 +
 +## More on Static Site Generators
 +
 +* ["An Introduction to Static Site Generators", David Walsh]
 +* ["Hugo vs. WordPress page load speed comparison: Hugo leaves WordPress in its dust", GettingThingsTech][hugovwordpress]
 +* ["Static Site Generators", O'Reilly]
 +* [StaticGen: Top Open-Source Static Site Generators (GitHub Stars)]
 +* ["Top 10 Static Website Generators", Netlify blog]
 +* ["The Resurgence of Static", dotCMS][dotcms]
 +
 +["An Introduction to Static Site Generators", David Walsh]: https://davidwalsh.name/introduction-static-site-generators
 +["Static Site Generators", O'Reilly]: https://github.com/gohugoio/hugoDocs/files/1242701/static-site-generators.pdf
 +["Top 10 Static Website Generators", Netlify blog]: https://www.netlify.com/blog/2016/05/02/top-ten-static-website-generators/
 +[hugovwordpress]: https://gettingthingstech.com/hugo-vs.-wordpress-page-load-speed-comparison-hugo-leaves-wordpress-in-its-dust/
 +[StaticGen: Top Open-Source Static Site Generators (GitHub Stars)]: https://www.staticgen.com/
 +[dotcms]: https://dotcms.com/blog/post/the-resurgence-of-static
index fc3d5a030444bda2e4641b9dcc4833c80c800430,0000000000000000000000000000000000000000..6fac68cdd2061dd8681c45a84b6c00361a367f4b
mode 100644,000000..100644
--- /dev/null
@@@ -1,84 -1,0 +1,78 @@@
- linktitle: Hugo Features
 +---
 +title: Hugo Features
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Hugo boasts blistering speed, robust content management, and a powerful templating language making it a great fit for all kinds of static websites.
-     parent: "about"
 +menu:
 +  docs:
- sections_weight: 20
- draft: false
++    parent: about
 +    weight: 20
 +weight: 20
 +toc: true
 +---
 +
 +## General
 +
 +* [Extremely fast] build times (&lt; 1 ms per page)
 +* Completely cross platform, with [easy installation][install] on macOS, Linux, Windows, and more
 +* Renders changes on the fly with [LiveReload] as you develop
 +* [Powerful theming]
 +* [Host your site anywhere][hostanywhere]
 +
 +## Organization
 +
 +* Straightforward [organization for your projects], including website sections
 +* Customizable [URLs]
 +* Support for configurable [taxonomies], including categories and tags
 +* [Sort content] as you desire through powerful template [functions]
 +* Automatic [table of contents] generation
 +* [Dynamic menu] creation
 +* [Pretty URLs] support
 +* [Permalink] pattern support
 +* Redirects via [aliases]
 +
 +## Content
 +
 +* Native Markdown and Emacs Org-Mode support, as well as other languages via *external helpers* (see [supported formats])
 +* TOML, YAML, and JSON metadata support in [front matter]
 +* Customizable [homepage]
 +* Multiple [content types]
 +* Automatic and user defined [content summaries]
 +* [Shortcodes] to enable rich content inside of Markdown
 +* ["Minutes to Read"][pagevars] functionality
 +* ["WordCount"][pagevars] functionality
 +
 +## Additional Features
 +
 +* Integrated [Disqus] comment support
 +* Integrated [Google Analytics] support
 +* Automatic [RSS] creation
 +* Support for [Go] HTML templates
 +* [Syntax highlighting] powered by [Chroma]
 +
 +[aliases]: /content-management/urls/#aliases
 +[Chroma]: https://github.com/alecthomas/chroma
 +[content summaries]: /content-management/summaries/
 +[content types]: /content-management/types/
 +[Disqus]: https://disqus.com/
 +[Dynamic menu]: /templates/menu-templates/
 +[Extremely fast]: https://github.com/bep/hugo-benchmark
 +[front matter]: /content-management/front-matter/
 +[functions]: /functions/
 +[Go]: https://pkg.go.dev/html/template
 +[Google Analytics]: https://google-analytics.com/
 +[homepage]: /templates/homepage/
 +[hostanywhere]: /hosting-and-deployment/
 +[install]: /installation/
 +[LiveReload]: /getting-started/usage/
 +[organization for your projects]: /getting-started/directory-structure/
 +[pagevars]: /variables/page/
 +[Permalink]: /content-management/urls/#permalinks
 +[Powerful theming]: /hugo-modules/theme-components/
 +[Pretty URLs]: /content-management/urls/
 +[RSS]: /templates/rss/
 +[Shortcodes]: /content-management/shortcodes/
 +[sort content]: /templates/
 +[supported formats]: /content-management/formats/
 +[Syntax highlighting]: /content-management/syntax-highlighting/
 +[table of contents]: /content-management/toc/
 +[taxonomies]: /content-management/taxonomies/
 +[URLs]: /content-management/urls/
index 2d4fba872fa9f859472039d1ad64d1a7dc2d3add,0000000000000000000000000000000000000000..3e0a160c75875869b818306a1911e7f0358c4f7a
mode 100644,000000..100644
--- /dev/null
@@@ -1,138 -1,0 +1,134 @@@
- date: 2018-05-25
 +---
 +title: Hugo and the  General Data Protection Regulation (GDPR)
 +linktitle: Hugo and GDPR
 +description: About how to configure your Hugo site to meet the new regulations.
-     parent: "about"
 +layout: single
 +keywords: ["GDPR", "Privacy", "Data Protection"]
 +menu:
 +  docs:
- sections_weight: 5
- draft: false
++    parent: about
 +    weight: 5
 +weight: 5
 +aliases: [/privacy/,/gdpr/]
 +toc: true
 +---
 +
 + General Data Protection Regulation ([GDPR](https://en.wikipedia.org/wiki/General_Data_Protection_Regulation)) is a regulation in EU law on data protection and privacy for all individuals within the European Union and the European Economic Area. It became enforceable on 25 May 2018.
 +
 + **Hugo is a static site generator. By using Hugo you are already standing on very solid ground. Static HTML files on disk are much easier to reason about compared to server and database driven web sites.**
 +
 + But even static websites can integrate with external services, so from version `0.41`, Hugo provides a **Privacy Config** that covers the relevant built-in templates.
 +
 + Note that:
 +
 + * These settings have their defaults setting set to _off_, i.e. how it worked before Hugo `0.41`. You must do your own evaluation of your site and apply the appropriate settings.
 + * These settings work with the [internal templates](/templates/internal/). Some theme may contain custom templates for embedding services like Google Analytics. In that case these options have no effect.
 + * We will continue this work and improve this further in future Hugo versions.
 +
 +## All Privacy Settings
 +
 +Below are all privacy settings and their default value. These settings need to be put in your site config (e.g. `config.toml`).
 +
 + {{< code-toggle file="config">}}
 +[privacy]
 +[privacy.disqus]
 +disable = false
 +[privacy.googleAnalytics]
 +disable = false
 +respectDoNotTrack = false
 +anonymizeIP = false
 +useSessionStorage = false
 +[privacy.instagram]
 +disable = false
 +simple = false
 +[privacy.twitter]
 +disable = false
 +enableDNT = false
 +simple = false
 +[privacy.vimeo]
 +disable = false
 +enableDNT = false
 +simple = false
 +[privacy.youtube]
 +disable = false
 +privacyEnhanced = false
 +{{< /code-toggle >}}
 +
- {{% warning %}}
 +## Disable All Services
 +
 +An example Privacy Config that disables all the relevant services in Hugo. With this configuration, the other settings will not matter.
 +
 + {{< code-toggle file="config">}}
 +[privacy]
 +[privacy.disqus]
 +disable = true
 +[privacy.googleAnalytics]
 +disable = true
 +[privacy.instagram]
 +disable = true
 +[privacy.twitter]
 +disable = true
 +[privacy.vimeo]
 +disable = true
 +[privacy.youtube]
 +disable = true
 +{{< /code-toggle >}}
 +
 +## The Privacy Settings Explained
 +
 +### GoogleAnalytics
 +
 +anonymizeIP
 +: Enabling this will make it so the users' IP addresses are anonymized within Google Analytics.
 +
 +respectDoNotTrack
 +: Enabling this will make the GA templates respect the "Do Not Track" HTTP header.
 +
 +useSessionStorage
 +: Enabling this will disable the use of Cookies and use Session Storage to Store the GA Client ID.
 +
- {{% /warning %}}
++{{% note %}}
 +`useSessionStorage` is not supported when using Google Analytics v4 (gtag.js).
++{{% /note %}}
 +
 +### Instagram
 +
 +simple
 +: If simple mode is enabled, a static and no-JS version of the Instagram image card will be built. Note that this only supports image cards and the image itself will be fetched from Instagram's servers.
 +
 +**Note:** If you use the _simple mode_ for Instagram and a site styled with Bootstrap 4, you may want to disable the inline styles provided by Hugo:
 +
 + {{< code-toggle file="config">}}
 +[services]
 +[services.instagram]
 +disableInlineCSS = true
 +{{< /code-toggle >}}
 +
 +### Twitter
 +
 +enableDNT
 +: Enabling this for the twitter/tweet shortcode, the tweet and its embedded page on your site are not used for purposes that include personalized suggestions and personalized ads.
 +
 +simple
 +: If simple mode is enabled, a static and no-JS version of a tweet will be built.
 +
 +**Note:** If you use the _simple mode_ for Twitter, you may want to disable the inline styles provided by Hugo:
 +
 + {{< code-toggle file="config">}}
 +[services]
 +[services.twitter]
 +disableInlineCSS = true
 +{{< /code-toggle >}}
 +
 +### YouTube
 +
 +privacyEnhanced
 +: When you turn on privacy-enhanced mode, YouTube won’t store information about visitors on your website unless the user plays the embedded video.
 +
 +### Vimeo
 +
 +enableDNT
 +: Enabling this for the vimeo shortcode, the Vimeo player will be blocked from tracking any session data, including all cookies and stats.
 +
 +simple
 +: If simple mode is enabled, the video thumbnail is fetched from Vimeo's servers and it is overlayed with a play button. If the user clicks to play the video, it will open in a new tab directly on Vimeo's website.
index ae74b60475f37e867fd2dfb01a5d5175e6d905ec,0000000000000000000000000000000000000000..267ec95a0d13f7a668aa96534195be75f023327d
mode 100644,000000..100644
--- /dev/null
@@@ -1,165 -1,0 +1,161 @@@
- date: 2016-02-01
- publishdate: 2016-02-01
- lastmod: 2016-03-02
 +---
 +title: Apache License
 +linktitle: License
 +description: Hugo v0.15 and later are released under the Apache 2.0 license.
-     parent: "about"
 +categories: ["about hugo"]
 +keywords: ["License","apache"]
 +menu:
 +  docs:
- sections_weight: 60
++    parent: about
 +    weight: 60
 +weight: 60
- Earlier versions of Hugo were released under the [Simple Public License](https://opensource.org/licenses/Simple-2.0).
 +aliases: [/meta/license]
 +toc: true
 +---
 +
 +{{% note %}}
 +Hugo v0.15 and later are released under the Apache 2.0 license.
- {{< code file="apache-notice.txt" download="apache-notice.txt" >}}
++Earlier versions of Hugo were released under the [Simple Public License](https://opensource.org/license/simpl-2-0-html/).
 +{{% /note %}}
 +
 +_Version 2.0, January 2004_ <br>
 +<https://www.apache.org/licenses/LICENSE-2.0>
 +
 +*Terms and Conditions for use, reproduction, and distribution*
 +
 +## 1. Definitions
 +
 +“License” shall mean the terms and conditions for use, reproduction, and
 +distribution as defined by Sections 1 through 9 of this document.
 +
 +“Licensor” shall mean the copyright owner or entity authorized by the copyright
 +owner that is granting the License.
 +
 +“Legal Entity” shall mean the union of the acting entity and all other entities
 +that control, are controlled by, or are under common control with that entity.
 +For the purposes of this definition, “control” means **(i)** the power, direct or
 +indirect, to cause the direction or management of such entity, whether by
 +contract or otherwise, or **(ii)** ownership of fifty percent (50%) or more of the
 +outstanding shares, or **(iii)** beneficial ownership of such entity.
 +
 +“You” (or “Your”) shall mean an individual or Legal Entity exercising
 +permissions granted by this License.
 +
 +“Source” form shall mean the preferred form for making modifications, including
 +but not limited to software source code, documentation source, and configuration
 +files.
 +
 +“Object” form shall mean any form resulting from mechanical transformation or
 +translation of a Source form, including but not limited to compiled object code,
 +generated documentation, and conversions to other media types.
 +
 +“Work” shall mean the work of authorship, whether in Source or Object form, made
 +available under the License, as indicated by a copyright notice that is included
 +in or attached to the work (an example is provided in the Appendix below).
 +
 +“Derivative Works” shall mean any work, whether in Source or Object form, that
 +is based on (or derived from) the Work and for which the editorial revisions,
 +annotations, elaborations, or other modifications represent, as a whole, an
 +original work of authorship. For the purposes of this License, Derivative Works
 +shall not include works that remain separable from, or merely link (or bind by
 +name) to the interfaces of, the Work and Derivative Works thereof.
 +
 +“Contribution” shall mean any work of authorship, including the original version
 +of the Work and any modifications or additions to that Work or Derivative Works
 +thereof, that is intentionally submitted to Licensor for inclusion in the Work
 +by the copyright owner or by an individual or Legal Entity authorized to submit
 +on behalf of the copyright owner. For the purposes of this definition,
 +“submitted” means any form of electronic, verbal, or written communication sent
 +to the Licensor or its representatives, including but not limited to
 +communication on electronic mailing lists, source code control systems, and
 +issue tracking systems that are managed by, or on behalf of, the Licensor for
 +the purpose of discussing and improving the Work, but excluding communication
 +that is conspicuously marked or otherwise designated in writing by the copyright
 +owner as “Not a Contribution.”
 +
 +“Contributor” shall mean Licensor and any individual or Legal Entity on behalf
 +of whom a Contribution has been received by Licensor and subsequently
 +incorporated within the Work.
 +
 +## 2. Grant of Copyright License
 +
 +Subject to the terms and conditions of this License, each Contributor hereby
 +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
 +irrevocable copyright license to reproduce, prepare Derivative Works of,
 +publicly display, publicly perform, sublicense, and distribute the Work and such
 +Derivative Works in Source or Object form.
 +
 +## 3. Grant of Patent License
 +
 +Subject to the terms and conditions of this License, each Contributor hereby
 +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
 +irrevocable (except as stated in this section) patent license to make, have
 +made, use, offer to sell, sell, import, and otherwise transfer the Work, where
 +such license applies only to those patent claims licensable by such Contributor
 +that are necessarily infringed by their Contribution(s) alone or by combination
 +of their Contribution(s) with the Work to which such Contribution(s) was
 +submitted. If You institute patent litigation against any entity (including a
 +cross-claim or counterclaim in a lawsuit) alleging that the Work or a
 +Contribution incorporated within the Work constitutes direct or contributory
 +patent infringement, then any patent licenses granted to You under this License
 +for that Work shall terminate as of the date such litigation is filed.
 +
 +## 4. Redistribution
 +
 +You may reproduce and distribute copies of the Work or Derivative Works thereof
 +in any medium, with or without modifications, and in Source or Object form,
 +provided that You meet the following conditions:
 +
 +* **(a)** You must give any other recipients of the Work or Derivative Works a copy of
 +this License; and
 +* **(b)** You must cause any modified files to carry prominent notices stating that You
 +changed the files; and
 +* **\(c)** You must retain, in the Source form of any Derivative Works that You distribute,
 +all copyright, patent, trademark, and attribution notices from the Source form
 +of the Work, excluding those notices that do not pertain to any part of the
 +Derivative Works; and
 +* **(d)** If the Work includes a “NOTICE” text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
 +
 +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
 +
 +## 5. Submission of Contributions
 +
 +Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
 +
 +## 6. Trademarks
 +
 +This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
 +
 +## 7. Disclaimer of Warranty
 +
 +Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
 +
 +## 8. Limitation of Liability
 +
 +In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
 +
 +## 9. Accepting Warranty or Additional Liability
 +
 +While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
 +
 +_END OF TERMS AND CONDITIONS_
 +
 +## APPENDIX: How to apply the Apache License to your work
 +
 +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets `[]` replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same “printed page” as the copyright notice for easier identification within third-party archives.
 +
++{{< code file="apache-notice.txt" >}}
 +Copyright [yyyy] [name of copyright owner]
 +
 +Licensed under the Apache License, Version 2.0 (the "License");
 +you may not use this file except in compliance with the License.
 +You may obtain a copy of the License at
 +
 +  https://www.apache.org/licenses/LICENSE-2.0
 +
 +Unless required by applicable law or agreed to in writing, software
 +distributed under the License is distributed on an "AS IS" BASIS,
 +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +See the License for the specific language governing permissions and
 +limitations under the License.
 +{{< /code >}}
index d4dacd9bf2e72e1bd031e2860f99f05eb9f44d9b,0000000000000000000000000000000000000000..a909a42369a77feff0d4fdfa9f95783e8a417c56
mode 100644,000000..100644
--- /dev/null
@@@ -1,65 -1,0 +1,63 @@@
- date: 2019-10-01
 +---
 +title: Hugo's Security Model
 +description: A summary of Hugo's security model.
-     parent: "about"
 +layout: single
 +keywords: ["Security", "Privacy"]
 +menu:
 +  docs:
- sections_weight: 5
++    parent: about
 +    weight: 4
 +weight: 5
 +aliases: [/security/]
 +toc: true
 +---
 +
 +## Runtime Security
 +
 +Hugo produces static output, so once built, the runtime is the browser (assuming the output is HTML) and any server (API) that you integrate with.
 +
 +But when developing and building your site, the runtime is the `hugo` executable. Securing a runtime can be [a real challenge](https://blog.logrocket.com/how-to-protect-your-node-js-applications-from-malicious-dependencies-5f2e60ea08f9/).
 +
 +**Hugo's main approach is that of sandboxing and a security policy with strict defaults:**
 +
 +* Hugo has a virtual file system and only the main project (not third-party components) is allowed to mount directories or files outside the project root.
 +* Only the main project can walk symbolic links.
 +* User-defined components have read-only access to the filesystem.
 +* We shell out to some external binaries to support [Asciidoctor](/content-management/formats/#list-of-content-formats) and similar, but those binaries and their flags are predefined and disabled by default (see [Security Policy](#security-policy)). General functions to run arbitrary external OS commands have been [discussed](https://github.com/gohugoio/hugo/issues/796), but not implemented because of security concerns.
 +
 +## Security Policy
 +
 +Hugo has a built-in security policy that restricts access to [os/exec](https://pkg.go.dev/os/exec), remote communication and similar.
 +
 +The default configuration is listed below. Any build using features not in the allow list of the security policy will fail with a detailed message about what needs to be done. Most of these settings are allow lists (string or slice, [Regular Expressions](https://pkg.go.dev/regexp) or `none` which matches nothing).
 +
 +{{< code-toggle config="security" />}}
 +
 +Note that these and other config settings in Hugo can be overridden by the OS environment. If you want to block all remote HTTP fetching of data:
 +
 +```txt
 +HUGO_SECURITY_HTTP_URLS=none hugo
 +```
 +
 +## Dependency Security
 +
 +Hugo is built as a static binary using [Go Modules](https://github.com/golang/go/wiki/Modules) to manage its dependencies. Go Modules have several safeguards, one of them being the `go.sum` file. This is a database of the expected cryptographic checksums of all of your dependencies, including transitive dependencies.
 +
 +[Hugo Modules](/hugo-modules/) is a feature built on top of the functionality of Go Modules. Like Go Modules, a Hugo project using Hugo Modules will have a `go.sum` file. We recommend that you commit this file to your version control system. The Hugo build will fail if there is a checksum mismatch, which would be an indication of [dependency tampering](https://julienrenaux.fr/2019/12/20/github-actions-security-risk/).
 +
 +## Web Application Security
 +
 +These are the security threats as defined by [OWASP](https://en.wikipedia.org/wiki/OWASP).
 +
 +For HTML output, this is the core security model:
 +
 +<https://pkg.go.dev/html/template#hdr-Security_Model>
 +
 +In short:
 +
 +Template and configuration authors (you) are trusted, but the data you send in is not.
 +This is why you sometimes need to use the _safe_ functions, such as `safeHTML`, to avoid escaping of data you know is safe.
 +There is one exception to the above, as noted in the documentation: If you enable inline shortcodes, you also say that the shortcodes and data handling in content files are trusted, as those macros are treated as pure text.
 +It may be worth adding that Hugo is a static site generator with no concept of dynamic user input.
 +
 +For content, the default Markdown renderer is [configured](/getting-started/configuration-markup) to remove or escape potentially unsafe content. This behavior can be reconfigured if you trust your content.
index d61f821cdd6f387c3245d767ef5c526e95903bfb,0000000000000000000000000000000000000000..3097de50e98926506a62fa13282a138d91390107
mode 100644,000000..100644
--- /dev/null
@@@ -1,62 -1,0 +1,56 @@@
- linktitle: What is Hugo
 +---
 +title: What is Hugo
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Hugo is a fast and modern static site generator written in Go, and designed to make website creation fun again.
-     parent: "about"
 +layout: single
 +menu:
 +  docs:
- sections_weight: 10
- draft: false
++    parent: about
 +    weight: 10
 +weight: 10
 +aliases: [/overview/introduction/,/about/why-i-built-hugo/]
 +toc: true
 +---
 +
 +Hugo is a general-purpose website framework. Technically speaking, Hugo is a [static site generator]. Unlike systems that dynamically build a page with each visitor request, Hugo builds pages when you create or update your content. Since websites are viewed far more often than they are edited, Hugo is designed to provide an optimal viewing experience for your website's end users and an ideal writing experience for website authors.
 +
 +Websites built with Hugo are extremely fast and secure. Hugo sites can be hosted anywhere, including [Netlify], [Heroku], [GoDaddy], [DreamHost], [GitHub Pages], [GitLab Pages], [Surge], [Firebase], [Google Cloud Storage], [Amazon S3], [Rackspace], [Azure], and [CloudFront] and work well with CDNs. Hugo sites run without the need for a database or dependencies on expensive runtimes like Ruby, Python, or PHP.
 +
 +We think of Hugo as the ideal website creation tool with nearly instant build times, able to rebuild whenever a change is made.
 +
 +## How Fast is Hugo?
 +
 +{{< youtube "CdiDYZ51a2o" >}}
 +
 +## What Does Hugo Do?
 +
 +In technical terms, Hugo takes a source directory of files and templates and uses these as input to create a complete website.
 +
 +## Who Should Use Hugo?
 +
 +Hugo is for people that prefer writing in a text editor over a browser.
 +
 +Hugo is for people who want to hand code their own website without worrying about setting up complicated runtimes, dependencies and databases.
 +
 +Hugo is for people building a blog, a company site, a portfolio site, documentation, a single landing page, or a website with thousands of pages.
 +
 +[@spf13]: https://twitter.com/spf13
 +[Amazon S3]: https://aws.amazon.com/s3/
 +[Azure]: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website
 +[CloudFront]: https://aws.amazon.com/cloudfront/ "Amazon CloudFront"
 +[DreamHost]: https://www.dreamhost.com/
 +[Firebase]: https://firebase.google.com/docs/hosting/ "Firebase static hosting"
 +[GitHub Pages]: https://pages.github.com/
 +[GitLab Pages]: https://about.gitlab.com/features/pages/
 +[Go language]: https://go.dev/
 +[GoDaddy]: https://www.godaddy.com/ "GoDaddy.com Hosting"
 +[Google Cloud Storage]: https://cloud.google.com/storage/
 +[Heroku]: https://www.heroku.com/
 +[Jekyll]: https://jekyllrb.com/
 +[Middleman]: https://middlemanapp.com/
 +[Nanoc]: https://nanoc.ws/
 +[Netlify]: https://netlify.com
 +[Rackspace]: https://www.rackspace.com/cloud/files
 +[Surge]: https://surge.sh
 +[contributing to it]: https://github.com/gohugoio/hugo
 +[rackspace]: https://www.rackspace.com/openstack/public/files
 +[static site generator]: /about/benefits/
index 7cb6357c641240cb7ead2ff801d84076642daf10,0000000000000000000000000000000000000000..e87749d3adbd74c0e3958f77a1d5c7d92f84c991
mode 100644,000000..100644
--- /dev/null
@@@ -1,16 -1,0 +1,15 @@@
- toc: false
 +---
 +title: Content Management
 +linkTitle: Content Management Overview
 +description: Hugo makes managing large static sites easy with support for archetypes, content types, menus, cross references, summaries, and more.
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 10
 +keywords: [source, organization]
 +categories: [content management]
 +weight: 10
 +aliases: [/content/,/content/organization]
 +---
 +
 +A static site generator needs to extend beyond front matter and a couple of templates to be both scalable and *manageable*. Hugo was designed with not only developers in mind, but also content managers and authors.
index 1d2ba317937be49631461f2b25946a7eb5e97a53,0000000000000000000000000000000000000000..f2bc6a441d8a3bf136e5eb1b6a345be519c0158f
mode 100644,000000..100644
--- /dev/null
@@@ -1,91 -1,0 +1,90 @@@
- linkTitle: Archetypes
 +---
 +title: Archetypes
 +description: Archetypes are templates used when creating new content.
 +keywords: [archetypes,generators,metadata,front matter]
 +categories: [content management]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 140
 +  quicklinks:
 +toc: true
 +weight: 140
 +aliases: [/content/archetypes/]
 +---
 +
 +## What are Archetypes?
 +
 +**Archetypes** are content template files in the [archetypes directory] of your project that contain preconfigured [front matter] and possibly also a content disposition for your website's [content types]. These will be used when you run `hugo new`.
 +
 +
 +The `hugo new` uses the `content-section` to find the most suitable archetype template in your project. If your project does not contain any archetype files, it will also look in the theme.
 +
 +{{< code file="archetype-example.sh" >}}
 +hugo new posts/my-first-post.md
 +{{< /code >}}
 +
 +The above will create a new content file in `content/posts/my-first-post.md` using the first archetype file found of these:
 +
 +1. `archetypes/posts.md`
 +2. `archetypes/default.md`
 +3. `themes/my-theme/archetypes/posts.md`
 +4. `themes/my-theme/archetypes/default.md`
 +
 +The last two list items are only applicable if you use a theme and it uses the `my-theme` theme name as an example.
 +
 +## Create a New Archetype Template
 +
 +A fictional example for the section `newsletter` and the archetype file `archetypes/newsletter.md`. Create a new file in `archetypes/newsletter.md` and open it in a text editor.
 +
 +{{< code file="archetypes/newsletter.md" >}}
 +---
 +title: "{{ replace .Name "-" " " | title }}"
 +date: {{ .Date }}
 +draft: true
 +---
 +
 +**Insert Lead paragraph here.**
 +
 +## New Cool Posts
 +
 +{{ range first 10 ( where .Site.RegularPages "Type" "cool" ) }}
 +* {{ .Title }}
 +{{ end }}
 +{{< /code >}}
 +
 +When you create a new newsletter with:
 +
 +```bash
 +hugo new newsletter/the-latest-cool.stuff.md
 +```
 +
 +It will create a new newsletter type of content file based on the archetype template.
 +
 +**Note:** the site will only be built if the `.Site` is in use in the archetype file, and this can be time consuming for big sites.
 +
 +The above _newsletter type archetype_ illustrates the possibilities: The full Hugo `.Site` and all of Hugo&#39;s template funcs can be used in the archetype file.
 +
 +## Directory based archetypes
 +
 +Since Hugo `0.49` you can use complete directories as archetype templates. Given this archetype directory:
 +
 +```bash
 +archetypes
 +├── default.md
 +└── post-bundle
 +    ├── bio.md
 +    ├── images
 +    │   └── featured.jpg
 +    └── index.md
 +```
 +
 +```bash
 +hugo new --kind post-bundle posts/my-post
 +```
 +
 +Will create a new folder in `/content/posts/my-post` with the same set of files as in the `post-bundle` archetypes folder. All content files (`index.md` etc.) can contain template logic, and will receive the correct `.Site` for the content's language.
 +
 +[archetypes directory]: /getting-started/directory-structure/
 +[content types]: /content-management/types/
 +[front matter]: /content-management/front-matter/
index f798754f1557ba2525de260449ed9060cad50c86,0000000000000000000000000000000000000000..4798f9b2bdebb1f2cc11e4669984e21c43e3c519
mode 100644,000000..100644
--- /dev/null
@@@ -1,115 -1,0 +1,111 @@@
- If set to true the [Bundle's Resources]({{< relref "content-management/page-bundles" >}}) will be published.
 +---
 +title: Build Options
 +linkTitle: Build Options
 +description: Build options help define how Hugo must treat a given page when building the site.
 +keywords: [build,content,front matter, page resources]
 +categories: [content management]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 70
 +toc: true
 +weight: 70
 +aliases: [/content/build-options/]
 +---
 +
 +They are stored in a reserved Front Matter object named `_build` with the following defaults:
 +
 +{{< code-toggle >}}
 +_build:
 +  render: always
 +  list: always
 +  publishResources: true
 +{{< /code-toggle >}}
 +
 +#### render
 +
 +If `always`, the page will be treated as a published page, holding its dedicated output files (`index.html`, etc...) and permalink.
 +
 +We extended this property from a boolean to an enum in Hugo 0.76.0. Valid values are:
 +
 +never
 +: The page will not be included in any page collection.
 +
 +always (default)
 +: The page will be rendered to disk and get a `RelPermalink` etc.
 +
 +link
 +: The page will be not be rendered to disk, but will get a `RelPermalink`.
 +
 +#### list
 +
 +Note that we extended this property from a boolean to an enum in Hugo 0.68.0.
 +
 +Valid values are:
 +
 +never
 +: The page will not be included in any page collection.
 +
 +always (default)
 +: The page will be included in all page collections, e.g. `site.RegularPages`, `$page.Pages`.
 +
 +local
 +: The page will be included in any _local_ page collection, e.g. `$page.RegularPages`, `$page.Pages`. One use case for this would be to create fully navigable, but headless content sections.
 +
 +If true, the page will be treated as part of the project's collections and, when appropriate, returned by Hugo's listing methods (`.Pages`, `.RegularPages` etc...).
 +
 +#### publishResources
 +
- Any page, regardless of their build options, will always be available using the [`.GetPage`]({{< relref "functions/GetPage" >}}) methods.
++If set to true the [Bundle's Resources](/content-management/page-bundles) will be published.
 +Setting this to false will still publish Resources on demand (when a resource's `.Permalink` or `.RelPermalink` is invoked from the templates) but will skip the others.
 +
 +{{% note %}}
- ------
++Any page, regardless of their build options, will always be available using the [`.GetPage`](/functions/getpage) methods.
 +{{% /note %}}
 +
- ```yaml
- # content/who-we-are.md`
 +### Illustrative use cases
 +
 +#### Not publishing a page
 +
 +Project needs a "Who We Are" content file for Front Matter and body to be used by the homepage but nowhere else.
 +
- ```
++{{< code-toggle file="content/who-we-are.md" fm=true copy=false >}}
 +title: Who we are
 +_build:
 + list: false
 + render: false
- ```go-html-template
- {{/* layouts/index.html */}}
++{{< /code-toggle >}}
 +
- {{ with site.GetPage "who-we-are" }}
-   {{ .Content }}
- {{ end }}
++{{< code file="layouts/index.html" copy=false >}}
 +<section id="who-we-are">
- ```
++  {{ with site.GetPage "who-we-are" }}
++    {{ .Content }}
++  {{ end }}
 +</section>
- To avoid setting the build options on every testimonials, one can use [`cascade`]({{< relref "/content-management/front-matter#front-matter-cascade" >}}) on the testimonial section's content file.
++{{< /code >}}
 +
 +#### Listing pages without publishing them
 +
 +Website needs to showcase a few of the hundred "testimonials" available as content files without publishing any of them.
 +
- ```go-html-template
- {{/* layouts/_defaults/testimonials.html */}}
++To avoid setting the build options on every testimonials, one can use [`cascade`](/content-management/front-matter#front-matter-cascade) on the testimonial section's content file.
 +
 +{{< code-toggle >}}
 +title: Testimonials
 +_build:
 +  render: true
 +cascade:
 +  _build:
 +    render: false
 +    list: true # default
 +{{< /code-toggle >}}
 +
- {{ range first 5 .Pages }}
-   <blockquote cite="{{ .Params.cite }}">
-     {{ .Content }}
-   </blockquote>
- {{ end }}
++{{< code file="layouts/_defaults/testimonials.html" copy=false >}}
 +<section id="testimonials">
++  {{ range first 5 .Pages }}
++    <blockquote cite="{{ .Params.cite }}">
++      {{ .Content }}
++    </blockquote>
++  {{ end }}
 +</section>
++{{< /code >}}
index e49711e7c70dd4772ae831044843b8f6d85144d2,0000000000000000000000000000000000000000..0543f47a7b8d812c97427d554e7369186f50dacd
mode 100644,000000..100644
--- /dev/null
@@@ -1,72 -1,0 +1,71 @@@
- linkTitle: Comments
 +---
 +title: Comments
- {{< code-toggle copy="false" >}}
 +description: Hugo ships with an internal Disqus template, but this isn't the only commenting system that will work with your new Hugo website.
 +keywords: [sections,content,organization]
 +categories: [project organization, fundamentals]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 220
 +toc: true
 +weight: 220
 +aliases: [/extras/comments/]
 +---
 +
 +Hugo ships with support for [Disqus](https://disqus.com/), a third-party service that provides comment and community capabilities to websites via JavaScript.
 +
 +Your theme may already support Disqus, but if not, it is easy to add to your templates via [Hugo's built-in Disqus partial][disquspartial].
 +
 +## Add Disqus
 +
 +Hugo comes with all the code you need to load Disqus into your templates. Before adding Disqus to your site, you'll need to [set up an account][disqussetup].
 +
 +### Configure Disqus
 +
 +Disqus comments require you set a single value in your [site's configuration file][configuration] like so:
 +
++{{< code-toggle copy=false >}}
 +disqusShortname = "yourDisqusShortname"
 +{{</ code-toggle >}}
 +
 +For many websites, this is enough configuration. However, you also have the option to set the following in the [front matter] of a single content file:
 +
 +* `disqus_identifier`
 +* `disqus_title`
 +* `disqus_url`
 +
 +### Render Hugo's Built-in Disqus Partial Template
 +
 +Disqus has its own [internal template](https://gohugo.io/templates/internal/#disqus) available, to render it add the following code where you want comments to appear:
 +
 +```go-html-template
 +{{ template "_internal/disqus.html" . }}
 +```
 +
 +## Alternatives
 +
 +These are some alternatives to Disqus:
 +
 +* [Cactus Comments](https://cactus.chat/docs/integrations/hugo/) (Open Source, Matrix appservice, Docker install)
 +* [Commento](https://commento.io/) (Open Source, available as a service, local install, or docker image)
 +* [Graph Comment](https://graphcomment.com/)
 +* [Hyvor Talk](https://talk.hyvor.com/) (Available as a service)
 +* [IntenseDebate](https://intensedebate.com/)
 +* [Isso](https://isso-comments.de/) (Self-hosted, Python) ([tutorial][issotutorial])
 +* [Muut](https://muut.com/)
 +* [Remark42](https://remark42.com/) (Open source, Golang, Easy to run docker)
 +* [ReplyBox](https://getreplybox.com/)
 +* [Staticman](https://staticman.net/)
 +* [Talkyard](https://blog-comments.talkyard.io/) (Open source, & serverless hosting)
 +* [Utterances](https://utteranc.es/) (Open source, GitHub comments widget built on GitHub issues)
 +
 +[configuration]: /getting-started/configuration/
 +[disquspartial]: /templates/internal/#disqus
 +[disqussetup]: https://disqus.com/profile/signup/
 +[forum]: https://discourse.gohugo.io
 +[front matter]: /content-management/front-matter/
 +[kaijuissue]: https://github.com/spf13/kaiju/issues/new
 +[issotutorial]: https://stiobhart.net/2017-02-24-isso-comments/
 +[partials]: /templates/partials/
 +[MongoDB]: https://www.mongodb.com/
 +[tweet]: https://twitter.com/spf13
index c95548249f6d5ac33c292fcbf6a098758e833bfe,0000000000000000000000000000000000000000..e664dd501944d3d30ad28bf8ef3e86950c614477
mode 100644,000000..100644
--- /dev/null
@@@ -1,265 -1,0 +1,266 @@@
- LinkTitle: Diagrams
 +---
 +title: Diagrams
-   <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
-   <script>
 +description: Use fenced code blocks and markdown render hooks to display diagrams.
 +categories: [content management]
 +keywords: [diagrams,drawing]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 50
 +toc: true
 +weight: 50
 +---
 +{{< new-in "0.93.0" >}}
 +
 +## GoAT Diagrams (Ascii)
 +
 +Hugo supports [GoAT](https://github.com/bep/goat) natively. This means that this code block:
 +
 +````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 currently does not provide default templates for Mermaid diagrams. But you can easily add your own. One way to do it would be to create `layouts/_default/_markup/render-codeblock-mermaid.html`:
 +
 +```go-html-template
 +<div class="mermaid">
 +  {{- .Inner | safeHTML }}
 +</div>
 +{{ .Page.Store.Set "hasMermaid" true }}
 +```
 +
 +And then include this snippet at the bottom of the content template (**Note**: below `.Content` as the render hook is not processed until `.Content` is executed):
 +
 +```go-html-template
 +{{ if .Page.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:
 +
++````
 +```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 a98898821c30a1554c300c909cd29600059f436a,0000000000000000000000000000000000000000..ba988c29bb648573aed00d3dc11a9ff06962d1f5
mode 100644,000000..100644
--- /dev/null
@@@ -1,145 -1,0 +1,145 @@@
- {{% warning "Performance of External Helpers" %}}
 +---
 +title: Content Formats
 +linkTitle: Content Formats
 +description: Both HTML and Markdown are supported content formats.
 +categories: [content management]
 +keywords: [markdown,asciidoc,pandoc,content format]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 40
 +toc: true
 +weight: 40
 +aliases: [/content/markdown-extras/,/content/supported-formats/,/doc/supported-formats/]
 +---
 +
 +You can put any file type into your `/content` directories, but Hugo uses the `markup` front matter value if set or the file extension (see `Markup identifiers` in the table below) to determine if the markup needs to be processed, e.g.:
 +
 +* Markdown converted to HTML
 +* [Shortcodes](/content-management/shortcodes/) processed
 +* Layout applied
 +
 +## List of content formats
 +
 +The current list of content formats in Hugo:
 +
 +| Name  | Markup identifiers | Comment |
 +| ------------- | ------------- |-------------|
 +| Goldmark  | md, markdown, goldmark  |Note that you can set the default handler of `md` and `markdown` to something else, see [Configure Markup](/getting-started/configuration-markup/).|
 +|Emacs Org-Mode|org|See [go-org](https://github.com/niklasfasching/go-org).|
 +|AsciiDoc|asciidocext, adoc, ad|Needs [Asciidoctor][ascii] installed.|
 +|RST|rst|Needs [RST](https://docutils.sourceforge.io/rst.html) installed.|
 +|Pandoc|pandoc, pdc|Needs [Pandoc](https://www.pandoc.org/) installed.|
 +|HTML|html, htm|To be treated as a content file, with layout, shortcodes etc., it must have front matter. If not, it will be copied as-is.|
 +
 +The `markup identifier` is fetched from either the `markup` variable in front matter or from the file extension. For markup-related configuration, see [Configure Markup](/getting-started/configuration-markup/).
 +
 +## External Helpers
 +
 +Some of the formats in the table above need external helpers installed on your PC. For example, for AsciiDoc files,
 +Hugo will try to call the `asciidoctor` command. This means that you will have to install the associated
 +tool on your machine to be able to use these formats.
 +
 +Hugo passes reasonable default arguments to these external helpers by default:
 +
 +- `asciidoctor`: `--no-header-footer -`
 +- `rst2html`: `--leave-comments --initial-header-level=2`
 +- `pandoc`: `--mathjax`
 +
- {{% /warning %}}
++{{% note %}}
 +Because additional formats are external commands, generation performance will rely heavily on the performance of the external tool you are using. As this feature is still in its infancy, feedback is welcome.
++{{% /note %}}
 +
 +### External Helper AsciiDoc
 +
 +[AsciiDoc](https://github.com/asciidoc/asciidoc) implementation EOLs in Jan 2020 and is no longer supported.
 +AsciiDoc development is being continued under [Asciidoctor](https://github.com/asciidoctor). The format AsciiDoc
 +remains of course. Please continue with the implementation Asciidoctor.
 +
 +### External Helper Asciidoctor
 +
 +The Asciidoctor community offers a wide set of tools for the AsciiDoc format that can be installed additionally to Hugo.
 +[See the Asciidoctor docs for installation instructions](https://asciidoctor.org/docs/install-toolchain/). Make sure that also all
 +optional extensions like `asciidoctor-diagram` or `asciidoctor-html5s` are installed if required.
 +
 +{{% note %}}
 +External `asciidoctor` command requires Hugo rendering to _disk_ to a specific destination directory. It is required to run Hugo with the command option `--destination`.
 +{{% /note %}}
 +
 +Some [Asciidoctor](https://asciidoctor.org/man/asciidoctor/) parameters can be customized in Hugo:
 +
 +Parameter | Comment
 +--- | ---
 +backend | Don't change this unless you know what you are doing.
 +doctype | Currently, the only document type supported in Hugo is `article`.
 +extensions | Possible extensions are `asciidoctor-html5s`, `asciidoctor-bibtex`, `asciidoctor-diagram`, `asciidoctor-interdoc-reftext`, `asciidoctor-katex`, `asciidoctor-latex`, `asciidoctor-mathematical`, `asciidoctor-question`, `asciidoctor-rouge`.
 +attributes | Variables to be referenced in your AsciiDoc file. This is a list of variable name/value maps. See [Asciidoctor's attributes](https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#attributes-and-substitutions).
 +noHeaderOrFooter | Output an embeddable document, which excludes the header, the footer, and everything outside the body of the document. Don't change this unless you know what you are doing.
 +safeMode | Safe mode level `unsafe`, `safe`, `server` or `secure`. Don't change this unless you know what you are doing.
 +sectionNumbers | Auto-number section titles.
 +verbose | Verbosely print processing information and configuration file checks to stderr.
 +trace | Include backtrace information on errors.
 +failureLevel | The minimum logging level that triggers a non-zero exit code (failure).
 +
 +Hugo provides additional settings that don't map directly to Asciidoctor's CLI options:
 +
 +workingFolderCurrent
 +: Sets the working directory to be the same as that of the AsciiDoc file being processed, so that [include](https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#include-files) will work with relative paths. This setting uses the `asciidoctor` cli parameter `--base-dir` and attribute `outdir=`. For rendering diagrams with [asciidoctor-diagram](https://asciidoctor.org/docs/asciidoctor-diagram/), `workingFolderCurrent` must be set to `true`.
 +
 +preserveTOC
 +: By default, Hugo removes the table of contents generated by Asciidoctor and provides it through the built-in variable [`.TableOfContents`](/content-management/toc/) to enable further customization and better integration with the various Hugo themes. This option can be set to `true` to preserve Asciidoctor's TOC in the generated page.
 +
 +Below are all the AsciiDoc related settings in Hugo with their default values:
 +
 +{{< code-toggle config="markup.asciidocExt" />}}
 +
 +Notice that for security concerns only extensions that do not have path separators (either `\`, `/` or `.`) are allowed. That means that extensions can only be invoked if they are in one's ruby's `$LOAD_PATH` (ie. most likely, the extension has been installed by the user). Any extension declared relative to the website's path will not be accepted.
 +
 +Example of how to set extensions and attributes:
 +
 +```yml
 +[markup.asciidocExt]
 +    extensions = ["asciidoctor-html5s", "asciidoctor-diagram"]
 +    workingFolderCurrent = true
 +    [markup.asciidocExt.attributes]
 +        my-base-url = "https://example.com/"
 +        my-attribute-name = "my value"
 +```
 +
 +In a complex Asciidoctor environment it is sometimes helpful to debug the exact call to your external helper with all
 +parameters. Run Hugo with `-v`. You will get an output like
 +
 +```txt
 +INFO 2019/12/22 09:08:48 Rendering book-as-pdf.adoc with C:\Ruby26-x64\bin\asciidoctor.bat using asciidoc args [--no-header-footer -r asciidoctor-html5s -b html5s -r asciidoctor-diagram --base-dir D:\prototypes\hugo_asciidoc_ddd\docs -a outdir=D:\prototypes\hugo_asciidoc_ddd\build -] ...
 +```
 +
 +## Learn Markdown
 +
 +Markdown syntax is simple enough to learn in a single sitting. The following are excellent resources to get you up and running:
 +
 +* [Daring Fireball: Markdown, John Gruber (Creator of Markdown)][fireball]
 +* [Markdown Cheatsheet, Adam Pritchard][mdcheatsheet]
 +* [Markdown Tutorial (Interactive), Garen Torikian][mdtutorial]
 +* [The Markdown Guide, Matt Cone][mdguide]
 +
 +[`emojify` function]: /functions/emojify/
 +[ascii]: https://asciidoctor.org/
 +[config]: /getting-started/configuration/
 +[developer tools]: /tools/
 +[emojis]: https://www.webpagefx.com/tools/emoji-cheat-sheet/
 +[fireball]: https://daringfireball.net/projects/markdown/
 +[gfmtasks]: https://guides.github.com/features/mastering-markdown/#syntax
 +[helperssource]: https://github.com/gohugoio/hugo/blob/77c60a3440806067109347d04eb5368b65ea0fe8/helpers/general.go#L65
 +[hl]: /content-management/syntax-highlighting/
 +[hlsc]: /content-management/shortcodes/#highlight
 +[hugocss]: /css/style.css
 +[ietf]: https://tools.ietf.org/html/
 +[mathjaxdocs]: https://docs.mathjax.org/en/latest/
 +[mdcheatsheet]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet
 +[mdguide]: https://www.markdownguide.org/
 +[mdtutorial]: https://www.markdowntutorial.com/
 +[org]: https://orgmode.org/
 +[pandoc]: https://www.pandoc.org/
 +[rest]: https://docutils.sourceforge.io/rst.html
 +[sc]: /content-management/shortcodes/
 +[sct]: /templates/shortcode-templates/
index bf530518fdfcca60441082b701e675f0349c8b83,0000000000000000000000000000000000000000..78d3323dd75975803ae4baebb0ff9bc99bb303c6
mode 100644,000000..100644
--- /dev/null
@@@ -1,241 -1,0 +1,239 @@@
- linkTitle: Front Matter
 +---
 +title: Front Matter
- lastmod: 2017-02-24
 +description: Hugo allows you to add front matter in yaml, toml, or json to your content files.
- : an array of one or more aliases (e.g., old published paths of renamed content) that will be created in the output directory structure . See [Aliases][aliases] for details.
 +categories: [content management]
 +keywords: ["front matter", "yaml", "toml", "json", "metadata", "archetypes"]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 60
 +toc: true
 +weight: 60
 +aliases: [/content/front-matter/]
 +---
 +
 +**Front matter** allows you to keep metadata attached to an instance of a [content type]---i.e., embedded inside a content file---and is one of the many features that gives Hugo its strength.
 +
 +{{< youtube Yh2xKRJGff4 >}}
 +
 +## Front Matter Formats
 +
 +Hugo supports four formats for front matter, each with their own identifying tokens.
 +
 +TOML
 +: identified by opening and closing `+++`.
 +
 +YAML
 +: identified by opening and closing `---`.
 +
 +JSON
 +: a single JSON object surrounded by '`{`' and '`}`', followed by a new line.
 +
 +ORG
 +: a group of Org mode keywords in the format '`#+KEY: VALUE`'. Any line that does not start with `#+` ends the front matter section.
 +  Keyword values can be either strings (`#+KEY: VALUE`) or a whitespace separated list of strings (`#+KEY[]: VALUE_1 VALUE_2`).
 +
 +### Example
 +
 +{{< code-toggle >}}
 +title = "spf13-vim 3.0 release and new website"
 +description = "spf13-vim is a cross platform distribution of vim plugins and resources for Vim."
 +tags = [ ".vimrc", "plugins", "spf13-vim", "vim" ]
 +date = "2012-04-06"
 +categories = [
 +  "Development",
 +  "VIM"
 +]
 +slug = "spf13-vim-3-0-release-and-new-website"
 +{{< /code-toggle >}}
 +
 +## Front Matter Variables
 +
 +### Predefined
 +
 +There are a few predefined variables that Hugo is aware of. See [Page Variables][pagevars] for how to call many of these predefined variables in your templates.
 +
 +aliases
- : an array of paths to audio files related to the page; used by the `opengraph` [internal template](/templates/internal) to populate `og:audio`.
++: An array of one or more aliases (e.g., old published paths of renamed content) that will be created in the output directory structure . See [Aliases][aliases] for details.
 +
 +audio
- : a map of Front Matter keys whose values are passed down to the page's descendants unless overwritten by self or a closer ancestor's cascade. See [Front Matter Cascade](#front-matter-cascade) for details.
++: An array of paths to audio files related to the page; used by the `opengraph` [internal template](/templates/internal) to populate `og:audio`.
 +
 +cascade
- : the datetime assigned to this page. This is usually fetched from the `date` field in front matter, but this behavior is configurable.
++: A map of front matter keys whose values are passed down to the page's descendants unless overwritten by self or a closer ancestor's cascade. See [Front Matter Cascade](#front-matter-cascade) for details.
 +
 +date
- : the description for the content.
++: The datetime assigned to this page. This is usually fetched from the `date` field in front matter, but this behavior is configurable.
 +
 +description
- : if `true`, the content will not be rendered unless the `--buildDrafts` flag is passed to the `hugo` command.
++: The description for the content.
 +
 +draft
- : the datetime at which the content should no longer be published by Hugo; expired content will not be rendered unless the `--buildExpired` flag is passed to the `hugo` command.
++: If `true`, the content will not be rendered unless the `--buildDrafts` flag is passed to the `hugo` command.
 +
 +expiryDate
- : if `true`, sets a leaf bundle to be [headless][headless-bundle].
++: The datetime at which the content should no longer be published by Hugo; expired content will not be rendered unless the `--buildExpired` flag is passed to the `hugo` command.
 +
 +headless
- : an array of paths to images related to the page; used by [internal templates](/templates/internal) such as `_internal/twitter_cards.html`.
++: If `true`, sets a leaf bundle to be [headless][headless-bundle].
 +
 +images
- : if `true`, Hugo will explicitly treat the content as a CJK language; both `.Summary` and `.WordCount` work properly in CJK languages.
++: An array of paths to images related to the page; used by [internal templates](/templates/internal) such as `_internal/twitter_cards.html`.
 +
 +isCJKLanguage
- : the meta keywords for the content.
++: If `true`, Hugo will explicitly treat the content as a CJK language; both `.Summary` and `.WordCount` work properly in CJK languages.
 +
 +keywords
- : the layout Hugo should select from the [lookup order][lookup] when rendering the content. If a `type` is not specified in the front matter, Hugo will look for the layout of the same name in the layout directory that corresponds with a content's section. See [Content Types][content type].
++: The meta keywords for the content.
 +
 +layout
- : the datetime at which the content was last modified.
++: The layout Hugo should select from the [lookup order][lookup] when rendering the content. If a `type` is not specified in the front matter, Hugo will look for the layout of the same name in the layout directory that corresponds with a content's section. See [Content Types][content type].
 +
 +lastmod
- : used for creating links to content; if set, Hugo defaults to using the `linktitle` before the `title`. Hugo can also [order lists of content by `linktitle`][bylinktitle].
++: The datetime at which the content was last modified.
 +
 +linkTitle
- : allows you to specify output formats specific to the content. See [output formats][outputs].
++: Used for creating links to content; if set, Hugo defaults to using the `linktitle` before the `title`. Hugo can also [order lists of content by `linktitle`][bylinktitle].
 +
 +markup
 +: **experimental**; specify `"rst"` for reStructuredText (requires`rst2html`) or `"md"` (default) for Markdown.
 +
 +outputs
- : if in the future, content will not be rendered unless the `--buildFuture` flag is passed to `hugo`.
++: Allows you to specify output formats specific to the content. See [output formats][outputs].
 +
 +publishDate
- : used for configuring page bundle resources. See [Page Resources][page-resources].
++: If in the future, content will not be rendered unless the `--buildFuture` flag is passed to `hugo`.
 +
 +resources
- : an array of series this page belongs to, as a subset of the `series` [taxonomy](/content-management/taxonomies/); used by the `opengraph` [internal template](/templates/internal) to populate `og:see_also`.
++: Used for configuring page bundle resources. See [Page Resources][page-resources].
 +
 +series
- : appears as the tail of the output URL. A value specified in front matter will override the segment of the URL based on the filename.
++: An array of series this page belongs to, as a subset of the `series` [taxonomy](/content-management/taxonomies/); used by the `opengraph` [internal template](/templates/internal) to populate `og:see_also`.
 +
 +slug
- : text used when providing a summary of the article in the `.Summary` page variable; details available in the [content-summaries](/content-management/summaries/) section.
++: Overrides the last segment of the URL path. Not applicable to section pages. See [URL Management](/content-management/urls/#slug) for details.
 +
 +summary
- : the title for the content.
++: Text used when providing a summary of the article in the `.Summary` page variable; details available in the [content-summaries](/content-management/summaries/) section.
 +
 +title
- : the type of the content; this value will be automatically derived from the directory (i.e., the [section]) if not specified in front matter.
++: The title for the content.
 +
 +type
- : the full path to the content from the web root. It makes no assumptions about the path of the content file. See [URL Management](/content-management/urls/#set-url-in-front-matter).
++: The type of the content; this value will be automatically derived from the directory (i.e., the [section]) if not specified in front matter.
 +
 +url
- : an array of paths to videos related to the page; used by the `opengraph` [internal template](/templates/internal) to populate `og:video`.
++: Overrides the entire URL path. Applicable to regular pages and section pages. See [URL Management](/content-management/urls/#url) for details.
 +
 +videos
- : field name of the *plural* form of the index. See `tags` and `categories` in the above front matter examples. *Note that the plural form of user-defined taxonomies cannot be the same as any of the predefined front matter variables.*
++: An array of paths to videos related to the page; used by the `opengraph` [internal template](/templates/internal) to populate `og:video`.
 +
 +weight
 +: used for [ordering your content in lists][ordering]. Lower weight gets higher precedence. So content with lower weight will come first. If set, weights should be non-zero, as 0 is interpreted as an *unset* weight.
 +
 +\<taxonomies\>
- {{% note "Hugo's Default URL Destinations" %}}
++: Field name of the *plural* form of the index. See `tags` and `categories` in the above front matter examples. *Note that the plural form of user-defined taxonomies cannot be the same as any of the predefined front matter variables.*
 +
- {{< code-toggle copy="false" >}}
++{{% note %}}
 +If neither `slug` nor `url` is present and [permalinks are not configured otherwise in your site `config` file](/content-management/urls/#permalinks), Hugo will use the filename of your content to create the output URL. See [Content Organization](/content-management/organization) for an explanation of paths in Hugo and [URL Management](/content-management/urls/) for ways to customize Hugo's default behaviors.
 +{{% /note %}}
 +
 +### User-Defined
 +
 +You can add fields to your front matter arbitrarily to meet your needs. These user-defined key-values are placed into a single `.Params` variable for use in your templates.
 +
 +The following fields can be accessed via `.Params.include_toc` and `.Params.show_comments`, respectively. The [Variables] section provides more information on using Hugo's page- and site-level variables in your templates.
 +
- {{< code-toggle copy="false" >}}
++{{< code-toggle copy=false >}}
 +include_toc: true
 +show_comments: false
 +{{</ code-toggle >}}
 +
 +## Front Matter Cascade
 +
 +Any node or section can pass down to descendants a set of Front Matter values as long as defined underneath the reserved `cascade` Front Matter key.
 +
 +### Target Specific Pages
 +
 +The `cascade` block can be a slice with a optional `_target` keyword, allowing for multiple `cascade` values targeting different page sets.
 +
- {{< code-toggle copy="false" >}}
++{{< code-toggle copy=false >}}
 +title ="Blog"
 +[[cascade]]
 +background = "yosemite.jpg"
 +[cascade._target]
 +path="/blog/**"
 +lang="en"
 +kind="page"
 +[[cascade]]
 +background = "goldenbridge.jpg"
 +[cascade._target]
 +kind="section"
 +{{</ code-toggle >}}
 +
 +Keywords available for `_target`:
 +
 +path
 +: A [Glob](https://github.com/gobwas/glob) pattern matching the content path below /content. Expects Unix-styled slashes. Note that this is the virtual path, so it starts at the mount root. The matching supports double-asterisks so you can match for patterns like `/blog/*/**` to match anything from the third level and down.
 +
 +kind
 +: A Glob pattern matching the Page's Kind(s), e.g. "{home,section}".
 +
 +lang
 +: A Glob pattern matching the Page's language, e.g. "{en,sv}".
 +
 +environment
 +: A Glob pattern matching the build environment, e.g. "{production,development}"
 +
 +Any of the above can be omitted.
 +
 +### Example
 +
 +In `content/blog/_index.md`
 +
++{{< code-toggle copy=false >}}
 +title: Blog
 +cascade:
 +  banner: images/typewriter.jpg
 +{{</ code-toggle >}}
 +
 +With the above example the Blog section page and its descendants will return `images/typewriter.jpg` when `.Params.banner` is invoked unless:
 +
 +- Said descendant has its own `banner` value set
 +- Or a closer ancestor node has its own `cascade.banner` value set.
 +
 +## Order Content Through Front Matter
 +
 +You can assign content-specific `weight` in the front matter of your content. These values are especially useful for [ordering][ordering] in list views. You can use `weight` for ordering of content and the convention of [`<TAXONOMY>_weight`][taxweight] for ordering content within a taxonomy. See [Ordering and Grouping Hugo Lists][lists] to see how `weight` can be used to organize your content in list views.
 +
 +## Override Global Markdown Configuration
 +
 +It's possible to set some options for Markdown rendering in a content's front matter as an override to the [Rendering options set in your project configuration][config].
 +
 +## Front Matter Format Specs
 +
 +- [TOML Spec][toml]
 +- [YAML Spec][yaml]
 +- [JSON Spec][json]
 +
 +[variables]: /variables/
 +[aliases]: /content-management/urls/#aliases
 +[archetype]: /content-management/archetypes/
 +[bylinktitle]: /templates/lists/#by-link-title
 +[config]: /getting-started/configuration/ "Hugo documentation for site configuration"
 +[content type]: /content-management/types/
 +[contentorg]: /content-management/organization/
 +[headless-bundle]: /content-management/page-bundles/#headless-bundle
 +[json]: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf "Specification for JSON, JavaScript Object Notation"
 +[lists]: /templates/lists/#order-content "See how to order content in list pages; for example, templates that look to specific _index.md for content and front matter."
 +[lookup]: /templates/lookup-order/ "Hugo traverses your templates in a specific order when rendering content to allow for DRYer templating."
 +[ordering]: /templates/lists/ "Hugo provides multiple ways to sort and order your content in list templates"
 +[outputs]: /templates/output-formats/ "With the release of v22, you can output your content to any text format using Hugo's familiar templating"
 +[page-resources]: /content-management/page-resources/
 +[pagevars]: /variables/page/
 +[section]: /content-management/sections/
 +[taxweight]: /content-management/taxonomies/
 +[toml]: https://github.com/toml-lang/toml "Specification for TOML, Tom's Obvious Minimal Language"
 +[urls]: /content-management/urls/
 +[variables]: /variables/
 +[yaml]: https://yaml.org/spec/ "Specification for YAML, YAML Ain't Markup Language"
index 3f71b42448ceae4bdb7be60e5704537eea710614,0000000000000000000000000000000000000000..0043f97b0f67da5ad940c2ca4596ea0d947ef9bb
mode 100644,000000..100644
--- /dev/null
@@@ -1,477 -1,0 +1,476 @@@
- linkTitle: Image Processing
 +---
 +title: Image Processing
- [`anchor`]: {{< relref "content-management/image-processing#anchor" >}}
- [`lang.FormatNumber`]: {{< relref "functions/lang#langformatnumber" >}}
- [Exif]: <https://en.wikipedia.org/wiki/Exif>
- [filters]: {{< relref "functions/images" >}}
 +description: Resize, crop, rotate, filter, and convert images.
 +categories: [content management]
 +keywords: [resources, images]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 90
 +toc: true
 +weight: 90
 +---
 +## Image Resources
 +
 +To process an image, you must access the image as either a page resource or a global resource.
 +
 +### Page Resources
 +
 +A page resource is a file within a [page bundle]. A page bundle is a directory with an `index.md` or `_index.md` file at its root.
 +
 +```text
 +content/
 +└── posts/
 +    └── post-1/           <-- page bundle
 +        ├── index.md
 +        └── sunset.jpg    <-- page resource
 +```
 +
 +### Global Resources
 +
 +A global resource is a file:
 +
 +- Within the `assets` directory, or
 +- Within any directory [mounted] to the `assets` directory, or
 +- Located on a remote server accessible via `http` or `https`
 +
 +```text
 +assets/
 +└── images/
 +    └── sunset.jpg    <-- global resource
 +```
 +
 +To access a local image as a global resource:
 +
 +```go-html-template
 +{{ $image := resources.Get "images/sunset.jpg" }}
 +```
 +
 +To access a remote image as a global resource:
 +
 +```go-html-template
 +{{ $image := resources.GetRemote "https://gohugo.io/img/hugo-logo.png" }}
 +```
 +
 +## Image Rendering
 +
 +Once you have accessed an image as either a page resource or a global resource, render it in your templates using the `Permalink`, `RelPermalink`, `Width`, and `Height` properties.
 +
 +Example 1: Throws an error if the resource is not found.
 +
 +```go-html-template
 +{{ $image := .Resources.GetMatch "sunset.jpg" }}
 +<img src="{{ $image.RelPermalink }}" width="{{ $image.Width }}" height="{{ $image.Height }}">
 +```
 +
 +Example 2: Skips image rendering if the resource is not found.
 +
 +```go-html-template
 +{{ $image := .Resources.GetMatch "sunset.jpg" }}
 +{{ with $image }}
 +  <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}">
 +{{ end }}
 +```
 +
 +Example 3: A more concise way to skip image rendering if the resource is not found.
 +
 +```go-html-template
 +{{ with .Resources.GetMatch "sunset.jpg" }}
 +  <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}">
 +{{ end }}
 +```
 +
 +## Image Processing Methods
 +
 +The `image` resource implements the  [`Resize`], [`Fit`], [`Fill`], [`Crop`], [`Filter`], [`Colors`] and [`Exif`] methods.
 +
 +{{% note %}}
 +Metadata (Exif, IPTC, XMP, etc.) is not preserved during image transformation. Use the [`Exif`] method with the _original_ image to extract Exif metadata from JPEG or TIFF images.
 +{{% /note %}}
 +
 +### Resize
 +
 +Resize an image to the specified width and/or height.
 +
 +If you specify both width and height, the resulting image will be disproportionally scaled unless the original image has the same aspect ratio.
 +
 +```go-html-template
 +{{/* Resize to a width of 600px and preserve aspect ratio */}}
 +{{ $image := $image.Resize "600x" }}
 +
 +{{/* Resize to a height of 400px and preserve aspect ratio */}}
 +{{ $image := $image.Resize "x400" }}
 +
 +{{/* Resize to a width of 600px and a height of 400px */}}
 +{{ $image := $image.Resize "600x400" }}
 +```
 +
 +### Fit
 +
 +Downscale an image to fit the given dimensions while maintaining aspect ratio. You must provide both width and height.
 +
 +```go-html-template
 +{{ $image := $image.Fit "600x400" }}
 +```
 +
 +### Fill
 +
 +Crop and resize an image to match the given dimensions. You must provide both width and height. Use the [`anchor`] option to change the crop box anchor point.
 +
 +```go-html-template
 +{{ $image := $image.Fill "600x400" }}
 +```
 +
 +### Crop
 +
 +Crop an image to match the given dimensions without resizing. You must provide both width and height. Use the [`anchor`] option to change the crop box anchor point.
 +
 +```go-html-template
 +{{ $image := $image.Crop "600x400" }}
 +```
 +
 +### Filter
 +
 +Apply one or more [filters] to an image.
 +
 +```go-html-template
 +{{ $image := $image.Filter (images.GaussianBlur 6) (images.Pixelate 8) }}
 +```
 +
 +Write this in a more functional style using pipes. Hugo applies the filters in the order given.
 +
 +```go-html-template
 +{{ $image := $image | images.Filter (images.GaussianBlur 6) (images.Pixelate 8) }}
 +```
 +
 +Sometimes it can be useful to create the filter chain once and then reuse it.
 +
 +```go-html-template
 +{{ $filters := slice  (images.GaussianBlur 6) (images.Pixelate 8) }}
 +{{ $image1 := $image1.Filter $filters }}
 +{{ $image2 := $image2.Filter $filters }}
 +```
 +
 +### Colors
 +
 +{{< new-in "0.104.0" >}}
 +
 +`.Colors` returns a slice of hex strings with the dominant colors in the image using a simple histogram method.
 +
 +```go-html-template
 +{{ $colors := $image.Colors }}
 +```
 +
 +This method is fast, but if you also scale down your images, it would be good for performance to extract the colors from the scaled down image.
 +
 +
 +### Exif
 +
 +Provides an [Exif] object containing image metadata.
 +
 +You may access Exif data in JPEG and TIFF images. To prevent errors when processing images without Exif data, wrap the access in a [`with`] statement.
 +
 +```go-html-template
 +{{ with $image.Exif }}
 +  Date: {{ .Date }}
 +  Lat/Long: {{ .Lat }}/{{ .Long }}
 +  Tags:
 +  {{ range $k, $v := .Tags }}
 +    TAG: {{ $k }}: {{ $v }}
 +  {{ end }}
 +{{ end }}
 +```
 +
 +You may also access Exif fields individually, using the [`lang.FormatNumber`] function to format the fields as needed.
 +
 +```go-html-template
 +{{ with $image.Exif }}
 +  <ul>
 +    {{ with .Date }}<li>Date: {{ .Format "January 02, 2006" }}</li>{{ end }}
 +    {{ with .Tags.ApertureValue }}<li>Aperture: {{ lang.FormatNumber 2 . }}</li>{{ end }}
 +    {{ with .Tags.BrightnessValue }}<li>Brightness: {{ lang.FormatNumber 2 . }}</li>{{ end }}
 +    {{ with .Tags.ExposureTime }}<li>Exposure Time: {{ . }}</li>{{ end }}
 +    {{ with .Tags.FNumber }}<li>F Number: {{ . }}</li>{{ end }}
 +    {{ with .Tags.FocalLength }}<li>Focal Length: {{ . }}</li>{{ end }}
 +    {{ with .Tags.ISOSpeedRatings }}<li>ISO Speed Ratings: {{ . }}</li>{{ end }}
 +    {{ with .Tags.LensModel }}<li>Lens Model: {{ . }}</li>{{ end }}
 +  </ul>
 +{{ end }}
 +```
 +
 +#### Exif Variables
 +
 +.Date
 +: Image creation date/time. Format with the [time.Format] function.
 +
 +.Lat
 +: GPS latitude in degrees.
 +
 +.Long
 +: GPS longitude in degrees.
 +
 +.Tags
 +: A collection of the available Exif tags for this image. You may include or exclude specific tags from this collection in the [site configuration](#exif-data).
 +
 +## Image Processing Options
 +
 +The [`Resize`], [`Fit`], [`Fill`], and [`Crop`] methods accept a space-separated, case-insensitive list of options. The order of the options within the list is irrelevant.
 +
 +### Dimensions
 +
 +With the [`Resize`] method you must specify width, height, or both. The [`Fit`], [`Fill`], and [`Crop`] methods require both width and height. All dimensions are in pixels.
 +
 +```go-html-template
 +{{ $image := $image.Resize "600x" }}
 +{{ $image := $image.Resize "x400" }}
 +{{ $image := $image.Resize "600x400" }}
 +{{ $image := $image.Fit "600x400" }}
 +{{ $image := $image.Fill "600x400" }}
 +{{ $image := $image.Crop "600x400" }}
 +```
 +
 +### Rotation
 +
 +Rotates an image counter-clockwise by the given angle. Hugo performs rotation _before_ scaling. For example, if the original image is 600x400 and you wish to rotate the image 90 degrees counter-clockwise while scaling it by 50%:
 +
 +```go-html-template
 +{{ $image = $image.Resize "200x r90" }}
 +```
 +
 +In the example above, the width represents the desired width _after_ rotation.
 +
 +To rotate an image without scaling, use the dimensions of the original image:
 +
 +```go-html-template
 +{{ with .Resources.GetMatch "sunset.jpg" }}
 +  {{ with .Resize (printf "%dx%d r90" .Height .Width) }}
 +    <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}">
 +  {{ end }}
 +{{ end }}
 +```
 +
 +In the example above, on the second line, we have reversed width and height to reflect the desired dimensions _after_ rotation.
 +
 +### Anchor
 +
 +When using the [`Crop`] or [`Fill`] method, the _anchor_ determines the placement of the crop box. You may specify `TopLeft`, `Top`, `TopRight`, `Left`, `Center`,`Right`, `BottomLeft`, `Bottom`, `BottomRight`, or `Smart`.
 +
 +The default value is `Smart`, which uses [Smartcrop] image analysis to determine the optimal placement of the crop box. You may override the default value in the [site configuration].
 +
 +For example, if you have a 400x200 image with a bird in the upper left quadrant, you can create a 200x100 thumbnail containing the bird:
 +
 +```go-html-template
 +{{ $image.Crop "200x100 TopLeft" }}
 +```
 +
 +If you apply [rotation](#rotation) when using the [`Crop`] or [`Fill`] method, specify the anchor relative to the rotated image.
 +
 +### Target Format
 +
 +By default, Hugo encodes the image in the source format. You may convert the image to another format by specifying `bmp`, `gif`, `jpeg`, `jpg`, `png`, `tif`, `tiff`, or `webp`.
 +
 +```go-html-template
 +{{ $image.Resize "600x webp" }}
 +```
 +
 +To convert an image without scaling, use the dimensions of the original image:
 +
 +```go-html-template
 +{{ with .Resources.GetMatch "sunset.jpg" }}
 +  {{ with .Resize (printf "%dx%d webp" .Width .Height) }}
 +    <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}">
 +  {{ end }}
 +{{ end }}
 +```
 +
 +### Quality
 +
 +Applicable to JPEG and WebP images, the `q` value determines the quality of the converted image. Higher values produce better quality images, while lower values produce smaller files. Set this value to a whole number between 1 and 100, inclusive.
 +
 +The default value is 75. You may override the default value in the [site configuration].
 +
 +```go-html-template
 +{{ $image.Resize "600x webp q50" }}
 +```
 +
 +### Hint
 +
 +<!-- Specifies a libwebp preset, not a libwebp image hint. -->
 +
 +Applicable to WebP images, this option corresponds to a set of predefined encoding parameters.
 +
 +Value|Example
 +:--|:--
 +`drawing`|Hand or line drawing with high-contrast details
 +`icon`|Small colorful image
 +`photo`|Outdoor photograph with natural lighting
 +`picture`|Indoor photograph such as a portrait
 +`text`|Image that is primarily text
 +
 +The default value is `photo`. You may override the default value in the [site configuration].
 +
 +```go-html-template
 +{{ $image.Resize "600x webp picture" }}
 +```
 +
 +### Background Color
 +
 +When converting an image from a format that supports transparency (e.g., PNG) to a format that does _not_ support transparency (e.g., JPEG), you may specify the background color of the resulting image.
 +
 +Use either a 3-digit or a 6-digit hexadecimal color code (e.g., `#00f` or `#0000ff`).
 +
 +The default value is `#ffffff` (white). You may override the default value in the [site configuration].
 +
 +```go-html-template
 +{{ $image.Resize "600x jpg #b31280" }}
 +```
 +
 +### Resampling Filter
 +
 +You may specify the resampling filter used when resizing an image. Commonly used resampling filters include:
 +
 +Filter|Description
 +:--|:--
 +`Box`|Simple and fast averaging filter appropriate for downscaling
 +`Lanczos`|High-quality resampling filter for photographic images yielding sharp results
 +`CatmullRom`|Sharp cubic filter that is faster than the Lanczos filter while providing similar results
 +`MitchellNetravali`|Cubic filter that produces smoother results with less ringing artifacts than CatmullRom
 +`Linear`|Bilinear resampling filter, produces smooth output, faster than cubic filters
 +`NearestNeighbor`|Fastest resampling filter, no antialiasing
 +
 +The default value is `Box`. You may override the default value in the [site configuration].
 +
 +```go-html-template
 +{{ $image.Resize "600x400 Lanczos" }}
 +```
 +
 +See [github.com/disintegration/imaging] for the complete list of resampling filters. If you wish to improve image quality at the expense of performance, you may wish to experiment with the alternative filters.
 +
 +## Image Processing Examples
 +
 +_The photo of the sunset used in the examples below is Copyright [Bjørn Erik Pedersen](https://commons.wikimedia.org/wiki/User:Bep) (Creative Commons Attribution-Share Alike 4.0 International license)_
 +
 +{{< imgproc sunset Resize "300x" />}}
 +
 +{{< imgproc sunset Fill "90x120 left" />}}
 +
 +{{< imgproc sunset Fill "90x120 right" />}}
 +
 +{{< imgproc sunset Fit "90x90" />}}
 +
 +{{< imgproc sunset Crop "250x250 center" />}}
 +
 +{{< imgproc sunset Resize "300x q10" />}}
 +
 +This is the shortcode used to generate the examples above:
 +
 +{{< code file="layouts/shortcodes/imgproc.html" >}}
 +{{< readfile file="layouts/shortcodes/imgproc.html" >}}
 +{{< /code >}}
 +
 +Call the shortcode from your Markdown like this:
 +
 +```go-html-template
 +{{</* imgproc sunset Resize "300x" /*/>}}
 +```
 +
 +{{% note %}}
 +Note the self-closing shortcode syntax above. You may call the `imgproc` shortcode with or without **inner content**.
 +{{% /note %}}
 +
 +## Imaging Configuration
 +
 +### Processing Options
 +
 +Define an `imaging` section in your site configuration to set the default [image processing options](#image-processing-options).
 +
 +{{< code-toggle file="config" copy=true >}}
 +[imaging]
 +resampleFilter = "Box"
 +quality = 75
 +hint = "photo"
 +anchor = "Smart"
 +bgColor = "#ffffff"
 +{{< /code-toggle >}}
 +
 +anchor
 +: See image processing options: [anchor](#anchor).
 +
 +bgColor
 +: See image processing options: [background color](#background-color).
 +
 +hint
 +: See image processing options: [hint](#hint).
 +
 +quality
 +: See image processing options: [quality](#quality).
 +
 +resampleFilter
 +: See image processing options: [resampling filter](#resampling-filter).
 +
 +### Exif Data
 +
 +Define an `imaging.exif` section in your site configuration to control the availability of Exif data.
 +
 +{{< code-toggle file="config" copy=true >}}
 +[imaging.exif]
 +includeFields = ""
 +excludeFields = ""
 +disableDate = false
 +disableLatLong = false
 +{{< /code-toggle >}}
 +
 +disableDate
 +: Hugo extracts the image creation date/time into `.Date`. Set this to `true` to disable. Default is `false`.
 +
 +disableLatLong
 +: Hugo extracts the GPS latitude and longitude into `.Lat` and `.Long`. Set this to `true` to disable. Default is `false`.
 +
 +excludeFields
 +: Regular expression matching the Exif tags to exclude from the `.Tags` collection. Default is&nbsp;`""`.
 +
 +includeFields
 +: Regular expression matching the Exif tags to include in the `.Tags` collection. Default is&nbsp;`""`. To include all available tags, set this value to&nbsp;`".*"`.
 +
 +{{% note %}}
 +To improve performance and decrease cache size, if you set neither `excludeFields` nor `includeFields`, Hugo excludes the following tags: `ColorSpace`, `Contrast`, `Exif`, `Exposure[M|P|B]`, `Flash`, `GPS`, `JPEG`, `Metering`, `Resolution`, `Saturation`, `Sensing`, `Sharp`, and `WhiteBalance`.
 +{{% /note %}}
 +
 +## Smart Cropping of Images
 +
 +By default, Hugo uses the [Smartcrop] library when cropping images with the `Crop` or`Fill` methods. You can set the anchor point manually, but in most cases the `Smart` option will make a good choice.
 +
 +Examples using the sunset image from above:
 +
 +{{< imgproc sunset Fill "200x200 smart" />}}
 +
 +{{< imgproc sunset Crop "200x200 smart" />}}
 +
 +## Image Processing Performance Consideration
 +
 +Hugo caches processed images in the `resources` directory. If you include this directory in source control, Hugo will not have to regenerate the images in a CI/CD workflow (e.g., GitHub Pages, GitLab Pages, Netlify, etc.). This results in faster builds.
 +
 +If you change image processing methods or options, or if you rename or remove images, the `resources` directory will contain unused images. To remove the unused images, perform garbage collection with:
 +
 +```bash
 +hugo --gc
 +```
 +
- [mounted]: {{< relref "hugo-modules/configuration#module-config-mounts">}}
- [page bundle]: {{< relref "content-management/page-bundles" >}}
++[time.Format]: /functions/dateformat
++[`anchor`]: /content-management/image-processing#anchor
++[mounted]: /hugo-modules/configuration#module-config-mounts
++[page bundle]: /content-management/page-bundles
++[`lang.FormatNumber`]: /functions/lang
++[filters]: /functions/images
 +[github.com/disintegration/imaging]: <https://github.com/disintegration/imaging#image-resizing>
- [time.Format]: {{< relref "functions/dateformat" >}}
 +[Smartcrop]: <https://github.com/muesli/smartcrop#smartcrop>
++[Exif]: <https://en.wikipedia.org/wiki/Exif>
 +[`Colors`]: #colors
 +[`Crop`]: #crop
 +[`Exif`]: #exif
 +[`Fill`]: #fill
 +[`Filter`]: #filter
 +[`Fit`]: #fit
 +[`Resize`]: #resize
 +[site configuration]: #processing-options
 +[`with`]: /functions/with/
index b9fab2ca4737ef2400241e7b4eed679339782c78,0000000000000000000000000000000000000000..369938aba79d77acdbadf66c0e6bc515dc9a71b4
mode 100644,000000..100644
--- /dev/null
@@@ -1,129 -1,0 +1,225 @@@
- linkTitle: Menus
- description: Hugo has a simple yet powerful menu system.
 +---
 +title: Menus
- {{% note "Lazy Blogger"%}}
- If all you want is a simple menu for your sections, see the ["Section Menu for Lazy Bloggers" in Menu Templates](/templates/menu-templates/#section-menu-for-lazy-bloggers).
- {{% /note %}}
++description:  Create menus by defining entries, localizing each entry, and rendering the resulting data structure.
 +categories: [content management]
 +keywords: [menus]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 190
 +toc: true
 +weight: 190
 +aliases: [/extras/menus/]
 +---
 +
- You can do this:
++## Overview
++
++To create a menu for your site:
 +
- * Place content in one or many menus
- * Handle nested menus with unlimited depth
- * Create menu entries without being attached to any content
- * Distinguish active element (and active branch)
++1. Define the menu entries
++2. [Localize] each entry
++3. Render the menu with a [template]
 +
- ## What is a Menu in Hugo?
++Create multiple menus, either flat or nested. For example, create a main menu for the header, and a separate menu for the footer.
 +
- A **menu** is a named array of menu entries accessible by name via the [`.Site.Menus` site variable][sitevars]. For example, you can access your site's `main` menu via `.Site.Menus.main`.
++There are three ways to define menu entries:
 +
- {{% note "Menus on Multilingual Sites" %}}
- If you make use of the [multilingual feature](/content-management/multilingual/), you can define language-independent menus.
++1. Automatically
++1. In front matter
++1. In site configuration
 +
- See the [Menu Entry Properties][me-props] for all the variables and functions related to a menu entry.
++{{% note %}}
++Although you can use these methods in combination when defining a menu, the menu will be easier to conceptualize and maintain if you use one method throughout the site.
 +{{% /note %}}
 +
- ## Add content to menus
++## Define automatically
 +
- Hugo allows you to add content to a menu via the content's [front matter](/content-management/front-matter/).
++To automatically define menu entries for each top-level section of your site, enable the section pages menu in your site configuration.
 +
- ### Simple
++{{< code-toggle file="config" copy=false >}}
++sectionPagesMenu = "main"
++{{< /code-toggle >}}
 +
- If all you need to do is add an entry to a menu, the simple form works well.
++This creates a menu structure that you can access with `site.Menus.main` in your templates. See [menu templates] for details.
 +
- #### A Single Menu
++## Define in front matter
 +
- {{< code-toggle >}}
- menu: "main"
++To add a page to the "main" menu:
 +
- #### Multiple Menus
++{{< code-toggle file="content/about.md" copy=false fm=true >}}
++title = 'About'
++menu = 'main'
 +{{< /code-toggle >}}
 +
- {{< code-toggle >}}
- menu: ["main", "footer"]
++Access the entry with `site.Menus.main` in your templates. See [menu templates] for details.
++
++To add a page to the "main" and "footer" menus:
 +
- #### Advanced
++{{< code-toggle file="content/contact.md" copy=false fm=true >}}
++title = 'Contact'
++menu = ['main','footer']
 +{{< /code-toggle >}}
 +
- {{< code-toggle >}}
- menu:
-   docs:
-     parent: 'extras'
-     weight: 20
++Access the entry with `site.Menus.main` and `site.Menus.footer` in your templates. See [menu templates] for details.
 +
- ## Add Non-content Entries to a Menu
++### Properties {#properties-front-matter}
++
++Use these properties when defining menu entries in front matter:
++
++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.
++
++### Example {#example-front-matter}
++
++This front matter menu entry demonstrates some of the available properties:
++
++{{< code-toggle file="content/products/software.md" copy=false fm=true >}}
++title = 'Software'
++[menu.main]
++parent = 'Products'
++weight = 20
++pre = '<i class="fa-solid fa-code"></i>'
++[menu.main.params]
++class = 'center'
 +{{< /code-toggle >}}
 +
- You can also add entries to menus that aren’t attached to a piece of content. This takes place in your Hugo project's [`config` file][config] (see [Menu Entry Properties][me-props] for full details of available variables).
++Access the entry with `site.Menus.main` in your templates. See [menu templates] for details.
++
 +
- Here’s an example snippet pulled from a configuration file:
++## Define in site configuration
 +
- {{< code-toggle file="config" >}}
++To define entries for the "main" menu:
 +
-     name = "about hugo"
-     pre = "<i class='fa fa-heart'></i>"
-     weight = -110
-     identifier = "about"
-     url = "/about/"
++{{< code-toggle file="config" copy=false >}}
 +[[menu.main]]
-     name = "getting started"
-     pre = "<i class='fa fa-road'></i>"
-     post = "<span class='alert'>New!</span>"
-     weight = -100
-     url = "/getting-started/"
++name = 'Home'
++pageRef = '/'
++weight = 10
++
 +[[menu.main]]
- The URLs must be relative to the context root. If the `baseURL` is `https://example.com/mysite/`, then the URLs in the menu must not include the context root `mysite`. Using an absolute URL will override the baseURL. If the value used for `URL` in the above example is `https://subdomain.example.com/`, the output will be `https://subdomain.example.com`.
++name = 'Products'
++pageRef = '/products'
++weight = 20
++
++[[menu.main]]
++name = 'Services'
++pageRef = '/services'
++weight = 30
++{{< /code-toggle >}}
++
++This creates a menu structure that you can access with `site.Menus.main` in your templates. See [menu templates] for details.
++
++To define entries for the "footer" menu:
++
++{{< code-toggle file="config" copy=false >}}
++[[menu.footer]]
++name = 'Terms'
++pageRef = '/terms'
++weight = 10
++
++[[menu.footer]]
++name = 'Privacy'
++pageRef = '/privacy'
++weight = 20
 +{{< /code-toggle >}}
 +
++This creates a menu structure that you can access with `site.Menus.footer` in your templates. See [menu templates] for details.
++
++### Properties {#properties-site-configuration}
++
 +{{% note %}}
- ## Nesting
++The [properties available to entries defined in front matter] are also available to entries defined in site configuration.
++
++[properties available to entries defined in front matter]: /content-management/menus/#properties-front-matter
 +{{% /note %}}
 +
- All nesting of content is done via the `parent` field.
++Each menu entry defined in site configuration requires two or more properties:
 +
- The parent of an entry should be the identifier of another entry. The identifier should be unique (within a menu).
++- Specify `name` and `pageRef` for internal links
++- Specify `name` and `url` for external links
 +
- The following order is used to determine an Identifier:
++pageRef
++: (`string`) The file path of the target page, relative to the `content` directory. Omit language code and file extension. Required for *internal* links.
 +
- `.Name > .LinkTitle > .Title`
++Kind|pageRef
++:--|:--
++home|`/`
++page|`/books/book-1`
++section|`/books`
++taxonomy|`/tags`
++term|`/tags/foo`
 +
- This means that `.Title` will be used unless `.LinkTitle` is present, etc. In practice, `.Name` and `.Identifier` are only used to structure relationships and therefore never displayed.
++url
++: (`string`) Required for *external* links.
 +
- In this example, the top level of the menu is defined in your [site `config` file][config]. All content entries are attached to one of these entries via the `.Parent` field.
++### Example {#example-site-configuration}
 +
- ## Params
++This nested menu demonstrates some of the available properties:
 +
- You can also add user-defined content to menu items via the `params` field.
++{{< code-toggle file="config" copy=false >}}
++[[menu.main]]
++name = 'Products'
++pageRef = '/products'
++weight = 10
 +
- A common use case is to define a custom param to add a css class to a specific menu item.
++[[menu.main]]
++name = 'Hardware'
++pageRef = '/products/hardware'
++parent = 'Products'
++weight = 1
 +
- {{< code-toggle file="config" >}}
++[[menu.main]]
++name = 'Software'
++pageRef = '/products/software'
++parent = 'Products'
++weight = 2
++
++[[menu.main]]
++name = 'Services'
++pageRef = '/services'
++weight = 20
 +
-     name = "about hugo"
-     pre = "<i class='fa fa-heart'></i>"
-     weight = -110
-     identifier = "about"
-     url = "/about/"
-     [menu.main.params]
-       class = "highlight-menu-item"
- {{</ code-toggle >}}
- ## Render Menus
- See [Menu Templates](/templates/menu-templates/) for information on how to render your site menus within your templates.
- [config]: /getting-started/configuration/
- [multilingual]: /content-management/multilingual/
- [sitevars]: /variables/
- [me-props]: /variables/menus/
 +[[menu.main]]
++name = 'Hugo'
++pre = '<i class="fa fa-heart"></i>'
++url = 'https://gohugo.io/'
++weight = 30
++[menu.main.params]
++rel = 'external'
++{{< /code-toggle >}}
++
++This creates a menu structure that you can access with `site.Menus.main` in your templates. See [menu templates] for details.
++
++## Localize
++
++Hugo provides two methods to localize your menu entries. See [multilingual].
++
++## Render
++
++See [menu templates].
++
++[localize]: /content-management/multilingual/#menus
++[menu templates]: /templates/menu-templates/
++[multilingual]: /content-management/multilingual/#menus
++[template]: /templates/menu-templates/
index 5eb5506d9397d25cd738215b91143babd4ab2087,0000000000000000000000000000000000000000..f1f25086aa01231767569e270201e108208f0db3
mode 100644,000000..100644
--- /dev/null
@@@ -1,600 -1,0 +1,652 @@@
- > Also See [Hugo Multilingual Part 1: Content translation]
 +---
 +title: Multilingual Mode
 +linkTitle: Multilingual
 +description: Hugo supports the creation of websites with multiple languages side by side.
 +categories: [content management]
 +keywords: [multilingual,i18n, internationalization]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 230
 +toc: true
 +weight: 230
 +aliases: [/content/multilingual/,/tutorials/create-a-multilingual-site/]
 +---
 +
 +You should define the available languages in a `languages` section in your site configuration.
 +
- > If a `baseURL` is set on the `language` level, then all languages must have one and they must all be different.
++Also See [Hugo Multilingual Part 1: Content translation].
 +
 +## Configure Languages
 +
 +The following is an example of a site configuration for a multilingual Hugo project:
 +
 +{{< code-toggle file="config" >}}
 +defaultContentLanguage = "en"
 +copyright = "Everything is mine"
 +
 +[params]
 +[params.navigation]
 +help  = "Help"
 +
 +[languages]
 +[languages.en]
 +title = "My blog"
 +weight = 1
 +[languages.en.params]
 +linkedin = "https://linkedin.com/whoever"
 +
 +[languages.fr]
 +title = "Mon blogue"
 +weight = 2
 +[languages.fr.params]
 +linkedin = "https://linkedin.com/fr/whoever"
 +[languages.fr.params.navigation]
 +help  = "Aide"
 +
 +[languages.ar]
 +title = "مدونتي"
 +weight = 2
 +languagedirection = "rtl"
 +
 +[languages.pt-pt]
 +title = "O meu blog"
 +weight = 3
 +{{< /code-toggle >}}
 +
 +Anything not defined in a `languages` block will fall back to the global value for that key (e.g., `copyright` for the English `en` language). This also works for `params`, as demonstrated with `help` above: You will get the value `Aide` in French and `Help` in all the languages without this parameter set.
 +
 +With the configuration above, all content, sitemap, RSS feeds, pagination,
 +and taxonomy pages will be rendered below `/` in English (your default content language) and then below `/fr` in French.
 +
 +When working with front matter `Params` in [single page templates], omit the `params` in the key for the translation.
 +
 +`defaultContentLanguage` sets the project's default language. If not set, the default language will be `en`.
 +
 +If the default language needs to be rendered below its own language code (`/en`) like the others, set `defaultContentLanguageInSubdir: true`.
 +
 +Only the obvious non-global options can be overridden per language. Examples of global options are `baseURL`, `buildDrafts`, etc.
 +
 +**Please note:** use lowercase language codes, even when using regional languages (ie. use pt-pt instead of pt-PT). Currently Hugo language internals lowercase language codes, which can cause conflicts with settings like `defaultContentLanguage` which are not lowercased. Please track the evolution of this issue in [Hugo repository issue tracker](https://github.com/gohugoio/hugo/issues/7344)
 +
++### Changes in Hugo 0.112.0
++
++{{< new-in "0.112.0" >}}
++
++In version `0.112.0` of Hugo we did a major we consolidated all configuration options, but also improved how the languages and their params gets merged with the main configuration. But while testing this on Hugo sites out there, we got some error reports.
++
++1. `site.Language.Params` is deprecated. Use `site.Params` directly.
++1. The `params` sections on site and language is the only place to put custom user parameters, and `site.Params` will only contain these user defined parameters (see example below). 
++
++```toml
++title = "My blog"
++languageCode = "en-us"
++
++[languages]
++[languages.sv]
++title = "Min blogg"
++languageCode = "sv"
++[languages.en.params]
++color = "blue"
++```
++
++In the example above, all the settings exept the `color` below `params` maps to predefined configuration options in Hguo for the site and its language, and should be accessed via the documented accessors:
++
++```
++{{ site.Title }}
++{{ site.LanguageCode }}
++{{ site.Params.color }}
++```
++
 +### Disable a Language
 +
 +You can disable one or more languages. This can be useful when working on a new translation.
 +
 +{{< code-toggle file="config" >}}
 +disableLanguages = ["fr", "ja"]
 +{{< /code-toggle >}}
 +
 +Note that you cannot disable the default content language.
 +
 +We kept this as a standalone setting to make it easier to set via [OS environment]:
 +
 +```bash
 +HUGO_DISABLELANGUAGES="fr ja" hugo
 +```
 +
 +If you have already a list of disabled languages in `config.toml`, you can enable them in development like this:
 +
 +```bash
 +HUGO_DISABLELANGUAGES=" " hugo server
 +```
 +
 +### Configure Multilingual Multihost
 +
 +From **Hugo 0.31** we support multiple languages in a multihost configuration. See [this issue](https://github.com/gohugoio/hugo/issues/4027) for details.
 +
 +This means that you can now configure a `baseURL` per `language`:
 +
- {{< note >}}
++{{% note %}}
++If a `baseURL` is set on the `language` level, then all languages must have one and they must all be different.
++{{% /note %}}
 +
 +Example:
 +
 +{{< code-toggle file="config" >}}
 +[languages]
 +[languages.fr]
 +baseURL = "https://example.fr"
 +languageName = "Français"
 +weight = 1
 +title = "En Français"
 +
 +[languages.en]
 +baseURL = "https://example.com"
 +languageName = "English"
 +weight = 2
 +title = "In English"
 +{{</ code-toggle >}}
 +
 +With the above, the two sites will be generated into `public` with their own root:
 +
 +```text
 +public
 +├── en
 +└── fr
 +```
 +
 +**All URLs (i.e `.Permalink` etc.) will be generated from that root. So the English home page above will have its `.Permalink` set to `https://example.com/`.**
 +
 +When you run `hugo server` we will start multiple HTTP servers. You will typically see something like this in the console:
 +
 +```text
 +Web Server is available at 127.0.0.1:1313 (bind address 127.0.0.1)
 +Web Server is available at 127.0.0.1:1314 (bind address 127.0.0.1)
 +Press Ctrl+C to stop
 +```
 +
 +Live reload and `--navigateToChanged` between the servers work as expected.
 +
 +
 +## Translate Your Content
 +
 +There are two ways to manage your content translations. Both ensure each page is assigned a language and is linked to its counterpart translations.
 +
 +### Translation by filename
 +
 +Considering the following example:
 +
 +1. `/content/about.en.md`
 +2. `/content/about.fr.md`
 +
 +The first file is assigned the English language and is linked to the second.
 +The second file is assigned the French language and is linked to the first.
 +
 +Their language is __assigned__ according to the language code added as a __suffix to the filename__.
 +
 +By having the same **path and base filename**, the content pieces are __linked__ together as translated pages.
 +
- {{</ note >}}
++{{% note %}}
 +If a file has no language code, it will be assigned the default language.
- To localize the URLs, the [`slug`]({{< ref "/content-management/organization/index.md#slug" >}}) or [`url`]({{< ref "/content-management/organization/index.md#url" >}}) front matter param can be set in any of the non-default language file.
++{{% /note %}}
 +
 +### Translation by content directory
 +
 +This system uses different content directories for each of the languages. Each language's content directory is set using the `contentDir` param.
 +
 +{{< code-toggle file="config" >}}
 +languages:
 +  en:
 +    weight: 10
 +    languageName: "English"
 +    contentDir: "content/english"
 +  fr:
 +    weight: 20
 +    languageName: "Français"
 +    contentDir: "content/french"
 +{{< /code-toggle >}}
 +
 +The value of `contentDir` can be any valid path -- even absolute path references. The only restriction is that the content directories cannot overlap.
 +
 +Considering the following example in conjunction with the configuration above:
 +
 +1. `/content/english/about.md`
 +2. `/content/french/about.md`
 +
 +The first file is assigned the English language and is linked to the second.
 +The second file is assigned the French language and is linked to the first.
 +
 +Their language is __assigned__ according to the content directory they are __placed__ in.
 +
 +By having the same **path and basename** (relative to their language content directory), the content pieces are __linked__ together as translated pages.
 +
 +### Bypassing default linking
 +
 +Any pages sharing the same `translationKey` set in front matter will be linked as translated pages regardless of basename or location.
 +
 +Considering the following example:
 +
 +1. `/content/about-us.en.md`
 +2. `/content/om.nn.md`
 +3. `/content/presentation/a-propos.fr.md`
 +
 +{{< code-toggle >}}
 +translationKey: "about"
 +{{< /code-toggle >}}
 +
 +By setting the `translationKey` front matter param to `about` in all three pages, they will be __linked__ as translated pages.
 +
 +### Localizing permalinks
 +
 +Because paths and filenames are used to handle linking, all translated pages will share the same URL (apart from the language subdirectory).
 +
- For example, a French translation (`content/about.fr.md`) can have its own localized slug.
++To localize URLs:
 +
- {{< code-toggle >}}
- Title: A Propos
++- For a regular page, set either [`slug`] or [`url`] in front matter
++- For a section page, set [`url`] in front matter
 +
- At render, Hugo will build both `/about/` and `/fr/a-propos/` while maintaining their translation linking.
++[`slug`]: /content-management/urls/#slug
++[`url`]: /content-management/urls/#url
++
++For example, a French translation can have its own localized slug.
++
++{{< code-toggle file="content/about.fr.md" fm=true copy=false >}}
++title: A Propos
 +slug: "a-propos"
 +{{< /code-toggle >}}
 +
- other = "{{.Count}} minutes to read"
++At render, Hugo will build both `/about/` and `/fr/a-propos/` without affecting the translation link.
 +
 +### Page Bundles
 +
 +To avoid the burden of having to duplicate files, each Page Bundle inherits the resources of its linked translated pages' bundles except for the content files (Markdown files, HTML files etc...).
 +
 +Therefore, from within a template, the page will have access to the files from all linked pages' bundles.
 +
 +If, across the linked bundles, two or more files share the same basename, only one will be included and chosen as follows:
 +
 +* File from current language bundle, if present.
 +* First file found across bundles by order of language `Weight`.
 +
 +{{% note %}}
 +Page Bundle resources follow the same language assignment logic as content files, both by filename (`image.jpg`, `image.fr.jpg`) and by directory (`english/about/header.jpg`, `french/about/header.jpg`).
 +{{%/ note %}}
 +
 +## Reference the Translated Content
 +
 +To create a list of links to translated content, use a template similar to the following:
 +
 +{{< code file="layouts/partials/i18nlist.html" >}}
 +{{ if .IsTranslated }}
 +<h4>{{ i18n "translations" }}</h4>
 +<ul>
 +  {{ range .Translations }}
 +  <li>
 +    <a href="{{ .Permalink }}">{{ .Lang }}: {{ .Title }}{{ if .IsPage }} ({{ i18n "wordCount" . }}){{ end }}</a>
 +  </li>
 +  {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +The above can be put in a `partial` (i.e., inside `layouts/partials/`) and included in any template, whether a [single content page][contenttemplate] or the [homepage]. It will not print anything if there are no translations for a given page.
 +
 +The above also uses the [`i18n` function][i18func] described in the next section.
 +
 +### List All Available Languages
 +
 +`.AllTranslations` on a `Page` can be used to list all translations, including the page itself. On the home page it can be used to build a language navigator:
 +
 +{{< code file="layouts/partials/allLanguages.html" >}}
 +<ul>
 +{{ range $.Site.Home.AllTranslations }}
 +<li><a href="{{ .Permalink }}">{{ .Language.LanguageName }}</a></li>
 +{{ end }}
 +</ul>
 +{{< /code >}}
 +
 +## Translation of Strings
 +
 +Hugo uses [go-i18n] to support string translations. [See the project's source repository][go-i18n-source] to find tools that will help you manage your translation workflows.
 +
 +Translations are collected from the `themes/<THEME>/i18n/` folder (built into the theme), as well as translations present in `i18n/` at the root of your project. In the `i18n`, the translations will be merged and take precedence over what is in the theme folder. Language files should be named according to [RFC 5646] with names such as `en-US.toml`, `fr.toml`, etc.
 +
 +Artificial languages with private use subtags as defined in [RFC 5646 &#167; 2.2.7](https://datatracker.ietf.org/doc/html/rfc5646#section-2.2.7) are also supported. You may omit the `art-x-` prefix for brevity. For example:
 +
 +```text
 +art-x-hugolang
 +hugolang
 +```
 +
 +Private use subtags must not exceed 8 alphanumeric characters.
 +
 +### Query basic translation
 +
 +From within your templates, use the `i18n` function like this:
 +
 +```go-html-template
 +{{ i18n "home" }}
 +```
 +
 +The function will search for the `"home"` id:
 +
 +{{< code-toggle file="i18n/en-US" >}}
 +[home]
 +other = "Home"
 +{{< /code-toggle >}}
 +
 +The result will be
 +
 +```text
 +Home
 +```
 +
 +### Query a flexible translation with variables
 +
 +Often you will want to use the page variables in the translation strings. To do so, pass the `.` context when calling `i18n`:
 +
 +```go-html-template
 +{{ i18n "wordCount" . }}
 +```
 +
 +The function will pass the `.` context to the `"wordCount"` id:
 +
 +{{< code-toggle file="i18n/en-US" >}}
 +[wordCount]
 +other = "This article has {{ .WordCount }} words."
 +{{< /code-toggle >}}
 +
 +Assume `.WordCount` in the context has value is 101. The result will be:
 +
 +```text
 +This article has 101 words.
 +```
 +
 +### Query a singular/plural translation
 +
 +In other to meet singular/plural requirement, you must pass a dictionary (map) with a numeric `.Count` property to the `i18n` function. The below example uses `.ReadingTime` variable which has a built-in `.Count` property.
 +
 +```go-html-template
 +{{ i18n "readingTime" .ReadingTime }}
 +```
 +
 +The function will read `.Count` from `.ReadingTime` and evaluate whether the number is singular (`one`) or plural (`other`). After that, it will pass to `readingTime` id in `i18n/en-US.toml` file:
 +
 +{{< code-toggle file="i18n/en-US" >}}
 +[readingTime]
 +one = "One minute to read"
- You can define your menus for each language independently. Creating multilingual menus works just like [creating regular menus][menus], except they're defined in language-specific blocks in the configuration file:
- {{< code-toggle file="config" >}}
- defaultContentLanguage = "en"
- [languages.en]
- weight = 0
- languageName = "English"
++other = "{{ .Count }} minutes to read"
 +{{< /code-toggle >}}
 +
 +Assuming `.ReadingTime.Count` in the context has value is 525600. The result will be:
 +
 +```text
 +525600 minutes to read
 +```
 +
 +If `.ReadingTime.Count` in the context has value is 1. The result is:
 +
 +```text
 +One minute to read
 +```
 +
 +In case you need to pass a custom data: (`(dict "Count" numeric_value_only)` is minimum requirement)
 +
 +```go-html-template
 +{{ i18n "readingTime" (dict "Count" 25 "FirstArgument" true "SecondArgument" false "Etc" "so on, so far") }}
 +```
 +
 +## Localization
 +
 +The following localization examples assume your site's primary language is English, with translations to French and German.
 +
 +{{< code-toggle file="config" >}}
 +defaultContentLanguage = 'en'
 +
 +[languages]
 +[languages.en]
 +contentDir = 'content/en'
 +languageName = 'English'
 +weight = 1
 +[languages.fr]
 +contentDir = 'content/fr'
 +languageName = 'Français'
 +weight = 2
 +[languages.de]
 +contentDir = 'content/de'
 +languageName = 'Deutsch'
 +weight = 3
 +
 +{{< /code-toggle >}}
 +
 +### Dates
 +
 +With this front matter:
 +
 +{{< code-toggle >}}
 +date = 2021-11-03T12:34:56+01:00
 +{{< /code-toggle >}}
 +
 +And this template code:
 +
 +```go-html-template
 +{{ .Date | time.Format ":date_full" }}
 +```
 +
 +The rendered page displays:
 +
 +Language|Value
 +:--|:--
 +English|Wednesday, November 3, 2021
 +Français|mercredi 3 novembre 2021
 +Deutsch|Mittwoch, 3. November 2021
 +
 +See [time.Format] for details.
 +
 +### Currency
 +
 +With this template code:
 +
 +```go-html-template
 +{{ 512.5032 | lang.FormatCurrency 2 "USD" }}
 +```
 +
 +The rendered page displays:
 +
 +Language|Value
 +:--|:--
 +English|$512.50
 +Français|512,50 $US
 +Deutsch|512,50 $
 +
 +See [lang.FormatCurrency] and [lang.FormatAccounting] for details.
 +
 +### Numbers
 +
 +With this template code:
 +
 +```go-html-template
 +{{ 512.5032 | lang.FormatNumber 2 }}
 +```
 +
 +The rendered page displays:
 +
 +Language|Value
 +:--|:--
 +English|512.50
 +Français|512,50
 +Deutsch|512,50
 +
 +See [lang.FormatNumber] and [lang.FormatNumberCustom] for details.
 +
 +### Percentages
 +
 +With this template code:
 +
 +```go-html-template
 +{{ 512.5032 | lang.FormatPercent 2 }} ---> 512.50%
 +```
 +
 +The rendered page displays:
 +
 +Language|Value
 +:--|:--
 +English|512.50%
 +Français|512,50 %
 +Deutsch|512,50 %
 +
 +See [lang.FormatPercent] for details.
 +
 +## Menus
 +
- [[languages.en.menu.main]]
- url    = "/"
- name   = "Home"
- weight = 0
++Localization of menu entries depends on the how you define them:
 +
- [languages.de]
- weight = 10
- languageName = "Deutsch"
++- When you define menu entries [automatically] using the section pages menu, you must use translation tables to localize each entry.
++- When you define menu entries [in front matter], they are already localized based on the front matter itself. If the front matter values are insufficient, use translation tables to localize each entry.
++- When you define menu entries [in site configuration], you can (a) use translation tables, or (b) create language-specific menu entries under each language key.
 +
- [[languages.de.menu.main]]
- url    = "/"
- name   = "Startseite"
- weight = 0
- {{< /code-toggle >}}
- The rendering of the main navigation works as usual. `.Site.Menus` will just contain the menu in the current language. Note that `absLangURL` below will link to the correct locale of your website. Without it, menu entries in all languages would link to the English version, since it's the default content language that resides in the root directory.
++### Use translation tables
 +
- <ul>
-     {{- $currentPage := . -}}
-     {{ range .Site.Menus.main -}}
-     <li class="{{ if $currentPage.IsMenuCurrent "main" . }}active{{ end }}">
-         <a href="{{ .URL | absLangURL }}">{{ .Name }}</a>
-     </li>
-     {{- end }}
- </ul>
++When rendering the text that appears in menu each entry, the [example menu template] does this:
 +
 +```go-html-template
- ### Dynamically localizing menus with i18n
++{{ or (T .Identifier) .Name | safeHTML }}
 +```
 +
- While customizing menus per language is useful, your config file can become hard to maintain if you have a lot of languages
++It queries the translation table for the current language using the menu entry's `identifier` and returns the translated string. If the translation table does not exist, or if the `identifier` key is not present in the translation table, it falls back to `name`.
 +
- If your menus are the same in all languages (ie. if the only thing that changes is the translated name) you can use the `.Identifier` as a translation key for the menu name:
++The `identifier` depends on how you define menu entries:
 +
- {{< code-toggle file="config" >}}
++- If you define the menu entry [automatically] using the section pages menu, the `identifier` is the page's `.Section`.
++- If you define the menu entry [in site configuration] or [in front matter], set the `identifier` property to the desired value.
 +
- name = "About me"
- url = "about"
++For example, if you define menu entries in site configuration:
++
++{{< code-toggle file="config" copy=false >}}
++[[menu.main]]
++  identifier = 'products'
++  name = 'Products'
++  pageRef = '/products'
++  weight = 10
 +[[menu.main]]
- identifier = "about"
- {{< /code-toggle >}}
++  identifier = 'services'
++  name = 'Services'
++  pageRef = '/services'
++  weight = 20
++{{< / code-toggle >}}
++
++Create corresponding entries in the translation tables:
++
++{{< code-toggle file="i18n/de" copy=false >}}
++products = 'Produkte'
++services = 'Leistungen'
++{{< / code-toggle >}}
++
++[example menu template]: /templates/menu-templates/#example
++[automatically]: /content-management/menus/#define-automatically
++[in front matter]: /content-management/menus/#define-in-front-matter
++[in site configuration]: /content-management/menus/#define-in-site-configuration
++
++### Create language-specific menu entries
++
++For example:
++
++{{< code-toggle file="config" copy=false >}}
++[languages.de]
++languageCode = 'de-DE'
++languageName = 'Deutsch'
 +weight = 1
- You now need to specify the translations for the menu keys in the i18n files:
 +
- {{< code file="i18n/pt.toml" >}}
- [about]
- other="Sobre mim"
- {{< /code >}}
++[[languages.de.menu.main]]
++name = 'Produkte'
++pageRef = '/products'
++weight = 10
 +
- And do the appropriate changes in the menu code to use the `i18n` tag with the `.Identifier` as a key. You will also note that here we are using a `default` to fall back to `.Name`, in case the `.Identifier` key is also not present in the language specified in the `defaultContentLanguage` configuration.
++[[languages.de.menu.main]]
++name = 'Leistungen'
++pageRef = '/services'
++weight = 20
 +
- {{< code file="layouts/partials/menu.html" >}}
- <ul>
-     {{- $currentPage := . -}}
-     {{ range .Site.Menus.main -}}
-     <li class="{{ if $currentPage.IsMenuCurrent "main" . }}active{{ end }}">
-         <a href="{{ .URL | absLangURL }}">{{ i18n .Identifier | default .Name}}</a>
-     </li>
-     {{- end }}
- </ul>
- {{< /code >}}
++[languages.en]
++languageCode = 'en-US'
++languageName = 'English'
++weight = 2
 +
- [lang.FormatAccounting]: /functions/lang/#langformataccounting
- [lang.FormatCurrency]: /functions/lang/#langformatcurrency
- [lang.FormatNumber]: /functions/lang/#langformatnumber
- [lang.FormatNumberCustom]: /functions/lang/#langformatnumbercustom
- [lang.FormatPercent]: /functions/lang/#langformatpercent
++[[languages.en.menu.main]]
++name = 'Products'
++pageRef = '/products'
++weight = 10
++
++[[languages.en.menu.main]]
++name = 'Services'
++pageRef = '/services'
++weight = 20
++{{< /code-toggle >}}
++
++For a simple menu with two languages, these menu entries are easy to create and maintain. For a larger menu, or with more than two languages, using translation tables as described above is preferable.
 +
 +## Missing Translations
 +
 +If a string does not have a translation for the current language, Hugo will use the value from the default language. If no default value is set, an empty string will be shown.
 +
 +While translating a Hugo website, it can be handy to have a visual indicator of missing translations. The [`enableMissingTranslationPlaceholders` configuration option][config] will flag all untranslated strings with the placeholder `[i18n] identifier`, where `identifier` is the id of the missing translation.
 +
 +{{% note %}}
 +Hugo will generate your website with these missing translation placeholders. It might not be suitable for production environments.
 +{{% /note %}}
 +
 +For merging of content from other languages (i.e. missing content translations), see [lang.Merge].
 +
 +To track down missing translation strings, run Hugo with the `--printI18nWarnings` flag:
 +
 +```bash
 +hugo --printI18nWarnings | grep i18n
 +i18n|MISSING_TRANSLATION|en|wordCount
 +```
 +
 +## Multilingual Themes support
 +
 +To support Multilingual mode in your themes, some considerations must be taken for the URLs in the templates. If there is more than one language, URLs must meet the following criteria:
 +
 +* Come from the built-in `.Permalink` or `.RelPermalink`
 +* Be constructed with the [`relLangURL` template function][rellangurl] or the [`absLangURL` template function][abslangurl] **OR** be prefixed with `{{ .LanguagePrefix }}`
 +
 +If there is more than one language defined, the `LanguagePrefix` variable will equal `/en` (or whatever your `CurrentLanguage` is). If not enabled, it will be an empty string (and is therefore harmless for single-language Hugo websites).
 +
 +
 +## Generate multilingual content with `hugo new`
 +
 +If you organize content with translations in the same directory:
 +
 +```text
 +hugo new post/test.en.md
 +hugo new post/test.de.md
 +```
 +
 +If you organize content with translations in different directories:
 +
 +```text
 +hugo new content/en/post/test.md
 +hugo new content/de/post/test.md
 +```
 +
 +[abslangurl]: /functions/abslangurl
 +[config]: /getting-started/configuration/
 +[contenttemplate]: /templates/single-page-templates/
 +[go-i18n-source]: https://github.com/nicksnyder/go-i18n
 +[go-i18n]: https://github.com/nicksnyder/go-i18n
 +[homepage]: /templates/homepage/
 +[Hugo Multilingual Part 1: Content translation]: https://regisphilibert.com/blog/2018/08/hugo-multilingual-part-1-managing-content-translation/
 +[i18func]: /functions/i18n/
++[lang.FormatAccounting]: /functions/lang
++[lang.FormatCurrency]: /functions/lang
++[lang.FormatNumber]: /functions/lang
++[lang.FormatNumberCustom]: /functions/lang
++[lang.FormatPercent]: /functions/lang
 +[lang.Merge]: /functions/lang.merge/
 +[menus]: /content-management/menus/
 +[OS environment]: /getting-started/configuration/#configure-with-environment-variables
 +[rellangurl]: /functions/rellangurl
 +[RFC 5646]: https://tools.ietf.org/html/rfc5646
 +[single page templates]: /templates/single-page-templates/
 +[time.Format]: /functions/dateformat
index 94c0cfd5a35cbbb72cefc37e72b6e62d1e3fc073,0000000000000000000000000000000000000000..efa355ddc2caa60746ae88dea6e1eb81d94b7794
mode 100644,000000..100644
--- /dev/null
@@@ -1,235 -1,0 +1,161 @@@
- These terms are connected, and you also need to read about [Page Resources]({{< relref "/content-management/page-resources" >}}) and [Image Processing]({{< relref "/content-management/image-processing" >}}) to get the full picture.
 +---
 +title: Content Organization
 +linkTitle: Organization
 +description: Hugo assumes that the same structure that works to organize your source content is used to organize the rendered site.
 +categories: [content management,fundamentals]
 +keywords: [sections,content,organization,bundle,resources]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 20
 +toc: true
 +weight: 20
 +aliases: [/content/sections/]
 +---
 +
 +## Page Bundles
 +
 +Hugo `0.32` announced page-relative images and other resources packaged into `Page Bundles`.
 +
- A content's `slug` is either `name.extension` or `name/`. The value for `slug` is determined by
- * the name of the content file (e.g., `lollapalooza.md`) OR
- * front matter overrides
++These terms are connected, and you also need to read about [Page Resources](/content-management/page-resources) and [Image Processing](/content-management/image-processing) to get the full picture.
 +
 +{{< imgproc 1-featured Resize "300x" >}}
 +The illustration shows three bundles. Note that the home page bundle cannot contain other content pages, although other files (images etc.) are allowed.
 +{{< /imgproc >}}
 +
 +
 +{{% note %}}
 +The bundle documentation is a **work in progress**. We will publish more comprehensive docs about this soon.
 +{{% /note %}}
 +
 +
 +## Organization of Content Source
 +
 +In Hugo, your content should be organized in a manner that reflects the rendered website.
 +
 +While Hugo supports content nested at any level, the top levels (i.e. `content/<DIRECTORIES>`) are special in Hugo and are considered the content type used to determine layouts etc. To read more about sections, including how to nest them, see [sections].
 +
 +Without any additional configuration, the following will automatically work:
 +
 +```txt
 +.
 +└── content
 +    └── about
 +    |   └── index.md  // <- https://example.com/about/
 +    ├── posts
 +    |   ├── firstpost.md   // <- https://example.com/posts/firstpost/
 +    |   ├── happy
 +    |   |   └── ness.md  // <- https://example.com/posts/happy/ness/
 +    |   └── secondpost.md  // <- https://example.com/posts/secondpost/
 +    └── quote
 +        ├── first.md       // <- https://example.com/quote/first/
 +        └── second.md      // <- https://example.com/quote/second/
 +```
 +
 +## Path Breakdown in Hugo
 +
 +
 +The following demonstrates the relationships between your content organization and the output URL structure for your Hugo website when it renders. These examples assume you are [using pretty URLs][pretty], which is the default behavior for Hugo. The examples also assume a key-value of `baseURL = "https://example.com"` in your [site's configuration file][config].
 +
 +### Index Pages: `_index.md`
 +
 +`_index.md` has a special role in Hugo. It allows you to add front matter and content to your [list templates][lists]. These templates include those for [section templates], [taxonomy templates], [taxonomy terms templates], and your [homepage template].
 +
 +{{% note %}}
 +**Tip:** You can get a reference to the content and metadata in `_index.md` using the [`.Site.GetPage` function](/functions/getpage/).
 +{{% /note %}}
 +
 +You can create one `_index.md` for your homepage and one in each of your content sections, taxonomies, and taxonomy terms. The following shows typical placement of an `_index.md` that would contain content and front matter for a `posts` section list page on a Hugo website:
 +
 +
 +```txt
 +.         url
 +.       ⊢--^-⊣
 +.        path    slug
 +.       ⊢--^-⊣⊢---^---⊣
 +.           filepath
 +.       ⊢------^------⊣
 +content/posts/_index.md
 +```
 +
 +At build, this will output to the following destination with the associated values:
 +
 +```txt
 +
 +                     url ("/posts/")
 +                    ⊢-^-⊣
 +       baseurl      section ("posts")
 +⊢--------^---------⊣⊢-^-⊣
 +        permalink
 +⊢----------^-------------⊣
 +https://example.com/posts/index.html
 +```
 +
 +The [sections] can be nested as deeply as you want. The important thing to understand is that to make the section tree fully navigational, at least the lower-most section must include a content file. (i.e. `_index.md`).
 +
 +
 +### Single Pages in Sections
 +
 +Single content files in each of your sections will be rendered as [single page templates][singles]. Here is an example of a single `post` within `posts`:
 +
 +
 +```txt
 +                   path ("posts/my-first-hugo-post.md")
 +.       ⊢-----------^------------⊣
 +.      section        slug
 +.       ⊢-^-⊣⊢--------^----------⊣
 +content/posts/my-first-hugo-post.md
 +```
 +
 +When Hugo builds your site, the content will be output to the following destination:
 +
 +```txt
 +
 +                               url ("/posts/my-first-hugo-post/")
 +                   ⊢------------^----------⊣
 +       baseurl     section     slug
 +⊢--------^--------⊣⊢-^--⊣⊢-------^---------⊣
 +                 permalink
 +⊢--------------------^---------------------⊣
 +https://example.com/posts/my-first-hugo-post/index.html
 +```
 +
 +
 +## Paths Explained
 +
 +The following concepts provide more insight into the relationship between your project's organization and the default Hugo behavior when building output for the website.
 +
 +### `section`
 +
 +A default content type is determined by the section in which a content item is stored. `section` is determined by the location within the project's `content` directory. `section` *cannot* be specified or overridden in front matter.
 +
 +### `slug`
 +
- The `url` is the relative URL for the piece of content. The `url`
- * is based on the content item's location within the directory structure OR
- * is defined in front matter, in which case it *overrides all the above*
- ## Override Destination Paths via Front Matter
- Hugo assumes that your content is organized with a purpose. The same structure that you use to organize your source content is used to organize the rendered site. As displayed above, the organization of the source content will be mirrored at the destination.
- There are times when you may need more fine-grained control over the content organization. In such cases, the front matter field can be used to determine the destination of a specific piece of content.
- The following items are defined in a specific order for a reason: items explained lower down in the list override higher items. Note that not all items can be defined in front matter.
- ### `filename`
- `filename` is not a front matter field. It is the actual file name, minus the extension. This will be the name of the file in the destination (e.g., `content/posts/my-post.md` becomes `example.com/posts/my-post/`).
- ### `slug`
- When defined in the front matter, the `slug` can take the place of the filename in the destination.
- {{< code file="content/posts/old-post.md" >}}
- ---
- title: A new post with the filename old-post.md
- slug: "new-post"
- ---
- {{< /code >}}
- This will render to the following destination according to Hugo's default behavior:
- ```txt
- example.com/posts/new-post/
- ```
- ### `section`
- `section` is determined by a content item's location on disk and *cannot* be specified in the front matter. See [sections] for more information.
- ### `type`
- A content item's `type` is also determined by its location on disk but, unlike `section`, it *can* be specified in the front matter. See [types]. This can come in especially handy when you want a piece of content to render using a different layout. In the following example, you can create a layout at `layouts/new/mylayout.html` that Hugo will use to render this piece of content, even in the midst of many other posts.
- {{< code file="content/posts/my-post.md" >}}
- ---
- title: My Post
- type: new
- layout: mylayout
- ---
- {{< /code >}}
- <!-- See https://discourse.gohugo.io/t/path-not-works/6387 -->
- <!-- ### `path`-->
- <!--`path` can be provided in the front matter. This will replace the actual path to the file on disk. Destination will create the destination with the same path, including the section. -->
- ### `url`
- A complete URL can be provided. This will override all the above as it pertains to the end destination. This must be the path from the baseURL (starting with a `/`). `url` will be used exactly as it is defined in the front matter, and will ignore the `--uglyURLs` setting in your site configuration:
- {{< code file="content/posts/old-url.md" >}}
- ---
- title: Old URL
- url: /blog/new-url/
- ---
- {{< /code >}}
- Assuming your `baseURL` is [configured][config] to `https://example.com`, the addition of `url` to the front matter will make `old-url.md` render to the following destination:
- ```txt
- https://example.com/blog/new-url/
- ```
- You can see more information on how to control output paths in [URL Management][urls].
++The `slug` is the last segment of the URL path, defined by the file name and optionally overridden by a `slug` value in front matter. See [URL Management](/content-management/urls/#slug) for details.
 +
 +### `path`
 +
 +A content's `path` is determined by the section's path to the file. The file `path`
 +
 +* is based on the path to the content's location AND
 +* does not include the slug
 +
 +### `url`
 +
- [pretty]: /content-management/urls/#pretty-urls
++The `url` is the entire URL path, defined by the file path and optionally overridden by a `url` value in front matter. See [URL Management](/content-management/urls/#slug) for details.
 +
 +[config]: /getting-started/configuration/
 +[formats]: /content-management/formats/
 +[front matter]: /content-management/front-matter/
 +[getpage]: /functions/getpage/
 +[homepage template]: /templates/homepage/
 +[homepage]: /templates/homepage/
 +[lists]: /templates/lists/
++[pretty]: /content-management/urls/#appearance
 +[section templates]: /templates/section-templates/
 +[sections]: /content-management/sections/
 +[singles]: /templates/single-page-templates/
 +[taxonomy templates]: /templates/taxonomy-templates/
 +[taxonomy terms templates]: /templates/taxonomy-templates/
 +[types]: /content-management/types/
 +[urls]: /content-management/urls/
index 28ab004c58945733b7675001671b1fe59e0a674a,0000000000000000000000000000000000000000..2a5147c21f69f2d3d6a165c44353dce4c13243e9
mode 100644,000000..100644
--- /dev/null
@@@ -1,189 -1,0 +1,186 @@@
- linkTitle: Page Bundles
 +---
 +title: Page Bundles
- linkTitle: Page Bundles
 +description: Content organization using Page Bundles
-     identifier: "page-bundles"
-     parent: "content-management"
 +keywords: [page, bundle, leaf, branch]
 +categories: [content management]
 +menu :
 +  docs:
- ```toml
++    parent: content-management
 +    weight: 30
 +toc: true
 +weight: 30
 +---
 +
 +Page Bundles are a way to group [Page Resources](/content-management/page-resources/).
 +
 +A Page Bundle can be one of:
 +
 +- Leaf Bundle (leaf means it has no children)
 +- Branch Bundle (home page, section, taxonomy terms, taxonomy list)
 +
 +|                                     | Leaf Bundle                                              | Branch Bundle                                                                                                                                                                                                      |
 +|-------------------------------------|----------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  |
 +| Usage                               | Collection of content and attachments for single pages   | Collection of attachments for section pages (home page, section, taxonomy terms, taxonomy list)                                                                                                                    |
 +| Index filename                     | `index.md` [^fn:1]                                       | `_index.md` [^fn:1]                                                                                                                                                                                                |
 +| Allowed Resources                   | Page and non-page (like images, PDF, etc.) types         | Only non-page (like images, PDF, etc.) types                                                                                                                                                                       |
 +| Where can the Resources live?       | At any directory level within the leaf bundle directory. | Only in the directory level **of** the branch bundle directory i.e. the directory containing the `_index.md` ([ref](https://discourse.gohugo.io/t/question-about-content-folder-structure/11822/4?u=kaushalmodi)). |
 +| Layout type                         | `single`                                                 | `list`                                                                                                                                                                                                             |
 +| Nesting                             | Does not allow nesting of more bundles under it          | Allows nesting of leaf or branch bundles under it                                                                                                                                                                  |
 +| Example                             | `content/posts/my-post/index.md`                         | `content/posts/_index.md`                                                                                                                                                                                          |
 +| Content from non-index page files... | Accessed only as page resources                          | Accessed only as regular pages                                                                                                                                                                                     |
 +
 +
 +## Leaf Bundles {#leaf-bundles}
 +
 +A _Leaf Bundle_ is a directory at any hierarchy within the `content/`
 +directory, that contains an **`index.md`** file.
 +
 +### Examples of Leaf Bundle organization {#examples-of-leaf-bundle-organization}
 +
 +```text
 +content/
 +├── about
 +│   ├── index.md
 +├── posts
 +│   ├── my-post
 +│   │   ├── content1.md
 +│   │   ├── content2.md
 +│   │   ├── image1.jpg
 +│   │   ├── image2.png
 +│   │   └── index.md
 +│   └── my-other-post
 +│       └── index.md
 +│
 +└── another-section
 +    ├── ..
 +    └── not-a-leaf-bundle
 +        ├── ..
 +        └── another-leaf-bundle
 +            └── index.md
 +```
 +
 +In the above example `content/` directory, there are four leaf
 +bundles:
 +
 +`about`
 +: This leaf bundle is at the root level (directly under
 +    `content` directory) and has only the `index.md`.
 +
 +`my-post`
 +: This leaf bundle has the `index.md`, two other content
 +    Markdown files and two image files.
 +
 +- image1, image2:
 +These images are page resources of `my-post`
 +    and only available in `my-post/index.md` resources.
 +
 +- content1, content2:
 +These content files are page resources of `my-post`
 +    and only available in `my-post/index.md` resources.
 +    They will **not** be rendered as individual pages.
 +
 +`my-other-post`
 +: This leaf bundle has only the `index.md`.
 +
 +`another-leaf-bundle`
 +: This leaf bundle is nested under couple of
 +    directories. This bundle also has only the `index.md`.
 +
 +{{% note %}}
 +The hierarchy depth at which a leaf bundle is created does not matter,
 +as long as it is not inside another **leaf** bundle.
 +{{% /note %}}
 +
 +
 +### Headless Bundle {#headless-bundle}
 +
 +A headless bundle is a bundle that is configured to not get published
 +anywhere:
 +
 +- It will have no `Permalink` and no rendered HTML in `public/`.
 +- It will not be part of `.Site.RegularPages`, etc.
 +
 +But you can get it by `.Site.GetPage`. Here is an example:
 +
 +```go-html-template
 +{{ $headless := .Site.GetPage "/some-headless-bundle" }}
 +{{ $reusablePages := $headless.Resources.Match "author*" }}
 +<h2>Authors</h2>
 +{{ range $reusablePages }}
 +    <h3>{{ .Title }}</h3>
 +    {{ .Content }}
 +{{ end }}
 +```
 +
 +_In this example, we are assuming the `some-headless-bundle` to be a headless
 +   bundle containing one or more **page** resources whose `.Name` matches
 +   `"author*"`._
 +
 +Explanation of the above example:
 +
 +1. Get the `some-headless-bundle` Page "object".
 +2. Collect a _slice_ of resources in this _Page Bundle_ that matches
 +   `"author*"` using `.Resources.Match`.
 +3. Loop through that _slice_ of nested pages, and output their `.Title` and
 +   `.Content`.
 +
 +---
 +
 +A leaf bundle can be made headless by adding below in the Front Matter
 +(in the `index.md`):
 +
- ```
++{{< code-toggle file="content/headless/index.md" fm=true copy=false >}}
 +headless = true
++{{< /code-toggle >}}
 +
 +There are many use cases of such headless page bundles:
 +
 +- Shared media galleries
 +- Reusable page content "snippets"
 +
 +## Branch Bundles {#branch-bundles}
 +
 +A _Branch Bundle_ is any directory at any hierarchy within the
 +`content/` directory, that contains at least an **`_index.md`** file.
 +
 +This `_index.md` can also be directly under the `content/` directory.
 +
 +{{% note %}}
 +Here `md` (markdown) is used just as an example. You can use any file
 +type as a content resource as long as it is a content type recognized by Hugo.
 +{{% /note %}}
 +
 +
 +### Examples of Branch Bundle organization {#examples-of-branch-bundle-organization}
 +
 +```text
 +content/
 +├── branch-bundle-1
 +│   ├── branch-content1.md
 +│   ├── branch-content2.md
 +│   ├── image1.jpg
 +│   ├── image2.png
 +│   └── _index.md
 +└── branch-bundle-2
 +    ├── _index.md
 +    └── a-leaf-bundle
 +        └── index.md
 +```
 +
 +In the above example `content/` directory, there are two branch
 +bundles (and a leaf bundle):
 +
 +`branch-bundle-1`
 +: This branch bundle has the `_index.md`, two
 +    other content Markdown files and two image files.
 +
 +`branch-bundle-2`
 +: This branch bundle has the `_index.md` and a
 +    nested leaf bundle.
 +
 +{{% note %}}
 +The hierarchy depth at which a branch bundle is created does not
 +matter.
 +{{% /note %}}
 +
 +[^fn:1]: The `.md` extension is just an example. The extension can be `.html`, `.json` or any valid MIME type.
index 16c9fc0abb009e797265f8b12a6a67ac805a5e1e,0000000000000000000000000000000000000000..4bbd159be0e04c1a6d68a517b51043f2c156eb4a
mode 100644,000000..100644
--- /dev/null
@@@ -1,205 -1,0 +1,203 @@@
- linkTitle: Page Resources
 +---
 +title: Page Resources
- Page resources are only accessible from [page bundles]({{< relref
- "/content-management/page-bundles" >}}), those directories with `index.md` or
 +description: Page resources -- images, other pages, documents, etc. -- have page-relative URLs and their own metadata.
 +categories: [content management]
 +keywords: [bundle,content,resources]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 80
 +toc: true
 +weight: 80
 +---
- {{% warning %}}
++Page resources are only accessible from [page bundles](/content-management/page-bundles), those directories with `index.md` or
 +`_index.md` files at their root. Page resources are only available to the
 +page with which they are bundled.
 +
 +In this example, `first-post` is a page bundle with access to 10 page resources including audio, data, documents, images, and video. Although `second-post` is also a page bundle, it has no page resources and is unable to directly access the page resources associated with `first-post`.
 +
 +```text
 +content
 +└── post
 +    ├── first-post
 +    │   ├── images
 +    │   │   ├── a.jpg
 +    │   │   ├── b.jpg
 +    │   │   └── c.jpg
 +    │   ├── index.md (root of page bundle)
 +    │   ├── latest.html
 +    │   ├── manual.json
 +    │   ├── notice.md
 +    │   ├── office.mp3
 +    │   ├── pocket.mp4
 +    │   ├── rating.pdf
 +    │   └── safety.txt
 +    └── second-post
 +        └── index.md (root of page bundle)
 +```
 +
 +## Properties
 +
 +ResourceType
 +: The main type of the resource's [Media Type](/templates/output-formats/#media-types). For example, a file of MIME type `image/jpeg` has the ResourceType `image`. A `Page` will have `ResourceType` with value `page`.
 +
 +Name
 +: Default value is the filename (relative to the owning page). Can be set in front matter.
 +
 +Title
 +: Default value is the same as `.Name`. Can be set in front matter.
 +
 +Permalink
 +: The absolute URL to the resource. Resources of type `page` will have no value.
 +
 +RelPermalink
 +: The relative URL to the resource. Resources of type `page` will have no value.
 +
 +Content
 +: The content of the resource itself. For most resources, this returns a string
 +with the contents of the file. Use this to create inline resources.
 +
 +```go-html-template
 +{{ with .Resources.GetMatch "script.js" }}
 +  <script>{{ .Content | safeJS }}</script>
 +{{ end }}
 +
 +{{ with .Resources.GetMatch "style.css" }}
 +  <style>{{ .Content | safeCSS }}</style>
 +{{ end }}
 +
 +{{ with .Resources.GetMatch "img.png" }}
 +  <img src="data:{{ .MediaType }};base64,{{ .Content | base64Encode }}">
 +{{ end }}
 +```
 +
 +MediaType
 +: The MIME type of the resource, such as `image/jpeg`.
 +
 +MediaType.MainType
 +: The main type of the resource's MIME type. For example, a file of MIME type `application/pdf` has for MainType `application`.
 +
 +MediaType.SubType
 +: The subtype of the resource's MIME type. For example, a file of MIME type `application/pdf` has for SubType `pdf`. Note that this is not the same as the file extension - PowerPoint files have a subtype of `vnd.mspowerpoint`.
 +
 +MediaType.Suffixes
 +: A slice of possible suffixes for the resource's MIME type.
 +
 +## Methods
 +
 +ByType
 +: Returns the page resources of the given type.
 +
 +```go-html-template
 +{{ .Resources.ByType "image" }}
 +```
 +Match
 +: Returns all the page resources (as a slice) whose `Name` matches the given Glob pattern ([examples](https://github.com/gobwas/glob/blob/master/readme.md)). The matching is case-insensitive.
 +
 +```go-html-template
 +{{ .Resources.Match "images/*" }}
 +```
 +
 +GetMatch
 +: Same as `Match` but will return the first match.
 +
 +### Pattern Matching
 +
 +```go
 +// Using Match/GetMatch to find this images/sunset.jpg ?
 +.Resources.Match "images/sun*" ✅
 +.Resources.Match "**/sunset.jpg" ✅
 +.Resources.Match "images/*.jpg" ✅
 +.Resources.Match "**.jpg" ✅
 +.Resources.Match "*" 🚫
 +.Resources.Match "sunset.jpg" 🚫
 +.Resources.Match "*sunset.jpg" 🚫
 +
 +```
 +
 +## Page Resources Metadata
 +
 +The page resources' metadata is managed from the corresponding page's front matter with an array/table parameter named `resources`. You can batch assign values using [wildcards](https://tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm).
 +
 +{{% note %}}
 +Resources of type `page` get `Title` etc. from their own front matter.
 +{{% /note %}}
 +
 +name
 +: Sets the value returned in `Name`.
 +
- {{%/ warning %}}
++{{% note %}}
 +The methods `Match`, `Get` and `GetMatch` use `Name` to match the resources.
- {{< code-toggle copy="false">}}
++{{% /note %}}
 +
 +title
 +: Sets the value returned in `Title`
 +
 +params
 +: A map of custom key/values.
 +
 +### Resources metadata example
 +
- {{% warning %}}
++{{< code-toggle copy=false >}}
 +title: Application
 +date : 2018-01-25
 +resources :
 +- src : "images/sunset.jpg"
 +  name : "header"
 +- src : "documents/photo_specs.pdf"
 +  title : "Photo Specifications"
 +  params:
 +    icon : "photo"
 +- src : "documents/guide.pdf"
 +  title : "Instruction Guide"
 +- src : "documents/checklist.pdf"
 +  title : "Document Checklist"
 +- src : "documents/payment.docx"
 +  title : "Proof of Payment"
 +- src : "**.pdf"
 +  name : "pdf-file-:counter"
 +  params :
 +    icon : "pdf"
 +- src : "**.docx"
 +  params :
 +    icon : "word"
 +{{</ code-toggle >}}
 +
 +From the example above:
 +
 +- `sunset.jpg` will receive a new `Name` and can now be found with `.GetMatch "header"`.
 +- `documents/photo_specs.pdf` will get the `photo` icon.
 +- `documents/checklist.pdf`, `documents/guide.pdf` and `documents/payment.docx` will get `Title` as set by `title`.
 +- Every `PDF` in the bundle except `documents/photo_specs.pdf` will get the `pdf` icon.
 +- All `PDF` files will get a new `Name`. The `name` parameter contains a special placeholder [`:counter`](#the-counter-placeholder-in-name-and-title), so the `Name` will be `pdf-file-1`, `pdf-file-2`, `pdf-file-3`.
 +- Every docx in the bundle will receive the `word` icon.
 +
- {{%/ warning %}}
++{{% note %}}
 +The __order matters__ --- Only the **first set** values of the `title`, `name` and `params`-**keys** will be used. Consecutive parameters will be set only for the ones not already set. In the above example, `.Params.icon` is first set to `"photo"` in `src = "documents/photo_specs.pdf"`. So that would not get overridden to `"pdf"` by the later set `src = "**.pdf"` rule.
- {{< code-toggle copy="false">}}
++{{% /note %}}
 +
 +### The `:counter` placeholder in `name` and `title`
 +
 +The `:counter` is a special placeholder recognized in `name` and `title` parameters `resources`.
 +
 +The counter starts at 1 the first time they are used in either `name` or `title`.
 +
 +For example, if a bundle has the resources `photo_specs.pdf`, `other_specs.pdf`, `guide.pdf` and `checklist.pdf`, and the front matter has specified the `resources` as:
 +
++{{< code-toggle copy=false >}}
 +[[resources]]
 +  src = "*specs.pdf"
 +  title = "Specification #:counter"
 +[[resources]]
 +  src = "**.pdf"
 +  name = "pdf-file-:counter"
 +{{</ code-toggle >}}
 +
 +the `Name` and `Title` will be assigned to the resource files as follows:
 +
 +| Resource file     | `Name`            | `Title`               |
 +|-------------------|-------------------|-----------------------|
 +| checklist.pdf     | `"pdf-file-1.pdf` | `"checklist.pdf"`     |
 +| guide.pdf         | `"pdf-file-2.pdf` | `"guide.pdf"`         |
 +| other\_specs.pdf  | `"pdf-file-3.pdf` | `"Specification #1"` |
 +| photo\_specs.pdf  | `"pdf-file-4.pdf` | `"Specification #2"` |
index c25b0ed616fa7b3f63104f3ead4232299a04314e,0000000000000000000000000000000000000000..823e3035c2023c7c0ba01ae0365bdd4ad0a11f44
mode 100644,000000..100644
--- /dev/null
@@@ -1,190 -1,0 +1,188 @@@
- linkTitle: Related Content
 +---
 +title: Related Content
- ```toml
 +description: List related content in "See Also" sections.
 +categories: [content management]
 +keywords: [content]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 110
 +toc: true
 +weight: 110
 +aliases: [/content/related/,/related/]
 +---
 +
 +Hugo uses a set of factors to identify a page's related content based on Front Matter parameters. This can be tuned to the desired set of indices and parameters or left to Hugo's default [Related Content configuration](#configure-related-content).
 +
 +## List Related Content
 +
 +To list up to 5 related pages (which share the same _date_ or _keyword_ parameters) is as simple as including something similar to this partial in your single page template:
 +
 +{{< code file="layouts/partials/related.html" >}}
 +{{ $related := .Site.RegularPages.Related . | first 5 }}
 +{{ with $related }}
 +<h3>See Also</h3>
 +<ul>
 + {{ range . }}
 + <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
 + {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +The `Related` method takes one argument which may be a `Page` or a options map. The options map have these options:
 +
 +indices
 +: The indices to search in.
 +
 +document
 +: The document to search for related content for.
 +
 +namedSlices
 +: The keywords to search for.
 +
 +fragments
 +: Fragments holds a a list of special keywords that is used for indices configured as type "fragments". This will match the fragment identifiers of the documents.
 +
 +A fictional example using all of the above options:
 +
 +```go-html-template
 +{{ $page := . }}
 +{{ $opts := 
 +  "indices" (slice "tags" "keywords")
 +  "document" $page
 +  "namedSlices" (slice (keyVals "tags" "hugo" "rocks") (keyVals "date" $page.Date))
 +  "fragments" (slice "heading-1" "heading-2")
 +}}
 +```
 +
 +{{% note %}}
 +We improved and simplified this feature in Hugo 0.111.0. Before this we had 3 different methods: `Related`, `RelatedTo` and `RelatedIndicies`. Now we have only one method: `Related`. The old methods are still available but deprecated. Also see [this blog article](https://regisphilibert.com/blog/2018/04/hugo-optmized-relashionships-with-related-content/) for a great explanation of more advanced usage of this feature.
 +{{% /note %}}
 +
 +## Index Content Headings in Related Content
 +
 +{{< new-in "0.111.0" >}}
 +
 +Hugo can index the headings in your content and use this to find related content. You can enable this by adding a index of type `fragments` to your `related` configuration:
 +
- ```
++{{< code-toggle file="config" copy=false >}}
 +[related]
 +threshold    = 20
 +includeNewer = true
 +toLower      = false
 +[[related.indices]]
 +name        = "fragmentrefs"
 +type        = "fragments"
 +applyFilter = false
 +weight      = 80
++{{< /code-toggle >}}
 +
 +* The `name` maps to a optional front matter slice attribute that can be used to link from the page level down to the fragment/heading level.
 +* If `applyFilter`is enabled, the `.HeadingsFiltered` on each page in the result will reflect the filtered headings. This is useful if you want to show the headings in the related content listing:
 +
 +```go-html-template
 +{{ $related := .Site.RegularPages.Related . | first 5 }}
 +{{ with $related }}
 +  <h2>See Also</h2>
 +  <ul>
 +    {{ range $i, $p := . }}
 +      <li>
 +        <a href="{{ .RelPermalink }}">{{ .Title }}</a>
 +        {{ with .HeadingsFiltered }}
 +          <ul>
 +            {{ range . }}
 +              {{ $link := printf "%s#%s" $p.RelPermalink .ID | safeURL }}
 +              <li>
 +                <a href="{{ $link }}">{{ .Title }}</a>
 +              </li>
 +            {{ end }}
 +          </ul>
 +        {{ end }}
 +      </li>
 +    {{ end }}
 +  </ul>
 +{{ end }}
 +```
 +
 +## Configure Related Content
 +
 +Hugo provides a sensible default configuration of Related Content, but you can fine-tune this in your configuration, on the global or language level if needed.
 +
 +### Default configuration
 +
 +Without any `related` configuration set on the project, Hugo's Related Content methods will use the following.
 +
 +{{< code-toggle file="config" >}}
 +related:
 +  threshold: 80
 +  includeNewer: false
 +  toLower: false
 +  indices:
 +  - name: keywords
 +    weight: 100
 +  - name: date
 +    weight: 10
 +{{< /code-toggle >}}
 +
 +Note that if you have configured `tags` as a taxonomy, `tags` will also be added to the default configuration above with the weight of `80`.
 +
 +Custom configuration should be set using the same syntax.
 +
 +{{% note %}}
 +If you add a `related` config section, you need to add a complete configuration. It is not possible to just set, say, `includeNewer` and use the rest  from the Hugo defaults.
 +{{% /note %}}
 +
 +### Top Level Config Options
 +
 +threshold
 +:  A value between 0-100. Lower value will give more, but maybe not so relevant, matches.
 +
 +includeNewer
 +:  Set to true to include **pages newer than the current page** in the related content listing. This will mean that the output for older posts may change as new related content gets added.
 +
 +toLower
 +: Set to true to lower case keywords in both the indexes and the queries. This may give more accurate results at a slight performance penalty. Note that this can also be set per index.
 +
 +### Config Options per Index
 +
 +name
 +:  The index name. This value maps directly to a page param. Hugo supports string values (`author` in the example) and lists (`tags`, `keywords` etc.) and time and date objects.
 +
 +type
 +: {{< new-in "0.111.0" >}}. One of `basic`(default) or `fragments`.
 +
 +applyFilter
 +: {{< new-in "0.111.0" >}}. Apply a `type` specific filter to the result of a search. This is currently only used for the `fragments` type.
 +
 +weight
 +: An integer weight that indicates _how important_ this parameter is relative to the other parameters.  It can be 0, which has the effect of turning this index off, or even negative. Test with different values to see what fits your content best.
 +
 +
 +cardinalityThreshold (default 0)
 +: {{< new-in "0.111.0" >}}. A percentage (0-100) used to remove common keywords from the index. As an example, setting this to 50 will remove all keywords that are used in more than 50% of the documents in the index.
 +
 +pattern
 +: This is currently only relevant for dates. When listing related content, we may want to list content that is also close in time. Setting "2006" (default value for date indexes) as the pattern for a date index will add weight to pages published in the same year. For busier blogs, "200601" (year and month) may be a better default.
 +
 +toLower
 +: See above.
 +
 +## Performance Considerations
 +
 +**Fast is Hugo's middle name** and we would not have released this feature had it not been blistering fast.
 +
 +This feature has been in the back log and requested by many for a long time. The development got this recent kick start from this Twitter thread:
 +
 +{{< tweet user="scott_lowe" id="898398437527363585" >}}
 +
 +Scott S. Lowe removed the "Related Content" section built using the `intersect` template function on tags, and the build time dropped from 30 seconds to less than 2 seconds on his 1700 content page sized blog.
 +
 +He should now be able to add an improved version of that "Related Content" section without giving up the fast live-reloads. But it's worth noting that:
 +
 +* If you don't use any of the `Related` methods, you will not use the Relate Content feature, and performance will be the same as before.
 +* Calling `.RegularPages.Related` etc. will create one inverted index, also sometimes named posting list, that will be reused for any lookups in that same page collection. Doing that in addition to, as an example, calling `.Pages.Related` will work as expected, but will create one additional inverted index. This should still be very fast, but worth having in mind, especially for bigger sites.
 +
 +{{% note %}}
 +We currently do not index **Page content**. We thought we would release something that will make most people happy before we start solving [Sherlock's last case](https://github.com/joearms/sherlock).
 +{{% /note %}}
index b68a5bdb90ab21cc2bc51e71329b72bcc9382c34,0000000000000000000000000000000000000000..10c87e6cbf81b4b0afd4047b8c80c3657ead072a
mode 100644,000000..100644
--- /dev/null
@@@ -1,97 -1,0 +1,96 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: Content Sections
 +linkTitle: Sections
 +description: Hugo generates a **section tree** that matches your content.
- {{< code file="layouts/partials/breadcrumb.html" download="breadcrumb.html" >}}
- <ol class="nav navbar-nav">
- <ul>
- {{- range .Ancestors.Reverse }}
- <li><a href="{{ .Permalink }}">{{ .Title }}</a></li>
- {{- end }}
- <li class="active" aria-current="page">
- <a href="{{ .Permalink }}">{{ .Title }}</a>
- </li>
- </ul>
- </ol>
 +categories: [content management]
 +keywords: [lists,sections,content types,organization]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 120
 +toc: true
 +weight: 120
 +aliases: [/content/sections/]
 +---
 +
 +A **Section** is a collection of pages that gets defined based on the
 +organization structure under the `content/` directory.
 +
 +By default, all the **first-level** directories under `content/` form their own
 +sections (**root sections**) provided they constitute [Branch Bundles][branch bundles].
 +Directories which are just [Leaf Bundles][leaf bundles] do *not* form
 +their own sections, despite being first-level directories.
 +
 +If a user needs to define a section `foo` at a deeper level, they need to create
 +a directory named `foo` with an `_index.md` file (see [Branch Bundles][branch bundles]
 +for more information).
 +
 +
 +{{% note %}}
 +A **section** cannot be defined or overridden by a front matter parameter -- it
 +is strictly derived from the content organization structure.
 +{{% /note %}}
 +
 +## Nested Sections
 +
 +The sections can be nested as deeply as you need.
 +
 +```bash
 +content
 +└── blog        <-- Section, because first-level dir under content/
 +    ├── funny-cats
 +    │   ├── mypost.md
 +    │   └── kittens         <-- Section, because contains _index.md
 +    │       └── _index.md
 +    └── tech                <-- Section, because contains _index.md
 +        └── _index.md
 +```
 +
 +**The important part to understand is, that to make the section tree fully navigational, at least the lower-most section needs a content file. (e.g. `_index.md`).**
 +
 +{{% note %}}
 +When we talk about a **section** in correlation with template selection, it is
 +currently always the *root section* only (`/blog/funny-cats/mypost/ => blog`).
 +
 +If you need a specific template for a sub-section, you need to adjust either the `type` or `layout` in front matter.
 +{{% /note %}}
 +
 +## Example: Breadcrumb Navigation
 +
 +With the available [section variables and methods](#section-page-variables-and-methods) you can build powerful navigation. One common example would be a partial to show Breadcrumb navigation:
 +
++{{< code file="layouts/partials/breadcrumb.html" >}}
++<nav aria-label="breadcrumb">
++  <ol>
++    {{ range .Ancestors.Reverse }}
++      <li>
++        <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
++      </li>
++    {{ end }}
++    <li class="active">
++      <a aria-current="page" href="{{ .Permalink }}">{{ .LinkTitle }}</a>
++    </li>
++  </ol>
++</nav>
 +{{< /code >}}
 +
 +## Section Page Variables and Methods
 +
 +Also see [Page Variables](/variables/page/).
 +
 +{{< readfile file="/content/en/readfiles/sectionvars.md" markdown="true" >}}
 +
 +## Content Section Lists
 +
 +Hugo will automatically create a page for each *root section* that lists all the content in that section. See the documentation on [section templates] for details on customizing the way these pages are rendered.
 +
 +## Content *Section* vs Content *Type*
 +
 +By default, everything created within a section will use the [content `type`][content type] that matches the *root section* name. For example, Hugo will assume that `posts/post-1.md` has a `posts` content `type`. If you are using an [archetype] for your `posts` section, Hugo will generate front matter according to what it finds in `archetypes/posts.md`.
 +
 +[archetype]: /content-management/archetypes/
 +[content type]: /content-management/types/
 +[directory structure]: /getting-started/directory-structure/
 +[section templates]: /templates/section-templates/
 +[leaf bundles]: /content-management/page-bundles/#leaf-bundles
 +[branch bundles]: /content-management/page-bundles/#branch-bundles
index a9269c2162ba7e2eb42b3ab9d9faf0e32f1f3e60,0000000000000000000000000000000000000000..35ffc390f960b3dcc22d7f80d0c3bfb6d144bf2a
mode 100644,000000..100644
--- /dev/null
@@@ -1,437 -1,0 +1,411 @@@
- linkTitle: Shortcodes
 +---
 +title: Shortcodes
- {{</* figure src="/media/spf13.jpg" title="Steve Francia" */>}}
 +description: Shortcodes are simple snippets inside your content files calling built-in or custom templates.
 +categories: [content management]
 +keywords: [markdown,content,shortcodes]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 100
 +toc: true
 +weight: 100
 +aliases: [/extras/shortcodes/]
 +testparam: "Hugo Rocks!"
 +---
 +
 +## What a Shortcode is
 +
 +Hugo loves Markdown because of its simple content format, but there are times when Markdown falls short. Often, content authors are forced to add raw HTML (e.g., video `<iframe>`'s) to Markdown content. We think this contradicts the beautiful simplicity of Markdown's syntax.
 +
 +Hugo created **shortcodes** to circumvent these limitations.
 +
 +A shortcode is a simple snippet inside a content file that Hugo will render using a predefined template. Note that shortcodes will not work in template files. If you need the type of drop-in functionality that shortcodes provide but in a template, you most likely want a [partial template][partials] instead.
 +
 +In addition to cleaner Markdown, shortcodes can be updated any time to reflect new classes, techniques, or standards. At the point of site generation, Hugo shortcodes will easily merge in your changes. You avoid a possibly complicated search and replace operation.
 +
 +## Use Shortcodes
 +
 +{{< youtube 2xkNJL4gJ9E >}}
 +
 +In your content files, a shortcode can be called by calling `{{%/* shortcodename parameters */%}}`. Shortcode parameters are space delimited, and parameters with internal spaces can be quoted.
 +
 +The first word in the shortcode declaration is always the name of the shortcode. Parameters follow the name. Depending upon how the shortcode is defined, the parameters may be named, positional, or both, although you can't mix parameter types in a single call. The format for named parameters models that of HTML with the format `name="value"`.
 +
 +Some shortcodes use or require closing shortcodes. Again like HTML, the opening and closing shortcodes match (name only) with the closing declaration, which is prepended with a slash.
 +
 +Here are two examples of paired shortcodes:
 +
 +```go-html-template
 +{{%/* mdshortcode */%}}Stuff to `process` in the *center*.{{%/* /mdshortcode */%}}
 +```
 +
 +```go-html-template
 +{{</* highlight go */>}} A bunch of code here {{</* /highlight */>}}
 +```
 +
 +The examples above use two different delimiters, the difference being the `%` character in the first and the `<>` characters in the second.
 +
 +### Shortcodes with raw string parameters
 +
 +You can pass multiple lines as parameters to a shortcode by using raw string literals:
 +
 +```go-html-template
 +{{</*  myshortcode `This is some <b>HTML</b>,
 +and a new line with a "quoted string".` */>}}
 +```
 +
 +### Shortcodes with Markdown
 +
 +In Hugo `0.55` we changed how the `%` delimiter works. Shortcodes using the `%` as the outer-most delimiter will now be fully rendered when sent to the content renderer. They can be part of the generated table of contents, footnotes, etc.
 +
 +If you want the old behavior, you can put the following line in the start of your shortcode template:
 +
 +```go-html-template
 +{{ $_hugo_config := `{ "version": 1 }` }}
 +```
 +
 +### Shortcodes Without Markdown
 +
 +The `<` character indicates that the shortcode's inner content does *not* need further rendering. Often shortcodes without Markdown include internal HTML:
 +
 +```go-html-template
 +{{</* myshortcode */>}}<p>Hello <strong>World!</strong></p>{{</* /myshortcode */>}}
 +```
 +
 +### Nested Shortcodes
 +
 +You can call shortcodes within other shortcodes by creating your own templates that leverage the `.Parent` variable. `.Parent` allows you to check the context in which the shortcode is being called. See [Shortcode templates][sctemps].
 +
 +## Use Hugo's Built-in Shortcodes
 +
 +Hugo ships with a set of predefined shortcodes that represent very common usage. These shortcodes are provided for author convenience and to keep your Markdown content clean.
 +
 +### `figure`
 +
 +`figure` is an extension of the image syntax in Markdown, which does not provide a shorthand for the more semantic [HTML5 `<figure>` element][figureelement].
 +
 +The `figure` shortcode can use the following named parameters:
 +
 +src
 +: URL of the image to be displayed.
 +
 +link
 +: If the image needs to be hyperlinked, URL of the destination.
 +
 +target
 +: Optional `target` attribute for the URL if `link` parameter is set.
 +
 +rel
 +: Optional `rel` attribute for the URL if `link` parameter is set.
 +
 +alt
 +: Alternate text for the image if the image cannot be displayed.
 +
 +title
 +: Image title.
 +
 +caption
 +: Image caption.  Markdown within the value of `caption` will be rendered.
 +
 +class
 +: `class` attribute of the HTML `figure` tag.
 +
 +height
 +: `height` attribute of the image.
 +
 +width
 +: `width` attribute of the image.
 +
 +loading
 +: `loading` attribute of the image.
 +
 +attr
 +: Image attribution text. Markdown within the value of `attr` will be rendered.
 +
 +attrlink
 +: If the attribution text needs to be hyperlinked, URL of the destination.
 +
 +#### Example `figure` Input
 +
 +{{< code file="figure-input-example.md" >}}
- {{< output file="figure-output-example.html" >}}
++{{</* figure src="elephant.jpg" title=">An elephant at sunset" */>}}
 +{{< /code >}}
 +
 +#### Example `figure` Output
 +
-   <img src="/media/spf13.jpg"  />
-   <figcaption>
-       <h4>Steve Francia</h4>
-   </figcaption>
++```html
 +<figure>
- {{< /output >}}
++  <img src="elephant.jpg">
++  <figcaption>An elephant at sunset</figcaption>
 +</figure>
- Bloggers often want to include GitHub gists when writing posts. Let's suppose we want to use the [gist at the following url][examplegist]:
++```
 +
 +### `gist`
 +
- ```txt
- https://gist.github.com/spf13/7896402
++To display a GitHub [gist] with this URL:
 +
- We can embed the gist in our content via username and gist ID pulled from the URL:
++[gist]: https://docs.github.com/en/get-started/writing-on-github/editing-and-sharing-content-with-gists
++
++```text
++https://gist.github.com/user/50a7482715eac222e230d1e64dd9a89b
 +```
 +
- ```go-html-template
- {{</* gist spf13 7896402 */>}}
++Include this in your markdown:
 +
- #### Example `gist` Input
- If the gist contains several files and you want to quote just one of them, you can pass the filename (quoted) as an optional third argument:
++```text
++{{</* gist user 50a7482715eac222e230d1e64dd9a89b */>}}
 +```
 +
- {{< code file="gist-input.md" >}}
- {{</* gist spf13 7896402 "img.html" */>}}
- {{< /code >}}
++This will display all files in the gist alphabetically by file name.
 +
- #### Example `gist` Output
++{{< gist jmooring 50a7482715eac222e230d1e64dd9a89b >}}
 +
- {{< output file="gist-output.html" >}}
- {{< gist spf13 7896402 >}}
- {{< /output >}}
- #### Example `gist` Display
++To display a specific file within the gist:
 +
- To demonstrate the remarkable efficiency of Hugo's shortcode feature, we have embedded the `spf13` `gist` example in this page. The following simulates the experience for visitors to your website. Naturally, the final display will depend on your stylesheets and surrounding markup.
++```text
++{{</* gist user 50a7482715eac222e230d1e64dd9a89b 1-template.html */>}}
++```
 +
- {{< gist spf13 7896402 >}}
++Rendered:
 +
- This shortcode will convert the source code provided into syntax-highlighted HTML. Read more on [highlighting](/content-management/syntax-highlighting/). `highlight` takes exactly one required `language` parameter and requires a closing shortcode.
- #### Example `highlight` Input
++{{< gist jmooring 50a7482715eac222e230d1e64dd9a89b 1-template.html >}}
 +
 +### `highlight`
 +
- {{< code file="content/tutorials/learn-html.md" >}}
- {{</* highlight html */>}}
- <section id="main">
-   <div>
-    <h1 id="title">{{ .Title }}</h1>
-     {{ range .Pages }}
-         {{ .Render "summary"}}
-     {{ end }}
-   </div>
- </section>
++To display a highlighted code sample:
 +
- {{< /code >}}
- #### Example `highlight` Output
- The `highlight` shortcode example above would produce the following HTML when the site is rendered:
++```text
++{{</* highlight go-html-template */>}}
++{{ range .Pages }}
++  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
++{{ end }}
 +{{</* /highlight */>}}
- {{< output file="tutorials/learn-html/index.html" >}}
- <span style="color: #f92672">&lt;section</span> <span style="color: #a6e22e">id=</span><span style="color: #e6db74">&quot;main&quot;</span><span style="color: #f92672">&gt;</span>
-   <span style="color: #f92672">&lt;div&gt;</span>
-    <span style="color: #f92672">&lt;h1</span> <span style="color: #a6e22e">id=</span><span style="color: #e6db74">&quot;title&quot;</span><span style="color: #f92672">&gt;</span>{{ .Title }}<span style="color: #f92672">&lt;/h1&gt;</span>
-     {{ range .Pages }}
-         {{ .Render &quot;summary&quot;}}
-     {{ end }}
-   <span style="color: #f92672">&lt;/div&gt;</span>
- <span style="color: #f92672">&lt;/section&gt;</span>
- {{< /output >}}
++```
 +
- {{% note "More on Syntax Highlighting" %}}
- To see even more options for adding syntax-highlighted code blocks to your website, see [Syntax Highlighting in Developer Tools](/tools/syntax-highlighting/).
- {{% /note %}}
++Rendered:
 +
- ### `instagram`
++{{< highlight go-html-template >}}
++{{ range .Pages }}
++  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
++{{ end }}
++{{< /highlight >}}
 +
- If you'd like to embed a photo from [Instagram], you only need the photo's ID. You can discern an Instagram photo ID from the URL:
++To specify one or more [highlighting options], include a quotation-encapsulated, comma-separated list:
 +
- ```txt
- https://www.instagram.com/p/BWNjjyYFxVx/
++[highlighting options]: /functions/highlight/
 +
- #### Example `instagram` Input
++```text
++{{</* highlight go-html-template "lineNos=inline, lineNoStart=42" */>}}
++{{ range .Pages }}
++  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
++{{ end }}
++{{</* /highlight */>}}
 +```
 +
- {{< code file="instagram-input.md" >}}
- {{</* instagram BWNjjyYFxVx */>}}
- {{< /code >}}
++Rendered:
 +
- You also have the option to hide the caption:
++{{< highlight go-html-template "lineNos=inline, lineNoStart=42" >}}
++{{ range .Pages }}
++  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
++{{ end }}
++{{< /highlight >}}
 +
- {{< code file="instagram-input-hide-caption.md" >}}
- {{</* instagram BWNjjyYFxVx hidecaption */>}}
- {{< /code >}}
++### `instagram`
 +
- #### Example `instagram` Output
++The `instagram` shortcode uses Facebook's **oEmbed Read** feature. The  Facebook [developer documentation] states:
 +
- By adding the preceding `hidecaption` example, the following HTML will be added to your rendered website's markup:
++- This permission or feature requires successful completion of the App Review process before your app can access live data. [Learn More]
++- This permission or feature is only available with business verification. You may also need to sign additional contracts before your app can access data. [Learn More Here]
 +
- {{< output file="instagram-hide-caption-output.html" >}}
- {{< instagram BWNjjyYFxVx hidecaption >}}
- {{< /output >}}
++[developer documentation]: https://developers.facebook.com/docs/features-reference/oembed-read
++[Learn More]: https://developers.facebook.com/docs/app-review
++[Learn More Here]: https://developers.facebook.com/docs/development/release/business-verification
 +
- #### Example `instagram` Display
++You must obtain an Access Token to use the `instagram` shortcode.
 +
- Using the preceding `instagram` with `hidecaption` example above, the following simulates the displayed experience for visitors to your website. Naturally, the final display will be contingent on your style sheets and surrounding markup.
++If your site configuration is private:
 +
- {{< instagram BWNjjyYFxVx hidecaption >}}
++{{< code-toggle file=config copy=false >}}
++[services.instagram]
++accessToken = 'xxx'
++{{< /code-toggle >}}
 +
- The `instagram`-shortcode refers an endpoint of Instagram's API, that's deprecated since October 24th, 2020. Thus, no images can be fetched from this API endpoint, resulting in an error when the `instagram`-shortcode is used. For more information please have a look at GitHub issue [#7879](https://github.com/gohugoio/hugo/issues/7879).
++If your site configuration is _not_ private, set the Access Token with an environment variable:
 +
++```text
++HUGO_SERVICES_INSTAGRAM_ACCESSTOKEN=xxx hugo --gc --minify
++```
 +
 +{{% note %}}
- {{% note "More on Cross References" %}}
++If you are using a Client Access Token, you must combine the Access Token with your App ID using a pipe symbol (`APPID|ACCESSTOKEN`).
 +{{% /note %}}
 +
++To display an Instagram post with this URL:
++
++```text
++https://www.instagram.com/p/BWNjjyYFxVx/
++```
++
++Include this in your markdown:
++
++```text
++{{</* instagram BWNjjyYFxVx */>}}
++```
++
 +### `param`
 +
 +Gets a value from the current `Page's` params set in front matter, with a fallback to the site param value. It will log an `ERROR` if the param with the given key could not be found in either.
 +
 +```bash
 +{{</* param testparam */>}}
 +```
 +
 +Since `testparam` is a param defined in front matter of this page with the value `Hugo Rocks!`, the above will print:
 +
 +{{< param testparam >}}
 +
 +To access deeply nested params, use "dot syntax", e.g:
 +
 +```bash
 +{{</* param "my.nested.param" */>}}
 +```
 +
 +### `ref` and `relref`
 +
 +These shortcodes will look up the pages by their relative path (e.g., `blog/post.md`) or their logical name (`post.md`) and return the permalink (`ref`) or relative permalink (`relref`) for the found page.
 +
 +`ref` and `relref` also make it possible to make fragmentary links that work for the header links generated by Hugo.
 +
- You want to include a single tweet into your blog post? Everything you need is the URL of the tweet:
++{{% note %}}
 +Read a more extensive description of `ref` and `relref` in the [cross references](/content-management/cross-references/) documentation.
 +{{% /note %}}
 +
 +`ref` and `relref` take exactly one required parameter of _reference_, quoted and in position `0`.
 +
 +#### Example `ref` and `relref` Input
 +
 +```go-html-template
 +[Neat]({{</* ref "blog/neat.md" */>}})
 +[Who]({{</* relref "about.md#who" */>}})
 +```
 +
 +#### Example `ref` and `relref` Output
 +
 +Assuming that standard Hugo pretty URLs are turned on.
 +
 +```html
 +<a href="https://example.com/blog/neat">Neat</a>
 +<a href="/about/#who">Who</a>
 +```
 +
 +### `tweet`
 +
- #### Example `tweet` Input
++To display a Twitter post with this URL:
 +
 +```txt
 +https://twitter.com/SanDiegoZoo/status/1453110110599868418
 +```
 +
- Pass the tweet's user (case-insensitive) and ID from the URL as parameters to the `tweet` shortcode.
- {{< code file="example-tweet-input.md" >}}
++Include this in your markdown:
 +
- {{< /code >}}
- #### Example `tweet` Output
- Using the preceding `tweet` example, the following HTML will be added to your rendered website's markup:
- {{< output file="example-tweet-output.html" >}}
- {{< tweet user="SanDiegoZoo" id="1453110110599868418" >}}
- {{< /output >}}
- #### Example `tweet` Display
++```text
 +{{</* tweet user="SanDiegoZoo" id="1453110110599868418" */>}}
- Using the preceding `tweet` example, the following simulates the displayed experience for visitors to your website. Naturally, the final display will be contingent on your stylesheets and surrounding markup.
++```
 +
- Adding a video from [Vimeo] is equivalent to the [YouTube Input shortcode].
++Rendered:
 +
 +{{< tweet user="SanDiegoZoo" id="1453110110599868418" >}}
 +
 +### `vimeo`
 +
- ```txt
- https://vimeo.com/channels/staffpicks/146022717
++To display a Vimeo video with this URL:
 +
- #### Example `vimeo` Input
- Extract the ID from the video's URL and pass it to the `vimeo` shortcode:
- {{< code file="example-vimeo-input.md" >}}
- {{</* vimeo 146022717 */>}}
- {{< /code >}}
++```text
++https://vimeo.com/channels/staffpicks/55073825
 +```
 +
- #### Example `vimeo` Output
++Include this in your markdown:
 +
- Using the preceding `vimeo` example, the following HTML will be added to your rendered website's markup:
++```text
++{{</* vimeo 55073825 */>}}
++```
 +
- {{< output file="example-vimeo-output.html" >}}
- {{< vimeo 146022717 >}}
- {{< /output >}}
++Rendered:
 +
- {{% tip %}}
++{{< vimeo 55073825 >}}
 +
- {{% /tip %}}
- #### Example `vimeo` Display
- Using the preceding `vimeo` example, the following simulates the displayed experience for visitors to your website. Naturally, the final display will be contingent on your stylesheets and surrounding markup.
- {{< vimeo 146022717 >}}
++{{% note %}}
 +If you want to further customize the visual styling of the YouTube or Vimeo output, add a `class` named parameter when calling the shortcode. The new `class` will be added to the `<div>` that wraps the `<iframe>` *and* will remove the inline styles. Note that you will need to call the `id` as a named parameter as well. You can also give the vimeo video a descriptive title with `title`.
 +
 +```go
 +{{</* vimeo id="146022717" class="my-vimeo-wrapper-class" title="My vimeo video" */>}}
 +```
++{{% /note %}}
 +
 +### `youtube`
 +
 +The `youtube` shortcode embeds a responsive video player for [YouTube videos]. Only the ID of the video is required, e.g.:
 +
 +```txt
 +https://www.youtube.com/watch?v=w7Ft2ymGmfc
 +```
 +
 +#### Example `youtube` Input
 +
 +Copy the YouTube video ID that follows `v=` in the video's URL and pass it to the `youtube` shortcode:
 +
 +{{< code file="example-youtube-input.md" >}}
 +{{</* youtube w7Ft2ymGmfc */>}}
 +{{< /code >}}
 +
 +Furthermore, you can automatically start playback of the embedded video by setting the `autoplay` parameter to `true`. Remember that you can't mix named and unnamed parameters, so you'll need to assign the yet unnamed video ID to the parameter `id`:
 +
 +
 +{{< code file="example-youtube-input-with-autoplay.md" >}}
 +{{</* youtube id="w7Ft2ymGmfc" autoplay="true" */>}}
 +{{< /code >}}
 +
 +For [accessibility reasons](https://dequeuniversity.com/tips/provide-iframe-titles), it's best to provide a title for your YouTube video.  You  can do this using the shortcode by providing a `title` parameter. If no title is provided, a default of "YouTube Video" will be used.
 +
 +{{< code file="example-youtube-input-with-title.md" >}}
 +{{</* youtube id="w7Ft2ymGmfc" title="A New Hugo Site in Under Two Minutes" */>}}
 +{{< /code >}}
 +
 +#### Example `youtube` Output
 +
 +Using the preceding `youtube` example, the following HTML will be added to your rendered website's markup:
 +
 +{{< code file="example-youtube-output.html" >}}
 +{{< youtube id="w7Ft2ymGmfc" autoplay="true" >}}
 +{{< /code >}}
 +
 +#### Example `youtube` Display
 +
 +Using the preceding `youtube` example (without `autoplay="true"`), the following simulates the displayed experience for visitors to your website. Naturally, the final display will be contingent on your style sheets and surrounding markup. The video is also include in the [Quick Start of the Hugo documentation][quickstart].
 +
 +{{< youtube w7Ft2ymGmfc >}}
 +
 +## Privacy Config
 +
 +To learn how to configure your Hugo site to meet the new EU privacy regulation, see [Hugo and the GDPR].
 +
 +## Create Custom Shortcodes
 +
 +To learn more about creating custom shortcodes, see the [shortcode template documentation].
 +
 +[`figure` shortcode]: #figure
 +[contentmanagementsection]: /content-management/formats/
 +[examplegist]: https://gist.github.com/spf13/7896402
 +[figureelement]: https://html5doctor.com/the-figure-figcaption-elements/ "An article from HTML5 doctor discussing the fig and figcaption elements."
 +[Hugo and the GDPR]: /about/hugo-and-gdpr/
 +[Instagram]: https://www.instagram.com/
 +[pagevariables]: /variables/page/
 +[partials]: /templates/partials/
 +[quickstart]: /getting-started/quick-start/
 +[sctemps]: /templates/shortcode-templates/
 +[scvars]: /variables/shortcodes/
 +[shortcode template documentation]: /templates/shortcode-templates/
 +[templatessection]: /templates/
 +[Vimeo]: https://vimeo.com/
 +[YouTube Videos]: https://www.youtube.com/
 +[YouTube Input shortcode]: #youtube
index 20a1442e652853e9c14d435cb5e939524f146df6,0000000000000000000000000000000000000000..6bff7fd6f03bf8c35ab0f16ee91db960b7849ab9
mode 100644,000000..100644
--- /dev/null
@@@ -1,69 -1,0 +1,69 @@@
- {{< code-toggle copy="false" file="config" >}}
 +---
 +title: Static Files
 +linkTitle: Static Files
 +description: Files that get served **statically** (as-is, no modification) on the site root.
 +categories: [content management]
 +keywords: [source, directories]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 200
 +toc: true
 +weight: 200
 +aliases: [/static-files]
 +---
 +
 +By default, the `static/` directory in the site project is used for
 +all **static files** (e.g. stylesheets, JavaScript, images). The static files are served on the site root path (eg. if you have the file `static/image.png` you can access it using `http://{server-url}/image.png`, to include it in a document you can use `![Example image](/image.png) )`.
 +
 +Hugo can be configured to look into a different directory, or even
 +**multiple directories** for such static files by configuring the
 +`staticDir` parameter in the [site config]. All the files in all the
 +static directories will form a union filesystem.
 +
 +This union filesystem will be served from your site root. So a file
 +`<SITE PROJECT>/static/me.png` will be accessible as
 +`<MY_BASEURL>/me.png`.
 +
 +Here's an example of setting `staticDir` and `staticDir2` for a
 +multi-language site:
 +
++{{< code-toggle copy=false file="config" >}}
 +staticDir = ["static1", "static2"]
 +
 +[languages]
 +[languages.en]
 +staticDir2 = "static_en"
 +baseURL = "https://example.com"
 +languageName = "English"
 +weight = 2
 +title = "In English"
 +[languages.no]
 +staticDir = ["staticDir_override", "static_no"]
 +baseURL = "https://example.no"
 +languageName = "Norsk"
 +weight = 1
 +title = "På norsk"
 +{{</ code-toggle >}}
 +
 +In the above, with no theme used:
 +
 +- The English site will get its static files as a union of "static1",
 +  "static2" and "static_en". On file duplicates, the right-most
 +  version will win.
 +- The Norwegian site will get its static files as a union of
 +  "staticDir_override" and "static_no".
 +
 +Note 1
 +: The **2** (can be a number between 0 and 10) in `staticDir2` is
 +  added to tell Hugo that you want to **add** this directory to the
 +  global set of static directories defined using `staticDir`. Using
 +  `staticDir` on the language level would replace the global value (as
 +  can be seen in the Norwegian site case).
 +
 +Note 2
 +: The example above is a [multihost setup]. In a regular setup, all
 +  the static directories will be available to all sites.
 +
 +[site config]: /getting-started/configuration/#all-configuration-settings
 +[multihost setup]: /content-management/multilingual/#configure-multilingual-multihost
index 345e2f74892c41a0c4c20667bcc92a87ca97821f,0000000000000000000000000000000000000000..3156afa20bc2fbd644ad52a485e43ad41458e0f1
mode 100644,000000..100644
--- /dev/null
@@@ -1,108 -1,0 +1,108 @@@
- {{% note "Summary Divider"%}}
 +---
 +title: Content Summaries
 +linkTitle: Summaries
 +description: Hugo generates summaries of your content.
 +categories: [content management]
 +keywords: [summaries,abstracts,read more]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 160
 +toc: true
 +weight: 160
 +aliases: [/content/summaries/,/content-management/content-summaries/]
 +---
 +
 +With the use of the `.Summary` [page variable][pagevariables], Hugo generates summaries of content to use as a short version in summary views.
 +
 +## Summary Splitting Options
 +
 +* Automatic Summary Split
 +* Manual Summary Split
 +* Front Matter Summary
 +
 +It is natural to accompany the summary with links to the original content, and a common design pattern is to see this link in the form of a "Read More ..." button. See the `.RelPermalink`, `.Permalink`, and `.Truncated` [page variables][pagevariables].
 +
 +### Automatic Summary Splitting
 +
 +By default, Hugo automatically takes the first 70 words of your content as its summary and stores it into the `.Summary` page variable for use in your templates. You may customize the summary length by setting `summaryLength` in your [site configuration](/getting-started/configuration/).
 +
 +{{% note %}}
 +You can customize how HTML tags in the summary are loaded using functions such as `plainify` and `safeHTML`.
 +{{% /note %}}
 +
 +{{% note %}}
 +The Hugo-defined summaries are set to use word count calculated by splitting the text by one or more consecutive whitespace characters. If you are creating content in a `CJK` language and want to use Hugo's automatic summary splitting, set `hasCJKLanguage` to `true` in your [site configuration](/getting-started/configuration/).
 +{{% /note %}}
 +
 +### Manual Summary Splitting
 +
 +Alternatively, you may add the <code>&#60;&#33;&#45;&#45;more&#45;&#45;&#62;</code> summary divider where you want to split the article.
 +
 +For [Org mode content][org], use `# more` where you want to split the article.
 +
 +Content that comes before the summary divider will be used as that content's summary and stored in the `.Summary` page variable with all HTML formatting intact.
 +
- {{% /warning %}}
++{{% note %}}
 +The concept of a *summary divider* is not unique to Hugo. It is also called the "more tag" or "excerpt separator" in other literature.
 +{{% /note %}}
 +
 +Pros
 +: Freedom, precision, and improved rendering.  All HTML tags and formatting are preserved.
 +
 +Cons
 +: Extra work for content authors, since they need to remember to type <code>&#60;&#33;&#45;&#45;more&#45;&#45;&#62;</code> (or `# more` for [org content][org]) in each content file. This can be automated by adding the summary divider below the front matter of an [archetype](/content-management/archetypes/).
 +
 +{{% warning "Be Precise with the Summary Divider" %}}
 +Be careful to enter <code>&#60;&#33;&#45;&#45;more&#45;&#45;&#62;</code> exactly; i.e., all lowercase and with no whitespace.
- {{% /warning %}}
++{{% /note %}}
 +
 +### Front Matter Summary
 +
 +You might want your summary to be something other than the text that starts the article.  In this case you can provide a separate summary in the `summary` variable of the article front matter.
 +
 +Pros
 +: Complete freedom of text independent of the content of the article.  Markup can be used within the summary.
 +
 +Cons
 +: Extra work for content authors as they need to write an entirely separate piece of text as the summary of the article.
 +
 +## Summary Selection Order
 +
 +Because there are multiple ways in which a summary can be specified it is useful to understand the order of selection Hugo follows when deciding on the text to be returned by `.Summary`.  It is as follows:
 +
 +1. If there is a <code>&#60;&#33;&#45;&#45;more&#45;&#45;&#62;</code> summary divider present in the article the text up to the divider will be provided as per the manual summary split method
 +2. If there is a `summary` variable in the article front matter the value of the variable will be provided as per the front matter summary method
 +3. The text at the start of the article will be provided as per the automatic summary split method
 +
 +{{% warning "Competing selections" %}}
 +Hugo uses the _first_ of the above steps that returns text.  So if, for example, your article has both `summary` variable in its front matter and a <code>&#60;&#33;&#45;&#45;more&#45;&#45;&#62;</code> summary divider Hugo will use the manual summary split method.
++{{% /note %}}
 +
 +## Example: First 10 Articles with Summaries
 +
 +You can show content summaries with the following code. You could use the following snippet, for example, in a [section template].
 +
 +{{< code file="page-list-with-summaries.html" >}}
 +{{ range first 10 .Pages }}
 +    <article>
 +      <!-- this <div> includes the title summary -->
 +      <div>
 +        <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
 +        {{ .Summary }}
 +      </div>
 +      {{ if .Truncated }}
 +      <!-- This <div> includes a read more link, but only if the summary is truncated... -->
 +      <div>
 +        <a href="{{ .RelPermalink }}">Read More…</a>
 +      </div>
 +      {{ end }}
 +    </article>
 +{{ end }}
 +{{< /code >}}
 +
 +Note how the `.Truncated` boolean variable value may be used to hide the "Read More..." link when the content is not truncated; i.e., when the summary contains the entire article.
 +
 +[org]: /content-management/formats/
 +[pagevariables]: /variables/page/
 +[section template]: /templates/section-templates/
index 5f8a44ee26ca7bbd6e8be2760e674f4d08c3985f,0000000000000000000000000000000000000000..1f3045aed5958e75329d6fba4cea9dde615d1ef3
mode 100644,000000..100644
--- /dev/null
@@@ -1,140 -1,0 +1,139 @@@
- linkTitle: Syntax Highlighting
 +---
 +title: Syntax Highlighting
- The options are the same as in the [highlighting shortcode](/content-management/syntax-highlighting/#highlight-shortcode),including `linenos=false`, but note the slightly different Markdown attribute syntax.
 +description: Hugo comes with really fast syntax highlighting from Chroma.
 +keywords: [highlighting,chroma,code blocks,syntax]
 +categories: [content management]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 240
 +toc: true
 +weight: 240
 +aliases: [/extras/highlighting/,/extras/highlight/,/tools/syntax-highlighting/]
 +---
 +
 +Hugo uses [Chroma](https://github.com/alecthomas/chroma) as its code highlighter; it is built in Go and is really, really fast.
 +
 +## Configure Syntax Highlighter
 +
 +See [Configure Highlight](/getting-started/configuration-markup#highlight).
 +
 +## Generate Syntax Highlighter CSS
 +
 +If you run with `markup.highlight.noClasses=false` in your site config, you need a style sheet.
 +
 +You can generate one with Hugo:
 +
 +```bash
 +hugo gen chromastyles --style=monokai > syntax.css
 +```
 +
 +Run `hugo gen chromastyles -h` for more options. See https://xyproto.github.io/splash/docs/ for a gallery of available styles.
 +
 +## Highlight Shortcode
 +
 +Highlighting is carried out via the built-in [`highlight` shortcode](https://gohugo.io/content-management/shortcodes/#highlight). It takes exactly one required parameter for the programming language to be highlighted and requires a closing shortcode.
 +
 +Options:
 +
 +* `linenos`: configure line numbers. Valid values are `true`, `false`, `table`, or `inline`. `false` will turn off line numbers if it's configured to be on in site config. `table` will give copy-and-paste friendly code blocks.
 +* `hl_lines`: lists a set of line numbers or line number ranges to be highlighted.
 +* `linenostart=199`: starts the line number count from 199.
 +* `anchorlinenos`: Configure anchors on line numbers. Valid values are `true` or `false`;
 +* `lineanchors`: Configure a prefix for the anchors on line numbers. Will be suffixed with `-`, so linking to the line number 1 with the option `lineanchors=prefix` adds the anchor `prefix-1` to the page.  
 +* `hl_inline`  Highlight inside a `<code>` (inline HTML element) tag. Valid values are `true` or `false`. The `code` tag will get a class with name `code-inline`. {{< new-in "0.101.0" >}}
 +
 +### Example: Highlight Shortcode
 +
 +```go-html-template
 +{{</* highlight go "linenos=table,hl_lines=8 15-17,linenostart=199" */>}}
 +// ... code
 +{{</* / highlight */>}}
 +```
 +
 +Gives this:
 +
 +{{< highlight go "linenos=table,hl_lines=8 15-17,linenostart=199" >}}
 +// GetTitleFunc returns a func that can be used to transform a string to
 +// title case.
 +//
 +// The supported styles are
 +//
 +// - "Go" (strings.Title)
 +// - "AP" (see https://www.apstylebook.com/)
 +// - "Chicago" (see https://www.chicagomanualofstyle.org/home.html)
 +//
 +// If an unknown or empty style is provided, AP style is what you get.
 +func GetTitleFunc(style string) func(s string) string {
 +  switch strings.ToLower(style) {
 +  case "go":
 +    return strings.Title
 +  case "chicago":
 +    return transform.NewTitleConverter(transform.ChicagoStyle)
 +  default:
 +    return transform.NewTitleConverter(transform.APStyle)
 +  }
 +}
 +{{< / highlight >}}
 +
 +## Highlight Hugo/GO Template Code
 +
 +For highlighting Hugo/GO template code on your page, add `/*` after the opening double curly braces and `*/` before closing curly braces.
 +
 +``` go
 +{{</*/* myshortcode */*/>}}
 +```
 +
 +Gives this:
 +
 +``` go
 +{{</* myshortcode */>}}
 +```
 +
 +## Highlight Template Func
 +
 +See [Highlight](/functions/highlight/).
 +
 +## Highlighting in Code Fences
 +
 +Highlighting in code fences is enabled by default.
 +
 +````txt
 +```go {linenos=table,hl_lines=[8,"15-17"],linenostart=199}
 +// ... code
 +```
 +````
 +
 +
 +Gives this:
 +
 +```go {linenos=table,hl_lines=[8,"15-17"],linenostart=199}
 +// GetTitleFunc returns a func that can be used to transform a string to
 +// title case.
 +//
 +// The supported styles are
 +//
 +// - "Go" (strings.Title)
 +// - "AP" (see https://www.apstylebook.com/)
 +// - "Chicago" (see https://www.chicagomanualofstyle.org/home.html)
 +//
 +// If an unknown or empty style is provided, AP style is what you get.
 +func GetTitleFunc(style string) func(s string) string {
 +  switch strings.ToLower(style) {
 +  case "go":
 +    return strings.Title
 +  case "chicago":
 +    return transform.NewTitleConverter(transform.ChicagoStyle)
 +  default:
 +    return transform.NewTitleConverter(transform.APStyle)
 +  }
 +}
 +```
 +
++The options are the same as in the [highlighting shortcode](/content-management/syntax-highlighting/#highlight-shortcode), including `linenos=false`, but note the slightly different Markdown attribute syntax.
 +
 +## List of Chroma Highlighting Languages
 +
 +The full list of Chroma lexers and their aliases (which is the identifier used in the `highlight` template func or when doing highlighting in code fences):
 +
 +{{< chroma-lexers >}}
index f5960367f5540c13db9104b0ca047b4dd426551f,0000000000000000000000000000000000000000..fe42a0667f840300a0e1c594b775aaaf9626d00a
mode 100644,000000..100644
--- /dev/null
@@@ -1,210 -1,0 +1,206 @@@
- linkTitle: Taxonomies
 +---
 +title: Taxonomies
- {{< code-toggle copy="false" >}}
 +description: Hugo includes support for user-defined taxonomies.
 +keywords: [taxonomies,metadata,front matter,terms]
 +categories: [content management]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 150
 +toc: true
 +weight: 150
 +aliases: [/taxonomies/overview/,/taxonomies/usage/,/indexes/overview/,/doc/indexes/,/extras/indexes]
 +---
 +
 +## What is a Taxonomy?
 +
 +Hugo includes support for user-defined groupings of content called **taxonomies**. Taxonomies are classifications of logical relationships between content.
 +
 +### Definitions
 +
 +Taxonomy
 +: a categorization that can be used to classify content
 +
 +Term
 +: a key within the taxonomy
 +
 +Value
 +: a piece of content assigned to a term
 +
 +
 +## Example Taxonomy: Movie Website
 +
 +Let's assume you are making a website about movies. You may want to include the following taxonomies:
 +
 +* Actors
 +* Directors
 +* Studios
 +* Genre
 +* Year
 +* Awards
 +
 +Then, in each of the movies, you would specify terms for each of these taxonomies (i.e., in the [front matter] of each of your movie content files). From these terms, Hugo would automatically create pages for each Actor, Director, Studio, Genre, Year, and Award, with each listing all of the Movies that matched that specific Actor, Director, Studio, Genre, Year, and Award.
 +
 +### Movie Taxonomy Organization
 +
 +To continue with the example of a movie site, the following demonstrates content relationships from the perspective of the taxonomy:
 +
 +```txt
 +Actor                    <- Taxonomy
 +    Bruce Willis         <- Term
 +        The Sixth Sense  <- Value
 +        Unbreakable      <- Value
 +        Moonrise Kingdom <- Value
 +    Samuel L. Jackson    <- Term
 +        Unbreakable      <- Value
 +        The Avengers     <- Value
 +        xXx              <- Value
 +```
 +
 +From the perspective of the content, the relationships would appear differently, although the data and labels used are the same:
 +
 +```txt
 +Unbreakable                 <- Value
 +    Actors                  <- Taxonomy
 +        Bruce Willis        <- Term
 +        Samuel L. Jackson   <- Term
 +    Director                <- Taxonomy
 +        M. Night Shyamalan  <- Term
 +    ...
 +Moonrise Kingdom            <- Value
 +    Actors                  <- Taxonomy
 +        Bruce Willis        <- Term
 +        Bill Murray         <- Term
 +    Director                <- Taxonomy
 +        Wes Anderson        <- Term
 +    ...
 +```
 +
 +## Hugo Taxonomy Defaults {#default-taxonomies}
 +
 +Hugo natively supports taxonomies.
 +
 +Without adding a single line to your [site config][config] file, Hugo will automatically create taxonomies for `tags` and `categories`. That would be the same as manually [configuring your taxonomies](#configure-taxonomies) as below:
 +
- {{< code-toggle copy="false" >}}
++{{< code-toggle file="config" copy=false >}}
 +[taxonomies]
 +  tag = "tags"
 +  category = "categories"
 +{{</ code-toggle >}}
 +
 +If you do not want Hugo to create any taxonomies, set `disableKinds` in your [site config][config] to the following:
 +
- Custom taxonomies other than the [defaults]({{< relref "taxonomies.md#default-taxonomies" >}}) must be defined in your [site config][config] before they can be used throughout the site. You need to provide both the plural and singular labels for each taxonomy. For example, `singular key = "plural value"` for TOML and `singular key: "plural value"` for YAML.
++{{< code-toggle file="config" copy=false >}}
 +disableKinds = ["taxonomy","term"]
 +{{</ code-toggle >}}
 +
 +{{% page-kinds %}}
 +
 +### Default Destinations
 +
 +When taxonomies are used---and [taxonomy templates] are provided---Hugo will automatically create both a page listing all the taxonomy's terms and individual pages with lists of content associated with each term. For example, a `categories` taxonomy declared in your configuration and used in your content front matter will create the following pages:
 +
 +* A single page at `example.com/categories/` that lists all the [terms within the taxonomy]
 +* [Individual taxonomy list pages][taxonomy templates] (e.g., `/categories/development/`) for each of the terms that shows a listing of all pages marked as part of that taxonomy within any content file's [front matter]
 +
 +## Configure Taxonomies
 +
- {{< code-toggle copy="false" >}}
++Custom taxonomies other than the [defaults](#default-taxonomies) must be defined in your [site config][config] before they can be used throughout the site. You need to provide both the plural and singular labels for each taxonomy. For example, `singular key = "plural value"` for TOML and `singular key: "plural value"` for YAML.
 +
 +### Example: Adding a custom taxonomy named "series"
 +
 +{{% note %}}
 +While adding custom taxonomies, you need to put in the default taxonomies too, _if you want to keep them_.
 +{{% /note %}}
 +
- {{< code-toggle copy="false" >}}
++{{< code-toggle file="config" copy=false >}}
 +[taxonomies]
 +  tag = "tags"
 +  category = "categories"
 +  series = "series"
 +{{</ code-toggle >}}
 +
 +### Example: Removing default taxonomies
 +
 +If you want to have just the default `tags` taxonomy, and remove the `categories` taxonomy for your site, you can do so by modifying the `taxonomies` value in your [site config][config].
 +
- If you want to disable all taxonomies altogether, see the use of `disableKinds` in [Hugo Taxonomy Defaults]({{< relref "taxonomies.md#default-taxonomies" >}}).
++{{< code-toggle file="config" copy=false >}}
 +[taxonomies]
 +  tag = "tags"
 +{{</ code-toggle >}}
 +
- {{% warning %}}
++If you want to disable all taxonomies altogether, see the use of `disableKinds` in [Hugo Taxonomy Defaults](#default-taxonomies).
 +
 +{{% note %}}
 +You can add content and front matter to your taxonomy list and taxonomy terms pages. See [Content Organization](/content-management/organization/) for more information on how to add an `_index.md` for this purpose.
 +
 +Much like regular pages, taxonomy list [permalinks](/content-management/urls/) are configurable, but taxonomy term page permalinks are not.
 +{{% /note %}}
 +
- {{% /warning %}}
++{{% note %}}
 +The configuration option `preserveTaxonomyNames` was removed in Hugo 0.55.
 +
 +You can now use `.Page.Title` on the relevant taxonomy node to get the original value.
- {{< code-toggle copy="false">}}
++{{% /note %}}
 +
 +## Add Taxonomies to Content
 +
 +Once a taxonomy is defined at the site level, any piece of content can be assigned to it, regardless of [content type] or [content section].
 +
 +Assigning content to a taxonomy is done in the [front matter]. Simply create a variable with the *plural* name of the taxonomy and assign all terms you want to apply to the instance of the content type.
 +
 +{{% note %}}
 +If you would like the ability to quickly generate content files with preconfigured taxonomies or terms, read the docs on [Hugo archetypes](/content-management/archetypes/).
 +{{% /note %}}
 +
 +### Example: Front Matter with Taxonomies
 +
- {{< code-toggle copy="false" >}}
++{{< code-toggle file="content/example.md" fm=true copy=false >}}
 +title = "Hugo: A fast and flexible static site generator"
 +tags = [ "Development", "Go", "fast", "Blogging" ]
 +categories = [ "Development" ]
 +series = [ "Go Web Dev" ]
 +slug = "hugo"
 +project_url = "https://github.com/gohugoio/hugo"
 +{{</ code-toggle >}}
 +
 +## Order Taxonomies
 +
 +A content file can assign weight for each of its associate taxonomies. Taxonomic weight can be used for sorting or ordering content in [taxonomy list templates] and is declared in a content file's [front matter]. The convention for declaring taxonomic weight is `taxonomyname_weight`.
 +
 +The following show a piece of content that has a weight of 22, which can be used for ordering purposes when rendering the pages assigned to the "a", "b" and "c" values of the `tags` taxonomy. It has also been assigned the weight of 44 when rendering the "d" category page.
 +
 +### Example: Taxonomic `weight`
 +
- {{% note "Limits to Ordering Taxonomies" %}}
++{{< code-toggle copy=false >}}
 +title = "foo"
 +tags = [ "a", "b", "c" ]
 +tags_weight = 22
 +categories = ["d"]
 +categories_weight = 44
 +{{</ code-toggle >}}
 +
 +By using taxonomic weight, the same piece of content can appear in different positions in different taxonomies.
 +
- {{< code file="/content/actors/bruce-willis/_index.md" >}}
- ---
++{{% note %}}
 +Currently taxonomies only support the [default `weight => date` ordering of list content](/templates/lists/#default-weight--date--linktitle--filepath). For more information, see the documentation on [taxonomy templates](/templates/taxonomy-templates/).
 +{{% /note %}}
 +
 +## Add custom metadata to a Taxonomy or Term
 +
 +If you need to add custom metadata to your taxonomy terms, you will need to create a page for that term at `/content/<TAXONOMY>/<TERM>/_index.md` and add your metadata in its front matter. Continuing with our 'Actors' example, let's say you want to add a Wikipedia page link to each actor. Your terms pages would be something like this:
 +
- ---
- {{< /code >}}
++{{< code-toggle file="content/actors/bruce-willis/_index.md" fm=true copy=false >}}
 +title: "Bruce Willis"
 +wikipedia: "https://en.wikipedia.org/wiki/Bruce_Willis"
++{{< /code-toggle >}}
 +
 +[`urlize` template function]: /functions/urlize/
 +[content section]: /content-management/sections/
 +[content type]: /content-management/types/
 +[documentation on archetypes]: /content-management/archetypes/
 +[front matter]: /content-management/front-matter/
 +[taxonomy list templates]: /templates/taxonomy-templates/#taxonomy-list-templates
 +[taxonomy templates]: /templates/taxonomy-templates/
 +[terms within the taxonomy]: /templates/taxonomy-templates/#taxonomy-terms-templates "See how to order terms associated with a taxonomy"
 +[config]: /getting-started/configuration/
index d136972cc263afab2ae291a44e98bc4b2063c91b,0000000000000000000000000000000000000000..4215107fb9716ac5b1f9ae6725b928d5602b442d
mode 100644,000000..100644
--- /dev/null
@@@ -1,117 -1,0 +1,116 @@@
- linkTitle: Table of Contents
 +---
 +title: Table of Contents
- {{% note "TOC Heading Levels are Fixed" %}}
 +description: Hugo can automatically parse Markdown content and create a Table of Contents you can use in your templates.
 +categories: [content management]
 +keywords: [table of contents, toc]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 210
 +toc: true
 +weight: 210
 +aliases: [/extras/toc/]
 +---
 +
- Previously, there was no out-of-the-box way to specify which heading levels you want the TOC to render. [See the related GitHub discussion (#1778)](https://github.com/gohugoio/hugo/issues/1778). As such, the resulting `<nav id="TableOfContents"><ul></ul></nav>` was going to start at `<h1>` when pulling from `{{.Content}}`.
++{{% note %}}
 +
- {{< code file="layout/_default/single.html" download="single.html" >}}
++Previously, there was no out-of-the-box way to specify which heading levels you want the TOC to render. [See the related GitHub discussion (#1778)](https://github.com/gohugoio/hugo/issues/1778). As such, the resulting `<nav id="TableOfContents"><ul></ul></nav>` was going to start at `<h1>` when pulling from `{{ .Content }}`.
 +
 +Hugo [v0.60.0](https://github.com/gohugoio/hugo/releases/tag/v0.60.0) made a switch to [Goldmark](https://github.com/yuin/goldmark/) as the default library for Markdown which has improved and configurable implementation of TOC. Take a look at [how to configure TOC](/getting-started/configuration-markup/#table-of-contents) for Goldmark renderer.
 +
 +{{% /note %}}
 +
 +## Usage
 +
 +Create your Markdown the way you normally would with the appropriate headings. Here is some example content:
 +
 +```md
 +<!-- Your front matter up here -->
 +
 +## Introduction
 +
 +One morning, when Gregor Samsa woke from troubled dreams, he found himself transformed in his bed into a horrible vermin.
 +
 +## My Heading
 +
 +He lay on his armour-like back, and if he lifted his head a little he could see his brown belly, slightly domed and divided by arches into stiff sections. The bedding was hardly able to cover it and seemed ready to slide off any moment.
 +
 +### My Subheading
 +
 +A collection of textile samples lay spread out on the table - Samsa was a travelling salesman - and above it there hung a picture that he had recently cut out of an illustrated magazine and housed in a nice, gilded frame. It showed a lady fitted out with a fur hat and fur boa who sat upright, raising a heavy fur muff that covered the whole of her lower arm towards the viewer. Gregor then turned to look out the window at the dull weather. Drops
 +```
 +
 +Hugo will take this Markdown and create a table of contents from `## Introduction`, `## My Heading`, and `### My Subheading` and then store it in the [page variable][pagevars]`.TableOfContents`.
 +
 +The built-in `.TableOfContents` variables outputs a `<nav id="TableOfContents">` element with a child `<ul>`, whose child `<li>` elements begin with appropriate HTML headings. See [the available settings](/getting-started/configuration-markup/#table-of-contents) to configure what heading levels you want to include in TOC.
 +
 +## Template Example: Basic TOC
 +
 +The following is an example of a very basic [single page template]:
 +
- {{< code file="layouts/partials/toc.html" download="toc.html" >}}
++{{< code file="layout/_default/single.html" >}}
 +{{ define "main" }}
 +<main>
 +    <article>
 +    <header>
 +        <h1>{{ .Title }}</h1>
 +    </header>
 +        {{ .Content }}
 +    </article>
 +    <aside>
 +        {{ .TableOfContents }}
 +    </aside>
 +</main>
 +{{ end }}
 +{{< /code >}}
 +
 +## Template Example: TOC Partial
 +
 +The following is a [partial template][partials] that adds slightly more logic for page-level control over your table of contents. It assumes you are using a `toc` field in your content's [front matter] that, unless specifically set to `false`, will add a TOC to any page with a `.WordCount` (see [Page Variables][pagevars]) greater than 400. This example also demonstrates how to use [conditionals] in your templating:
 +
-     <h2>{{.Title}}</h2>
++{{< code file="layouts/partials/toc.html" >}}
 +{{ if and (gt .WordCount 400 ) (.Params.toc) }}
 +<aside>
 +    <header>
-     {{.TableOfContents}}
++    <h2>{{ .Title }}</h2>
 +    </header>
- With the preceding example, even pages with > 400 words *and* `toc` not set to `false` will not render a table of contents if there are no headings in the page for the `{{.TableOfContents}}` variable to pull from.
++    {{ .TableOfContents }}
 +</aside>
 +{{ end }}
 +{{< /code >}}
 +
 +{{% note %}}
++With the preceding example, even pages with > 400 words *and* `toc` not set to `false` will not render a table of contents if there are no headings in the page for the `{{ .TableOfContents }}` variable to pull from.
 +{{% /note %}}
 +
 +## Usage with AsciiDoc
 +
 +Hugo supports table of contents with AsciiDoc content format.
 +
 +In the header of your content file, specify the AsciiDoc TOC directives necessary to ensure that the table of contents is generated. Hugo will use the generated TOC to populate the page variable `.TableOfContents` in the same way as described for Markdown. See example below:
 +
 +```asciidoc
 +// <!-- Your front matter up here -->
 +:toc:
 +// Set toclevels to be at least your hugo [markup.tableOfContents.endLevel] config key
 +:toclevels: 4
 +
 +== Introduction
 +
 +One morning, when Gregor Samsa woke from troubled dreams, he found himself transformed in his bed into a horrible vermin.
 +
 +== My Heading
 +
 +He lay on his armour-like back, and if he lifted his head a little he could see his brown belly, slightly domed and divided by arches into stiff sections. The bedding was hardly able to cover it and seemed ready to slide off any moment.
 +
 +=== My Subheading
 +
 +A collection of textile samples lay spread out on the table - Samsa was a travelling salesman - and above it there hung a picture that he had recently cut out of an illustrated magazine and housed in a nice, gilded frame. It showed a lady fitted out with a fur hat and fur boa who sat upright, raising a heavy fur muff that covered the whole of her lower arm towards the viewer. Gregor then turned to look out the window at the dull weather. Drops
 +```
 +Hugo will take this AsciiDoc and create a table of contents store it in the page variable `.TableOfContents`, in the same as described for Markdown.
 +
 +[conditionals]: /templates/introduction/#conditionals
 +[front matter]: /content-management/front-matter/
 +[pagevars]: /variables/page/
 +[partials]: /templates/partials/
 +[single page template]: /templates/single-page-templates/
index 8ad0d7f6c142007bd35c255c349526c21c0cba58,0000000000000000000000000000000000000000..fc79ca58ce222e005c7f45aa798d526dfd848878
mode 100644,000000..100644
--- /dev/null
@@@ -1,21 -1,0 +1,20 @@@
- linkTitle: Content Types
 +---
 +title: Content Types
 +description: Hugo is built around content organized in sections.
 +categories: [content management]
 +keywords: [lists, sections, content types, types, organization]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 130
 +toc: true
 +weight: 130
 +aliases: [/content/types]
 +---
 +
 +A **content type** is a way to organize your content. Hugo resolves the content type from either the `type` in front matter or, if not set, the first directory in the file path. E.g. `content/blog/my-first-event.md` will be of type `blog` if no `type` is set.
 +
 +A content type is used to
 +
 +- Determine how the content is rendered. See [Template Lookup Order](/templates/lookup-order/) and [Content Views](https://gohugo.io/templates/views) for more.
 +- Determine which [archetype](/content-management/archetypes/) template to use for new content.
index 739c9c390657cc4ae993ae0006c4cb92c95fa2ab,0000000000000000000000000000000000000000..c65d6c15a7abdd027f12404e23ba0e8ddccef547
mode 100644,000000..100644
--- /dev/null
@@@ -1,311 -1,0 +1,350 @@@
- linkTitle: URL Management
- description: Hugo supports permalinks, aliases, link canonicalization, and multiple options for handling relative vs absolute URLs.
 +---
 +title: URL Management
- ## Permalinks
++description: Control the structure and appearance of URLs through front matter entries and settings in your site configuration.
 +categories: [content management]
 +keywords: [aliases,redirects,permalinks,urls]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 180
 +toc: true
 +weight: 180
 +aliases: [/extras/permalinks/,/extras/aliases/,/extras/urls/,/doc/redirects/,/doc/alias/,/doc/aliases/]
 +---
 +
- The default Hugo target directory for your built website is `public/`. However, you can change this value by specifying a different `publishDir` in your [site configuration][config]. The directories created at build time for a section reflect the position of the content's directory within the `content` folder and namespace matching its layout within the `contentdir` hierarchy.
++## Overview
 +
- The `permalinks` option in your [site configuration][config] allows you to adjust the directory paths (i.e., the URLs) on a per-section basis. This will change where the files are written to and will change the page's internal "canonical" location, such that template references to `.RelPermalink` will honor the adjustments made as a result of the mappings in this option.
++By default, when Hugo renders a page, the resulting URL matches the file path within the `content` directory. For example:
 +
- {{% note "Default Publish and Content Folders" %}}
- These examples use the default values for `publishDir` and `contentDir`; i.e., `public` and `content`, respectively. You can override the default values in your [site's `config` file](/getting-started/configuration/).
++```text
++content/posts/post-1.md → https://example.org/posts/post-1/
++```
++
++You can change the structure and appearance of URLs with front matter values and site configuration options.
++
++## Front matter
++
++### `slug`
++
++Set the `slug` in front matter to override the last segment of the path. The `slug` value does not affect section pages.
++
++{{< code-toggle file="content/posts/post-1.md" copy=false fm=true >}}
++title = 'My First Post'
++slug = 'my-first-post'
++{{< /code-toggle >}}
++
++The resulting URL will be:
++
++```text
++https://example.org/posts/my-first-post/
++```
++
++### `url`
++
++Set the `url` in front matter to override the entire path. Use this with either regular pages or section pages.
++
++With this front matter:
++
++{{< code-toggle file="content/posts/post-1.md" copy=false fm=true >}}
++title = 'My First Article'
++url = '/articles/my-first-article'
++{{< /code-toggle >}}
++
++The resulting URL will be:
++
++```text
++https://example.org/articles/my-first-article/
++```
++
++If you include a file extension:
++
++{{< code-toggle file="content/posts/post-1.md" copy=false fm=true >}}
++title = 'My First Article'
++url = '/articles/my-first-article.html'
++{{< /code-toggle >}}
++
++The resulting URL will be:
++
++```text
++https://example.org/articles/my-first-article.html
++```
++
++In a monolingual site, a `url` value with or without a leading slash is relative to the `baseURL`.
++
++In a multilingual site:
++
++- A `url` value with a leading slash is relative to the `baseURL`.
++- A `url` value without a leading slash is relative to the `baseURL` plus the language prefix.
++
++Site type|Front matter `url`|Resulting URL
++:--|:--|:--
++monolingual|`/about`|`https://example.org/about/`
++monolingual|`about`|`https://example.org/about/`
++multilingual|`/about`|`https://example.org/about/`
++multilingual|`about`|`https://example.org/de/about/`
 +
- For example, if one of your [sections] is called `posts` and you want to adjust the canonical path to be hierarchical based on the year, month, and post title, you could set up the following configurations in YAML and TOML, respectively.
++If you set both `slug` and `url` in front matter, the `url` value takes precedence.
++
++## Site configuration
++
++### Permalinks
++
++In your site configuration, set a URL pattern for regular pages within a top-level section. This is recursive, affecting descendant regular pages.
++
++{{% note %}}
++The  `permalinks` defined in your site configuration do not apply to section pages. To adjust the URL for section pages, set `url` in front matter.
 +{{% /note %}}
 +
- ### Permalinks Configuration Example
++#### Examples {#permalinks-examples}
 +
- {{< code-toggle file="config" copy="false" >}}
- permalinks:
-   posts: /:year/:month/:title/
++With this content structure:
 +
- Only the content under `posts/` will have the new URL structure. For example, the file `content/posts/sample-entry.md` with `date: 2017-02-27T19:20:00-05:00` in its front matter will render to `public/2017/02/sample-entry/index.html` at build time and therefore be reachable at `https://example.com/2017/02/sample-entry/`.
++```text
++content/
++├── posts/
++│   ├── _index.md
++│   ├── post-1.md
++│   └── post-2.md
++└── _index.md
++```
++
++Create a date-based hierarchy, recursively, for regular pages within the `posts` section:
++
++{{< code-toggle file="config" copy=false >}}
++[permalinks]
++  posts = '/posts/:year/:month/:title/'
 +{{< /code-toggle >}}
 +
- To configure the `permalinks` option for pages in the "root" section, use **/** as the key:
++The structure of the published site will be:
++
++```text
++public/
++├── posts/
++│   ├── 2023/
++│   │   └── 03/
++│   │       ├── post-1/
++│   │       │   └── index.html
++│   │       └── post-2/
++│   │           └── index.html
++│   └── index.html
++├── favicon.ico
++└── index.html
++```
 +
- {{< code-toggle file="config" copy="false" >}}
- permalinks:
-   /: /:year/:month/:filename/
++To create a date-based hierarchy for regular pages in the content root:
 +
- If the standard date-based permalink configuration does not meet your needs, you can also format URL segments using [Go time formatting directives](https://pkg.go.dev/time#Time.Format). For example, a URL structure with two digit years and month and day digits without zero padding can be accomplished with:
++{{< code-toggle file="config" copy=false >}}
++[permalinks]
++  '/' = '/:year/:month/:title/'
 +{{< /code-toggle >}}
 +
- {{< code-toggle file="config" copy="false" >}}
- permalinks:
-   posts: /:06/:1/:2/:title/
++{{% note %}}
++A URL pattern defined for the content root is not recursive.
++{{% /note %}}
 +
- You can also configure permalinks of taxonomies with the same syntax, by using the plural form of the taxonomy instead of the section. You will probably only want to use the configuration values `:slug` or `:title`.
++Use the same approach with taxonomies. For example, to omit the taxonomy segment of the URL:
++
++{{< code-toggle file="config" copy=false >}}
++[permalinks]
++  'tags' = '/:title/'
 +{{< /code-toggle >}}
 +
- ### Permalink Configuration Values
++Front matter `url` values take precedence over URL patterns defined in `permalinks`.
 +
- The following is a list of values that can be used in a `permalink` definition in your site `config` file. All references to time are dependent on the content's date.
++#### Tokens
 +
- Additionally, a Go time format string prefixed with `:` may be used.
++Use these tokens when defining the URL pattern. The `date` field in front matter determines the value of time-related tokens.
 +
 +`:year`
 +: the 4-digit year
 +
 +`:month`
 +: the 2-digit month
 +
 +`:monthname`
 +: the name of the month
 +
 +`:day`
 +: the 2-digit day
 +
 +`:weekday`
 +: the 1-digit day of the week (Sunday = 0)
 +
 +`:weekdayname`
 +: the name of the day of the week
 +
 +`:yearday`
 +: the 1- to 3-digit day of the year
 +
 +`: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 content's title
 +
 +`:slug`
 +: the content's slug (or title if no slug is provided in the front matter)
 +
 +`:slugorfilename`
 +: the content's slug (or filename if no slug is provided in the front matter)
 +
 +`:filename`
 +: the content's filename (without extension)
 +
- ## Aliases
- Aliases can be used to create redirects to your page from other URLs.
- Aliases comes in two forms:
- 1. Starting with a `/` meaning they are relative to the `BaseURL`, e.g. `/posts/my-blogpost/`
- 2. They are relative to the `Page` they're defined in, e.g. `my-blogpost` or even something like `../blog/my-blogpost` (new in Hugo 0.55).
- ### Example: Aliases
- Let's assume you create a new piece of content at `content/posts/my-awesome-blog-post.md`. The content is a revision of your previous post at `content/posts/my-original-url.md`. You can create an `aliases` field in the front matter of your new `my-awesome-blog-post.md` where you can add previous paths. The following examples show how to create this field in TOML and YAML front matter, respectively.
- #### TOML Front Matter
++For time-related values, you can also use the layout string components defined in Go's [time package]. For example:
 +
- {{< code file="content/posts/my-awesome-post.md" copy="false" >}}
- +++
- aliases = [
-     "/posts/my-original-url/",
-     "/2010/01/01/even-earlier-url.html"
- ]
- +++
- {{< /code >}}
- #### YAML Front Matter
- {{< code file="content/posts/my-awesome-post.md" copy="false" >}}
- ---
- aliases:
-     - /posts/my-original-url/
-     - /2010/01/01/even-earlier-url.html
- ---
- {{< /code >}}
++[time package]: https://pkg.go.dev/time#pkg-constants
 +
- Now when you visit any of the locations specified in aliases---i.e., _assuming the same site domain_---you'll be redirected to the page they are specified on. For example, a visitor to `example.com/posts/my-original-url/` will be immediately redirected to `example.com/posts/my-awesome-post/`.
++{{< code-toggle file="config" copy=false >}}
++permalinks:
++  posts: /:06/:1/:2/:title/
++{{< /code-toggle >}}
 +
- ### Example: Aliases in Multilingual
++### Appearance
 +
- On [multilingual sites][multilingual], each translation of a post can have unique aliases. To use the same alias across multiple languages, prefix it with the language code.
++The appearance of a URL is either ugly or pretty.
 +
- In `/posts/my-new-post.es.md`:
++Type|Path|URL
++:--|:--|:--
++ugly|content/about.md|`https://example.org/about.html`
++pretty|content/about.md|`https://example.org/about/`
 +
- ```md
- ---
- aliases:
-     - /es/posts/my-original-post/
- ---
- ```
++By default, Hugo produces pretty URLs. To generate ugly URLs, change your site configuration:
 +
- From Hugo 0.55 you can also have page-relative aliases, so `/es/posts/my-original-post/` can be simplified to the more portable `my-original-post/`
++{{< code-toggle file="config" copy=false >}}
++uglyURLs = true
++{{< /code-toggle >}}
 +
- ### How Hugo Aliases Work
++### Post-processing
 +
- When aliases are specified, Hugo creates a directory to match the alias entry. Inside the directory, Hugo creates an `.html` file specifying the canonical URL for the page and the new redirect target.
++Hugo provides two mutually exclusive configuration options to alter URLs _after_ it renders a page.
 +
- For example, a content file at `posts/my-intended-url.md` with the following in the front matter:
++#### Canonical URLs
 +
- ```yml
- ---
- title: My New post
- aliases: [/posts/my-old-url/]
- ---
- ```
++{{% note %}}
++This is a legacy configuration option, superseded by template functions and markdown render hooks, and will likely be [removed in a future release].
 +
- Assuming a `baseURL` of `example.com`, the contents of the auto-generated alias `.html` found at `https://example.com/posts/my-old-url/` will contain the following:
++[removed in a future release]: https://github.com/gohugoio/hugo/issues/4733
++{{% /note %}}
 +
- ```html
- <!DOCTYPE html>
- <html>
-   <head>
-     <title>https://example.com/posts/my-intended-url</title>
-     <link rel="canonical" href="https://example.com/posts/my-intended-url"/>
-     <meta name="robots" content="noindex">
-     <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
-     <meta http-equiv="refresh" content="0; url=https://example.com/posts/my-intended-url"/>
-   </head>
- </html>
++If enabled, Hugo performs a search and replace _after_ it renders the page. It searches for site-relative URLs (those with a leading slash) associated with `action`, `href`, `src`, `srcset`, and `url` attributes. It then prepends the `baseURL` to create absolute URLs.
 +
- The `http-equiv="refresh"` line is what performs the redirect, in 0 seconds in this case. If an end user of your website goes to `https://example.com/posts/my-old-url`, they will now be automatically redirected to the newer, correct URL. The addition of `<meta name="robots" content="noindex">` lets search engine bots know that they should not index your alias page (`https://example.com/posts/my-old-url/`).
- ### Customize
++```text
++<a href="/about"> → <a href="https://example.org/about/">
++<img src="/a.gif"> → <img src="https://example.org/a.gif">
 +```
 +
- You may customize this alias page by creating an `alias.html` template in the
- layouts folder of your site (i.e., `layouts/alias.html`). In this case, the data passed to the template is
- `Permalink`
- : the link to the page being aliased
++This is an imperfect, brute force approach that can affect content as well as HTML attributes. As noted above, this is a legacy configuration option that will likely be removed in a future release.
 +
- `Page`
- : the Page data for the page being aliased
- ### Important Behaviors of Aliases
++To enable:
 +
- 1. Hugo makes no assumptions about aliases. They also do not change based
- on your UglyURLs setting. You need to provide absolute paths to your web root
- and the complete filename or directory.
- 2. Aliases are rendered *before* any content are rendered and therefore will be overwritten by any content with the same location.
++{{< code-toggle file="config" copy=false >}}
++canonifyURLs = true
++{{< /code-toggle >}}
 +
- ## Pretty URLs
++#### Relative URLs
 +
- Hugo's default behavior is to render your content with "pretty" URLs. No non-standard server-side configuration is required for these pretty URLs to work.
++{{% note %}}
++Do not enable this option unless you are creating a serverless site, navigable via the file system.
++{{% /note %}}
 +
- The following demonstrates the concept:
++If enabled, Hugo performs a search and replace _after_ it renders the page. It searches for site-relative URLs (those with a leading slash) associated with `action`, `href`, `src`, `srcset`, and `url` attributes. It then transforms the URL to be relative to the current page.
 +
- ```txt
- content/posts/_index.md
- => example.com/posts/
- content/posts/post-1.md
- => example.com/posts/post-1/
++For example, when rendering `content/posts/post-1`:
 +
- ## Ugly URLs
++```text
++<a href="/about"> → <a href="../../about">
++<img src="/a.gif"> → <img src="../../a.gif">
 +```
 +
- If you would like to have what are often referred to as "ugly URLs" (e.g., example.com/urls.html), set `uglyurls = true` or `uglyurls: true` in your site's `config.toml` or `config.yaml`, respectively. You can also set the `HUGO_UGLYURLS` environment variable to `true` when running `hugo` or `hugo server`.
++This is an imperfect, brute force approach that can affect content as well as HTML attributes. As noted above, do not enable this option unless you are creating a serverless site.
 +
- If you want a specific piece of content to have an exact URL, you can specify this in the [front matter] under the `url` key. The following are examples of the same content directory and what the eventual URL structure will be when Hugo runs with its default behavior.
++To enable:
 +
- See [Content Organization][contentorg] for more details on paths.
++{{< code-toggle file="config" copy=false >}}
++relativeURLs = true
++{{< /code-toggle >}}
 +
- ```txt
- .
- └── content
-     └── about
-     |   └── _index.md  // <- https://example.com/about/
-     ├── posts
-     |   ├── firstpost.md   // <- https://example.com/posts/firstpost/
-     |   ├── happy
-     |   |   └── ness.md  // <- https://example.com/posts/happy/ness/
-     |   └── secondpost.md  // <- https://example.com/posts/secondpost/
-     └── quote
-         ├── first.md       // <- https://example.com/quote/first/
-         └── second.md      // <- https://example.com/quote/second/
- ```
++## Aliases
 +
- Here's the same organization run with `hugo --uglyURLs`:
- ```txt
- .
- └── content
-     └── about
-     |   └── _index.md  // <- https://example.com/about.html
-     ├── posts
-     |   ├── firstpost.md   // <- https://example.com/posts/firstpost.html
-     |   ├── happy
-     |   |   └── ness.md    // <- https://example.com/posts/happy/ness.html
-     |   └── secondpost.md  // <- https://example.com/posts/secondpost.html
-     └── quote
-         ├── first.md       // <- https://example.com/quote/first.html
-         └── second.md      // <- https://example.com/quote/second.html
- ```
++Create redirects from old URLs to new URLs with aliases:
 +
- ## Canonicalization
++- An alias with a leading slash is relative to the `baseURL`
++- An alias without a leading slash is relative to the current directory
 +
- By default, all relative URLs encountered in the input are left unmodified, e.g. `/css/foo.css` would stay as `/css/foo.css`. The `canonifyURLs` field in your site `config` has a default value of `false`.
++### Examples {#alias-examples}
 +
- By setting `canonifyURLs` to `true`, all relative URLs would instead be *canonicalized* using `baseURL`.  For example, assuming you have `baseURL = https://example.com/`, the relative URL `/css/foo.css` would be turned into the absolute URL `https://example.com/css/foo.css`.
++Change the file name of an existing page, and create an alias from the previous URL to the new URL:
 +
- Benefits of canonicalization include fixing all URLs to be absolute, which may aid with some parsing tasks. Note, however, that all modern browsers handle this on the client without issue.
++{{< code-toggle file="content/posts/new-file-name.md" copy=false >}}
++aliases = ['/posts/previous-file-name']
++{{< /code-toggle >}}
 +
- Benefits of non-canonicalization include being able to have scheme-relative resource inclusion; e.g., so that `http` vs `https` can be decided according to how the page was retrieved.
++Each of these directory-relative aliases is equivalent to the site-relative alias above:
 +
- {{% note "`canonifyURLs` default change" %}}
- In the May 2014 release of Hugo v0.11, the default value of `canonifyURLs` was switched from `true` to `false`, which we think is the better default and should continue to be the case going forward. Please verify and adjust your website accordingly if you are upgrading from v0.10 or older versions.
- {{% /note %}}
++- `previous-file-name`
++- `./previous-file-name`
++- `../posts/previous-file-name`
 +
- To find out the current value of `canonifyURLs` for your website, you may use the handy `hugo config` command added in v0.13.
++You can create more than one alias to the current page:
 +
- ```txt
- hugo config | grep -i canon
- ```
++{{< code-toggle file="content/posts/new-file-name.md" copy=false >}}
++aliases = ['previous-file-name','original-file-name']
++{{< /code-toggle >}}
 +
- Or, if you are on Windows and do not have `grep` installed:
++In a multilingual site, use a directory-relative alias, or include the language prefix with a site-relative alias:
 +
- ```txt
- hugo config | FINDSTR /I canon
- ```
++{{< code-toggle file="content/posts/new-file-name.de.md" copy=false >}}
++aliases = ['/de/posts/previous-file-name']
++{{< /code-toggle >}}
 +
- ## Set URL in Front Matter
++### How Aliases Work
 +
- In addition to specifying permalink values in your site configuration for different content sections, Hugo provides even more granular control for individual pieces of content.
++Using the first example above, Hugo generates the following site structure:
 +
- Both `slug` and `url` can be defined in individual front matter. For more information on content destinations at build time, see [Content Organization][contentorg].
++```text
++public/
++├── posts/
++│   ├── new-file-name/
++│   │   └── index.html
++│   ├── previous-file-name/
++│   │   └── index.html
++│   └── index.html
++└── index.html
++```
 +
- From Hugo 0.55, you can use URLs relative to the current site context (the language), which makes it simpler to maintain. For a Japanese translation, both of the following examples would get the same URL:
++The alias from the previous URL to the new URL is a client-side redirect:
 +
- ```markdown
- ---
- title: "Custom URL!"
- url: "/jp/custom/foo"
- ---
- ```
++{{< code file="posts/previous-file-name/index.html" copy=false >}}
++<!DOCTYPE html>
++<html lang="en-us">
++  <head>
++    <title>https://example.org/posts/new-file-name/</title>
++    <link rel="canonical" href="https://example.org/posts/new-file-name/">
++    <meta name="robots" content="noindex">
++    <meta charset="utf-8">
++    <meta http-equiv="refresh" content="0; url=https://example.org/posts/new-file-name/">
++  </head>
++</html>
++{{< /code >}}
 +
- ```markdown
- ---
- title: "Custom URL!"
- url: "custom/foo"
- ---
- ```
++Collectively, the elements in the `head` section:
 +
- ## Relative URLs
++- Tell search engines that the new URL is canonical
++- Tell search engines not to index the previous URL
++- Tell the browser to redirect to the new URL
 +
- By default, all relative URLs are left unchanged by Hugo, which can be problematic when you want to make your site browsable from a local file system.
++Hugo renders alias files before rendering pages. A new page with the previous file name will overwrite the alias, as expected.
 +
- Setting `relativeURLs` to `true` in your [site configuration][config] will cause Hugo to rewrite all relative URLs to be relative to the current content.
++### Customize
 +
- For example, if your `/posts/first/` page contains a link to `/about/`, Hugo will rewrite the URL to `../../about/`.
++Create a new template (`layouts/alias.html`) to customize the content of the alias files. The template receives the following context:
 +
- [config]: /getting-started/configuration/
- [contentorg]: /content-management/organization/
- [front matter]: /content-management/front-matter/
- [multilingual]: /content-management/multilingual/
- [sections]: /content-management/sections/
- [usage]: /getting-started/usage/
++`Permalink`
++: the link to the page being aliased
 +
++`Page`
++: the Page data for the page being aliased
index 5e46ae28754b67c2b8a464375015d1866771e830,0000000000000000000000000000000000000000..cb6ca29660e0dd0e758344e662b36233e0abe725
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,17 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: Contribute to the Hugo Project
 +linktitle: Contribute to Hugo
 +description: Contribute to Hugo development and documentation.
-     parent: "contribute"
 +categories: [contribute]
 +keywords: []
 +menu:
 +  docs:
- weight: 01    #rem
- draft: false
- slug:
++    parent: contribute
 +    weight: 01
- toc: false
++weight: 01
 +aliases: [/tutorials/how-to-contribute-to-hugo/,/community/contributing/]
 +---
 +
 +Hugo relies heavily on the enthusiasm and participation of the open-source community. We need your support in both its development and documentation.
 +
 +Hugo's contribution guidelines are [detailed in a `CONTRIBUTING.md`](https://github.com/gohugoio/hugo/blob/master/CONTRIBUTING.md) in the Hugo source repository on GitHub.
index b11ef09de89c066023e7ee52da76d7091f1825bd,0000000000000000000000000000000000000000..c40b334ba68ee8b0d694c6e5d41a2e1f58edcd75
mode 100644,000000..100644
--- /dev/null
@@@ -1,432 -1,0 +1,431 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
 +---
 +title: Contribute to Hugo Development
 +linktitle: Development
 +description: Hugo relies heavily on contributions from the open source community.
- authors: [digitalcraftsman]
 +categories: [contribute]
 +keywords: [dev,open source]
-     parent: "contribute"
 +menu:
 +  docs:
- sections_weight: 10
++    parent: contribute
 +    weight: 10
 +weight: 10
- {{% note "Additional Questions?" %}}
 +toc: true
 +---
 +
 +## Introduction
 +
 +Hugo is an open-source project and lives by the work of its [contributors]. There are plenty of [open issues][issues], and we need your help to make Hugo even more awesome. You don't need to be a Go guru to contribute to the project's development.
 +
 +## Assumptions
 +
 +This contribution guide takes a step-by-step approach in hopes of helping newcomers. Therefore, we only assume the following:
 +
 +* You are new to Git or open-source projects in general
 +* You are a fan of Hugo and enthusiastic about contributing to the project
 +
- > When you create a repository on GitHub, it exists as a remote repository. You can create a local clone of your repository on your computer and sync between the two locations.
++{{% note %}}
 +If you're struggling at any point in this contribution guide, reach out to the Hugo community in [Hugo's Discussion forum](https://discourse.gohugo.io).
 +{{% /note %}}
 +
 +## Install Go
 +
 +The installation of Go should take only a few minutes. You have more than one option to get Go up and running on your machine.
 +
 +If you are having trouble following the installation guides for Go, check out [Go Bootcamp, which contains setups for every platform][gobootcamp] or reach out to the Hugo community in the [Hugo Discussion Forums][forums].
 +
 +### Install Go From Source
 +
 +[Download the latest stable version of Go][godl] and follow the official [Go installation guide][goinstall].
 +
 +Once you're finished installing Go, let's confirm everything is working correctly. Open a terminal---or command line under Windows--and type the following:
 +
 +```txt
 +go version
 +```
 +
 +You should see something similar to the following written to the console. Note that the version here reflects the most recent version of Go as of the last update for this page:
 +
 +```txt
 +go version go1.12 darwin/amd64
 +```
 +
 +Next, make sure that you set up your `GOPATH` [as described in the installation guide][setupgopath].
 +
 +You can print the `GOPATH` with `echo $GOPATH`. You should see a non-empty string containing a valid path to your Go workspace; for example:
 +
 +```txt
 +/Users/<yourusername>/Code/go
 +```
 +
 +### Install Go with Homebrew
 +
 +If you are a macOS user and have [Homebrew](https://brew.sh/) installed on your machine, installing Go is as simple as the following command:
 +
 +{{< code file="install-go.sh" >}}
 +brew install go
 +{{< /code >}}
 +
 +### Install Go via GVM
 +
 +More experienced users can use the [Go Version Manager][gvm] (GVM). GVM allows you to switch between different Go versions *on the same machine*. If you're a beginner, you probably don't need this feature. However, GVM makes it easy to upgrade to a new released Go version with just a few commands.
 +
 +GVM comes in especially handy if you follow the development of Hugo over a longer period of time. Future versions of Hugo will usually be compiled with the latest version of Go. Sooner or later, you will have to upgrade if you want to keep up.
 +
 +## Create a GitHub Account
 +
 +If you're going to contribute code, you'll need to have an account on GitHub. Go to [www.github.com/join](https://github.com/join) and set up a personal account.
 +
 +## Install Git on Your System
 +
 +You will need to have Git installed on your computer to contribute to Hugo development. Teaching Git is outside the scope of the Hugo docs, but if you're looking for an excellent reference to learn the basics of Git, we recommend the [Git book][gitbook] if you are not sure where to begin. We will include short explanations of the Git commands in this document.
 +
 +Git is a [version control system](https://en.wikipedia.org/wiki/Version_control) to track the changes of source code. Hugo depends on smaller third-party packages that are used to extend the functionality. We use them because we don't want to reinvent the wheel.
 +
 +Go ships with a sub-command called `get` that will download these packages for us when we set up our working environment. The source code of the packages is tracked with Git. `get` will interact with the Git servers of the package hosters in order to fetch all dependencies.
 +
 +Move back to the terminal and check if Git is already installed. Type in `git version` and press enter. You can skip the rest of this section if the command returned a version number. Otherwise [download](https://git-scm.com/downloads) the latest version of Git and follow this [installation guide](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git).
 +
 +Finally, check again with `git version` if Git was installed successfully.
 +
 +### Git Graphical Front Ends
 +
 +There are several [GUI clients](https://git-scm.com/downloads/guis) that help you to operate Git. Not all are available for all operating systems and maybe differ in their usage. Because of this we will document how to use the command-line, since the commands are the same everywhere.
 +
 +### Install Hub on Your System (Optional)
 +
 +Hub is a great tool for working with GitHub. The main site for it is [hub.github.com](https://hub.github.com/). Feel free to install this little Git wrapper.
 +
 +On a Mac, you can install [Hub](https://github.com/github/hub) using [Homebrew](https://brew.sh):
 +
 +```txt
 +brew install hub
 +```
 +
 +Now we'll create an [alias in Bash](https://tldp.org/LDP/abs/html/aliases.html) so that typing `git` actually runs `Hub`:
 +
 +```txt
 +echo "alias git='hub'" >> ~/.bash_profile
 +```
 +
 +Confirm the installation:
 +
 +```txt
 +git version 2.21.0
 +hub version 2.10.0
 +```
 +
 +## Set up your working copy
 +
 +You set up the working copy of the repository locally on your computer. Your local copy of the files is what you'll edit, compile, and end up pushing back to GitHub. The main steps are cloning the repository and creating your fork as a remote.
 +
 +### Clone the repository
 +
 +We assume that you've set up your `GOPATH` (see the section above if you're unsure about this). You should now copy the Hugo repository down to your computer. You'll hear this called "clone the repo". GitHub's [help pages](https://help.github.com/articles/cloning-a-repository/) give us a short explanation:
 +
- > Since Hugo 0.48, Hugo uses the Go Modules support built into Go 1.11 to build.
- > The easiest is to clone Hugo in a directory outside of GOPATH
++{{% note %}}
++When you create a repository on GitHub, it exists as a remote repository. You can create a local clone of your repository on your computer and sync between the two locations.
++{{% /note %}}
 +
 +We're going to clone the [master Hugo repository](https://github.com/gohugoio/hugo). That seems counter-intuitive, since you won't have commit rights on it. But it's required for the Go workflow. You'll work on a copy of the master and push your changes to your own repository on GitHub.
 +
 +So, let's make a new directory and clone that master repository:
 +
 +```txt
 +mkdir $HOME/src
 +cd $HOME/src
 +git clone https://github.com/gohugoio/hugo.git
 +```
 +
- > A fork is a copy of a repository. Forking a repository allows you to freely experiment with changes without affecting the original project.
++Since Hugo 0.48, Hugo uses the Go Modules support built into Go 1.11 to build. The easiest is to clone Hugo in a directory outside of GOPATH
 +
 +And then, install dependencies of Hugo by running the following in the cloned directory:
 +
 +```txt
 +cd $HOME/src/hugo
 +go install
 +```
 +
 +Hugo relies on [mage](https://github.com/magefile/mage) for some convenient build and test targets. If you don't already have it, get it:
 +
 +```txt
 +go install github.com/magefile/mage@latest
 +```
 +
 +### Fork the repository
 +
 +If you're not familiar with this term, GitHub's [help pages](https://help.github.com/articles/fork-a-repo/) provide again a simple explanation:
 +
- {{% /warning %}}
++{{% note %}}
++A fork is a copy of a repository. Forking a repository allows you to freely experiment with changes without affecting the original project.
++{{% /note %}}
 +
 +#### Fork by hand
 +
 +Open the [Hugo repository](https://github.com/gohugoio/hugo) on GitHub and click on the "Fork" button in the top right.
 +
 +![Fork button](/images/contribute/development/forking-a-repository.png)
 +
 +Now open your fork repository on GitHub and copy the remote URL of your fork. You can choose between HTTPS and SSH as protocol that Git should use for the following operations. HTTPS works always [if you're not sure](https://help.github.com/articles/which-remote-url-should-i-use/).
 +
 +![Copy remote url](/images/contribute/development/copy-remote-url.png)
 +
 +Switch back to the terminal and move into the directory of the cloned master repository from the last step.
 +
 +```txt
 +cd $HOME/src/hugo
 +```
 +
 +Now Git needs to know that our fork exists by adding the copied remote url:
 +
 +```txt
 +git remote add <YOUR-GITHUB-USERNAME> <COPIED REMOTE-URL>
 +```
 +
 +#### Fork with Hub
 +
 +Alternatively, you can use the Git wrapper Hub. Hub makes forking a repository easy:
 +
 +```txt
 +git fork
 +```
 +
 +That command will log in to GitHub using your account, create a fork of the repository that you're currently working in, and add it as a remote to your working copy.
 +
 +#### Trust, but verify
 +
 +Let's check if everything went right by listing all known remotes:
 +
 +```txt
 +git remote -v
 +```
 +
 +The output should look similar:
 +
 +```txt
 +digitalcraftsman    git@github.com:digitalcraftsman/hugo.git (fetch)
 +digitalcraftsman    git@github.com:digitalcraftsman/hugo.git (push)
 +origin  https://github.com/gohugoio/hugo (fetch)
 +origin  https://github.com/gohugoio/hugo (push)
 +```
 +
 +## The Hugo Git Contribution Workflow
 +
 +### Create a new branch
 +
 +You should never develop against the "master" branch. The development team will not accept a pull request against that branch. Instead, create a descriptive named branch and work on it.
 +
 +First, you should always pull the latest changes from the master repository:
 +
 +```txt
 +git checkout master
 +git pull
 +```
 +
 +Now we can create a new branch for your additions:
 +
 +```txt
 +git checkout -b <BRANCH-NAME>
 +```
 +
 +You can check on which branch you are with `git branch`. You should see a list of all local branches. The current branch is indicated with a little asterisk.
 +
 +### Contribute to Documentation
 +
 +Perhaps you want to start contributing to the Hugo docs. If so, you can ignore most of the following steps and focus on the `/docs` directory within your newly cloned repository. You can change directories into the Hugo docs using `cd docs`.
 +
 +You can start Hugo's built-in server via `hugo server`. Browse the documentation by entering [http://localhost:1313](http://localhost:1313) in the address bar of your browser. The server automatically updates the page whenever you change content.
 +
 +We have developed a [separate Hugo documentation contribution guide][docscontrib] for more information on how the Hugo docs are built, organized, and improved by the generosity of people like you.
 +
 +### Build Hugo
 +
 +While making changes in the codebase it's a good idea to build the binary to test them:
 +
 +```txt
 +mage hugo
 +```
 +
 +This command generates the binary file at the root of the repository.
 +
 +If you want to install the binary in `$GOPATH/bin`, run
 +
 +```txt
 +mage install
 +```
 +
 +### Test
 +
 +Sometimes changes on the codebase can cause unintended side effects. Or they don't work as expected. Most functions have their own test cases. You can find them in files ending with `_test.go`.
 +
 +Make sure the commands
 +
 +```txt
 +mage -v check
 +```
 +
 +passes.
 +
 +### Formatting
 +
 +The Go code style guide maybe is opinionated but it ensures that the codebase looks the same, regardless who wrote the code. Go comes with its own formatting tool. Let's apply the style guide to our additions:
 +
 +```txt
 +mage fmt
 +```
 +
 +Once you made your additions commit your changes. Make sure that you follow our [code contribution guidelines](https://github.com/gohugoio/hugo/blob/master/CONTRIBUTING.md):
 +
 +```txt
 +# Add all changed files
 +git add --all
 +git commit --message "YOUR COMMIT MESSAGE"
 +```
 +
 +The commit message should describe what the commit does (e.g. add feature XYZ), not how it is done.
 +
 +### Modify commits
 +
 +You noticed some commit messages don't fulfill the code contribution guidelines or you just forget something to add some files? No problem. Git provides the necessary tools to fix such problems. The next two methods cover all common cases.
 +
 +If you are unsure what a command does leave the commit as it is. We can fix your commits later in the pull request.
 +
 +#### Modify the last commit
 +
 +Let's say you want to modify the last commit message. Run the following command and replace the current message:
 +
 +```txt
 +git commit --amend -m"YOUR NEW COMMIT MESSAGE"
 +```
 +
 +Take a look at the commit log to see the change:
 +
 +```txt
 +git log
 +# Exit with q
 +```
 +
 +After making the last commit you may have forgotten something. There is no need to create a new commit. Just add the latest changes and merge them into the intended commit:
 +
 +```txt
 +git add --all
 +git commit --amend
 +```
 +
 +#### Modify multiple commits
 +
 +{{% warning "Be Careful Modifying Multiple Commits"%}}
 +Modifications such as those described in this section can have serious unintended consequences. Skip this section if you're not sure!
- [gobootcamp]: https://www.golangbootcamp.com/book/get_setup
++{{% /note %}}
 +
 +This is a bit more advanced. Git allows you to [rebase](https://git-scm.com/docs/git-rebase) commits interactively. In other words: it allows you to rewrite the commit history.
 +
 +```txt
 +git rebase --interactive @~6
 +```
 +
 +The `6` at the end of the command represents the number of commits that should be modified. An editor should open and present a list of last six commit messages:
 +
 +```txt
 +pick 80d02a1 tpl: Add hasPrefix to the template funcs' "smoke test"
 +pick aaee038 tpl: Sort the smoke tests
 +pick f0dbf2c tpl: Add the other test case for hasPrefix
 +pick 911c35b Add "How to contribute to Hugo" tutorial
 +pick 33c8973 Begin workflow
 +pick 3502f2e Refactoring and typo fixes
 +```
 +
 +In the case above we should merge the last two commits in the commit of this tutorial (`Add "How to contribute to Hugo" tutorial`). You can "squash" commits, i.e. merge two or more commits into a single one.
 +
 +All operations are written before the commit message. Replace "pick" with an operation. In this case `squash` or `s` for short:
 +
 +```txt
 +pick 80d02a1 tpl: Add hasPrefix to the template funcs' "smoke test"
 +pick aaee038 tpl: Sort the smoke tests
 +pick f0dbf2c tpl: Add the other test case for hasPrefix
 +pick 911c35b Add "How to contribute to Hugo" tutorial
 +squash 33c8973 Begin workflow
 +squash 3502f2e Refactoring and typo fixes
 +```
 +
 +We also want to rewrite the commits message of the third last commit. We forgot "docs:" as prefix according to the code contribution guidelines. The operation to rewrite a commit is called `reword` (or `r` as shortcut).
 +
 +You should end up with a similar setup:
 +
 +```txt
 +pick 80d02a1 tpl: Add hasPrefix to the template funcs' "smoke test"
 +pick aaee038 tpl: Sort the smoke tests
 +pick f0dbf2c tpl: Add the other test case for hasPrefix
 +reword 911c35b Add "How to contribute to Hugo" tutorial
 +squash 33c8973 Begin workflow
 +squash 3502f2e Refactoring and typo fixes
 +```
 +
 +Close the editor. It should open again with a new tab. A text is instructing you to define a new commit message for the last two commits that should be merged (aka "squashed"). Save the file with <kbd>CTRL</kbd>+<kbd>S</kbd> and close the editor again.
 +
 +A last time a new tab opens. Enter a new commit message and save again. Your terminal should contain a status message. Hopefully this one:
 +
 +```txt
 +Successfully rebased and updated refs/heads/<BRANCHNAME>.
 +```
 +
 +Check the commit log if everything looks as expected. Should an error occur you can abort this rebase with `git rebase --abort`.
 +
 +### Push commits
 +
 +To push our commits to the fork on GitHub we need to specify a destination. A destination is defined by the remote and a branch name. Earlier, the defined that the remote URL of our fork is the same as our GitHub handle, in my case `digitalcraftsman`. The branch should have the same as our local one. This makes it easy to identify corresponding branches.
 +
 +```txt
 +git push --set-upstream <YOUR-GITHUB-USERNAME> <BRANCHNAME>
 +```
 +
 +Now Git knows the destination. Next time when you to push commits you just need to enter `git push`.
 +
 +If you modified your commit history in the last step GitHub will reject your try to push. This is a safety-feature because the commit history isn't the same and new commits can't be appended as usual. You can enforce this push explicitly with `git push --force`.
 +
 +## Open a pull request
 +
 +We made a lot of progress. Good work. In this step we finally open a pull request to submit our additions. Open the [Hugo master repository](https://github.com/gohugoio/hugo/) on GitHub in your browser.
 +
 +You should find a green button labeled with "New pull request". But GitHub is clever and probably suggests you a pull request like in the beige box below:
 +
 +![Open a pull request](/images/contribute/development/open-pull-request.png)
 +
 +The new page summaries the most important information of your pull request. Scroll down and you find the additions of all your commits. Make sure everything looks as expected and click on "Create pull request".
 +
 +### Accept the contributor license agreement
 +
 +Last but not least you should accept the contributor license agreement (CLA). A new comment should be added automatically to your pull request. Click on the yellow badge, accept the agreement and authenticate yourself with your GitHub account. It just takes a few clicks and only needs to be done once.
 +
 +![Accept the CLA](/images/contribute/development/accept-cla.png)
 +
 +### Automatic builds
 +
 +We use a GitHub Actions workflow to build and test. This is a matrix build across combinations of operating system (macOS, Windows, and Ubuntu) and Go versions. The workflow is triggered by the submission of a pull request. If you are a first-time contributor, the workflow requires approval from a project maintainer.
 +
 +## Where to start?
 +
 +Thank you for reading through this contribution guide. Hopefully, we will see you again soon on GitHub. There are plenty of [open issues][issues] for you to help with.
 +
 +Feel free to [open an issue][newissue] if you think you found a bug or you have a new idea to improve Hugo. We are happy to hear from you.
 +
 +## Additional References for Learning Git and Go
 +
 +* [Codecademy's Free "Learn Git" Course][codecademy] (Free)
 +* [Code School and GitHub's "Try Git" Tutorial][trygit] (Free)
 +* [The Git Book][gitbook] (Free)
 +* [Go Bootcamp][gobootcamp]
 +
 +[codecademy]: https://www.codecademy.com/learn/learn-git
 +[contributors]: https://github.com/gohugoio/hugo/graphs/contributors
 +[docscontrib]: /contribute/documentation/
 +[forums]: https://discourse.gohugo.io
 +[gitbook]: https://git-scm.com/
++[gobootcamp]: https://www.golang-book.com/guides/machine_setup
 +[godl]: https://go.dev/dl/
 +[goinstall]: https://go.dev/doc/install
 +[gvm]: https://github.com/moovweb/gvm
 +[issues]: https://github.com/gohugoio/hugo/issues
 +[newissue]: https://github.com/gohugoio/hugo/issues/new
 +[releases]: /getting-started/
 +[setupgopath]: https://go.dev/doc/code#Workspaces
 +[trygit]: https://try.github.io/levels/1/challenges/1
index 641f86c81d068929cf9611bd4ef01858586f167c,0000000000000000000000000000000000000000..b1fed4cb275f1bed7adce078365d635c7558e3db
mode 100644,000000..100644
--- /dev/null
@@@ -1,331 -1,0 +1,176 @@@
- description: Documentation is an integral part of any open source project. The Hugo docs are as much a work in progress as the source it attempts to cover.
- date: 2017-02-01
- publishdate: 2017-02-01
 +---
 +title: Contribute to the Hugo Docs
 +linktitle: Documentation
-     parent: "contribute"
++description: Documentation is an integral part of any open source project. The Hugo documentation is as much a work in progress as the source it attempts to cover.
 +categories: [contribute]
 +keywords: [docs,documentation,community, contribute]
 +menu:
 +  docs:
- sections_weight: 20
++    parent: contribute
 +    weight: 20
++toc: true
 +weight: 20
- toc: true
 +aliases: [/contribute/docs/]
- ## Create Your Fork
- It's best to make changes to the Hugo docs on your local machine to check for consistent visual styling. Make sure you've created a fork of [hugoDocs](https://github.com/gohugoio/hugoDocs) on GitHub and cloned the repository locally on your machine. For more information, you can see [GitHub's documentation on "forking"][ghforking] or follow along with [Hugo's development contribution guide][hugodev].
- You can then create a separate branch for your additions. Be sure to choose a descriptive branch name that best fits the type of content. The following is an example of a branch name you might use for adding a new website to the showcase:
- ```txt
- git checkout -b jon-doe-showcase-addition
- ```
 +---
 +
- ## Add New Content
++## GitHub workflow
 +
- The Hugo docs make heavy use of Hugo's [archetypes] feature. All content sections in Hugo documentation have an assigned archetype.
++Step 1
++: Fork the [documentation repository].
 +
- Adding new content to the Hugo docs follows the same pattern, regardless of the content section:
++Step 2
++: Clone your fork.
 +
- ```txt
- hugo new <DOCS-SECTION>/<new-content-lowercase>.md
++Step 3
++: Create a new branch with a descriptive name.
 +
- ### Add a New Function
- Once you have cloned the Hugo repository, you can create a new function via the following command. Keep the filename lowercase.
++```bash
++git checkout -b fix/typos-site-variables
 +```
 +
- ```txt
- hugo new functions/newfunction.md
- ```
++Step 4
++: Make changes.
 +
- The archetype for `functions` according to the Hugo docs is as follows:
- {{< code file="archetypes/functions.md" >}}
- {{< readfile file="/archetypes/functions.md">}}
- {{< /code >}}
++Step 5
++: Commit your changes with a descriptive commit message, typically 50 characters or less. Included the "Closes" keyword if your change addresses one or more open [issues].
 +
- #### New Function Required Fields
- Here is a review of the front matter fields automatically generated for you using `hugo new functions/*`:
- ***`title`***
- : this will be auto-populated in all lowercase when you use `hugo new` generator.
- ***`linktitle`***
- : the function's actual casing (e.g., `replaceRE` rather than `replacere`).
- ***`description`***
- : a brief description used to populate the [Functions Quick Reference](/functions/).
- `categories`
- : currently auto-populated with 'functions` for future-proofing and portability reasons only; ignore this field.
- `tags`
- : only if you think it will help end users find other related functions
- `signature`
- : this is a signature/syntax definition for calling the function (e.g., `apply SEQUENCE FUNCTION [PARAM...]`).
++```bash
++git commit -m "Fix typos on site variables page
 +
- `workson`
- : acceptable values include `lists`,`taxonomies`, `terms`, `groups`, and `files`.
++Closes #1234
++Closes #5678"
++```
 +
- `hugoversion`
- : the version of Hugo that will ship with this new function.
++Step 5
++: Push the new branch to your fork of the documentation repository.
 +
- `relatedfuncs`
- : other [templating functions] you feel are related to your new function to help fellow Hugo users.
++Step 6
++: Visit the [documentation repository] and create a pull request (PR).
 +
- `{{.Content}}`
- : an extended description of the new function; examples are not only welcomed but encouraged.
++[documentation repository]: https://github.com/gohugoio/hugoDocs/
++[issues]: https://github.com/gohugoio/hugoDocs/issues
 +
- In the body of your function, expand the short description used in the front matter. Include as many examples as possible, and leverage the Hugo docs [`code` shortcode](#add-code-blocks). If you are unable to add examples but would like to solicit help from the Hugo community, add `needsexample: true` to your front matter.
++Step 7
++: A project maintainer will review your PR, and may request changes. You may delete your branch after the maintainer merges your PR.
 +
- ## Add Code Blocks
++## Including sample code
 +
- Code blocks are crucial for providing examples of Hugo's new features to end users of the Hugo docs. Whenever possible, create examples that you think Hugo users will be able to implement in their own projects.
++{{% note %}}
++Use this syntax to include shortcodes calls within your code samples:
 +
- ### Standard Syntax
++`{{</*/* foo */*/>}}`\
++`{{%/*/* foo */*/%}}`
++{{% /note %}}
 +
- Across many pages on the Hugo docs, the typical triple-back-tick Markdown syntax (```` ``` ````) is used. If you do not want to take the extra time to implement the following code block shortcodes, please use standard GitHub-flavored Markdown. 
++### Fenced code blocks
 +
- ````txt
++Include the language when using a fenced code block.
 +
- {{ range site.RegularPages }}
-   <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
++````text
 +```go-html-template
- ### Code Block Shortcode
- The Hugo documentation comes with a very robust shortcode for adding interactive code blocks.
- {{% note %}}
- With the `code` shortcodes, *you must include triple back ticks and a language declaration*. This was done by design so that the shortcode wrappers were easily added to legacy documentation and will be that much easier to remove if needed in future versions of the Hugo docs.
- {{% /note %}}
- ### `code`
- `code` is the Hugo docs shortcode you'll use most often. `code` requires has only one named parameter: `file`. Here is the pattern:
++{{ if eq $foo "bar" }}
++  {{ print "foo is bar" }}
 +{{ end }}
 +```
 +````
 +
- {{%/* code file="smart/file/name/with/path.html" download="download.html" copy="true" */%}}
- A whole bunch of coding going on up in here!
- {{%/* /code */%}}
++Rendered:
 +
 +```go-html-template
- The following are the arguments passed into `code`:
++{{ if eq $foo "bar" }}
++  {{ print "foo is bar" }}
++{{ end }}
 +```
 +
- ***`file`***
- : the only *required* argument. `file` is needed for styling but also plays an important role in helping users create a mental model around Hugo's directory structure. Visually, this will be displayed as text in the top left of the code block.
++### The code shortcode
 +
- `download`
- : if omitted, this will have no effect on the rendered shortcode. When a value is added to `download`, it's used as the filename for a downloadable version of the code block.
++Use the `code` shortcode to include the file name and a copy-to-clipboard button. This shortcode accepts these optional parameters:
 +
- `copy`
- : a copy button is added automatically to all `code` shortcodes. If you want to keep the filename and styling of `code` but don't want to encourage readers to copy the code (e.g., a "Do not do" snippet in a tutorial), use `copy="false"`.
++copy
++: (`bool`) If `true`, displays a copy-to-clipboard button. Default is `true`.
 +
- #### Example `code` Input
++file
++: (`string`) The file name to display. If you do not provide a `lang` parameter, the file extension determines the code language.
 +
- This example HTML code block tells Hugo users the following:
- 1. This file *could* live in `layouts/_default`, as demonstrated by `layouts/_default/single.html` as the value for `file`.
- 2. This snippet is complete enough to be downloaded and implemented in a Hugo project, as demonstrated by `download="single.html"`.
- ```go-html-template
- {{</* code file="layouts/_default/single.html" download="single.html" */>}}
- {{ define "main" }}
- <main>
-     <article>
-         <header>
-             <h1>{{.Title}}</h1>
-             {{with .Params.subtitle}}
-             <span>{{.}}</span>
-         </header>
-         <div>
-             {{.Content}}
-         </div>
-         <aside>
-             {{.TableOfContents}}
-         </aside>
-     </article>
- </main>
++lang
++: (`string`) The code language. Default is `text`.
 +
- ```
++````text
++{{</* code file="layouts/_default_/single.html" */>}}
++{{ if eq $foo "bar" }}
++  {{ print "foo is bar" }}
 +{{ end }}
 +{{</* /code */>}}
- ##### Example 'code' Display
- The output of this example will render to the Hugo docs as follows:
- {{< code file="layouts/_default/single.html" download="single.html" >}}
- {{ define "main" }}
- <main>
-     <article>
-         <header>
-             <h1>{{.Title}}</h1>
-             {{with .Params.subtitle}}
-             <span>{{.}}</span>
-         </header>
-         <div>
-             {{.Content}}
-         </div>
-         <aside>
-             {{.TableOfContents}}
-         </aside>
-     </article>
- </main>
 +
- <!-- #### Output Code Block
++````
++
++Rendered:
++
++{{< code file="layouts/_default_/single.html" >}}
++{{ if eq $foo "bar" }}
++  {{ print "foo is bar" }}
 +{{ end }}
 +{{< /code >}}
 +
- The `output` shortcode is almost identical to the `code` shortcode but only takes and requires `file`. The purpose of `output` is to show *rendered* HTML and therefore almost always follows another basic code block *or* and instance of the `code` shortcode:
++### The code-toggle shortcode
 +
- ```
- {{%/* output file="posts/my-first-post/index.html" */%}}
- <h1>This is my First Hugo Blog Post</h1>
- <p>I am excited to be using Hugo.</p>
- {{%/* /output */%}}
- ```
++Use the `code-toggle` shortcode to display examples of site configuration, front matter, or data files. This shortcode accepts these optional parameters:
 +
- The preceding `output` example will render as follows to the Hugo docs:
++copy
++: (`bool`) If `true`, displays a copy-to-clipboard button. Default is `true`.
 +
- {{< output file="posts/my-first-post/index.html" >}}
- <h1>This is my First Hugo Blog Post</h1>
- <p>I am excited to be using Hugo.</p>
- {{< /output >}} -->
++file
++: (`string`) The file name to display. Omit the file extension for site configuration and data file examples.
 +
- ## Blockquotes
++fm
++: (`bool`) If `true`, displays the code as front matter. Default is `false`.
 +
- Blockquotes can be added to the Hugo documentation using [typical Markdown blockquote syntax][bqsyntax]:
- ```md
- > Without the threat of punishment, there is no joy in flight.
++#### Site configuration example
 +
- The preceding blockquote will render as follows in the Hugo docs:
++```text
++{{</* code-toggle file="config" */>}}
++baseURL = 'https://example.org'
++languageCode = 'en-US'
++title = "Example Site"
++{{</* /code-toggle */>}}
 +```
 +
- > Without the threat of punishment, there is no joy in flight.
++Rendered:
 +
- However, you can add a quick and easy `<cite>` element (added on the client via JavaScript) by separating your main blockquote and the citation with a hyphen with a single space on each side:
++{{< code-toggle file="config" >}}
++baseURL = 'https://example.org'
++languageCode = 'en-US'
++title = "Example Site"
++{{< /code-toggle >}}
 +
- ```md
- > Without the threat of punishment, there is no joy in flight. - [Kobo Abe](https://en.wikipedia.org/wiki/Kobo_Abe)
++#### Front matter example
 +
- Which will render as follows in the Hugo docs:
- > Without the threat of punishment, there is no joy in flight. - [Kobo Abe][abe]
++```text
++{{</* code-toggle file="content/about.md" fm=true */>}}
++title = "About"
++date = 2023-04-02T12:47:24-07:00
++draft = false
++{{</* /code-toggle */>}}
 +```
 +
- {{% note "Blockquotes `!=` Admonitions" %}}
- Previous versions of Hugo documentation used blockquotes to draw attention to text. This is *not* the [intended semantic use of `<blockquote>`](https://html5doctor.com/cite-and-blockquote-reloaded/). Use blockquotes when quoting. To note or warn your user of specific information, use the admonition shortcodes that follow.
- {{% /note %}}
++Rendered:
 +
- **Admonitions** are common in technical documentation. The most popular is that seen in [reStructuredText Directives][sourceforge]. From the SourceForge documentation:
- > Admonitions are specially marked "topics" that can appear anywhere an ordinary body element can. They contain arbitrary body elements. Typically, an admonition is rendered as an offset block in a document, sometimes outlined or shaded, with a title matching the admonition type. - [SourceForge][sourceforge]
- The Hugo docs contain three admonitions: `note`, `tip`, and `warning`.
++{{< code-toggle file="content/about.md" fm=true >}}
++title = "About"
++date = 2023-04-02T12:47:24-07:00
++draft = false
++{{< /code-toggle >}}
 +
 +## Admonitions
 +
- ### `note` Admonition
- Use the `note` shortcode when you want to draw attention to information subtly. `note` is intended to be less of an interruption in content than is `warning`.
- #### Example `note` Input
- {{< code file="note-with-heading.md" >}}
++Use the `note` shortcode to draw attention to content. Use the `{{%/*  */%}}` notation when calling this shortcode.
 +
- Here is a piece of information I would like to draw your **attention** to.
++```text
 +{{%/* note */%}}
- {{< /code >}}
- #### Example `note` Output
- {{< output file="note-with-heading.html" >}}
- {{% note %}}
- Here is a piece of information I would like to draw your **attention** to.
- {{% /note %}}
- {{< /output >}}
- #### Example `note` Display
++This is **bold** text.
 +{{%/* /note */%}}
- Here is a piece of information I would like to draw your **attention** to.
- {{% /note %}}
- ### `tip` Admonition
- Use the `tip` shortcode when you want to give the reader advice. `tip`, like `note`, is intended to be less of an interruption in content than is `warning`.
- #### Example `tip` Input
- {{< code file="using-tip.md" >}}
- {{%/* tip */%}}
- Here's a bit of advice to improve your productivity with Hugo.
- {{%/* /tip */%}}
- {{< /code >}}
- #### Example `tip` Output
- {{< output file="tip-output.html" >}}
- {{% tip %}}
- Here's a bit of advice to improve your productivity with Hugo.
- {{% /tip %}}
- {{< /output >}}
- #### Example `tip` Display
- {{% tip %}}
- Here's a bit of advice to improve your productivity with Hugo.
- {{% /tip %}}
- ### `warning` Admonition
- Use the `warning` shortcode when you want to draw the user's attention to something important. A good usage example is for articulating breaking changes in Hugo versions, known bugs, or templating "gotchas."
- #### Example `warning` Input
- {{< code file="warning-admonition-input.md" >}}
- {{%/* warning */%}}
- This is a warning, which should be reserved for *important* information like breaking changes.
- {{%/* /warning */%}}
- {{< /code >}}
- #### Example `warning` Output
- {{< output file="warning-admonition-output.html" >}}
- {{% warning %}}
- This is a warning, which should be reserved for *important* information like breaking changes.
- {{% /warning %}}
- {{< /output >}}
- #### Example `warning` Display
- {{% warning %}}
- This is a warning, which should be reserved for *important* information like breaking changes.
- {{% /warning %}}
- {{% note "Pull Requests and Branches" %}}
- Similar to [contributing to Hugo development](/contribute/development/), the Hugo team expects you to create a separate branch/fork when you make your contributions to the Hugo docs.
++```
 +
 +{{% note %}}
- [abe]: https://en.wikipedia.org/wiki/Kobo_Abe
- [archetypes]: /content-management/archetypes/
- [bqsyntax]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#blockquotes
- [charcount]: https://www.lettercount.com/
- [`docs/static/images/showcase/`]: https://github.com/gohugoio/hugo/tree/master/docs/static/images/showcase/
- [ghforking]: https://help.github.com/articles/fork-a-repo/
- [hugodev]: /contribute/development/
- [shortcodeparams]: content-management/shortcodes/#shortcodes-without-markdown
- [sourceforge]: https://docutils.sourceforge.io/docs/ref/rst/directives.html#admonitions
- [templating function]: /functions/
++This is **bold** text.
 +{{% /note %}}
index c515d1fcf7408df44f2f09c7e42416ce7191d0d6,0000000000000000000000000000000000000000..adfc38cc2215cdc5638a7f93228c70d7974d1f52
mode 100644,000000..100644
--- /dev/null
@@@ -1,29 -1,0 +1,24 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
 +---
 +title: Add Your Hugo Theme to the Showcase
 +linktitle: Themes
 +description: If you've built a Hugo theme and want to contribute back to the Hugo Community, share it with us.
- authors: [digitalcraftsman]
 +categories: [contribute]
 +keywords: [contribute,themes,design]
-     parent: "contribute"
 +menu:
 +  docs:
- sections_weight: 30
++    parent: contribute
 +    weight: 30
 +weight: 30
- wip: true
 +aliases: [/contribute/theme/]
 +toc: true
 +---
 +
 +A collection of all themes created by the Hugo community, including screenshots and demos, can be found at [themes.gohugo.io]. Every theme in this list will automatically be added to the theme site.
 +
 +Another great site for Hugo themes is [jamstackthemes.dev/](https://jamstackthemes.dev/ssg/hugo/).
 +
 +### Add Your Theme to the Repo
 +
 +In order to add your Hugo theme to [themes.gohugo.io] please [open a pull request in the theme repository](https://github.com/gohugoio/hugoThemesSiteBuilder). **Please make sure that you've read the theme submission guidelines in the [README](https://github.com/gohugoio/hugoThemesSiteBuilder/blob/main/README.md#hugo-themes) of the hugoThemesSiteBuilder repository.**
 +
 +[themes.gohugo.io]: https://themes.gohugo.io/
index 77cf283faaf00e446731e63cfc381ef643b67d3f,0000000000000000000000000000000000000000..221d7c39299c6459686e2b8d9599f6e07a0a2f38
mode 100644,000000..100644
--- /dev/null
@@@ -1,21 -1,0 +1,14 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
 +---
 +title: Hugo Documentation
 +linktitle: Hugo
 +description: Hugo is the world's fastest static website engine. It's written in Go (aka Golang) and developed by bep, spf13 and friends.
-     parent: "section name"
 +menu:
 +  main:
- weight: 01    #rem
- draft: false
- slug:
- aliases: []
- toc: false
 +    weight: 01
++weight: 01
 +layout: documentation-home
 +---
 +
 +Hugo is the **world's fastest static website engine.** It's written in Go (aka Golang) and developed by [bep](https://github.com/bep), [spf13](https://github.com/spf13) and [friends](https://github.com/gohugoio/hugo/graphs/contributors).
 +
 +Below you will find some of the most common and helpful pages from our documentation.
index 6a6262f755d1fd2ef52b841093345a1bc5138263,0000000000000000000000000000000000000000..f4f4405c66513b3e24070621b6e95e3c371d7644
mode 100644,000000..100644
--- /dev/null
@@@ -1,88 -1,0 +1,81 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: .GetPage
 +description: "Gets a `Page` of a given `path`."
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [sections,lists,indexes]
 +signature: [".GetPage PATH"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
 +---
 +
 +`.GetPage` returns a page of a given `path`. Both `Site` and `Page` implements this method. The `Page` variant will, if given a relative path -- i.e. a path without a leading `/` -- try look for the page relative to the current page.
 +
 +{{% note %}}
 +**Note:** We overhauled and simplified the `.GetPage` API in Hugo 0.45. Before that you needed to provide a `Kind` attribute in addition to the path, e.g. `{{ .Site.GetPage "section" "blog" }}`. This will still work, but is now superfluous.
 +{{% /note %}}
 +
 +
 +```go-html-template
 +{{ with .Site.GetPage "/blog" }}{{ .Title }}{{ end }}
 +```
 +
 +This method will return `nil` when no page could be found, so the above will not print anything if the blog section is not found.
 +
 +To find a regular page in the blog section::
 +
 +```go-html-template
 +{{ with .Site.GetPage "/blog/my-post.md" }}{{ .Title }}{{ end }}
 +```
 +
 +And since `Page` also provides a `.GetPage` method, the above is the same as:
 +
 +```go-html-template
 +{{ with .Site.GetPage "/blog" }}
 +{{ with .GetPage "my-post.md" }}{{ .Title }}{{ end }}
 +{{ end }}
 +```
 +
 +## .GetPage and Multilingual Sites
 +
 +The previous examples have used the full content filename to look up the post. Depending on how you have organized your content (whether you have the language code in the file name or not, e.g. `my-post.en.md`), you may want to do the lookup without extension. This will get you the current language's version of the page:
 +
 +```go-html-template
 +{{ with .Site.GetPage "/blog/my-post" }}{{ .Title }}{{ end }}
 +```
 +
 +## .GetPage Example
 +
 +This code snippet---in the form of a [partial template][partials]---allows you to do the following:
 +
 +1. Grab the index object of your `tags` [taxonomy].
 +2. Assign this object to a variable, `$t`
 +3. Sort the terms associated with the taxonomy by popularity.
 +4. Grab the top two most popular terms in the taxonomy (i.e., the two most popular tags assigned to content.
 +
 +{{< code file="grab-top-two-tags.html" >}}
 +<ul class="most-popular-tags">
 +{{ $t := .Site.GetPage "/tags" }}
 +{{ range first 2 $t.Data.Terms.ByCount }}
 +    <li>{{ . }}</li>
 +{{ end }}
 +</ul>
 +{{< /code >}}
 +
 +## `.GetPage` on Page Bundles
 +
 +If the page retrieved by `.GetPage` is a [Leaf Bundle][leaf_bundle], and you
 +need to get the nested _**page** resources_ in that, you will need to use the
 +methods in `.Resources` as explained in the [Page Resources][page_resources]
 +section.
 +
 +See the [Headless Bundle][headless_bundle] documentation for an example.
 +
 +
 +[partials]: /templates/partials/
 +[taxonomy]: /content-management/taxonomies/
 +[page_kinds]: /templates/section-templates/#page-kinds
 +[leaf_bundle]: /content-management/page-bundles/#leaf-bundles
 +[headless_bundle]: /content-management/page-bundles/#headless-bundle
 +[page_resources]: /content-management/page-resources/
index e4440971fab6863fbd62681585682f950fe4341c,0000000000000000000000000000000000000000..47c914ca4a4c9648e43023650661b9a85a44293f
mode 100644,000000..100644
--- /dev/null
@@@ -1,33 -1,0 +1,32 @@@
- date: 2019-12-18
 +---
 +title: .RenderString
 +description: "Renders markup to HTML."
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- {{  "**Bold Block Markdown**" | $p.RenderString  $optBlock }}
- {{  "/italic org mode/" | $p.RenderString  $optOrg }}
++    parent: functions
 +keywords: [markdown,goldmark,render]
 +signature: [".RenderString MARKUP"]
 +---
 +
 +`.RenderString` is a method on `Page` that renders some markup to HTML using the content renderer defined for that page (if not set in the options).
 +
 +The method takes an optional map argument with these options:
 +
 +display ("inline")
 +: `inline` or `block`. If `inline` (default), surrounding `<p></p>` on short snippets will be trimmed.
 +
 +markup (defaults to the Page's markup)
 +: See identifiers in [List of content formats](/content-management/formats/#list-of-content-formats).
 +
 +Some examples:
 +
 +```go-html-template
 +{{ $optBlock := dict "display" "block" }}
 +{{ $optOrg := dict "markup" "org" }}
 +{{ "**Bold Markdown**" | $p.RenderString }}
++{{ "**Bold Block Markdown**" | $p.RenderString  $optBlock }}
++{{ "/italic org mode/" | $p.RenderString  $optOrg }}
 +```
 +
 +{{< new-in "0.93.0" >}} **Note**: [markdownify](/functions/markdownify/) uses this function in order to support [Render Hooks](/getting-started/configuration-markup/#markdown-render-hooks).
index fa7974685afcea619f82ad4e722fd5c46d1add56,0000000000000000000000000000000000000000..fd45fb6dd2a623cbc7d751f4ea0e677c2f64d853
mode 100644,000000..100644
--- /dev/null
@@@ -1,19 -1,0 +1,14 @@@
- linktitle: Functions Quick Reference
 +---
 +title: Functions Quick Reference
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Comprehensive list of Hugo templating functions, including basic and advanced usage examples.
-     parent: "functions"
- weight: 01    #rem
- draft: false
 +keywords: []
 +menu:
 +  docs:
++    parent: functions
++weight: 01
 +aliases: [/layout/functions/,/templates/functions]
 +---
 +
 +Go templates are lightweight but extensible. Go itself supplies built-in functions, including comparison operators and other basic tools. These are listed in the [Go template documentation][gofuncs]. Hugo has added additional functions to the basic template logic.
 +
 +[gofuncs]: https://golang.org/pkg/text/template/#hdr-Functions
index 116ffa8de548c287076120aa80a0e93fdb433c4f,0000000000000000000000000000000000000000..96a9df833957b9f7e9c3f5ad36a4a220d8d7bf22
mode 100644,000000..100644
--- /dev/null
@@@ -1,45 -1,0 +1,38 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: .AddDate
 +description: Returns the time corresponding to adding the given number of years, months, and days to the given time.Time value.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: [times]
- hugoversion:
++    parent: functions
 +keywords: [dates,time]
 +signature: [".AddDate YEARS MONTHS DAYS"]
- deprecated: false
- aliases: []
 +relatedfuncs: [now]
 +---
 +
 +```go-html-template
 +{{ $d := "2022-01-01" | time.AsTime }}
 +
 +{{ $d.AddDate 0 0 1 | time.Format "2006-01-02" }} --> 2022-01-02
 +{{ $d.AddDate 0 1 1 | time.Format "2006-01-02" }} --> 2022-02-02
 +{{ $d.AddDate 1 1 1 | time.Format "2006-01-02" }} --> 2023-02-02
 +
 +{{ $d.AddDate -1 -1 -1 | time.Format "2006-01-02" }} --> 2020-11-30
 +```
 +
 +{{% note %}}
 +When adding months or years, Hugo normalizes the final `time.Time` value if the resulting day does not exist. For example, adding one month to 31 January produces 2 March or 3 March, depending on the year.
 +
 +See [this explanation](https://github.com/golang/go/issues/31145#issuecomment-479067967) from the Go team.
 +{{% /note %}}
 +
 +```go-html-template
 +{{ $d := "2023-01-31" | time.AsTime }}
 +{{ $d.AddDate 0 1 0 | time.Format "2006-01-02" }} --> 2023-03-03
 +
 +{{ $d := "2024-01-31" | time.AsTime }}
 +{{ $d.AddDate 0 1 0 | time.Format "2006-01-02" }} --> 2024-03-02
 +
 +{{ $d := "2024-02-29" | time.AsTime }}
 +{{ $d.AddDate 1 0 0 | time.Format "2006-01-02" }} --> 2025-03-01
 +```
index 1d513e775f16bf982a382dcbb164de0b974d2321,0000000000000000000000000000000000000000..b608784e3ebf24507b598944f25ebc318732006c
mode 100644,000000..100644
--- /dev/null
@@@ -1,65 -1,0 +1,58 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: after
 +description: "`after` slices an array to only the items after the <em>N</em>th item."
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [iteration]
 +signature: ["after INDEX COLLECTION"]
- deprecated: false
- aliases: []
 +relatedfuncs: [last,first,seq]
- ```
 +---
 +
 +The following shows `after` being used in conjunction with the [`slice` function][slice]:
 +
- {{< code file="layouts/section/articles.html" download="articles.html" >}}
++```go-html-template
 +{{ $data := slice "one" "two" "three" "four" }}
 +{{ range after 2 $data }}
 +    {{ . }}
 +{{ end }}
 +→ ["three", "four"]
 +```
 +
 +## Example of `after` with `first`: 2nd&ndash;4th Most Recent Articles
 +
 +You can use `after` in combination with the [`first` function] and Hugo's [powerful sorting methods][lists]. Let's assume you have a list page at `example.com/articles`. You have 10 articles, but you want your templating for the [list/section page] to show only two rows:
 +
 +1. The top row is titled "Featured" and shows only the most recently published article (i.e. by `publishdate` in the content files' front matter).
 +2. The second row is titled "Recent Articles" and shows only the 2nd- to 4th-most recently published articles.
 +
-     <h2>Featured Article</h2>
-     {{ range first 1 .Pages.ByPublishDate.Reverse }}
-      <header>
-         <h3><a href="{{.Permalink}}">{{.Title}}</a></h3>
-     </header>
-     <p>{{.Description}}</p>
-     {{ end }}
++{{< code file="layouts/section/articles.html" >}}
 +{{ define "main" }}
 +<section class="row featured-article">
-     <h2>Recent Articles</h2>
-     {{ range first 3 (after 1 .Pages.ByPublishDate.Reverse) }}
-         <section class="recent-article">
-             <header>
-                 <h3><a href="{{.Permalink}}">{{.Title}}</a></h3>
-             </header>
-             <p>{{.Description}}</p>
-         </section>
-     {{ end }}
++  <h2>Featured Article</h2>
++  {{ range first 1 .Pages.ByPublishDate.Reverse }}
++  <header>
++      <h3><a href="{{ . Permalink }}">{{ .Title }}</a></h3>
++  </header>
++  <p>{{ .Description }}</p>
++{{ end }}
 +</section>
 +<div class="row recent-articles">
++  <h2>Recent Articles</h2>
++  {{ range first 3 (after 1 .Pages.ByPublishDate.Reverse) }}
++    <section class="recent-article">
++      <header>
++          <h3><a href="{{ .Permalink }}">{{ .Title }}</a></h3>
++      </header>
++      <p>{{ .Description }}</p>
++    </section>
++  {{ end }}
 +</div>
 +{{ end }}
 +{{< /code >}}
 +
 +[`first` function]: /functions/first/
 +[list/section page]: /templates/section-templates/
 +[lists]: /templates/lists/#order-content
 +[slice]: /functions/slice/
index 5530e193bc38e5df2a99b44e77f914f623b302fb,0000000000000000000000000000000000000000..cf04a964007e1862f2f51b0cdf0eabdd6a287ff2
mode 100644,000000..100644
--- /dev/null
@@@ -1,27 -1,0 +1,24 @@@
- date: 2018-10-13
 +---
 +title: anchorize
 +description: Takes a string and sanitizes it the same way as the [`defaultMarkdownHandler`](https://gohugo.io/getting-started/configuration-markup#configure-markup) does for markdown headers.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- hugoversion: "0.39"
- workson: []
++    parent: functions
 +keywords: [markdown,strings]
 +signature: ["anchorize INPUT"]
 +relatedfuncs: [humanize]
 +---
 +
 +If [Goldmark](https://gohugo.io/getting-started/configuration-markup#goldmark) is set as `defaultMarkdownHandler`, the sanitizing logic adheres to the setting [`markup.goldmark.parser.autoHeadingIDType`](https://gohugo.io/getting-started/configuration-markup#goldmark).
 +
 +Since the `defaultMarkdownHandler` and this template function use the same sanitizing logic, you can use the latter to determine the ID of a header for linking with anchor tags.
 +
 +```go-html-template
 +{{ anchorize "This is a header" }} --> "this-is-a-header"
 +{{ anchorize "This is also    a header" }} --> "this-is-also----a-header"
 +{{ anchorize "main.go" }} --> "maingo"
 +{{ anchorize "Article 123" }} --> "article-123"
 +{{ anchorize "<- Let's try this, shall we?" }} --> "--lets-try-this-shall-we"
 +{{ anchorize "Hello, 世界" }} --> "hello-世界"
 +```
index 3e2fc13ccc35677102a374387014755e153f2f38,0000000000000000000000000000000000000000..626bc124251e53c5484b32033fd328a400491640
mode 100644,000000..100644
--- /dev/null
@@@ -1,33 -1,0 +1,29 @@@
- date: 2018-09-14
 +---
 +title: append
 +description: "`append` appends one or more values to a slice and returns the resulting slice."
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion: "0.49"
++    parent: functions
 +keywords: [collections]
 +signature: ["COLLECTION | append VALUE [VALUE]...", "COLLECTION | append COLLECTION"]
- aliases: []
 +relatedfuncs: [last,first,where,slice]
 +---
 +
 +An example appending single values:
 +
 +```go-html-template
 +{{ $s := slice "a" "b" "c" }}
 +{{ $s = $s | append "d" "e" }}
 +{{/* $s now contains a []string with elements "a", "b", "c", "d", and "e" */}}
 +
 +```
 +
 +The same example appending a slice to a slice:
 +
 +```go-html-template
 +{{ $s := slice "a" "b" "c" }}
 +{{ $s = $s | append (slice "d" "e") }}
 +```
 +
 +The `append` function works for all types, including `Pages`.
index 983e2fdb96360d6d63f2f2fc041380a868fce2de,0000000000000000000000000000000000000000..0bc071e7be616d69da4dc6dbf288c3041e80f43f
mode 100644,000000..100644
--- /dev/null
@@@ -1,118 -1,0 +1,105 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: apply
 +description: Given a map, array, or slice, `apply` returns a new slice with a function applied over it.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [advanced]
 +signature: ["apply COLLECTION FUNCTION [PARAM...]"]
- deprecated: false
- draft: false
- aliases: []
 +relatedfuncs: []
- {{< todo >}}
- POTENTIAL NEW CONTENT: see apply/sequence discussion: https://discourse.gohugo.io/t/apply-printf-on-a-sequence/5722;
- {{< /todo >}}
 +---
 +
- ```
- +++
 +`apply` expects at least three parameters, depending on the function being applied.
 +
 +1. The first parameter is the sequence to operate on.
 +2. The second parameter is the name of the function as a string, which must be the name of a valid [Hugo function][functions].
 +3. After that, the parameters to the applied function are provided, with the string `"."` standing in for each element of the sequence the function is to be applied against.
 +
 +Here is an example of a content file with `names:` as a front matter field:
 +
- +++
- ```
++{{< code-toggle file="content/example.md" fm=true copy=false >}}
++title: Example
 +names: [ "Derek Perkins", "Joe Bergevin", "Tanner Linsley" ]
- ```
++{{< /code-toggle >}}
 +
 +You can then use `apply` as follows:
 +
- ```
++```go-html-template
 +{{ apply .Params.names "urlize" "." }}
 +```
 +
 +Which will result in the following:
 +
 +```
 +"derek-perkins", "joe-bergevin", "tanner-linsley"
 +```
 +
 +This is *roughly* equivalent to using the following with [range]:
 +
- {{< code file="layouts/partials/post-tag-list.html" copy="false" >}}
++```go-html-template
 +{{ range .Params.names }}{{ . | urlize }}{{ end }}
 +```
 +
 +However, it is not possible to provide the output of a range to the [`delimit` function][delimit], so you need to `apply` it.
 +
 +If you have `post-tag-list.html` and `post-tag-link.html` as [partials], you *could* use the following snippets, respectively:
 +
- <div class="tags-list">
-   Tags:
-   {{ $len := len . }}
-   {{ if eq $len 1 }}
-     {{ partial "post-tag-link.html" (index . 0) }}
-   {{ else }}
-     {{ $last := sub $len 1 }}
-     {{ range first $last . }}
-       {{ partial "post-tag-link.html" . }},
++{{< code file="layouts/partials/post-tag-list.html" copy=false >}}
 +{{ with .Params.tags }}
-     {{ partial "post-tag-link.html" (index . $last) }}
-   {{ end }}
- </div>
++  <div class="tags-list">
++    Tags:
++    {{ $len := len . }}
++    {{ if eq $len 1 }}
++      {{ partial "post-tag-link.html" (index . 0) }}
++    {{ else }}
++      {{ $last := sub $len 1 }}
++      {{ range first $last . }}
++        {{ partial "post-tag-link.html" . }},
++      {{ end }}
++      {{ partial "post-tag-link.html" (index . $last) }}
 +    {{ end }}
- {{< code file="layouts/partials/post-tag-link.html" copy="false" >}}
++  </div>
 +{{ end }}
 +{{< /code >}}
 +
- ```
++{{< code file="layouts/partials/post-tag-link.html" copy=false >}}
 +<a class="post-tag post-tag-{{ . | urlize }}" href="/tags/{{ . | urlize }}">{{ . }}</a>
 +{{< /code >}}
 +
 +This works, but the complexity of `post-tag-list.html` is fairly high. The Hugo template needs to perform special behavior for the case where there’s only one tag, and it has to treat the last tag as special. Additionally, the tag list will be rendered something like `Tags: tag1 , tag2 , tag3` because of the way that the HTML is generated and then interpreted by a browser.
 +
 +This first version of `layouts/partials/post-tag-list.html` separates all of the operations for ease of reading. The combined and DRYer version is shown next:
 +
-     <div class="tags-list">
-       Tags:
-       {{ $sort := sort . }}
-       {{ $links := apply $sort "partial" "post-tag-link.html" "." }}
-       {{ $clean := apply $links "chomp" "." }}
-       {{ delimit $clean ", " }}
-     </div>
++```go-html-template
 +{{ with .Params.tags }}
- {{< code file="layouts/partials/post-tag-list.html" download="post-tag-list.html" >}}
-     {{ with .Params.tags }}
-     <div class="tags-list">
-       Tags:
-       {{ delimit (apply (apply (sort .) "partial" "post-tag-link.html" ".") "chomp" ".") ", " }}
-     </div>
-     {{ end }}
++  <div class="tags-list">
++    Tags:
++    {{ $sort := sort . }}
++    {{ $links := apply $sort "partial" "post-tag-link.html" "." }}
++    {{ $clean := apply $links "chomp" "." }}
++    {{ delimit $clean ", " }}
++  </div>
 +{{ end }}
 +```
 +
 +Now in the completed version, you can sort the tags, convert the tags to links with `layouts/partials/post-tag-link.html`, [chomp] off stray newlines, and join the tags together in a delimited list for presentation. Here is an even DRYer version of the preceding example:
 +
++{{< code file="layouts/partials/post-tag-list.html" >}}
++{{ with .Params.tags }}
++  <div class="tags-list">
++    Tags:
++    {{ delimit (apply (apply (sort .) "partial" "post-tag-link.html" ".") "chomp" ".") ", " }}
++  </div>
++{{ end }}
 +{{< /code >}}
 +
 +{{% note %}}
 +`apply` does not work when receiving the sequence as an argument through a pipeline.
 +{{% /note %}}
 +
 +[chomp]: /functions/chomp/ "See documentation for the chomp function"
 +[delimit]: /functions/delimit/ "See documentation for the delimit function"
 +[functions]: /functions/ "See the full list of Hugo functions to see what can be passed as an argument to the apply function."
 +[partials]: /templates/partials/
 +[range]: /functions/range/ "Learn the importance of the range function, a fundamental keyword in both Hugo templates and the Go programming language."
index 54ca0440c255c35afb11c87779ccdbd637946ebc,0000000000000000000000000000000000000000..a6de64bd95fc2185acf3a942ffadecf67279a18f
mode 100644,000000..100644
--- /dev/null
@@@ -1,50 -1,0 +1,28 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: base64
 +description: "`base64Encode` and `base64Decode` let you easily decode content with a base64 encoding and vice versa through pipes."
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
- deprecated: false
- draft: false
- aliases: []
++    parent: functions
 +keywords: []
 +relatedfuncs: []
 +signature: ["base64Decode INPUT", "base64Encode INPUT"]
- An example:
- {{< code file="base64-input.html" >}}
- <p>Hello world = {{ "Hello world" | base64Encode }}</p>
- <p>SGVsbG8gd29ybGQ = {{ "SGVsbG8gd29ybGQ=" | base64Decode }}</p>
- {{< /code >}}
- {{< output file="base-64-output.html" >}}
- <p>Hello world = SGVsbG8gd29ybGQ=</p>
- <p>SGVsbG8gd29ybGQ = Hello world</p>
- {{< /output >}}
- You can also pass other data types as arguments to the template function which tries to convert them. The following will convert *42* from an integer to a string because both `base64Encode` and `base64Decode` always return a string.
- ```
- {{ 42 | base64Encode | base64Decode }}
- => "42" rather than 42
 +---
 +
- ```
- {{ $resp := getJSON "https://api.github.com/repos/gohugoio/hugo/readme"  }}
++```go-html-template
++{{ "Hugo" | base64Encode }} → "SHVnbw=="
++{{ "SHVnbw==" | base64Decode }} → "Hugo"
 +```
 +
 +## `base64` with APIs
 +
 +Using base64 to decode and encode becomes really powerful if we have to handle
 +responses from APIs.
 +
++```go-html-template
++{{ $resp := getJSON "https://api.github.com/repos/gohugoio/hugo/readme" }}
 +{{ $resp.content | base64Decode | markdownify }}
 +```
 +
 +The response of the GitHub API contains the base64-encoded version of the [README.md](https://github.com/gohugoio/hugo/blob/master/README.md) in the Hugo repository. Now we can decode it and parse the Markdown. The final output will look similar to the rendered version on GitHub.
index 3e61c8db572ed82b39a93bac5d643cc694210fca,0000000000000000000000000000000000000000..861e7ecc443c6d9ffac3efdbf1f48e2295bef9de
mode 100644,000000..100644
--- /dev/null
@@@ -1,26 -1,0 +1,20 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: chomp
 +toc: true
 +description: Removes any trailing newline characters.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [trim]
 +signature:
 +  - "chomp INPUT"
 +  - "strings.Chomp INPUT"
- deprecated: false
 +relatedfuncs: [truncate]
- ```
- {{chomp "<p>Blockhead</p>\n"}} → "<p>Blockhead</p>"
 +---
 +
 +Useful in a pipeline to remove newlines added by other processing (e.g., [`markdownify`](/functions/markdownify/)).
 +
++```go-html-template
++{{ chomp "<p>Blockhead</p>\n" }} → "<p>Blockhead</p>"
 +```
index 91640d8034aff44f729dbcaff41aec3c900d0d36,0000000000000000000000000000000000000000..e4cf01e77969b5560525d40a9c370e09f6472121
mode 100644,000000..100644
--- /dev/null
@@@ -1,80 -1,0 +1,79 @@@
- aliases: []
 +---
 +title: complement
 +description: Returns the elements of the last collection that are not in any of the others.
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: functions
 +keywords: [collections]
 +signature:
 +- "complement COLLECTION [COLLECTION]..."
 +- "collections.Complement COLLECTION [COLLECTION]..."
 +relatedfuncs: [intersect,symdiff,union]
- {{ $c2 := slice 4 5  }}
 +---
 +
 +To find the elements within `$c3` that do not exist in `$c1` or `$c2`:
 +
 +```go-html-template
 +{{ $c1 := slice 3 }}
++{{ $c2 := slice 4 5 }}
 +{{ $c3 := slice 1 2 3 4 5 }}
 +
 +{{ complement $c1 $c2 $c3 }} → [1 2]
 +```
 +
 +{{% note %}}
 +Make your code simpler to understand by using a [chained pipeline]:
 +
 +[chained pipeline]: https://pkg.go.dev/text/template#hdr-Pipelines
 +{{% /note %}}
 +
 +
 +```go-html-template
 +{{ $c3 | complement $c1 $c2 }} → [1 2]
 +```
 +
 +You can also use the `complement` function with page collections. Let's say your site has five content types:
 +
 +```text
 +content/
 +├── blog/
 +├── books/
 +├── faqs/
 +├── films/
 +└── songs/
 +```
 +
 +To list everything except blog articles (`blog`) and frequently asked questions (`faqs`):
 +
 +```go-html-template
 +{{ $blog := where site.RegularPages "Type" "blog" }}
 +{{ $faqs := where site.RegularPages "Type" "faqs" }}
 +{{ range site.RegularPages | complement $blog $faqs }}
 +  <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
 +{{ end }}
 +```
 +
 +{{% note %}}
 +Although the example above demonstrates the `complement` function, you could use the [`where`] function as well:
 +
 +[`where`]: /functions/where/
 +{{% /note %}} 
 +
 +```go-html-template
 +{{ range where site.RegularPages "Type" "not in" (slice "blog" "faqs") }}
 +  <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
 +{{ end }}
 +```
 +
 +In this example we use the `complement` function to remove [stop words] from a sentence:
 +
 +```go-html-template
 +{{ $text := "The quick brown fox jumps over the lazy dog" }}
 +{{ $stopWords := slice "a" "an" "in" "over" "the" "under" }}
 +{{ $filtered := split $text " " | complement $stopWords }}
 +
 +{{ delimit $filtered " " }} → The quick brown fox jumps lazy dog
 +```
 +
 +[stop words]: https://en.wikipedia.org/wiki/Stop_word
index 30b85325198c9bb32f6c205ed99e48262dbb97ff,0000000000000000000000000000000000000000..8f87563d98d606881443f2411849f8c42de27917
mode 100644,000000..100644
--- /dev/null
@@@ -1,30 -1,0 +1,26 @@@
- title: "cond"
- date: 2017-09-08
 +---
-     parent: "functions"
++title: cond
 +description: "Return one of two arguments, depending on the value of a third argument."
 +categories: [functions]
 +menu:
 +  docs:
- hugoversion: 0.27
++    parent: functions
 +signature: ["cond CONTROL VAR1 VAR2"]
- toc: false
- draft: false
 +relatedfuncs: [default]
- ```
 +---
 +
 +`cond` returns *VAR1* if *CONTROL* is true, or *VAR2* if it is not.
 +
 +Example:
 +
- {{% warning %}}
++```go-html-template
 +{{ cond (eq (len $geese) 1) "goose" "geese" }}
 +```
 +
 +Would emit "goose" if the `$geese` array has exactly 1 item, or "geese" otherwise.
 +
- {{% /warning %}}
++{{% note %}}
 +Whenever you use a `cond` function, *both* variable expressions are *always* evaluated. This means that a usage like `cond false (div 1 0) 27` will throw an error because `div 1 0` will be evaluated *even though the condition is false*.
 +
 +In other words, the `cond` function does *not* provide [short-circuit evaluation](https://en.wikipedia.org/wiki/Short-circuit_evaluation) and does *not* work like a normal [ternary operator](https://en.wikipedia.org/wiki/%3F:) that will pass over the first expression if the condition returns `false`.
++{{% /note %}}
index 01ded4d6fdaff2d339681349053ea474bd49e7e0,0000000000000000000000000000000000000000..0d89af857940ba8e44a21b34946f7ff011a7d79d
mode 100644,000000..100644
--- /dev/null
@@@ -1,28 -1,0 +1,22 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: countrunes
 +description: Determines the number of runes in a string excluding any whitespace.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [counting, word count]
 +signature:
 +  - "countrunes INPUT"
 +  - "strings.CountRunes INPUT"
- deprecated: false
 +relatedfuncs: []
- ```
 +---
 +
 +In contrast with `countwords` function, which counts every word in a string, the `countrunes` function determines the number of runes in the content and excludes any whitespace. This has specific utility if you are dealing with CJK-like languages.
 +
++```go-html-template
 +{{ "Hello, 世界" | countrunes }}
 +<!-- outputs a content length of 8 runes. -->
 +```
 +
 +[pagevars]: /variables/page/
index 17f0fa5c25dcdb85548e70a98c8c411aaec3c2da,0000000000000000000000000000000000000000..33dcbcaef50dcfedd9304b8dcc18098ecc69d206
mode 100644,000000..100644
--- /dev/null
@@@ -1,27 -1,0 +1,21 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: countwords
 +description: Counts the number of words in a string.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [counting, word count]
 +signature: ["countwords INPUT"]
- deprecated: false
 +relatedfuncs: [countrunes]
- ```
 +---
 +
 +The template function works similar to the [.WordCount page variable][pagevars].
 +
++```go-html-template
 +{{ "Hugo is a static site generator." | countwords }}
 +<!-- outputs a content length of 6 words.  -->
 +```
 +
 +
 +[pagevars]: /variables/page/
index dddf7a9aafe8ca0d9ac736b9876a0193c0dc1a5d,0000000000000000000000000000000000000000..9bcfff26fe8b3f198088cadfbbd005269491a13b
mode 100644,000000..100644
--- /dev/null
@@@ -1,15 -1,0 +1,14 @@@
-     parent: "functions"
 +---
 +title: crypto.FNV32a
 +description: Returns the FNV (Fowler–Noll–Vo) 32 bit hash of a given string.
 +categories: [functions]
 +menu:
 +  docs:
- aliases: []
++    parent: functions
 +keywords: [crypto hash FNV32 Fowler-Noll-Vo]
 +signature: ["crypto.FNV32a STRING"]
 +---
 +
 +This function calculates the 32 bit [FNV1a hash](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function#FNV-1a_hash) of a given string according to the [specification](https://datatracker.ietf.org/doc/html/draft-eastlake-fnv-12):
 +
 +    {{ crypto.FNV32a "Hello world" }} → 1498229191
index 210913b8717b2ce81b187cd4b2e42d606aaca095,0000000000000000000000000000000000000000..ddfb61296967547db0ef93227fcd25ed9c8e52f5
mode 100644,000000..100644
--- /dev/null
@@@ -1,55 -1,0 +1,49 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: time.Format
 +description: Converts a date/time to a localized string.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [dates,time,strings]
 +signature:
 +  - "time.Format LAYOUT INPUT"
 +  - "dateFormat LAYOUT INPUT"
- deprecated: false
 +relatedfuncs: [Format,now,Unix,time]
 +---
 +
 +`time.Format` (alias `dateFormat`) converts either a `time.Time` object (e.g. `.Date`) or a timestamp string `INPUT` into the format specified by the `LAYOUT` string.
 +
 +```go-html-template
 +{{ time.Format "Monday, Jan 2, 2006" "2015-01-21" }} → "Wednesday, Jan 21, 2015"
 +```
 +
 +`time.Format` returns a localized string for the current language.
 +
 +The `LAYOUT` string can be either:
 +
 +* [Go’s Layout String](/functions/format/#gos-layout-string) to learn about how the `LAYOUT` string has to be formatted. There are also some useful examples.
 +* A custom Hugo layout identifier (see full list below)
 +
 +See the [`time` function](/functions/time/) to convert a timestamp string to a Go `time.Time` type value.
 +
 +
 +## Date/time formatting layouts
 +
 +Go's date layout strings can be hard to reason about, especially with multiple languages. You can alternatively use some predefined layout identifiers that will output localized dates or times:
 +
 +```go-html-template
 +{{ .Date | time.Format ":date_long" }}
 +```
 +
 +The full list of custom layouts with examples for English:
 +
 +* `:date_full` => `Wednesday, June 6, 2018`
 +* `:date_long` => `June 6, 2018`
 +* `:date_medium` => `Jun 6, 2018`
 +* `:date_short` => `6/6/18`
 +
 +* `:time_full` => `2:09:37 am UTC`
 +* `:time_long` => `2:09:37 am UTC`
 +* `:time_medium` => `2:09:37 am`
 +* `:time_short` => `2:09 am`
index c4cc166a78258bbc2b868f3aad96726c7844ad78,0000000000000000000000000000000000000000..b0e517366305a7b04fb3dc856d2f07117aecfe2f
mode 100644,000000..100644
--- /dev/null
@@@ -1,91 -1,0 +1,83 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: default
 +description: Allows setting a default value that can be returned if a first value is not set.
 +qref: "Returns a default value if a value is not set when checked."
-     parent: "functions"
 +keywords: [defaults]
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +toc:
 +signature: ["default DEFAULT INPUT"]
- deprecated: false
- draft: false
- aliases: []
 +relatedfuncs: []
- ```
- {{ index .Params "font" | default "Roboto" }}
- {{ default "Roboto" (index .Params "font") }}
 +---
 +
 +`default` checks whether a given value is set and returns a default value if it is not. *Set* in this context means different things depending on the data type:
 +
 +* non-zero for numeric types and times
 +* non-zero length for strings, arrays, slices, and maps
 +* any boolean or struct value
 +* non-nil for any other types
 +
 +`default` function examples reference the following content page:
 +
 +{{< code file="content/posts/default-function-example.md" >}}
 +---
 +title: Sane Defaults
 +seo_title:
 +date: 2017-02-18
 +font:
 +oldparam: The default function helps make your templating DRYer.
 +newparam:
 +---
 +{{< /code >}}
 +
 +`default` can be written in more than one way:
 +
- {{< code file="variable-as-default-value.html" nocopy="true" >}}
- {{$old := .Params.oldparam }}
++```go-html-template
++{{ .Params.font | default "Roboto" }}
++{{ default "Roboto" .Params.font }}
 +```
 +
 +Both of the above `default` function calls return `Roboto`.
 +
 +A `default` value, however, does not need to be hard coded like the previous example. The `default` value can be a variable or pulled directly from the front matter using dot notation:
 +
- {{< /code >}}
++```go-html-template
++{{ $old := .Params.oldparam }}
 +<p>{{ .Params.newparam | default $old }}</p>
- ```
++```
 +
 +Which would return:
 +
- {{< code file="dot-notation-default-value.html" >}}
++```html
 +<p>The default function helps make your templating DRYer.</p>
 +```
 +
 +And then using dot notation
 +
- {{< /code >}}
++```go-html-template
 +<title>{{ .Params.seo_title | default .Title }}</title>
- {{< output file="dot-notation-default-return-value.html" >}}
++```
 +
 +Which would return
 +
- {{< /output >}}
++```html
 +<title>Sane Defaults</title>
- {{< code file="if-instead-of-default.html" nocopy="true" >}}
- <title>{{if .Params.seo_title}}{{.Params.seo_title}}{{else}}{{.Title}}{{end}}</title>
++```
 +
 +The following have equivalent return values but are far less terse. This demonstrates the utility of `default`:
 +
 +Using `if`:
 +
- {{< /code >}}
++```go-html-template
++<title>{{ if .Params.seo_title }}{{ .Params.seo_title }}{{ else }}{{ .Title }}{{ end }}</title>
 +=> Sane Defaults
- {{< code file="with-instead-of-default.html" nocopy="true" >}}
- <title>{{with .Params.seo_title}}{{.}}{{else}}{{.Title}}{{end}}</title>
++```
 +
 +Using `with`:
 +
- {{< /code >}}
++```go-html-template
++<title>{{ with .Params.seo_title }}{{ . }}{{ else }}{{ .Title }}{{ end }}</title>
 +=> Sane Defaults
++```
index 533af0523520a62312bb014b36c231eb030a31bf,0000000000000000000000000000000000000000..cc0293526da46907b95790f9a5ab14bc2d3582aa
mode 100644,000000..100644
--- /dev/null
@@@ -1,62 -1,0 +1,31 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: delimit
 +description: Loops through any array, slice, or map and returns a string of all the values separated by a delimiter.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- toc: false
- signature: ["delimit COLLECTION DELIMIT LAST"]
- workson: [lists,taxonomies,terms]
- hugoversion:
++    parent: functions
 +keywords: [iteration]
- deprecated: false
- draft: false
- aliases: []
++signature: ["delimit COLLECTION DELIMITER [LAST]"]
 +relatedfuncs: []
- `delimit` called in your template takes the form of
 +---
 +
- {{ delimit array/slice/map delimiter optionallastdelimiter}}
- ```
- `delimit` loops through any array, slice, or map and returns a string of all the values separated by a delimiter, the second argument in the function call. There is an optional third parameter that lets you choose a different delimiter to go between the last two values in the loop.
- To maintain a consistent output order, maps will be sorted by keys and only a slice of the values will be returned.
- The examples of `delimit` that follow all use the same front matter:
- {{< code file="delimit-example-front-matter.toml" nocopy="true" >}}
- +++
- title: I love Delimit
- tags: [ "tag1", "tag2", "tag3" ]
- +++
- {{< /code >}}
++Delimit a slice:
 +
++```go-html-template
++{{ $s := slice "b" "a" "c" }}
++{{ delimit $s ", " }} → "b, a, c"
++{{ delimit $s ", " " and "}} → "b, a and c"
 +```
- {{< code file="delimit-page-tags-input.html" >}}
- <p>Tags: {{ delimit .Params.tags ", " }}</p>
- {{< /code >}}
 +
- {{< output file="delimit-page-tags-output.html" >}}
- <p>Tags: tag1, tag2, tag3</p>
- {{< /output >}}
++Delimit a map:
 +
- Here is the same example but with the optional "last" delimiter:
- {{< code file="delimit-page-tags-final-and-input.html" >}}
- Tags: {{ delimit .Params.tags ", " ", and " }}
- {{< /code >}}
- {{< output file="delimit-page-tags-final-and-output.html" >}}
- <p>Tags: tag1, tag2, and tag3</p>
- {{< /output >}}
- [lists]: /templates/lists/
- [taxonomies]: /templates/taxonomy-templates/#taxonomy-list-templates
- [terms]: /templates/taxonomy-templates/#terms-list-templates
++{{% note %}}
++The `delimit` function sorts maps by key, returning the values.
++{{% /note %}}
 +
++```go-html-template
++{{ $m := dict "b" 2 "a" 1 "c" 3 }}
++{{ delimit $m ", " }} → "1, 2, 3"
++{{ delimit $m ", " " and "}} → "1, 2 and 3"
++```
index dd1e2cd5b07e571740e61c062e3aa347b3725ca0,0000000000000000000000000000000000000000..27a786bec60d89409d56109b9418a11181296ef9
mode 100644,000000..100644
--- /dev/null
@@@ -1,48 -1,0 +1,42 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
 +---
 +title: dict
 +description: Creates a dictionary from a list of key and value pairs.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [dictionary]
 +signature: ["dict KEY VALUE [KEY VALUE]..."]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- {{< code file="layouts/partials/svgs/external-links.svg" download="external-links.svg" >}}
 +---
 +
 +`dict` is especially useful for passing more than one value to a partial template.
 +
 +Note that the `key` can be either a `string` or a `string slice`. The latter is useful to create a deeply nested structure, e.g.:
 +
 +```go-text-template
 +{{ $m := dict (slice "a" "b" "c") "value" }}
 +```
 +
 +## Example: Using `dict` to pass multiple values to a `partial`
 +
 +The partial below creates an SVG and expects `fill`, `height` and `width` from the caller:
 +
 +### Partial definition
 +
++{{< code file="layouts/partials/svgs/external-links.svg" >}}
 +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
 +fill="{{ .fill }}" width="{{ .width }}" height="{{ .height }}" viewBox="0 0 32 32" aria-label="External Link">
 +<path d="M25.152 16.576v5.696q0 2.144-1.504 3.648t-3.648 1.504h-14.848q-2.144 0-3.648-1.504t-1.504-3.648v-14.848q0-2.112 1.504-3.616t3.648-1.536h12.576q0.224 0 0.384 0.16t0.16 0.416v1.152q0 0.256-0.16 0.416t-0.384 0.16h-12.576q-1.184 0-2.016 0.832t-0.864 2.016v14.848q0 1.184 0.864 2.016t2.016 0.864h14.848q1.184 0 2.016-0.864t0.832-2.016v-5.696q0-0.256 0.16-0.416t0.416-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416zM32 1.152v9.12q0 0.48-0.352 0.8t-0.8 0.352-0.8-0.352l-3.136-3.136-11.648 11.648q-0.16 0.192-0.416 0.192t-0.384-0.192l-2.048-2.048q-0.192-0.16-0.192-0.384t0.192-0.416l11.648-11.648-3.136-3.136q-0.352-0.352-0.352-0.8t0.352-0.8 0.8-0.352h9.12q0.48 0 0.8 0.352t0.352 0.8z"></path>
 +</svg>
 +{{< /code >}}
 +
 +### Partial call
 +
 +The `fill`, `height` and `width` values can be stored in one object with `dict` and passed to the partial:
 +
 +{{< code file="layouts/_default/list.html" >}}
 +{{ partial "svgs/external-links.svg" (dict "fill" "#01589B" "width" 10 "height" 20 ) }}
 +{{< /code >}}
 +
 +[partials]: /templates/partials/
index bf771c0a98c190e9ed8deeb237327e2261ba74cb,0000000000000000000000000000000000000000..4dc365ae5bdbf7b60d5026b606a287094c192254
mode 100644,000000..100644
--- /dev/null
@@@ -1,32 -1,0 +1,31 @@@
-     parent: "functions"
 +---
 +title: duration
 +description: Returns a `time.Duration` structure, using the given time unit and duration number.
 +categories: [functions]
 +menu:
 +  docs:
- aliases: []
++    parent: functions
 +keywords: [time duration]
 +signature: ["duration TIME_UNIT DURATION_NUMBER"]
 +---
 +
 +`time.Duration` converts a given number into a [`time.Duration`](https://pkg.go.dev/time#Duration) structure so you can access its fields. E.g. you can perform [time operations](https://pkg.go.dev/time#Duration) on the returned `time.Duration` value:
 +
 +    {{ printf "There are %.0f seconds in one day." (duration "hour" 24).Seconds }}
 +    <!-- Output: There are 86400 seconds in one day. -->
 +
 +Make your code simpler to understand by using a [chained pipeline](https://pkg.go.dev/text/template#hdr-Pipelines):
 +
 +    {{ mul 7.75 60 | duration "minute" }} → 7h45m0s
 +    {{ mul 120 60 | mul 1000 | duration "millisecond" }} → 2h0m0s
 +
 +You have to specify a time unit for the number given to the function. Valid time units are:
 +
 +Duration|Valid time units
 +:--|:--
 +hours|`hour`, `h`
 +minutes|`minute`, `m`
 +seconds|`second`, `s`
 +milliseconds|`millisecond`, `ms`
 +microseconds|`microsecond`, `us`, `µs`
 +nanoseconds|`nanosecond`, `ns`
index 515b5c449a02120e51659308f22b75d4a06907f1,0000000000000000000000000000000000000000..840acf51c1d5f44069d858d4a4b33d656ad1ddb0
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,16 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: echoParam
 +description: Prints a parameter if it is set.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: []
 +signature: ["echoParam DICTIONARY KEY"]
- deprecated: false
- draft: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
 +
++```go-html-template
 +{{ echoParam .Params "project_url" }}
 +```
index a323470b774319e8b4939af8f847a0fb4cee608f,0000000000000000000000000000000000000000..45753af134cabea304af959e3ae40820f57f3226
mode 100644,000000..100644
--- /dev/null
@@@ -1,31 -1,0 +1,25 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: emojify
 +description: Runs a string through the Emoji emoticons processor.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings,emojis]
 +signature: ["emojify INPUT"]
- deprecated: false
 +relatedfuncs: []
 +---
 +
 +`emojify` runs a passed string through the Emoji emoticons processor.
 +
 +See the [Emoji cheat sheet][emojis] for available emoticons.
 +
 +The `emojify` function can be called in your templates but not directly in your content files by default. For emojis in content files, set `enableEmoji` to `true` in your site's [configuration][config]. Then you can write emoji shorthand directly into your content files; e.g. <code>I :</code><code>heart</code><code>: Hugo!</code>:
 +
 +I :heart: Hugo!
 +
 +
 +[config]: /getting-started/configuration/
 +[emojis]: https://www.webfx.com/tools/emoji-cheat-sheet/
 +[sc]: /templates/shortcode-templates/
 +[scsource]: https://github.com/gohugoio/hugo/tree/master/docs/layouts/shortcodes
index d342a628a49576ce9b2617d5b8b3a267c1c2eda5,0000000000000000000000000000000000000000..98eca1aa503de6a3190fbef5c24e0ccff9137cae
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,16 @@@
- linktitle: eq
 +---
 +title: eq
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Returns the boolean truth of arg1 == arg2.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [operators,logic]
 +signature: ["eq ARG1 ARG2"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
 +
++```go-html-template
 +{{ if eq .Section "blog" }}current{{ end }}
 +```
index 04fd0edb0e1013ff1358a660bfa79a6b00e56e69,0000000000000000000000000000000000000000..b3e0fd2802432a83d8ebc40ce17587d58c4c3dd5
mode 100644,000000..100644
--- /dev/null
@@@ -1,51 -1,0 +1,45 @@@
- date: 2017-09-30
- publishdate: 2017-09-30
- lastmod: 2017-09-30
 +---
 +title: errorf and warnf
 +description: Log ERROR or WARNING from the templates.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings, log, error]
 +signature: ["errorf FORMAT INPUT"]
- deprecated: false
 +relatedfuncs: [printf]
- ```
 +---
 +
 +`errorf` or `warnf` will evaluate a format string, then output the result to the ERROR or WARNING log (and only once per error message to avoid flooding the log).
 +
 +Any ERROR will also cause the build to fail (the `hugo` command will `exit -1`).
 +
 +Both functions return an empty string, so the messages are only printed to the console.
 +
- ```
++```go-html-template
 +{{ errorf "Failed to handle page %q" .Path }}
 +```
 +
- ```
++```go-html-template
 +{{ warnf "You should update the shortcodes in %q" .Path }}
 +```
 +
 +Note that `errorf`, `erroridf`, and `warnf` support all the formatting verbs of the [fmt](https://pkg.go.dev/fmt) package.
 +
 +## Suppress errors
 +
 +Sometimes it may make sense to let the user suppress an ERROR and make the build succeed.
 +
 +You can do this by using the `erroridf` function. This functions takes an error ID as the first argument.
 +
++```go-html-template
 +{{ erroridf "my-custom-error" "You should consider fixing this." }}
 +```  
 +
 +This will produce:
 +
 +```
 +ERROR 2021/06/07 17:47:38 You should consider fixing this.
 +If you feel that this should not be logged as an ERROR, you can ignore it by adding this to your site config:
 +ignoreErrors = ["my-custom-error"]
 +```
index 2175453de7fc8e6b5c44683015b0efcba78321a0,0000000000000000000000000000000000000000..5a365b7c14bbf56d4a29cceeafecd30cfa9ddb80
mode 100644,000000..100644
--- /dev/null
@@@ -1,42 -1,0 +1,34 @@@
- title: "fileExists"
- linktitle: "fileExists"
- date: 2017-08-31T22:38:22+02:00
 +---
- publishdate: 2017-08-31T22:38:22+02:00
- lastmod: 2021-11-26
++title: fileExists
 +description: Checks for file or directory existence.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +signature: ["os.FileExists PATH","fileExists PATH"]
- deprecated: false
- aliases: []
 +relatedfuncs: ['os.ReadDir','os.ReadFile','os.Stat']
- The `os.FileExists` function attempts to resolve the path relative to the root of your project directory. If a matching file or directory is not found, it will attempt to resolve the path relative to the [`contentDir`]({{< relref "getting-started/configuration#contentdir">}}). A leading path separator (`/`) is optional.
 +---
++The `os.FileExists` function attempts to resolve the path relative to the root of your project directory. If a matching file or directory is not found, it will attempt to resolve the path relative to the [`contentDir`](/getting-started/configuration#contentdir). A leading path separator (`/`) is optional.
 +
 +With this directory structure:
 +
 +```text
 +content/
 +├── about.md
 +├── contact.md
 +└── news/
 +    ├── article-1.md
 +    └── article-2.md
 +```
 +
 +The function returns these values:
 +
 +```go-html-template
 +{{ os.FileExists "content" }} --> true
 +{{ os.FileExists "content/news" }} --> true
 +{{ os.FileExists "content/news/article-1" }} --> false
 +{{ os.FileExists "content/news/article-1.md" }} --> true
 +{{ os.FileExists "news" }} --> true
 +{{ os.FileExists "news/article-1" }} --> false
 +{{ os.FileExists "news/article-1.md" }} --> true
 +```
index 13d43f896ac31ff76941e63e5be98080d30d4dfe,0000000000000000000000000000000000000000..0b8978ec6af1b640aad9146768b954db6541d46f
mode 100644,000000..100644
--- /dev/null
@@@ -1,59 -1,0 +1,48 @@@
- relatedfuncs: [replaceRE]
- aliases: []
 +---
 +title: findRE
 +description: Returns a slice of strings that match the regular expression.
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: functions
 +keywords: [regex]
 +signature:
 +  - "findRE PATTERN INPUT [LIMIT]"
 +  - "strings.FindRE PATTERN INPUT [LIMIT]"
- By default, the `findRE` function finds all matches. You can limit the number of matches with an optional LIMIT parameter.
++relatedfuncs: [findRESubmatch, replaceRE]
 +---
- The syntax of the regular expression is the same general syntax used by Perl, Python, and other languages. More precisely, it is the syntax accepted by [RE2] except for `\C`.
++By default, `findRE` finds all matches. You can limit the number of matches with an optional LIMIT parameter.
 +
 +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.
 +
- ## findRESubmatch
- In Hugo 0.110.0 we added a variant of `findRe` that returns a slice of strings holding the text of the leftmost match of the regular expression in s and the matches, if any, of its subexpressions.
- This:
- ```go-html-template
- {{ findRESubmatch §§<a\s*href="(.+?)">(.+?)</a>§§ §§<li><a href="#foo">Foo</a></li> <li><a href="#bar">Bar</a></li>§§ | print | safeHTML }}
- ```
- Will print:
- ```
- [[<a href=\"#foo\">Foo</a> #foo Foo] [<a href=\"#bar\">Bar</a> #bar Bar]]
- ```
- {{< new-in "0.110.0" >}}
- [RE2]: https://github.com/google/re2/wiki/Syntax
- [string literal]: https://go.dev/ref/spec#String_literals
++[string literal]: https://go.dev/ref/spec#String_literals
++
++This function uses the [RE2] regular expression library. See the [RE2 syntax documentation] for details. Note that the RE2 `\C` escape sequence is not supported.
++
++[RE2]: https://github.com/google/re2/
++[RE2 syntax documentation]: https://github.com/google/re2/wiki/Syntax/
++
++{{% note %}}
++The RE2 syntax is a subset of that accepted by [PCRE], roughly speaking, and with various [caveats].
++
++[caveats]: https://swtch.com/~rsc/regexp/regexp3.html#caveats
++[PCRE]: https://www.pcre.org/
++{{% /note %}}
 +
 +This example returns a slice of all second level headings (`h2` elements) within the rendered `.Content`:
 +
 +```go-html-template
 +{{ findRE `(?s)<h2.*?>.*?</h2>` .Content }}
 +```
 +
 +The `s` flag causes `.` to match `\n` as well, allowing us to find an `h2` element that contains newlines.
 +
 +To limit the number of matches to one:
 +
 +```go-html-template
 +{{ findRE `(?s)<h2.*?>.*?</h2>` .Content 1 }}
 +```
 +
 +{{% note %}}
 +You can write and test your regular expression using [regex101.com](https://regex101.com/). Be sure to select the Go flavor before you begin.
 +{{% /note %}}
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e1085a9c9cc886eaab94e3f2a0ca1a5e1b94e059
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,102 @@@
++---
++title: findRESubmatch
++description: Returns a slice of all successive matches of the regular expression. 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.
++categories: [functions]
++menu:
++  docs:
++    parent: functions
++keywords: [regex]
++signature:
++  - "findRESubmatch PATTERN INPUT [LIMIT]"
++  - "strings.FindRESubmatch PATTERN INPUT [LIMIT]"
++relatedfuncs: [findRE, replaceRE]
++---
++
++By default, `findRESubmatch` finds all matches. You can limit the number of matches with an optional LIMIT parameter. A return value of nil indicates no match.
++
++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.
++
++[string literal]: https://go.dev/ref/spec#String_literals
++
++This function uses the [RE2] regular expression library. See the [RE2 syntax documentation] for details. Note that the RE2 `\C` escape sequence is not supported.
++
++[RE2]: https://github.com/google/re2/
++[RE2 syntax documentation]: https://github.com/google/re2/wiki/Syntax/
++
++{{% note %}}
++The RE2 syntax is a subset of that accepted by [PCRE], roughly speaking, and with various [caveats].
++
++[caveats]: https://swtch.com/~rsc/regexp/regexp3.html#caveats
++[PCRE]: https://www.pcre.org/
++{{% /note %}}
++
++## Demonstrative examples
++
++```go-html-template
++{{ findRESubmatch `a(x*)b` "-ab-" }} → [["ab" ""]]
++{{ findRESubmatch `a(x*)b` "-axxb-" }} → [["axxb" "xx"]]
++{{ findRESubmatch `a(x*)b` "-ab-axb-" }} → [["ab" ""] ["axb" "x"]]
++{{ findRESubmatch `a(x*)b` "-axxb-ab-" }} → [["axxb" "xx"] ["ab" ""]]
++{{ findRESubmatch `a(x*)b` "-axxb-ab-" 1 }} → [["axxb" "xx"]]
++```
++
++## Practical example
++
++This markdown:
++
++```text
++- [Example](https://example.org)
++- [Hugo](https://gohugo.io)
++```
++
++Produces this HTML:
++
++```html
++<ul>
++  <li><a href="https://example.org">Example</a></li>
++  <li><a href="https://gohugo.io">Hugo</a></li>
++</ul>
++```
++
++To match the anchor elements, capturing the link destination and text:
++
++```go-html-template
++{{ $regex := `<a\s*href="(.+?)">(.+?)</a>` }}
++{{ $matches := findRESubmatch $regex .Content }}
++```
++
++Viewed as JSON, the data structure of `$matches` in the code above is:
++
++```json
++[
++  [
++    "<a href=\"https://example.org\"></a>Example</a>",
++    "https://example.org",
++    "Example"
++  ],
++  [
++    "<a href=\"https://gohugo.io\">Hugo</a>",
++    "https://gohugo.io",
++    "Hugo"
++  ]
++]
++```
++
++To render the `href` attributes:
++
++```go-html-template
++{{ range $matches }}
++  {{ index . 1 }}
++{{ end }}
++```
++
++Result:
++
++```text
++https://example.org
++https://gohugo.io
++```
++
++{{% note %}}
++You can write and test your regular expression using [regex101.com](https://regex101.com/). Be sure to select the Go flavor before you begin.
++{{% /note %}}
index 98d162617c1c45da0bd997050ab9660e809dafe3,0000000000000000000000000000000000000000..118c9c504d3ef0a8bf6e4c2357ffc4555821b576
mode 100644,000000..100644
--- /dev/null
@@@ -1,53 -1,0 +1,45 @@@
- linktitle: first
 +---
 +title: first
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: "Slices an array to only the first _N_ elements."
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: [lists,taxonomies,terms,groups]
- hugoversion:
++    parent: functions
 +keywords: [iteration]
 +signature: ["first LIMIT COLLECTION"]
- deprecated: false
- aliases: []
 +relatedfuncs: [after,last]
 +---
 +
 +`first` works in a similar manner to the [`limit` keyword in
 +SQL][limitkeyword]. It reduces the array to only the `first N`
 +elements. It takes the array and number of elements as input.
 +
 +`first` takes two arguments:
 +1. `number of elements`
 +2. `array` *or* `slice of maps or structs`
 +
 +{{< code file="layout/_default/section.html" >}}
 +{{ range first 10 .Pages }}
 +    {{ .Render "summary" }}
 +{{ end }}
 +{{< /code >}}
 +
 +*Note: Exclusive to `first`, LIMIT can be '0' to return an empty array.*
 +
 +## `first` and `where` Together
 +
 +Using `first` and [`where`][wherefunction] together can be very
 +powerful. Below snippet gets a list of posts only from [**main
 +sections**][mainsections], sorts it by the `title` parameter, and then
 +ranges through only the first 5 posts in that list:
 +
 +{{< code file="first-and-where-together.html" >}}
 +{{ range first 5 (where site.RegularPages "Type" "in" site.Params.mainSections).ByTitle }}
 +   {{ .Content }}
 +{{ end }}
 +{{< /code >}}
 +
 +
 +[limitkeyword]: https://www.techonthenet.com/sql/select_limit.php
 +[wherefunction]: /functions/where/
 +[mainsections]: /functions/where/#mainsections
index 1c589e31748e2f6b3b6404ece0f7599a2db74174,0000000000000000000000000000000000000000..e95b3ae5face661f464c0be4c193e9a94a0ad4e2
mode 100644,000000..100644
--- /dev/null
@@@ -1,25 -1,0 +1,45 @@@
- linktitle: float
- description: Creates a `float` from the argument passed into the function.
- date: 2017-09-28
- publishdate: 2017-09-28
- lastmod: 2017-09-28
 +---
 +title: float
-     parent: "functions"
- keywords: [strings,floats]
++description: Casts a value to a decimal (base 10) floating point value.
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
++keywords: [cast,strings,floats]
 +signature: ["float INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- Useful for turning strings into floating point numbers.
 +---
 +
- {{ float "1.23" }} → 1.23
++With a decimal (base 10) input:
 +
++```go-html-template
++{{ float 11 }} → 11 (float64)
++{{ float "11" }} → 11 (float64)
++
++{{ float 11.1 }} → 11.1 (float64)
++{{ float "11.1" }} → 11.1 (float64)
++
++{{ float 11.9 }} → 11.9 (float64)
++{{ float "11.9" }} → 11.9 (float64)
++```
++
++With a binary (base 2) input:
++
++```go-html-template
++{{ float 0b11 }} → 3 (float64)
 +```
++
++With an octal (base 8) input (use either notation):
++
++```go-html-template
++{{ float 011 }} → 9 (float64)
++{{ float "011" }} → 11 (float64)
++
++{{ float 0o11 }} → 9 (float64)
++```
++
++With a hexadecimal (base 16) input:
++
++```go-html-template
++{{ float 0x11 }} → 17 (float64)
 +```
index 5c86714fe2663e2c87789e0021048a794c41563f,0000000000000000000000000000000000000000..af34cbf7e136b5339c3395abfb1f7f7662b84aad
mode 100644,000000..100644
--- /dev/null
@@@ -1,126 -1,0 +1,119 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: .Format
 +description: Formats built-in Hugo dates---`.Date`, `.PublishDate`, and `.Lastmod`---according to Go's layout string.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: [times]
- hugoversion:
++    parent: functions
 +keywords: [dates,time]
 +signature: [".Format FORMAT"]
- deprecated: false
- aliases: []
 +relatedfuncs: [dateFormat,now,Unix,time]
- ```
 +toc: true
 +---
 +
 +`.Format` will format date values defined in your front matter and can be used as a property on the following [page variables][pagevars]:
 +
 +* `.PublishDate`
 +* `.Date`
 +* `.Lastmod`
 +
 +Assuming a key-value of `date: 2017-03-03` in a content file's front matter, your can run the date through `.Format` followed by a layout string for your desired output at build time:
 +
- ```
++```go-html-template
 +{{ .PublishDate.Format "January 2, 2006" }} => March 3, 2017
 +```
 +
 +For formatting *any* string representations of dates defined in your front matter, see the [`dateFormat` function][dateFormat], which will still leverage the Go layout string explained below but uses a slightly different syntax.
 +
 +## Go's Layout String
 +
 +Hugo templates [format your dates][time] via layout strings that point to a specific reference time:
 +
 +```
 +Mon Jan 2 15:04:05 MST 2006
 +```
 +
 +While this may seem arbitrary, the numerical value of `MST` is `07`, thus making the layout string a sequence of numbers.
 +
 +Here is a visual explanation [taken directly from the Go docs][gdex]:
 +
 +```
 + Jan 2 15:04:05 2006 MST
 +=> 1 2  3  4  5    6  -7
 +```
 +
 +### Hugo Date and Time Templating Reference
 +
 +The following examples show the layout string followed by the rendered output.
 +
 +The examples were rendered and tested in [CST] and all point to the same field in a content file's front matter:
 +
 +```
 +date: 2017-03-03T14:15:59-06:00
 +```
 +
 +`.Date` (i.e. called via [page variable][pagevars])
 +: **Returns**: `2017-03-03 14:15:59 -0600 CST`
 +
 +`"Monday, January 2, 2006"`
 +: **Returns**: `Friday, March 3, 2017`
 +
 +`"Mon Jan 2 2006"`
 +: **Returns**: `Fri Mar 3 2017`
 +
 +`"January 2006"`
 +: **Returns**: `March 2017`
 +
 +`"2006-01-02"`
 +: **Returns**: `2017-03-03`
 +
 +`"Monday"`
 +: **Returns**: `Friday`
 +
 +`"02 Jan 06 15:04 MST"` (RFC822)
 +: **Returns**: `03 Mar 17 14:15 CST`
 +
 +`"02 Jan 06 15:04 -0700"` (RFC822Z)
 +: **Returns**: `03 Mar 17 14:15 -0600`
 +
 +`"Mon, 02 Jan 2006 15:04:05 MST"` (RFC1123)
 +: **Returns**: `Fri, 03 Mar 2017 14:15:59 CST`
 +
 +`"Mon, 02 Jan 2006 15:04:05 -0700"` (RFC1123Z)
 +: **Returns**: `Fri, 03 Mar 2017 14:15:59 -0600`
 +
 +More examples can be found in Go's [documentation for the time package][timeconst].
 +
 +### Cardinal Numbers and Ordinal Abbreviations
 +
 +Spelled-out cardinal numbers (e.g. "one", "two", and "three") are not currently supported.
 +
 +Use the [`humanize`](/functions/humanize) function to render the day of the month as an ordinal number:
 +
++```go-html-template
 +{{ humanize .Date.Day }} of {{ .Date.Format "January 2006" }}
 +```
 +
 +This will output:
 +
 +```
 +5th of March 2017
 +```
 +
 +
 +### Use `.Local` and `.UTC`
 +
 +In conjunction with the [`dateFormat` function][dateFormat], you can also convert your dates to `UTC` or to local timezones:
 +
 +`{{ dateFormat "02 Jan 06 15:04 MST" .Date.UTC }}`
 +: **Returns**: `03 Mar 17 20:15 UTC`
 +
 +`{{ dateFormat "02 Jan 06 15:04 MST" .Date.Local }}`
 +: **Returns**: `03 Mar 17 14:15 CST`
 +
 +[CST]: https://en.wikipedia.org/wiki/Central_Time_Zone
 +[dateFormat]: /functions/dateformat/
 +[gdex]: https://golang.org/pkg/time/#example_Time_Format
 +[pagevars]: /variables/page/
 +[time]: https://golang.org/pkg/time/
 +[timeconst]: https://golang.org/pkg/time/#ANSIC
index c7256c0e30d1cee9c6cdcbe1d6d13d4b7861de82,0000000000000000000000000000000000000000..8306935f049f1e65c77076731a37ccf220518a47
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,16 @@@
- linktitle: ge
 +---
 +title: ge
- date: 2017-07-26
- publishdate: 2017-07-26
- lastmod: 2017-07-26
 +description: Returns the boolean truth of arg1 >= arg2.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [operators,logic]
 +signature: ["ge ARG1 ARG2"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
 +
++```go-html-template
 +{{ if ge 10 5 }}true{{ end }}
 +```
index 27f3488076378667f1bd0faabad614f5211ff2fc,0000000000000000000000000000000000000000..561a794c7c39eb94afe19793149b5854ea32f798
mode 100644,000000..100644
--- /dev/null
@@@ -1,29 -1,0 +1,21 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: .Get
 +description: Accesses positional and ordered parameters in shortcode declaration.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [shortcodes]
 +signature: [".Get INDEX", ".Get KEY"]
- deprecated: false
- aliases: []
- needsexample: true
 +relatedfuncs: []
 +---
 +
 +`.Get` is specifically used when creating your own [shortcode template][sc], to access the [positional and named](/templates/shortcode-templates/#positional-vs-named-parameters) parameters passed to it. When used with a numeric INDEX, it queries positional parameters (starting with 0). With a string KEY, it queries named parameters.
 +
 +When accessing named or positional parameters that do not exist, `.Get` returns an empty string instead of interrupting the build. This allows you to chain `.Get` with `if`, `with`, `default` or `cond` to check for parameter existence. For example:
 +
 +```go-html-template
 +{{ $quality := default "100" (.Get 1) }}
 +```
 +
 +[sc]: /templates/shortcode-templates/
index 93e93a38258bed7b2d85f4aa7e2edb4723984fcc,0000000000000000000000000000000000000000..e014b7ad5c13e6beec74f75d8f462371efb944ab
mode 100644,000000..100644
--- /dev/null
@@@ -1,46 -1,0 +1,38 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2021-11-26
 +---
 +title: getenv
 +description: Returns the value of an environment variable, or an empty string if the environment variable is not set.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: []
 +signature: ["os.Getenv VARIABLE", "getenv VARIABLE"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
 +---
 +Examples:
 +
 +```go-html-template
 +{{ os.Getenv "HOME" }} --> /home/victor
 +{{ os.Getenv "USER" }} --> victor
 +```
 +
 +You can pass values when building your site:
 +
 +```bash
 +MY_VAR1=foo MY_VAR2=bar hugo
 +
 +OR
 +
 +export MY_VAR1=foo
 +export MY_VAR2=bar
 +hugo
 +```
 +
 +And then retrieve the values within a template:
 +
 +```go-html-template
 +{{ os.Getenv "MY_VAR1" }} --> foo
 +{{ os.Getenv "MY_VAR2" }} --> bar
 +```
 +
 +With Hugo v0.91.0 and later, you must explicitly allow access to environment variables. For details, review [Hugo's Security Policy](/about/security-model/#security-policy). By default, environment variables beginning with `HUGO_` are allowed when using the `os.Getenv` function.
index 203498cb11d755595ecd1b8ebf999876048995ec,0000000000000000000000000000000000000000..617dcbb344daf781995bb0cad418adee814c2830
mode 100644,000000..100644
--- /dev/null
@@@ -1,31 -1,0 +1,29 @@@
- date: 2018-09-14
 +---
 +title: group
 +description: "`group` groups a list of pages."
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- hugoversion: "0.49"
++    parent: functions
 +keywords: [collections]
 +signature: ["PAGES | group KEY"]
 +---
 +
 +{{< code file="layouts/partials/groups.html" >}}
 +{{ $new := .Site.RegularPages | first 10 | group "New" }}
 +{{ $old := .Site.RegularPages | last 10 | group "Old" }}
 +{{ $groups := slice $new $old }}
 +{{ range $groups }}
 +<h3>{{ .Key }}{{/* Prints "New", "Old" */}}</h3>
 +<ul>
 +    {{ range .Pages }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +The page group you get from `group` is of the same type you get from the built-in [group methods](/templates/lists#group-content) in Hugo. The above example can even be [paginated](/templates/pagination/#list-paginator-pages).
index 91203f89069d907fa984f5e963ecbbb9994620f2,0000000000000000000000000000000000000000..dba0d4dfc3d5cbebc67fedc6ebef50e8301cf3d8
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,16 @@@
- linktitle: gt
 +---
 +title: gt
- date: 2017-07-26
- publishdate: 2017-07-26
- lastmod: 2017-07-26
 +description: Returns the boolean truth of arg1 > arg2.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [operators,logic]
 +signature: ["gt ARG1 ARG2"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
 +
++```go-html-template
 +{{ if gt 10 5 }}true{{ end }}
 +```
index fea980120def7f05cdcffd88168c5d38fcb1f4d8,0000000000000000000000000000000000000000..8605cf34ef2f8e7c2184c8038b8581495e03506b
mode 100644,000000..100644
--- /dev/null
@@@ -1,28 -1,0 +1,19 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: .HasMenuCurrent
 +description:
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: [menus]
- hugoversion:
++    parent: functions
 +keywords: [menus]
 +signature: ["PAGE.HasMenuCurrent MENU MENUENTRY"]
- deprecated: false
- toc: false
- draft: false
- aliases: []
 +relatedfuncs: ["IsMenuCurrent"]
 +---
 +
 +`.HasMenuCurrent` is a method in `Page` object returning a _boolean_ value. It
 +returns `true` if the PAGE is the same object as the `.Page` in one of the
 +**children menu entries** under MENUENTRY in a given MENU.
 +
 +If MENUENTRY's `.Page` is a [section](/content-management/sections/) then, from Hugo `0.86.0`, this method also returns true for any descendant of that section..
 +
 +You can find its example use in [menu templates](/templates/menu-templates/).
index 10b1c2d904d6ea28c6dfbce8853ea03c6e84a18f,0000000000000000000000000000000000000000..2ca125467f9bf3255ec728579077c97f776291c4
mode 100644,000000..100644
--- /dev/null
@@@ -1,108 -1,0 +1,103 @@@
- linktitle: highlight
 +---
 +title: highlight
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2021-12-06
 +description: Renders code with a syntax highlighter.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- deprecated: false
++    parent: functions
 +keywords: [highlighting,code blocks,syntax]
 +signature: ["transform.Highlight INPUT LANG [OPTIONS]","highlight INPUT LANG [OPTIONS]"]
 +relatedfuncs: []
- [hugo client]: {{< relref "commands/hugo_gen_chromastyles" >}}
- [options]: {{< relref "#options" >}}
- [site configuration]: {{< relref "getting-started/configuration-markup#highlight">}}
 +toc: true
 +---
 +The `highlight` function uses the [Chroma] syntax highlighter, supporting over 200 languages with more than 40 available styles.
 +
 +## Parameters
 +
 +INPUT
 +: The code to highlight.
 +
 +LANG
 +: The language of the code to highlight. Choose from one of the [supported languages]. Case-insensitive.
 +
 +OPTIONS
 +: An optional, comma-separated list of zero or more [options]. Set default values in [site configuration].
 +
 +## Options
 +
 +lineNos
 +: Boolean. Default is `false`.\
 +Display a number at the beginning of each line.
 +
 +lineNumbersInTable
 +: Boolean. Default is `true`.\
 +Render the highlighted code in an HTML table with two cells. The left table cell contains the line numbers. The right table cell contains the code, allowing a user to select and copy the code without line numbers. Irrelevant if `lineNos` is `false`.
 +
 +anchorLineNos
 +: Boolean. Default is `false`.\
 +Render each line number as an HTML anchor element, and set the `id` attribute of the surrounding `<span>` to the line number. Irrelevant if `lineNos` is `false`.
 +
 +lineAnchors
 +: String. Default is `""`.\
 +When rendering a line number as an HTML anchor element, prepend this value to the `id` attribute of the surrounding `<span>`. This provides unique `id` attributes when a page contains two or more code blocks. Irrelevant if `lineNos` or `anchorLineNos` is `false`.
 +
 +lineNoStart
 +: Integer. Default is `1`.\
 +The number to display at the beginning of the first line. Irrelevant if `lineNos` is `false`.
 +
 +hl_Lines
 +: String. Default is `""`.\
 +A space-separated 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
 +: Boolean. Default is `false`.\
 +Render the highlighted code without a wrapping container.
 +
 +style
 +: String. Default is `monokai`.\
 +The CSS styles to apply to the highlighted code. See the [style gallery] for examples. Case-sensitive.
 +
 +noClasses
 +: Boolean. Default is `true`.\
 +Use inline CSS styles instead of an external CSS file. To use an external CSS file, set this value to `false` and [generate the file with the hugo client][hugo client].
 +
 +tabWidth
 +: Integer. Default is `4`.\
 +Substitute this number of spaces for each tab character in your highlighted code. Irrelevant if `noClasses` is `false`.
 +
 +guessSyntax
 +: Boolean. Default is `false`.\
 +If the `LANG` parameter is blank or an unrecognized language, auto-detect the language if possible, otherwise use a fallback language.
 +
 +{{% note %}}
 +Instead of specifying both `lineNos` and `lineNumbersInTable`, you can use the following shorthand notation:
 +
 +`lineNos=inline`
 +: equivalent to `lineNos=true` and `lineNumbersInTable=false`
 +
 +`lineNos=table`
 +: equivalent to `lineNos=true` and `lineNumbersInTable=true`
 +{{% /note %}}
 +
 +## Examples
 +
 +```go-html-template
 +{{ $input := `fmt.Println("Hello World!")` }}
 +{{ transform.Highlight $input "go" }}
 +
 +{{ $input := `console.log('Hello World!');` }}
 +{{ $lang := "js" }}
 +{{ transform.Highlight $input $lang "lineNos=table, style=api" }}
 +
 +{{ $input := `echo "Hello World!"` }}
 +{{ $lang := "bash" }}
 +{{ $options := slice "lineNos=table" "style=dracula" }}
 +{{ transform.Highlight $input $lang (delimit $options ",") }}
 +```
 +
 +[Chroma]: https://github.com/alecthomas/chroma
- [supported languages]: {{< relref "content-management/syntax-highlighting#list-of-chroma-highlighting-languages" >}}
++[hugo client]: /commands/hugo_gen_chromastyles
++[options]: #options
++[site configuration]: /getting-started/configuration-markup#highlight
 +[style gallery]: https://xyproto.github.io/splash/docs/
++[supported languages]: /content-management/syntax-highlighting#list-of-chroma-highlighting-languages
index b906e5abb0220c390a4970139e2c600859be2d47,0000000000000000000000000000000000000000..3b9675a0b816e586887b55000153ec7d8fac330a
mode 100644,000000..100644
--- /dev/null
@@@ -1,34 -1,0 +1,26 @@@
- linktitle: hmac
 +---
 +title: hmac
- date: 2020-05-29
- publishdate: 2020-05-29
- lastmod: 2020-05-29
 +description: Returns a cryptographic hash that uses a key to sign a message.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [hmac,checksum]
 +signature: ["crypto.HMAC HASH_TYPE KEY MESSAGE [ENCODING]","hmac HASH_TYPE KEY MESSAGE [ENCODING]" ]
- deprecated: false
- aliases: []
 +relatedfuncs: [hmac]
 +---
 +
 +Set the `HASH_TYPE` argument to `md5`, `sha1`, `sha256`, or `sha512`.
 +
 +Set the optional `ENCODING` argument to either `hex` (default) or `binary`.
 +
 +```go-html-template
 +{{ hmac "sha256" "Secret key" "Secret message" }}
 +5cceb491f45f8b154e20f3b0a30ed3a6ff3027d373f85c78ffe8983180b03c84
 +
 +{{ hmac "sha256" "Secret key" "Secret message" "hex" }}
 +5cceb491f45f8b154e20f3b0a30ed3a6ff3027d373f85c78ffe8983180b03c84
 +
 +{{ hmac "sha256" "Secret key" "Secret message" "binary" | base64Encode }}
 +XM60kfRfixVOIPOwow7Tpv8wJ9Nz+Fx4/+iYMYCwPIQ=
 +```
index 652492c72d3696baf85763517e7fcc1b669e8f40,0000000000000000000000000000000000000000..0ee8fa4d224a51402dfa168a3289f7aaef290b73
mode 100644,000000..100644
--- /dev/null
@@@ -1,25 -1,0 +1,17 @@@
- linktitle:
 +---
 +title: htmlEscape
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Returns the given string with the reserved HTML codes escaped.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings, html]
 +signature: ["htmlEscape INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: [htmlUnescape]
- ```
 +---
 +
 +In the result `&` becomes `&amp;` and so on. It escapes only: `<`, `>`, `&`, `'` and `"`.
 +
++```go-html-template
 +{{ htmlEscape "Hugo & Caddy > WordPress & Apache" }} → "Hugo &amp; Caddy &gt; WordPress &amp; Apache"
 +```
index 9533fde90e435d8dfe5a188b82f88d3e6c5f8cfa,0000000000000000000000000000000000000000..e4646b680708c0063f38f40833209845636610bb
mode 100644,000000..100644
--- /dev/null
@@@ -1,27 -1,0 +1,19 @@@
- linktitle: htmlUnescape
 +---
 +title: htmlUnescape
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Returns the given string with HTML escape codes un-escaped.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: []
 +signature: ["htmlUnescape INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: [htmlEscape]
- ```
 +---
 +
 +`htmlUnescape` returns the given string with HTML escape codes un-escaped.
 +
 +Remember to pass the output of this to `safeHTML` if fully un-escaped characters are desired. Otherwise, the output will be escaped again as normal.
 +
++```go-html-template
 +{{ htmlUnescape "Hugo &amp; Caddy &gt; WordPress &amp; Apache" }} → "Hugo & Caddy > WordPress & Apache"
 +```
index 41c7a0322b555ede75b9941b6d66b5f37f191ebc,0000000000000000000000000000000000000000..998c71c37207aca014d16d3fdedf00b15c8b4ab5
mode 100644,000000..100644
--- /dev/null
@@@ -1,114 -1,0 +1,102 @@@
- linktitle: hugo
 +---
 +title: hugo
- date: 2019-01-31
- publishdate: 2019-01-31
 +description: The `hugo` function provides easy access to Hugo-related data.
-     parent: "functions"
 +keywords: []
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +toc:
 +signature: ["hugo"]
- deprecated: false
- draft: false
- aliases: []
 +relatedfuncs: []
- {{% note "Use the Hugo Generator Tag" %}}
- We highly recommend using `hugo.Generator` in your website's `<head>`. `hugo.Generator` is included by default in all themes hosted on [themes.gohugo.io](https://themes.gohugo.io). The generator tag allows the Hugo team to track the usage and popularity of Hugo.
- {{% /note %}}
 +---
 +
 +`hugo` returns an instance that contains the following functions:
 +
 +hugo.Generator
 +: `<meta>` tag for the version of Hugo that generated the site. `hugo.Generator` outputs a *complete* HTML tag; e.g. `<meta name="generator" content="Hugo 0.63.2">`
 +
 +hugo.Version
 +: the current version of the Hugo binary you are using e.g. `0.99.1`
 +
 +hugo.GoVersion
 +: returns the version of Go that the Hugo binary was built with. {{< new-in "0.101.0" >}}
 +
 +hugo.Environment
 +: the current running environment as defined through the `--environment` cli tag
 +
 +hugo.CommitHash
 +: the git commit hash of the current Hugo binary e.g. `0e8bed9ccffba0df554728b46c5bbf6d78ae5247`
 +
 +hugo.BuildDate
 +: the compile date of the current Hugo binary formatted with RFC 3339 e.g. `2002-10-02T10:00:00-05:00`
 +
 +hugo.IsExtended
 +: whether this is the extended Hugo binary.
 +
 +hugo.IsProduction
 +: returns true if `hugo.Environment` is set to the production environment
 +
-       <td>{{ with $element.Owner }}{{.Path }}{{ end }}</td>
 +hugo.Deps
 +: See [hugo.Deps](#hugodeps)
 +
 +## hugo.Deps
 +
 +{{< new-in "0.92.0" >}}
 +
 +`hugo.Deps` returns a list of dependencies for a project (either Hugo Modules or local theme components).
 +
 +Each dependency contains:
 +
 +Path (string)
 +: Returns the path to this module. This will either be the module path, e.g. "github.com/gohugoio/myshortcodes", or the path below your /theme folder, e.g. "mytheme".
 +
 +Version (string)
 +:  The module version.
 +
 +Vendor (bool)
 +: Whether this dependency is vendored.
 +
 +Time (time.Time)
 +: Time version was created.
 +
 +Owner
 +: In the dependency tree, this is the first module that defines this module as a dependency.
 +
 +Replace (*Dependency)
 +: Replaced by this dependency.
 +
 +An example table listing the dependencies:
 +
 +```html
 + <h2>Dependencies</h2>
 +<table class="table table-dark">
 +  <thead>
 +    <tr>
 +      <th scope="col">#</th>
 +      <th scope="col">Owner</th>
 +      <th scope="col">Path</th>
 +      <th scope="col">Version</th>
 +      <th scope="col">Time</th>
 +      <th scope="col">Vendor</th>
 +    </tr>
 +  </thead>
 +  <tbody>
 +    {{ range $index, $element := hugo.Deps }}
 +    <tr>
 +      <th scope="row">{{ add $index 1 }}</th>
-         {{ with $element.Replace}}
++      <td>{{ with $element.Owner }}{{ .Path }}{{ end }}</td>
 +      <td>
 +        {{ $element.Path }}
++        {{ with $element.Replace }}
 +        => {{ .Path }}
 +        {{ end }}
 +      </td>
 +      <td>{{ $element.Version }}</td>
 +      <td>{{ with $element.Time }}{{ . }}{{ end }}</td>
 +      <td>{{ $element.Vendor }}</td>
 +    </tr>
 +    {{ end }}
 +  </tbody>
 +</table>
 +```
index 18a0875911ed5ee40ce87e37d007071016851c2b,0000000000000000000000000000000000000000..6cbd858370709ff203a0332687a07af77607c780
mode 100644,000000..100644
--- /dev/null
@@@ -1,29 -1,0 +1,21 @@@
- linktitle:
 +---
 +title: humanize
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Returns the humanized version of an argument with the first letter capitalized.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings,casing]
 +signature: ["humanize INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: [anchorize]
- ```
- {{humanize "my-first-post"}} → "My first post"
- {{humanize "myCamelPost"}} → "My camel post"
- {{humanize "52"}} → "52nd"
- {{humanize 103}} → "103rd"
 +---
 +
 +If the input is either an int64 value or the string representation of an integer, humanize returns the number with the proper ordinal appended.
 +
 +
++```go-html-template
++{{ humanize "my-first-post" }} → "My first post"
++{{ humanize "myCamelPost" }} → "My camel post"
++{{ humanize "52" }} → "52nd"
++{{ humanize 103 }} → "103rd"
 +```
index 8f8c9642c0b49be2750ee50e84a2dbad67599006,0000000000000000000000000000000000000000..13f3a6f8f75fd6cddfdb6c576fdaa152846f6f2f
mode 100644,000000..100644
--- /dev/null
@@@ -1,57 -1,0 +1,49 @@@
- linktitle: i18n
 +---
 +title: i18n
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Translates a piece of content based on your i18n configuration files.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [internationalization,i18n,multilingual]
 +signature:
 +  - "i18n KEY"
 +  - "T KEY"
 +  - "lang.Translate KEY"
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
 +This translates a piece of content based on your `i18n/en-US.toml` files. You can use the [go-i18n](https://github.com/nicksnyder/go-i18n) tools to manage your translations. The translations can exist in both the theme and at the root of your repository.
 +
- {{% note "Alias `T`" %}}
++```go-html-template
 +{{ i18n "translation_id" }}
 +```
 +
- ```
++{{% note %}}
 +`T` is an alias to `i18n`. E.g. `{{ T "translation_id" }}`.
 +{{% /note %}}
 +
 +### Query a flexible translation with variables
 +
 +Often you will want to use the page variables in the translation strings. To do so, pass the `.` context when calling `i18n`:
 +
++```go-html-template
 +{{ i18n "wordCount" . }}
 +```
 +
 +The function will pass the `.` context to the `"wordCount"` id:
 +
 +{{< code-toggle file="i18n/en-US" >}}
 +[wordCount]
 +other = "This article has {{ .WordCount }} words."
 +{{< /code-toggle >}}
 +
 +Assume `.WordCount` in the context has value is 101. The result will be:
 +
 +```
 +This article has 101 words.
 +```
 +
 +For more information about string translations, see [Translation of Strings in Multilingual Mode][multistrings].
 +
 +[multistrings]: /content-management/multilingual/#translation-of-strings
index e7fc50f7e8adc5aee258b3e32ba9730f03bf5de0,0000000000000000000000000000000000000000..9cd772e5b8cce67cc29ebfe4c7bee45a7ffed67c
mode 100644,000000..100644
--- /dev/null
@@@ -1,227 -1,0 +1,226 @@@
- date: 2017-02-01
 +---
 +title: Image Filters
 +description: The images namespace provides a list of filters and other image related functions.
-     parent: "functions"
 +categories: [functions]
 +aliases: [/functions/imageconfig/]
 +menu:
 +  docs:
- {{ $img := resources.Get "/images/background.png"}}
++    parent: functions
 +keywords: [images]
 +toc: true
 +---
 +
 +See [images.Filter](#filter) for how to apply these filters to an image.
 +
 +## Overlay
 +
 +{{% funcsig %}}
 +images.Overlay SRC X Y
 +{{% /funcsig %}}
 +
 +Overlay creates a filter that overlays the source image at position x y, e.g:
 +
 +
 +```go-html-template
 +{{ $logoFilter := (images.Overlay $logo 50 50 ) }}
 +{{ $img := $img | images.Filter $logoFilter }}
 +```
 +
 +A shorter version of the above, if you only need to apply the filter once:
 +
 +```go-html-template
 +{{ $img := $img.Filter (images.Overlay $logo 50 50 )}}
 +```
 +
 +The above will overlay `$logo` in the upper left corner of `$img` (at position `x=50, y=50`).
 +
 +## Text
 +
 +Using the `Text` filter, you can add text to an image.
 +
 +{{% funcsig %}}
 +images.Text TEXT DICT)
 +{{% /funcsig %}}
 +
 +The following example will add the text `Hugo rocks!` to the image with the specified color, size and position.
 +
 +```go-html-template
- {{ $img := resources.Get "/images/background.png"}}
++{{ $img := resources.Get "/images/background.png" }}
 +{{ $img = $img.Filter (images.Text "Hugo rocks!" (dict
 +    "color" "#ffffff"
 +    "size" 60
 +    "linespacing" 2
 +    "x" 10
 +    "y" 20
 +))}}
 +```
 +
 +You can load a custom font if needed. Load the font as a Hugo `Resource` and set it as an option:
 +
 +```go-html-template
 +
 +{{ $font := resources.GetRemote "https://github.com/google/fonts/raw/main/apache/roboto/static/Roboto-Black.ttf" }}
- favicon.ico: {{.Width}} x {{.Height}}
++{{ $img := resources.Get "/images/background.png" }}
 +{{ $img = $img.Filter (images.Text "Hugo rocks!" (dict
 +    "font" $font
 +))}}
 +```
 +
 +
 +## Brightness
 +
 +{{% funcsig %}}
 +images.Brightness PERCENTAGE
 +{{% /funcsig %}}
 +
 +Brightness creates a filter that changes the brightness of an image.
 +The percentage parameter must be in range (-100, 100).
 +
 +### ColorBalance
 +
 +{{% funcsig %}}
 +images.ColorBalance PERCENTAGERED PERCENTAGEGREEN PERCENTAGEBLUE
 +{{% /funcsig %}}
 +
 +ColorBalance creates a filter that changes the color balance of an image.
 +The percentage parameters for each color channel (red, green, blue) must be in range (-100, 500).
 +
 +## Colorize
 +
 +{{% funcsig %}}
 +images.Colorize HUE SATURATION PERCENTAGE
 +{{% /funcsig %}}
 +
 +Colorize creates a filter that produces a colorized version of an image.
 +The hue parameter is the angle on the color wheel, typically in range (0, 360).
 +The saturation parameter must be in range (0, 100).
 +The percentage parameter specifies the strength of the effect, it must be in range (0, 100).
 +
 +## Contrast
 +
 +{{% funcsig %}}
 +images.Contrast PERCENTAGE
 +{{% /funcsig %}}
 +
 +Contrast creates a filter that changes the contrast of an image.
 +The percentage parameter must be in range (-100, 100).
 +
 +## Gamma
 +
 +{{% funcsig %}}
 +images.Gamma GAMMA
 +{{% /funcsig %}}
 +
 +Gamma creates a filter that performs a gamma correction on an image.
 +The gamma parameter must be positive. Gamma = 1 gives the original image.
 +Gamma less than 1 darkens the image and gamma greater than 1 lightens it.
 +
 +## GaussianBlur
 +
 +{{% funcsig %}}
 +images.GaussianBlur SIGMA
 +{{% /funcsig %}}
 +
 +GaussianBlur creates a filter that applies a gaussian blur to an image.
 +
 +## Grayscale
 +
 +{{% funcsig %}}
 +images.Grayscale
 +{{% /funcsig %}}
 +
 +Grayscale creates a filter that produces a grayscale version of an image.
 +
 +## Hue
 +
 +{{% funcsig %}}
 +images.Hue SHIFT
 +{{% /funcsig %}}
 +
 +Hue creates a filter that rotates the hue of an image.
 +The hue angle shift is typically in range -180 to 180.
 +
 +## Invert
 +
 +{{% funcsig %}}
 +images.Invert
 +{{% /funcsig %}}
 +
 +Invert creates a filter that negates the colors of an image.
 +
 +## Pixelate
 +
 +{{% funcsig %}}
 +images.Pixelate SIZE
 +{{% /funcsig %}}
 +
 +Pixelate creates a filter that applies a pixelation effect to an image.
 +
 +## Saturation
 +
 +{{% funcsig %}}
 +images.Saturation PERCENTAGE
 +{{% /funcsig %}}
 +
 +Saturation creates a filter that changes the saturation of an image.
 +
 +## Sepia
 +
 +{{% funcsig %}}
 +images.Sepia PERCENTAGE
 +{{% /funcsig %}}
 +
 +Sepia creates a filter that produces a sepia-toned version of an image.
 +
 +## Sigmoid
 +
 +{{% funcsig %}}
 +images.Sigmoid MIDPOINT FACTOR
 +{{% /funcsig %}}
 +
 +Sigmoid creates a filter that changes the contrast of an image using a sigmoidal function and returns the adjusted image.
 +It's a non-linear contrast change useful for photo adjustments as it preserves highlight and shadow detail.
 +
 +## UnsharpMask
 +
 +{{% funcsig %}}
 +images.UnsharpMask SIGMA AMOUNT THRESHOLD
 +{{% /funcsig %}}
 +
 +UnsharpMask creates a filter that sharpens an image.
 +The sigma parameter is used in a gaussian function and affects the radius of effect.
 +Sigma must be positive. Sharpen radius roughly equals 3 * sigma.
 +The amount parameter controls how much darker and how much lighter the edge borders become. Typically between 0.5 and 1.5.
 +The threshold parameter controls the minimum brightness change that will be sharpened. Typically between 0 and 0.05.
 +
 +## Other Functions
 +
 +### Filter
 +
 +{{% funcsig %}}
 +IMAGE | images.Filter FILTERS...
 +{{% /funcsig %}}
 +
 +Can be used to apply a set of filters to an image:
 +
 +```go-html-template
 +{{ $img := $img | images.Filter (images.GaussianBlur 6) (images.Pixelate 8) }}
 +```
 +
 +Also see the [Filter Method](/content-management/image-processing/#filter).
 +
 +### ImageConfig
 +
 +Parses the image and returns the height, width, and color model.
 +
 +The `imageConfig` function takes a single parameter, a file path (_string_) relative to the _project's root directory_, with or without a leading slash.
 +
 +{{% funcsig %}}
 +images.ImageConfig PATH
 +{{% /funcsig %}}
 +
 +```go-html-template
 +{{ with (imageConfig "favicon.ico") }}
++favicon.ico: {{ .Width }} x {{ .Height }}
 +{{ end }}
 +```
index 7a8cb33eb901cd3c781628fa2b0f352cd5dbdf13,0000000000000000000000000000000000000000..1baf7ce905af9c6eb54b1b71e7a547df355dd093
mode 100644,000000..100644
--- /dev/null
@@@ -1,32 -1,0 +1,24 @@@
- linktitle:
 +---
 +title: in
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Checks if an element is in an array or slice--or a substring in a string---and returns a boolean.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature: ["in SET ITEM"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
 +The elements supported are strings, integers and floats, although only float64 will match as expected.
 +
 +In addition, `in` can also check if a substring exists in a string.
 +
- ```
++```go-html-template
 +{{ if in .Params.tags "Git" }}Follow me on GitHub!{{ end }}
 +```
 +
 +
++```go-html-template
 +{{ if in "this string contains a substring" "substring" }}Substring found!{{ end }}
 +```
index 6ee46b4a8ba6bf70a655b3cfac4e8f4120fcd9a3,0000000000000000000000000000000000000000..6fb9f0fec66234cb83608d0ae51e228c60afc247
mode 100644,000000..100644
--- /dev/null
@@@ -1,100 -1,0 +1,92 @@@
- linktitle: index
 +---
 +title: index
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Looks up the index(es) or key(s) of the data structure passed into it.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: []
 +signature: ["index COLLECTION INDEXES", "index COLLECTION KEYS"]
- deprecated: false
 +relatedfuncs: []
- needsexample: true
 +aliases: [/functions/index/]
- {{< code-toggle file="data/locations/oslo" >}}
 +---
 +
 +The `index` functions returns the result of indexing its first argument by the following arguments. Each indexed item must be a map or a slice, e.g.:
 +
 +```go-text-template
 +{{ $slice := slice "a" "b" "c" }}
 +{{ index $slice 1 }} => b
 +{{ $map := dict "a" 100 "b" 200 }}
 +{{ index $map "b" }} => 200
 +```
 +
 +The function takes multiple indices as arguments, and this can be used to get nested values, e.g.:
 +
 +```go-text-template
 +{{ $map := dict "a" 100 "b" 200 "c" (slice 10 20 30) }}
 +{{ index $map "c" 1 }} => 20
 +{{ $map := dict "a" 100 "b" 200 "c" (dict "d" 10 "e" 20) }}
 +{{ index $map "c" "e" }} => 20
 +```
 +
 +You may write multiple indices as a slice:
 +
 +```go-text-template
 +{{ $map := dict "a" 100 "b" 200 "c" (dict "d" 10 "e" 20) }}
 +{{ $slice := slice "c" "e" }}
 +{{ index $map $slice }} => 20
 +```
 +
 +## Example: Load Data from a Path Based on Front Matter Params
 +
 +Assume you want to add a `location = ""` field to your front matter for every article written in `content/vacations/`. You want to use this field to populate information about the location at the bottom of the article in your `single.html` template. You also have a directory in `data/locations/` that looks like the following:
 +
 +```
 +.
 +└── data
 +    └── locations
 +        ├── abilene.toml
 +        ├── chicago.toml
 +        ├── oslo.toml
 +        └── provo.toml
 +```
 +
 +Here is an example:
 +
- ```
++{{< code-toggle file="data/locations/oslo" copy=false >}}
 +website = "https://www.oslo.kommune.no"
 +pop_city = 658390
 +pop_metro = 1717900
 +{{< /code-toggle >}}
 +
 +The example we will use will be an article on Oslo, whose front matter should be set to exactly the same name as the corresponding file name in `data/locations/`:
 +
- ```
++{{< code-toggle file="content/articles/oslo.md" fm=true copy=false >}}
 +title = "My Norwegian Vacation"
 +location = "oslo"
- ```
- {{ index .Site.Data.locations “oslo” }}
++{{< /code-toggle >}}
 +
 +The content of `oslo.toml` can be accessed from your template using the following node path: `.Site.Data.locations.oslo`. However, the specific file you need is going to change according to the front matter.
 +
 +This is where the `index` function is needed. `index` takes 2 parameters in this use case:
 +
 +1. The node path
 +2. A string corresponding to the desired data; e.g.&mdash;
 +
- ```
++```go-html-template
++{{ index .Site.Data.locations "oslo" }}
 +```
 +
 +The variable for `.Params.location` is a string and can therefore replace `oslo` in the example above:
 +
- ```
++```go-html-template
 +{{ index .Site.Data.locations .Params.location }}
 +=> map[website:https://www.oslo.kommune.no pop_city:658390 pop_metro:1717900]
 +```
 +
 +Now the call will return the specific file according to the location specified in the content's front matter, but you will likely want to write specific properties to the template. You can do this by continuing down the node path via dot notation (`.`):
 +
++```go-html-template
 +{{ (index .Site.Data.locations .Params.location).pop_city }}
 +=> 658390
 +```
index 33888e11701e3916438edaf94919774ec791a729,0000000000000000000000000000000000000000..1d91c9fdde6bda877535a35974f7196044a5f270
mode 100644,000000..100644
--- /dev/null
@@@ -1,50 -1,0 +1,51 @@@
- linktitle: int
- description: Creates an `int` from the argument passed into the function.
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: int
-     parent: "functions"
- keywords: [strings,integers]
++description: Casts a value to a decimal (base 10) integer.
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
++keywords: [cast,strings,integers]
 +signature: ["int INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- Useful for turning strings into numbers.
 +---
 +
- {{ int "123" }} → 123
++With a decimal (base 10) input:
 +
++```go-html-template
++{{ int 11 }} → 11 (int)
++{{ int "11" }} → 11 (int)
++
++{{ int 11.1 }} → 11 (int)
++{{ int 11.9 }} → 11 (int)
 +```
- {{% note "Usage Note" %}}
- If the input string is supposed to represent a decimal number, and if it has
- leading 0's, then those 0's will have to be removed before passing the string
- to the `int` function, else that string will be tried to be parsed as an octal
- number representation.
++
++With a binary (base 2) input:
++
++```go-html-template
++{{ int 0b11 }} → 3 (int)
++{{ int "0b11" }} → 3 (int)
 +```
 +
- The [`strings.TrimLeft` function](/functions/strings.trimleft/) can be used for
- this purpose.
++With an octal (base 8) input (use either notation):
 +
- ```
- {{ int ("0987" | strings.TrimLeft "0") }}
- {{ int ("00987" | strings.TrimLeft "0") }}
++```go-html-template
++{{ int 011 }} → 9 (int)
++{{ int "011" }} → 9 (int)
 +
- ### Explanation
++{{ int 0o11 }} → 9 (int)
++{{ int "0o11" }} → 9 (int)
 +```
 +
- The `int` function eventually calls the `ParseInt` function from the Go library
- `strconv`.
++With a hexadecimal (base 16) input:
 +
- From its [documentation](https://golang.org/pkg/strconv/#ParseInt):
++```go-html-template
++{{ int 0x11 }} → 17 (int)
++{{ int "0x11" }} → 17 (int)
++```
 +
- > the base is implied by the string's prefix: base 16 for "0x", base 8 for "0",
- > and base 10 otherwise.
++{{% note %}}
++Values with a leading zero are octal (base 8). When casting a string representation of a decimal (base 10) number, remove leading zeros:
 +
++`{{ strings.TrimLeft "0" "0011" | int }} → 11`
 +{{% /note %}}
index 8d4c50fe2ec5248d3fde59700abf7b1cd7e74901,0000000000000000000000000000000000000000..99ab0943e46fffa14d1298888e08c7c1856f427c
mode 100644,000000..100644
--- /dev/null
@@@ -1,36 -1,0 +1,28 @@@
- linktitle: intersect
 +---
 +title: intersect
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Returns the common elements of two arrays or slices, in the same order as the first array.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [collections,intersect,union,complement,symdiff]
 +signature: ["intersect SET1 SET2"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +A useful example is to use it as `AND` filters when combined with where:
 +
 +## AND filter in where query
 +
++```go-html-template
 +{{ $pages := where .Site.RegularPages "Type" "not in" (slice "page" "about") }}
 +{{ $pages := $pages | union (where .Site.RegularPages "Params.pinned" true) }}
 +{{ $pages := $pages | intersect (where .Site.RegularPages "Params.images" "!=" nil) }}
 +```
 +
 +The above fetches regular pages not of `page` or `about` type unless they are pinned. And finally, we exclude all pages with no `images` set in Page params.
 +
 +See [union](/functions/union) for `OR`.
 +
 +
 +[partials]: /templates/partials/
 +[single]: /templates/single-page-templates/
index 51c21721b9fb2840e6b5c5683afff0000f5b96f7,0000000000000000000000000000000000000000..a27a174b6a2ea3d6cc3cdd64981ca1868ce84aa3
mode 100644,000000..100644
--- /dev/null
@@@ -1,26 -1,0 +1,17 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: .IsMenuCurrent
 +description:
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: [menus]
- hugoversion:
++    parent: functions
 +keywords: [menus]
 +signature: ["PAGE.IsMenuCurrent MENU MENUENTRY"]
- deprecated: false
- draft: false
- aliases: []
- needsexample: true
 +relatedfuncs: ["HasMenuCurrent"]
 +---
 +
 +`.IsMenuCurrent` is a method in `Page` object returning a _boolean_ value. It
 +returns `true` if the PAGE is the same object as the `.Page` in MENUENTRY in a
 +given MENU.
 +
 +You can find its example use in [menu templates](/templates/menu-templates/).
index aa36f6dac60b4d5ec92d9b0408df8f21d0596906,0000000000000000000000000000000000000000..9c00c15fc763404dcdc3d99e20cbd26357abd9fa
mode 100644,000000..100644
--- /dev/null
@@@ -1,30 -1,0 +1,22 @@@
- linktitle: isset
 +---
 +title: isset
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Returns true if the parameter is set.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: []
 +signature: ["isset COLLECTION INDEX", "isset COLLECTION KEY"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
 +Takes either a slice, array, or channel and an index or a map and a key as input.
 +
- {{% warning %}}
- All site-level configuration keys are stored as lower case. Therefore, a `myParam` key-value set in your [site configuration file](/getting-started/configuration/) needs to be accessed with `{{if isset .Site.Params "myparam"}}` and *not* with `{{if isset .Site.Params "myParam"}}`. Note that you can still access the same config key with `.Site.Params.myParam` *or* `.Site.Params.myparam`, for example, when using [`with`](/functions/with).
++```go-html-template
 +{{ if isset .Params "project_url" }} {{ index .Params "project_url" }}{{ end }}
 +```
 +
- {{% /warning %}}
++{{% note %}}
++All site-level configuration keys are stored as lower case. Therefore, a `myParam` key-value set in your [site configuration file](/getting-started/configuration/) needs to be accessed with `{{ if isset .Site.Params "myparam" }}` and *not* with `{{ if isset .Site.Params "myParam" }}`. Note that you can still access the same config key with `.Site.Params.myParam` *or* `.Site.Params.myparam`, for example, when using [`with`](/functions/with).
 +This restriction also applies when accessing page-level front matter keys from within [shortcodes](/content-management/shortcodes/).
++{{% /note %}}
index 72ec4634bd60e87dc412ae9bdbd46899467d15cd,0000000000000000000000000000000000000000..da40b8fcf0ccb45a4f0dc0422556458ef632b44f
mode 100644,000000..100644
--- /dev/null
@@@ -1,48 -1,0 +1,40 @@@
- linktitle: jsonify
 +---
 +title: jsonify
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2020-04-13
 +description: Encodes a given object to JSON.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings,json]
 +signature: ["jsonify INPUT", "jsonify OPTIONS INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: [plainify]
- ```
 +---
 +
 +Jsonify encodes a given object to JSON.
 +
 +To customize the printing of the JSON, pass a dictionary of options as the first
 +argument.  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.
 +
 +
++```go-html-template
 +{{ dict "title" .Title "content" .Plain | jsonify }}
 +{{ dict "title" .Title "content" .Plain | jsonify (dict "indent" "  ") }}
 +{{ dict "title" .Title "content" .Plain | jsonify (dict "prefix" " " "indent" "  ") }}
 +```
 +
 +## Jsonify options
 +
 +indent ("")
 +: Indentation to use.
 +
 +prefix ("")
 +: Indentation prefix.
 +
 +noHTMLEscape (false)
 +: Disable escaping of problematic HTML characters inside JSON quoted strings. The default behavior is to escape &, <, and > to \u0026, \u003c, and \u003e to avoid certain safety problems that can arise when embedding JSON in HTML.
 +
 +See also the `.PlainWords`, `.Plain`, and `.RawContent` [page variables][pagevars].
 +
 +[pagevars]: /variables/page/
index 78d658442094a13c52bb817fda3be12eed733966,0000000000000000000000000000000000000000..ab3e61940e903f08f6d2afec6529909f25d20aa9
mode 100644,000000..100644
--- /dev/null
@@@ -1,37 -1,0 +1,30 @@@
- date: 2018-03-16
 +---
 +title: lang.Merge
 +description: "Merge missing translations from other languages."
-     parent: "functions"
- toc: false
 +categories: [functions]
 +keywords: [multilingual]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +signature: ["lang.Merge FROM TO"]
- deprecated: false
- draft: false
- aliases: []
 +relatedfuncs: []
 +comments:
 +---
 +
 +As an example:
 +
 +```bash
 +{{ $pages := .Site.RegularPages | lang.Merge $frSite.RegularPages | lang.Merge $enSite.RegularPages }}
 +```
 +
 +Will "fill in the gaps" in the current site with, from left to right, content from the French site, and lastly the English.
 +
 +
 +A more practical example is to fill in the missing translations from the other languages:
 +
 +```bash
 +{{ $pages := .Site.RegularPages }}
 +{{ range .Site.Home.Translations }}
 +{{ $pages = $pages | lang.Merge .Site.RegularPages }}
 +{{ end }}
 + ```
index 1a4da807ace9372cc4800e87b1a8850e13320862,0000000000000000000000000000000000000000..af55c92bf7e071993ff0c888214c45415d48431d
mode 100644,000000..100644
--- /dev/null
@@@ -1,16 -1,0 +1,13 @@@
- date: 2021-07-28
 +---
 +title: lang
 +package: lang
 +description: "TODO.."
-     parent: "functions"
 +categories: [functions]
 +keywords: [numbers]
 +menu:
 +  docs:
++    parent: functions
 +signature: ["lang.NumFmt PRECISION NUMBER [OPTIONS [DELIMITER]]"]
 +aliases: ['/functions/numfmt/']
 +type: 'template-func'
 +---
index 4a752cb826e3832d3c5bff5bf44d19aab40061db,0000000000000000000000000000000000000000..72e6a4c0d1cb6384934d8c49b56ffd8b271d61f6
mode 100644,000000..100644
--- /dev/null
@@@ -1,27 -1,0 +1,18 @@@
- linktitle: last
 +---
 +title: last
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: "slices an array to only the last <em>N</em>th elements."
-     parent: "functions"
 +keywords: []
 +categories: [functions]
 +menu:
 +  docs:
- workson: [lists, taxonomies, terms, groups]
- hugoversion:
++    parent: functions
 +toc:
 +signature: ["last INDEX COLLECTION"]
- deprecated: false
- draft: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
-     {{ .Render "summary" }}
++```go-html-template
 +{{ range last 10 .Pages }}
++  {{ .Render "summary" }}
 +{{ end }}
 +```
index 1ff0ac582a47b7837048b345f785b5ac8884a2cd,0000000000000000000000000000000000000000..632e43a0ea0dddd7b42f3e2979d539c726f59b2e
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,16 @@@
- linktitle: le
 +---
 +title: le
- date: 2017-07-26
- publishdate: 2017-07-26
- lastmod: 2017-07-26
 +description: Returns the boolean truth of arg1 <= arg2.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [operators,logic]
 +signature: ["le ARG1 ARG2"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
 +
++```go-html-template
 +{{ if le 5 10 }}true{{ end }}
 +```
index 9f15d79c7c86bcf3b255a92306559e4013716c90,0000000000000000000000000000000000000000..cdf3cf405556833625e3d050bcc52c06cfd40414
mode 100644,000000..100644
--- /dev/null
@@@ -1,63 -1,0 +1,44 @@@
- linktitle: len
- description: Returns the length of a variable according to its type.
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-04-18
 +---
 +title: len
-     parent: "functions"
- keywords: []
++description: Returns the length of a string, slice, map, or collection.
 +categories: [functions]
 +menu:
 +  docs:
- workson: [lists,taxonomies,terms]
- hugoversion:
++    parent: functions
++keywords: [length]
 +signature: ["len INPUT"]
- deprecated: false
- toc: false
- aliases: []
 +relatedfuncs: []
- `len` is a built-in function in Go that returns the length of a variable according to its type. From the Go documentation:
 +---
 +
- > Array: the number of elements in v.
- >
- > Pointer to array: the number of elements in *v (even if v is nil).
- >
- > Slice, or map: the number of elements in v; if v is nil, len(v) is zero.
- >
- > String: the number of bytes in v.
- >
- > Channel: the number of elements queued (unread) in the channel buffer; if v is nil, len(v) is zero.
++With a string:
 +
- `len` is also considered a [fundamental function for Hugo templating].
++```go-html-template
++{{ "ab" | len }} → 2
++{{ "" | len }} → 0
++```
 +
- ## `len` Example 1: Longer Headings
++With a slice:
 +
- You may want to append a class to a heading according to the length of the string therein. The following templating checks to see if the title's length is greater than 80 characters and, if so, adds a `long-title` class to the `<h1>`:
++```go-html-template
++{{ slice "a" "b" | len }} → 2
++{{ slice | len }} → 0
++```
 +
- {{< code file="check-title-length.html" >}}
- <header>
-     <h1{{if gt (len .Title) 80}} class="long-title"{{end}}>{{.Title}}</h1>
- </header>
- {{< /code >}}
++With a map:
 +
- ## `len` Example 2: Counting Pages with `where`
++```go-html-template
++{{ dict "a" 1 "b" 2  | len }} → 2
++{{ dict | len }} → 0
++```
 +
- The following templating uses [`where`] in conjunction with `len` to
- figure out the total number of content pages in a `posts` [section]:
++With a collection:
 +
- {{< code file="how-many-posts.html" >}}
- {{ $posts := (where .Site.RegularPages "Section" "==" "posts") }}
- {{ $postCount := len $posts }}
- {{< /code >}}
++```go-html-template
++{{ site.RegularPages | len }} → 42
++```
 +
- Note the use of `.RegularPages`, a [site variable] that counts all regular content pages but not the `_index.md` pages used to add front matter and content to [list templates].
- [fundamental function for Hugo templating]: /templates/introduction/
- [list templates]: /templates/lists/
- [section]: /content-management/sections/
- [site variable]: /variables/site/
- [`where`]: /functions/where/
++You may also determine the number of pages in a collection with:
 +
++```go-html-template
++{{ site.RegularPages.Len }} → 42
++```
index 3fbfc919b8bb3c031989a3b9c458804f24650315,0000000000000000000000000000000000000000..9accf999e23bab879c782bd4388085aea12ef92e
mode 100644,000000..100644
--- /dev/null
@@@ -1,29 -1,0 +1,21 @@@
- linktitle: lower
 +---
 +title: lower
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Converts all characters in the provided string to lowercase.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings,casing]
 +signature:
 +  - "lower INPUT"
 +  - "strings.ToLower INPUT"
- deprecated: false
- aliases: []
 +relatedfuncs: []
 +---
 +
 +
 +Note that `lower` can be applied in your templates in more than one way:
 +
 +```go-html-template
 +{{ lower "BatMan" }} → "batman"
 +{{ "BatMan" | lower }} → "batman"
 +```
index d2a234986af9e4978478c550a6c6d44f14276352,0000000000000000000000000000000000000000..08cad79045a10068ed856cf34f96eebe4c81ad89
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,16 @@@
- linktitle: lt
 +---
 +title: lt
- date: 2017-07-26
- publishdate: 2017-07-26
- lastmod: 2017-07-26
 +description: Returns the boolean truth of arg1 < arg2.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [operators,logic]
 +signature: ["lt ARG1 ARG2"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
 +
++```go-html-template
 +{{ if lt 5 10 }}true{{ end }}
 +```
index 8d8726cffe17b72dd08a41ffda6756a35c92ff46,0000000000000000000000000000000000000000..9f1f3329e1f50c41d5edcfaf8f902b6c2918cd88
mode 100644,000000..100644
--- /dev/null
@@@ -1,29 -1,0 +1,30 @@@
- linktitle: markdownify
- description: Runs the provided string through the Markdown processor.
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2023-02-09
 +---
 +title: markdownify
-     parent: "functions"
++description: Renders markdown to HTML.
 +keywords: [markdown,content]
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +signature: ["markdownify INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
- {{< new-in "0.93.0" >}} **Note**: `markdownify` now supports [Render Hooks] just like [`.Page.RenderString`]. However, if you use more complicated [Render Hooks] relying on page context, use [`.Page.RenderString`] instead. See [GitHub issue #9692](https://github.com/gohugoio/hugo/issues/9692) for more details.
++```go-html-template
 +{{ .Title | markdownify }}
 +```
 +
- [Render Hooks]: /templates/render-hooks/
++If the resulting HTML is a single paragraph, Hugo removes the wrapping `p` tags to produce inline HTML as required per the example above.
++
++To keep the wrapping `p` tags for a single paragraph, use the [`.Page.RenderString`] method, setting the `display` option to `block`.
++
++If the resulting HTML is two or more paragraphs, Hugo leaves the wrapping `p` tags in place.
 +
 +[`.Page.RenderString`]: /functions/renderstring/
++
++{{% note %}}
++Although the `markdownify` function honors [markdown render hooks] when rendering markdown to HTML, use the `.Page.RenderString` method instead of `markdownify` if a render hook accesses `.Page` context. See issue [#9692] for details.
++
++[markdown render hooks]: /templates/render-hooks/
++[#9692]: https://github.com/gohugoio/hugo/issues/9692
++{{% /note %}}
index e0222f3b29cc24652c91a45708799f5e59cc2f27,0000000000000000000000000000000000000000..c36b8ea0b0ba76d464ccc1acc805e3f288cd4a02
mode 100644,000000..100644
--- /dev/null
@@@ -1,42 -1,0 +1,34 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2023-05-15
 +---
 +title: Math
 +description: Hugo provides mathematical operators in templates.
-     parent: "functions"
 +keywords: [math, operators]
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +toc:
 +signature: []
- deprecated: false
- draft: false
- aliases: []
 +relatedfuncs: []
 +---
 +
 +| Function     | Description                                                                 | Example                             |
 +|--------------|-----------------------------------------------------------------------------|-------------------------------------|
 +| `add`        | Adds two or more numbers.                                                   | `{{ add 12 3 2 }}` &rarr; `17`      |
 +|              | *If one of the numbers is a float, the result is a float.*                  | `{{ add 1.1 2 }}` &rarr; `3.1`      |
 +| `sub`        | Subtracts one or more numbers from the first number.                        | `{{ sub 12 3 2 }}` &rarr; `7`       |
 +|              | *If one of the numbers is a float, the result is a float.*                  | `{{ sub 3 2.5 }}` &rarr; `0.5`      |
 +| `mul`        | Multiplies two or more numbers.                                             | `{{ mul 12 3 2 }}` &rarr; `72`      |
 +|              | *If one of the numbers is a float, the result is a float.*                  | `{{ mul 2 3.1 }}` &rarr; `6.2`      |
 +| `div`        | Divides the first number by one or more numbers.                            | `{{ div 12 3 2 }}` &rarr; `2`       |
 +|              | *If one of the numbers is a float, the result is a float.*                  | `{{ div 6 4.0 }}` &rarr; `1.5`      |
 +| `mod`        | Modulus of two integers.                                                    | `{{ mod 15 3 }}` &rarr; `0`         |
 +| `modBool`    | Boolean of modulus of two integers. Evaluates to `true` if result equals 0. | `{{ modBool 15 3 }}` &rarr; `true`  |
 +| `math.Abs`   | Returns the absolute value of the given number.                             | `{{ math.Abs -2.1 }}` &rarr; `2.1`  |
 +| `math.Ceil`  | Returns the least integer value greater than or equal to the given number.  | `{{ math.Ceil 2.1 }}` &rarr; `3`    |
 +| `math.Floor` | Returns the greatest integer value less than or equal to the given number.  | `{{ math.Floor 1.9 }}` &rarr; `1`   |
 +| `math.Log`   | Returns the natural logarithm of the given number.                          | `{{ math.Log 42 }}` &rarr; `3.737`  |
 +| `math.Max`   | Returns the greater of two or more numbers.                                 | `{{ math.Max 12 3 2 }}` &rarr; `12` |  
 +| `math.Min`   | Returns the smaller of two or more numbers.                                 | `{{ math.Min 12 3 2 }}` &rarr; `2`  |
 +| `math.Pow`   | Returns the first number raised to the power of the second number.          | `{{ math.Pow 2 3 }}` &rarr; `8`     |
 +| `math.Round` | Returns the nearest integer, rounding half away from zero.                  | `{{ math.Round 1.5 }}` &rarr; `2`   |
 +| `math.Sqrt`  | Returns the square root of the given number.                                | `{{ math.Sqrt 81 }}` &rarr; `9`     |
index 2168034c46d285e2a0b7118f7ebf63f63ea1544c,0000000000000000000000000000000000000000..cc5fd31ea19f43a99d10cf6da30bdbde67cae6f3
mode 100644,000000..100644
--- /dev/null
@@@ -1,30 -1,0 +1,22 @@@
- linktitle: md5
 +---
 +title: md5
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: hashes the given input and returns its MD5 checksum.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: []
 +signature: ["md5 INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: [sha]
- ```
 +---
 +
++```go-html-template
 +{{ md5 "Hello world, gophers!" }}
 +<!-- returns the string "b3029f756f98f79e7f1b7f1d1f0dd53b" -->
 +```
 +
 +This can be useful if you want to use [Gravatar](https://en.gravatar.com/) for generating a unique avatar:
 +
 +```html
 +<img src="https://www.gravatar.com/avatar/{{ md5 "your@email.com" }}?s=100&d=identicon">
 +```
index 0944815a121e4fd1db14c17b054d6894611760da,0000000000000000000000000000000000000000..68e56145030c72d5ded446e4dff88f558f93f9f1
mode 100644,000000..100644
--- /dev/null
@@@ -1,71 -1,0 +1,67 @@@
- date: 2019-08-08
 +---
 +title: merge
 +description: "Returns the result of merging two or more maps."
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion: "0.56.0"
++    parent: functions
 +keywords: [dictionary]
 +signature: ["collections.Merge MAP MAP...", "merge MAP MAP..."]
- aliases: []
 +relatedfuncs: [dict, append, reflect.IsMap, reflect.IsSlice]
- Regardless of depth, merging only applies to maps. For slices, use [append]({{< ref "functions/append" >}}).
 +---
 +
 +Returns the result of merging two or more maps from left to right. If a key already exists, `merge` updates its value. If a key is absent, `merge` inserts the value under the new key.
 +
 +Key handling is case-insensitive.
 +
 +The following examples use these map definitions:
 +
 +```go-html-template
 +{{ $m1 := dict "x" "foo" }}
 +{{ $m2 := dict "x" "bar" "y" "wibble" }}
 +{{ $m3 := dict "x" "baz" "y" "wobble" "z" (dict "a" "huey") }}
 +```
 +
 +Example 1
 +
 +```go-html-template
 +{{ $merged := merge $m1 $m2 $m3 }}
 +
 +{{ $merged.x }}   --> baz
 +{{ $merged.y }}   --> wobble
 +{{ $merged.z.a }} --> huey
 +```
 +
 +Example 2
 +
 +```go-html-template
 +{{ $merged := merge $m3 $m2 $m1 }}
 +
 +{{ $merged.x }}   --> foo
 +{{ $merged.y }}   --> wibble
 +{{ $merged.z.a }} --> huey
 +```
 +
 +Example 3
 +
 +```go-html-template
 +{{ $merged := merge $m2 $m3 $m1 }}
 +
 +{{ $merged.x }}   --> foo
 +{{ $merged.y }}   --> wobble
 +{{ $merged.z.a }} --> huey
 +```
 +
 +Example 4
 +
 +```go-html-template
 +{{ $merged := merge $m1 $m3 $m2 }}
 +
 +{{ $merged.x }}   --> bar
 +{{ $merged.y }}   --> wibble
 +{{ $merged.z.a }} --> huey
 +```
 +
 +{{% note %}}
++Regardless of depth, merging only applies to maps. For slices, use [append](/functions/append).
 +{{% /note %}}
index e072993d23f0f96968e0c9832aad14c2aedd0b47,0000000000000000000000000000000000000000..54f66823c87fee50602ae3035f347bcd97432dbd
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,16 @@@
- linktitle: ne
 +---
 +title: ne
- date: 2017-07-26
- publishdate: 2017-07-26
- lastmod: 2017-07-26
 +description: Returns the boolean truth of arg1 != arg2.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [operators,logic]
 +signature: ["ne ARG1 ARG2"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
 +
++```go-html-template
 +{{ if ne .Section "blog" }}current{{ end }}
 +```
index 24e1ab3f713257d010df831935fe096c435d30a8,0000000000000000000000000000000000000000..68d628f119c2709cf6df7dc65fb30de6f565a467
mode 100644,000000..100644
--- /dev/null
@@@ -1,49 -1,0 +1,41 @@@
- linktitle: now
 +---
 +title: now
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-04-30
 +description: Returns the current local time 
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [dates,time]
 +signature: ["now"]
- deprecated: false
- aliases: []
 +relatedfuncs: [Unix,dateFormat]
- ```
 +---
 +
 +See [`time.Time`](https://godoc.org/time#Time).
 +
 +For example, building your site on June 24, 2017, with the following templating:
 +
-     <small>&copy; {{ now.Format "2006"}}</small>
++```go-html-template
 +<div>
- ```
++    <small>&copy; {{ now.Format "2006" }}</small>
 +</div>
 +```
 +
 +would produce the following:
 +
++```html
 +<div>
 +    <small>&copy; 2017</small>
 +</div>
 +```
 +
 +The above example uses the [`.Format` function](/functions/format), which page includes a full listing of date formatting using Go's layout string.
 +
 +{{% note %}}
 +Older Hugo themes may still be using the obsolete Page’s `.Now` (uppercase with leading dot), which causes build error that looks like the following:
 +
 +    ERROR ... Error while rendering "..." in "...": ...
 +    executing "..." at <.Now.Format>:
 +    can't evaluate field Now in type *hugolib.PageOutput
 +
 +Be sure to use `now` (lowercase with _**no**_ leading dot) in your templating.
 +{{% /note %}}
index a56f79735c4ace6f5cddabe9230b08850c54c872,0000000000000000000000000000000000000000..9ace3b8bfbfd574f05cfaa79627c50a4ddcf0e17
mode 100644,000000..100644
--- /dev/null
@@@ -1,32 -1,0 +1,25 @@@
- date: 2018-08-07
- publishdate: 2018-08-07
- lastmod: 2021-11-26
 +---
 +title: os.Stat
 +description: Returns a FileInfo structure describing a file or directory.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [files]
 +signature: ["os.Stat PATH"]
- deprecated: false
- aliases: []
 +relatedfuncs: ['os.FileExists','os.ReadDir','os.ReadFile']
- The `os.Stat` function attempts to resolve the path relative to the root of your project directory. If a matching file or directory is not found, it will attempt to resolve the path relative to the [`contentDir`]({{< relref "getting-started/configuration#contentdir">}}). A leading path separator (`/`) is optional.
 +---
++The `os.Stat` function attempts to resolve the path relative to the root of your project directory. If a matching file or directory is not found, it will attempt to resolve the path relative to the [`contentDir`](/getting-started/configuration#contentdir). A leading path separator (`/`) is optional.
 +
 +```go-html-template
 +{{ $f := os.Stat "README.md" }}
 +{{ $f.IsDir }}    --> false (bool)
 +{{ $f.ModTime }}  --> 2021-11-25 10:06:49.315429236 -0800 PST (time.Time)
 +{{ $f.Name }}     --> README.md (string)
 +{{ $f.Size }}     --> 241 (int64)
 +
 +{{ $d := os.Stat "content" }}
 +{{ $d.IsDir }}    --> true (bool)
 +```
 +
 +Details of the `FileInfo` structure are available in the [Go documentation](https://pkg.go.dev/io/fs#FileInfo).
index 4f1764814a0782640e39a8c5ec62213148db1ecc,0000000000000000000000000000000000000000..c01bf4a91f56d2317c84636ea9968a96a5a459c2
mode 100644,000000..100644
--- /dev/null
@@@ -1,47 -1,0 +1,46 @@@
-     parent: 'functions'
- aliases: []
 +---
 +title: .Param
 +description: Returns a page parameter, falling back to a site parameter if present.
 +signature: ['.Param KEY']
 +categories: [functions]
 +keywords: ['front matter', 'params']
 +menu:
 +  docs:
- {{< code-toggle file="content/about.md" fm=true copy=false >}}
- title = 'About'
++    parent: functions
 +---
 +
 +The `.Param` method on `.Page` looks for the given `KEY` in page parameters, and returns the corresponding value. If it cannot find the `KEY` in page parameters, it looks for the `KEY` in site parameters. If it cannot find the `KEY` in either location, the `.Param` method returns `nil`. 
 +
 +Site and theme developers commonly set parameters at the site level, allowing content authors to override those parameters at the page level.
 +
 +For example, to show a table of contents on every page, but allow authors to hide the table of contents as needed:
 +
 +**Configuration**
 +
 +{{< code-toggle file="config" copy=false >}}
 +[params]
 +display_toc = true
 +{{< /code-toggle >}}
 +
 +**Content**
 +
- {{< code file="layouts/_default/single.html" copy="false" >}}
++{{< code-toggle file="content/example.md" fm=true copy=false >}}
++title = 'Example'
 +date = 2023-01-01
 +draft = false
 +display_toc = false
 +{{< /code-toggle >}}
 +
 +**Template**
 +
- {{< code file="layouts/_default/single.html" copy="false" >}}
++{{< code file="layouts/_default/single.html" copy=false >}}
 +{{ if .Param "display_toc" }}
 +  {{ .TableOfContents }}
 +{{ end }}
 +{{< /code >}}
 +
 +The `.Param` method returns the value associated with the given `KEY`, regardless of whether the value is truthy or falsy. If you need to ignore falsy values, use this construct instead:
 +
++{{< code file="layouts/_default/single.html" copy=false >}}
 +{{ or .Params.foo site.Params.foo }}
 +{{< /code >}}
index 2e79bb32f7630cc31759031f48007e55f9fd51f1,0000000000000000000000000000000000000000..d443864f2af650e2820b721f9deec55252d315c6
mode 100644,000000..100644
--- /dev/null
@@@ -1,48 -1,0 +1,39 @@@
- linktitle: partialCached
 +---
 +title: partialCached
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Allows for caching of partials that do not need to be re-rendered on every invocation.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [performance]
 +signature: ["partialCached LAYOUT INPUT [VARIANT...]"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
 +The `partialCached` template function can offer significant performance gains for complex templates that don't need to be re-rendered on every invocation.
 +
 +**Note:** Each Site (or language) has its own `partialCached` cache, so each site will execute a partial once.
 +
 +**Note**: Hugo renders pages in parallel, and will render the partial more than once with concurrent calls to the `partialCached` function. After Hugo caches the rendered partial, new pages entering the build pipeline will use the cached result.
 +
 +Here is the simplest usage:
 +
- ```
++```go-html-template
 +{{ partialCached "footer.html" . }}
 +```
 +
 +You can also pass additional parameters to `partialCached` to create *variants* of the cached partial. For example, if you have a complex partial that should be identical when rendered for pages within the same section, you could use a variant based upon section so that the partial is only rendered once per section:
 +
 +{{< code file="partial-cached-example.html" >}}
 +{{ partialCached "footer.html" . .Section }}
 +{{< /code >}}
 +
 +If you need to pass additional parameters to create unique variants, you can pass as many variant parameters as you need:
 +
- > See also [The Full Partial Series Part 1: Caching!](https://regisphilibert.com/blog/2019/12/hugo-partial-series-part-1-caching-with-partialcached/)
++```go-html-template
 +{{ partialCached "footer.html" . .Params.country .Params.province }}
 +```
 +
 +Note that the variant parameters are not made available to the underlying partial template. They are only use to create a unique cache key. Since Hugo `0.61.0` you can use any object as cache key(s), not just strings.
 +
++See also [The Full Partial Series Part 1: Caching!](https://regisphilibert.com/blog/2019/12/hugo-partial-series-part-1-caching-with-partialcached/).
index a6bfc2bd5da59665d0652b8eef731ed8862601b0,0000000000000000000000000000000000000000..5ea0564fa324d284bc12b0561a23a558c0fa65b4
mode 100644,000000..100644
--- /dev/null
@@@ -1,30 -1,0 +1,24 @@@
- date: 2018-11-28
- publishdate: 2018-11-28
- lastmod: 2018-11-28
 +---
 +title: path.Base
 +description: Base returns the last element of a path.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion: "0.40"
++    parent: functions
 +keywords: [path, base]
 +signature: ["path.Base PATH"]
- deprecated: false
 +relatedfuncs: [path.BaseName, path.Clean, path.Dir, path.Ext, path.Join, path.Split]
- ```
 +---
 +
 +`path.Base` returns the last element of `PATH`.
 +
 +If `PATH` is empty, `.` is returned.
 +
 +**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
 +
++```go-html-template
 +{{ path.Base "a/news.html" }} → "news.html"
 +{{ path.Base "news.html" }} → "news.html"
 +{{ path.Base "a/b/c" }} → "c"
 +{{ path.Base "/x/y/z/" }} → "z"
 +```
index 6a5b9f0a0ebace3245afecb8966d693163654167,0000000000000000000000000000000000000000..95a521a1ab702df0534be22115ef7fe3f5f3706d
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,22 @@@
- date: 2022-06-04
 +---
 +title: path.BaseName
 +description: BaseName returns the last element of a path, removing the extension if present.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- deprecated: false
++    parent: functions
 +keywords: [path, base]
 +signature: ["path.BaseName PATH"]
 +relatedfuncs: [path.Base, path.Clean, path.Dir, path.Ext, path.Join, path.Split]
 +---
 +
 +If `PATH` is empty, `.` is returned.
 +
 +**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
 +
 +```go-html-template
 +{{ path.BaseName "a/news.html" }} → "news"
 +{{ path.BaseName "news.html" }} → "news"
 +{{ path.BaseName "a/b/c" }} → "c"
 +{{ path.BaseName "/x/y/z/" }} → "z"
 +```
index 852de65fd5dd2c9de42b139b61ce0c3018337d2b,0000000000000000000000000000000000000000..ce53cc9ff277375a7e1c246dc17a21a2e1d5adb1
mode 100644,000000..100644
--- /dev/null
@@@ -1,27 -1,0 +1,24 @@@
- date: 2021-10-08
- # publishdate: 2018-11-28
- # lastmod: 2018-11-28
 +---
 +title: path.Clean
 +description: Replaces path separators with slashes (`/`) and removes extraneous separators.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- ```
++    parent: functions
 +keywords: [path, clean]
 +signature: ["path.Clean PATH"]
 +relatedfuncs: [path.Base, path.BaseName, path.Dir, path.Ext, path.Join, path.Split]
 +---
 +
 +`path.Clean` replaces path separators with slashes (`/`) and removes extraneous separators, including trailing separators.
 +
- ```
++```go-html-template
 +{{ path.Clean "foo//bar" }} → "foo/bar"
 +{{ path.Clean "/foo/bar/" }} → "/foo/bar"
 +```
 +
 +On a Windows system, if `.File.Path` is `foo\bar.md`, then:
 +
++```go-html-template
 +{{ path.Clean .File.Path }} → "foo/bar.md"
 +```
index 161a0daa825b015c9d1c141dfd4db7e24b677346,0000000000000000000000000000000000000000..0083a1efa67d79a5fc450332fc1cdea7dde0e7e7
mode 100644,000000..100644
--- /dev/null
@@@ -1,31 -1,0 +1,25 @@@
- date: 2018-11-28
- publishdate: 2018-11-28
- lastmod: 2018-11-28
 +---
 +title: path.Dir
 +description: Dir returns all but the last element of a path.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion: "0.40"
++    parent: functions
 +keywords: [path, dir]
 +signature: ["path.Dir PATH"]
- deprecated: false
 +relatedfuncs: [path.Base, path.BaseName, path.Clean, path.Ext, path.Join, path.Split]
- ```
 +---
 +
 +`path.Dir` returns all but the last element of `PATH`, typically `PATH`'s directory.
 +
 +The returned path will never end in a slash.
 +If `PATH` is empty, `.` is returned.
 +
 +**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
 +
++```go-html-template
 +{{ path.Dir "a/news.html" }} → "a"
 +{{ path.Dir "news.html" }} → "."
 +{{ path.Dir "a/b/c" }} → "a/b"
 +{{ path.Dir "/x/y/z" }} → "/x/y"
 +```
index 8c6fe907c3275f3c105066c3691bbfe0bc38e49b,0000000000000000000000000000000000000000..2e1946608c9621921e2bc5d1406b26da7d209ff8
mode 100644,000000..100644
--- /dev/null
@@@ -1,28 -1,0 +1,22 @@@
- date: 2018-11-28
- publishdate: 2018-11-28
- lastmod: 2018-11-28
 +---
 +title: path.Ext
 +description: Ext returns the file name extension of a path.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion: "0.40"
++    parent: functions
 +keywords: [path, ext, extension]
 +signature: ["path.Ext PATH"]
- deprecated: false
 +relatedfuncs: [path.Base, path.BaseName, path.Clean, path.Dir, path.Join, path.Split]
- ```
 +---
 +
 +`path.Ext` returns the file name extension `PATH`.
 +
 +The extension is the suffix beginning at the final dot in the final slash-separated element `PATH`;
 +it is empty if there is no dot.
 +
 +**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
 +
++```go-html-template
 +{{ path.Ext "a/b/c/news.html" }} → ".html"
 +```
index 579e8667e049ec604d6719eac8830b23459fbfff,0000000000000000000000000000000000000000..5ac5ac4693e958a278a407dd76ee40757b48d415
mode 100644,000000..100644
--- /dev/null
@@@ -1,28 -1,0 +1,22 @@@
- date: 2018-11-28
- publishdate: 2018-11-28
- lastmod: 2018-11-28
 +---
 +title: path.Join
 +description: Join path elements into a single path.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion: "0.39"
++    parent: functions
 +keywords: [path, join]
 +signature: ["path.Join ELEMENT..."]
- deprecated: false
 +relatedfuncs: [path.Base, path.BaseName, path.Clean, path.Dir, path.Ext, path.Split]
- ```
 +---
 +
 +`path.Join` joins path elements into a single path, adding a separating slash if necessary.
 +All empty strings are ignored.
 +
 +**Note:** All path elements on Windows are converted to slash ('/') separators.
 +
++```go-html-template
 +{{ path.Join "partial" "news.html" }} → "partial/news.html"
 +{{ path.Join "partial/" "news.html" }} → "partial/news.html"
 +{{ path.Join "foo/baz" "bar" }} → "foo/baz/bar"
 +```
index 7737b77d39762b0ae1ff9e202f5991b67340a2ea,0000000000000000000000000000000000000000..aa915788e0b36ff6d48405790e8377011fbf9517
mode 100644,000000..100644
--- /dev/null
@@@ -1,30 -1,0 +1,24 @@@
- date: 2018-11-28
- publishdate: 2018-11-28
- lastmod: 2018-11-28
 +---
 +title: path.Split
 +description: Split path immediately following the final slash.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion: "0.39"
++    parent: functions
 +keywords: [path, split]
 +signature: ["path.Split PATH"]
- deprecated: false
 +relatedfuncs: [path.Base, path.BaseName, path.Clean, path.Dir, path.Ext, path.Join]
- ```
 +---
 +
 +`path.Split` splits `PATH` immediately following the final slash, separating it into a directory and a base component.
 +
 +The returned values have the property that `PATH` = `DIR`+`BASE`.
 +If there is no slash in `PATH`, it returns an empty directory and the base is set to `PATH`.
 +
 +**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
 +
++```go-html-template
 +{{ $dirFile := path.Split "a/news.html" }} → $dirFile.Dir → "a/", $dirFile.File → "news.html"
 +{{ $dirFile := path.Split "news.html" }} → $dirFile.Dir → "", $dirFile.File → "news.html"
 +{{ $dirFile := path.Split "a/b/c" }} → $dirFile.Dir → "a/b/", $dirFile.File →  "c"
 +```
index 1258c139a03fead131c5362c3c5c92e7b23eec2c,0000000000000000000000000000000000000000..78f52683bfe3a5c68cc6a6574063c7d7ac95eba6
mode 100644,000000..100644
--- /dev/null
@@@ -1,27 -1,0 +1,19 @@@
- linktitle: plainify
 +---
 +title: plainify
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-04-30
 +description: Strips any HTML and returns the plain text version of the provided string.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature: ["plainify INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: [jsonify]
- ```
 +---
 +
++```go-html-template
 +{{ "<b>BatMan</b>" | plainify }} → "BatMan"
 +```
 +
 +See also the `.PlainWords`, `.Plain`, and `.RawContent` [page variables][pagevars].
 +
 +[pagevars]: /variables/page/
index 9c50409343c15ea2368c717294229b4c4613e86b,0000000000000000000000000000000000000000..bd0860802ac094a9d9cac2be778834e096905b71
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,15 @@@
- linktitle: pluralize
 +---
 +title: pluralize
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Pluralizes the given word according to a set of common English pluralization rules
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature: ["pluralize INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
++```go-html-template
 +{{ "cat" | pluralize }} → "cats"
 +```
index 42b8dcb759ecc271d43d64e368782ee92e3c58cd,0000000000000000000000000000000000000000..4af0b6b96c35ce8d006af3b43b120c58b51114df
mode 100644,000000..100644
--- /dev/null
@@@ -1,26 -1,0 +1,19 @@@
- linktitle: print
 +---
 +title: print
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Prints the default representation of the given arguments using the standard `fmt.Print` function.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature: ["print INPUT"]
- deprecated: false
 +relatedfuncs: []
- ```
 +---
 +
 +See [the go doc](https://golang.org/pkg/fmt/) for additional information.
 +
++```go-html-template
 +{{ print "foo" }} → "foo"
 +{{ print "foo" "bar" }} → "foobar"
 +{{ print (slice 1 2 3) }} → [1 2 3]
 +```
index 8b12b988317363590ea3af1447a080c751e88969,0000000000000000000000000000000000000000..66f85e159204c919f5b675eb8fb8843655ae2325
mode 100644,000000..100644
--- /dev/null
@@@ -1,28 -1,0 +1,21 @@@
- linktitle: printf
 +---
 +title: printf
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Formats a string using the standard `fmt.Sprintf` function.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature: ["printf FORMAT INPUT"]
- deprecated: false
 +relatedfuncs: []
- ```
 +---
 +
 +See [the go doc](https://golang.org/pkg/fmt/) for additional information.
 +
- ```
++```go-html-template
 +{{ i18n ( printf "combined_%s" $var ) }}
 +```
 +
++```go-html-template
 +{{ printf "formatted %.2f" 3.1416 }}
 +```
index 1ea70cbad9e1bb04ab840cff775f92b5f78fa129,0000000000000000000000000000000000000000..6ad57f402eb4762b450b4cb433a1ca51f3a077c0
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,17 @@@
- linktitle: println
 +---
 +title: println
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Prints the default representation of the given argument using the standard `fmt.Print` function and enforces a linebreak.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature: ["println INPUT"]
- deprecated: false
 +relatedfuncs: []
- ```
 +---
 +
 +See [the go doc](https://golang.org/pkg/fmt/) for additional information. `\n` denotes the linebreak but isn't printed in the templates as seen below:
 +
++```go-html-template
 +{{ println "foo" }} → "foo\n"
 +```
index 9e8c4b83f9eb140f4f79f1af6f188c702331d729,0000000000000000000000000000000000000000..b21b3a0b29d69239b75a043e13f389ec6e5629a0
mode 100644,000000..100644
--- /dev/null
@@@ -1,36 -1,0 +1,28 @@@
- linktitle: querify
 +---
 +title: querify
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Takes a set or slice of key-value pairs and returns a query string to be appended to URLs.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- hugoversion:
- deprecated: false
- workson: []
++    parent: functions
 +keywords: [urls]
 +signature: ["querify KEY VALUE [KEY VALUE]...", "querify COLLECTION"]
- aliases: []
 +relatedfuncs: []
 +---
 +
 +`querify` takes a set or slice of key-value pairs and returns a [query string](https://en.wikipedia.org/wiki/Query_string) that can be appended to a URL.
 +
 +The following examples create a link to a search results page on Google.
 +
 +```go-html-template
 +<a href="https://www.google.com?{{ (querify "q" "test" "page" 3) | safeURL }}">Search</a>
 +
 +{{ $qs := slice "q" "test" "page" 3 }}
 +<a href="https://www.google.com?{{ (querify $qs) | safeURL }}">Search</a>
 +```
 +
 +Both of these examples render the following HTML:
 +
 +```html
 +<a href="https://www.google.com?page=3&q=test">Search</a>
 +```
index 599e2ad25bebde6d79fd0f98d2c6f33c3c9d4abd,0000000000000000000000000000000000000000..da0a4d7ef8574368baac2cb5ae53b8ca06c874c6
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,15 @@@
- linktitle:
 +---
 +title: range
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Iterates over a map, array, or slice.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [iteration]
 +signature: ["range COLLECTION"]
- deprecated: false
- draft: false
- aliases: []
 +relatedfuncs: []
 +---
 +
 +Just like in the Go programming language, Go and Hugo templates make heavy use of `range` to iterate over a map, array or slice. Other templating languages use a foreach for the equivalent functionality.
 +
 +`range` is fundamental to templating in Hugo. (See the [Introduction to Hugo Templates](/templates/introduction/) for more examples.)
index 70fe7b66cc836788cb8c714b5de2fab0ca212bc7,0000000000000000000000000000000000000000..3ad43126afe0f884e65e6894f5795f05c40b33a7
mode 100644,000000..100644
--- /dev/null
@@@ -1,51 -1,0 +1,45 @@@
- publishdate: 2017-02-01
- lastmod: 2021-11-26
 +---
 +title: readDir
 +description: Returns an array of FileInfo structures sorted by filename, one element for each directory entry.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [files]
 +signature: ["os.ReadDir PATH", "readDir PATH"]
- deprecated: false
- aliases: []
 +relatedfuncs: ['os.FileExists','os.ReadFile','os.Stat']
- For more information on using `readDir` and `readFile` in your templates, see [Local File Templates]({{< relref "/templates/files" >}}).
 +---
 +The `os.ReadDir` function resolves the path relative to the root of your project directory. A leading path separator (`/`) is optional.
 +
 +With this directory structure:
 +
 +```text
 +content/
 +├── about.md
 +├── contact.md
 +└── news/
 +    ├── article-1.md
 +    └── article-2.md
 +```
 +
 +This template code:
 +
 +```go-html-template
 +{{ range os.ReadDir "content" }}
 +  {{ .Name }} --> {{ .IsDir }}
 +{{ end }}
 +```
 +
 +Produces:
 +
 +```html
 +about.md --> false
 +contact.md --> false
 +news --> true
 +```
 +
 +Note that `os.ReadDir` is not recursive.
 +
 +Details of the `FileInfo` structure are available in the [Go documentation](https://pkg.go.dev/io/fs#FileInfo).
 +
++For more information on using `readDir` and `readFile` in your templates, see [Local File Templates](/templates/files).
index b0a88458be2f89e29430abdeb8396c4e4a8562fc,0000000000000000000000000000000000000000..c700d7aa05e17d69df65f7b8d72cc5ba2da49379
mode 100644,000000..100644
--- /dev/null
@@@ -1,41 -1,0 +1,34 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2021-11-26
 +---
 +title: readFile
 +description: Returns the contents of a file.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [files]
 +signature: ["os.ReadFile PATH", "readFile PATH"]
- deprecated: false
- aliases: []
 +relatedfuncs: ['os.FileExists','os.ReadDir','os.Stat']
- The `os.ReadFile` function attempts to resolve the path relative to the root of your project directory. If a matching file is not found, it will attempt to resolve the path relative to the [`contentDir`]({{< relref "getting-started/configuration#contentdir">}}). A leading path separator (`/`) is optional.
 +---
- For more information on using `readDir` and `readFile` in your templates, see [Local File Templates]({{< relref "/templates/files" >}}).
++The `os.ReadFile` function attempts to resolve the path relative to the root of your project directory. If a matching file is not found, it will attempt to resolve the path relative to the [`contentDir`](/getting-started/configuration#contentdir). A leading path separator (`/`) is optional.
 +
 +With a file named README.md in the root of your project directory:
 +
 +```text
 +This is **bold** text.
 +```
 +
 +This template code:
 +
 +```go-html-template
 +{{ os.ReadFile "README.md" }}
 +```
 +
 +Produces:
 +
 +```html
 +This is **bold** text.
 +```
 +
 +Note that `os.ReadFile` returns raw (uninterpreted) content.
 +
++For more information on using `readDir` and `readFile` in your templates, see [Local File Templates](/templates/files).
index 3387ce6d0276d3c1f054d85d5a602d64484d781d,0000000000000000000000000000000000000000..32bf79ca138f07e1df0dbe360fc9f10408136a38
mode 100644,000000..100644
--- /dev/null
@@@ -1,50 -1,0 +1,42 @@@
- linktitle: ref
 +---
 +title: ref
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2020-09-05
 +description: Returns the absolute permalink to a page.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [cross references, anchors]
 +signature: ["ref . PAGE"]
- deprecated: false
- aliases: []
 +relatedfuncs: [relref]
 +---
 +
 +This function takes two parameters:
 +
 +- The context of the page from which to resolve relative paths, typically the current page (`.`)
 +- The path to a page, with or without a file extension, with or without an anchor. A path without a leading `/` is first resolved relative to the given context, then to the remainder of the site.
 +
 +```go-html-template
 +{{ ref . "about" }}
 +{{ ref . "about#anchor" }}
 +{{ ref . "about.md" }}
 +{{ ref . "about.md#anchor" }}
 +{{ ref . "#anchor" }}
 +{{ ref . "/blog/my-post" }}
 +{{ ref . "/blog/my-post.md" }}
 +```
 +
 +To return the absolute permalink to another language version of a page:
 +
 +```go-html-template
 +{{ ref . (dict "path" "about.md" "lang" "fr") }}
 +```
 +
 +To return the absolute permalink to another Output Format of a page:
 +
 +```go-html-template
 +{{ ref . (dict "path" "about.md" "outputFormat" "rss") }}
 +```
 +
 +Hugo emits an error or warning if the page cannot be uniquely resolved. The error behavior is configurable; see [Ref and RelRef Configuration](/content-management/cross-references/#ref-and-relref-configuration).
 +
 +This function is used by Hugo's built-in [`ref`](/content-management/shortcodes/#ref-and-relref) shortcode. For a detailed explanation of how to leverage this shortcode for content management, see [Links and Cross References](/content-management/cross-references/).
index 9ad50b599477b8efd525e84ba4d6d1fd322b105b,0000000000000000000000000000000000000000..aa8da7d538e2eb0afbacc702dce8a490d313f552
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,18 @@@
- date: 2018-11-28
- publishdate: 2018-11-28
- lastmod: 2018-11-28
 +---
 +title: reflect.IsMap
 +description: Reports if a value is a map.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion: "v0.53"
++    parent: functions
 +keywords: [reflect, reflection, kind]
 +signature: ["reflect.IsMap INPUT"]
- deprecated: false
 +relatedfuncs: [reflect.IsSlice]
- ```
 +---
 +
 +`reflect.IsMap` reports if `VALUE` is a map.  Returns a boolean.
 +
++```go-html-template
 +{{ reflect.IsMap (dict "key" "value") }} → true
 +{{ reflect.IsMap "yo" }} → false
 +```
index 38640918a5a81ec7c377eb4add01e1d478c54dee,0000000000000000000000000000000000000000..0a29d8f3e2204213ce26e5c9367800b25f0ffdfd
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,18 @@@
- date: 2018-11-28
- publishdate: 2018-11-28
- lastmod: 2018-11-28
 +---
 +title: reflect.IsSlice
 +description: Reports if a value is a slice.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion: "0.53"
++    parent: functions
 +keywords: [reflect, reflection, kind]
 +signature: ["reflect.IsSlice INPUT"]
- deprecated: false
 +relatedfuncs: [reflect.IsMap]
- ```
 +---
 +
 +`reflect.IsSlice` reports if `VALUE` is a slice.  Returns a boolean.
 +
++```go-html-template
 +{{ reflect.IsSlice (slice 1 2 3) }} → true
 +{{ reflect.IsSlice "yo" }} → false
 +```
index 1f32f60a24fdfa14de64a306339ef6c04f611187,0000000000000000000000000000000000000000..f60d5559b2d9d571bc4afd966fa9b158a99cab94
mode 100644,000000..100644
--- /dev/null
@@@ -1,57 -1,0 +1,49 @@@
- linktitle: relref
 +---
 +title: relref
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2020-09-05
 +description: Returns the relative permalink to a page.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [cross references, anchors]
 +signature: ["relref . PAGE"]
- deprecated: false
- aliases: []
 +relatedfuncs: [ref]
 +---
 +
 +This function takes two parameters:
 +
 +- The context of the page from which to resolve relative paths, typically the current page (`.`)
 +- The path to a page, with or without a file extension, with or without an anchor. A path without a leading `/` is first resolved relative to the given context, then to the remainder of the site.
 +
 +```go-html-template
 +{{ relref . "about" }}
 +{{ relref . "about#anchor" }}
 +{{ relref . "about.md" }}
 +{{ relref . "about.md#anchor" }}
 +{{ relref . "#anchor" }}
 +{{ relref . "/blog/my-post" }}
 +{{ relref . "/blog/my-post.md" }}
 +```
 +
 +The permalink returned is relative to the protocol+host portion of the baseURL specified in the site configuration. For example:
 +
 +Code|baseURL|Permalink
 +:--|:--|:--
 +`{{ relref . "/about" }}`|`http://example.org/`|`/about/`
 +`{{ relref . "/about" }}`|`http://example.org/x/`|`/x/about/`
 +
 +To return the relative permalink to another language version of a page:
 +
 +```go-html-template
 +{{ relref . (dict "path" "about.md" "lang" "fr") }}
 +```
 +
 +To return the relative permalink to another Output Format of a page:
 +
 +```go-html-template
 +{{ relref . (dict "path" "about.md" "outputFormat" "rss") }}
 +```
 +
 +Hugo emits an error or warning if the page cannot be uniquely resolved. The error behavior is configurable; see [Ref and RelRef Configuration](/content-management/cross-references/#ref-and-relref-configuration).
 +
 +This function is used by Hugo's built-in [`relref`](/content-management/shortcodes/#ref-and-relref) shortcode. For a detailed explanation of how to leverage this shortcode for content management, see [Links and Cross References](/content-management/cross-references/).
index 7e4015bf694aa697d745ba55e360632c882e86d4,0000000000000000000000000000000000000000..4e464865252f0ef19fc3160db128f9dfbd8912d1
mode 100644,000000..100644
--- /dev/null
@@@ -1,32 -1,0 +1,25 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: .Render
 +description: Takes a view to apply when rendering content.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [views]
 +signature: [".Render LAYOUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
 +The view is an alternative layout and should be a file name that points to a template in one of the locations specified in the documentation for [Content Views](/templates/views).
 +
 +This function is only available when applied to a single piece of content within a [list context].
 +
 +This example could render a piece of content using the content view located at `/layouts/_default/summary.html`:
 +
-     {{ .Render "summary"}}
++```go-html-template
 +{{ range .Pages }}
++  {{ .Render "summary" }}
 +{{ end }}
 +```
 +
 +[list context]: /templates/lists/
index 36e3920151c88300ae8131ba271487f9437eb594,0000000000000000000000000000000000000000..fea92ab6851ffea53ad52ae67577498f8a2658e7
mode 100644,000000..100644
--- /dev/null
@@@ -1,30 -1,0 +1,23 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2020-09-07
 +---
 +title: replace
 +description: Replaces all occurrences of the search string with the replacement string.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [replace]
 +signature: 
 +  - "replace INPUT OLD NEW [LIMIT]"
 +  - "strings.Replace INPUT OLD NEW [LIMIT]"
- deprecated: false
- aliases: []
 +relatedfuncs: [replaceRE]
 +---
 +
 +Replace returns a copy of `INPUT` with all occurrences of `OLD` replaced with `NEW`.
 +The number of replacements can be limited with an optional `LIMIT` parameter.
 +
 +```
 +`{{ replace "Batman and Robin" "Robin" "Catwoman" }}`
 +→ "Batman and Catwoman"
 +
 +{{ replace "aabbaabb" "a" "z" 2 }} → "zzbbaabb"
 +```
index cc4eb5dc22fca8cfb0390ba489590d233e47745e,0000000000000000000000000000000000000000..22f81a2f58a2732771b964d3acd98151f28bca04
mode 100644,000000..100644
--- /dev/null
@@@ -1,47 -1,0 +1,58 @@@
- keywords: [replace regex]
 +---
 +title: replaceRE
 +description: Returns a string, replacing all occurrences of a regular expression with a replacement pattern.
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: functions
- relatedfuncs: [replace,findRE]
- aliases: []
++keywords: [regex]
 +signature:
 +  - "replaceRE PATTERN REPLACEMENT INPUT [LIMIT]"
 +  - "strings.ReplaceRE PATTERN REPLACEMENT INPUT [LIMIT]"
- By default, the `replaceRE` function replaces all matches. You can limit the number of matches with an optional LIMIT parameter.
++relatedfuncs: [findRE, FindRESubmatch, replace]
 +---
- The syntax of the regular expression is the same general syntax used by Perl, Python, and other languages. More precisely, it is the syntax accepted by [RE2] except for `\C`.
++By default, `replaceRE` replaces all matches. You can limit the number of matches with an optional LIMIT parameter.
 +
 +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.
 +
++[string literal]: https://go.dev/ref/spec#String_literals
++
++This function uses the [RE2] regular expression library. See the [RE2 syntax documentation] for details. Note that the RE2 `\C` escape sequence is not supported.
++
++[RE2]: https://github.com/google/re2/
++[RE2 syntax documentation]: https://github.com/google/re2/wiki/Syntax/
++
++{{% note %}}
++The RE2 syntax is a subset of that accepted by [PCRE], roughly speaking, and with various [caveats].
++
++[caveats]: https://swtch.com/~rsc/regexp/regexp3.html#caveats
++[PCRE]: https://www.pcre.org/
++{{% /note %}}
 +
 +This example replaces two or more consecutive hyphens with a single hyphen:
 +
 +```go-html-template
 +{{ $s := "a-b--c---d" }}
 +{{ replaceRE `(-{2,})` "-" $s }} → a-b-c-d
 +```
 +
 +To limit the number of replacements to one:
 +
 +```go-html-template
 +{{ $s := "a-b--c---d" }}
 +{{ replaceRE `(-{2,})` "-" $s 1 }} → a-b-c---d
 +```
 +
 +You can use `$1`, `$2`, etc. within the replacement string to insert the groups captured within the regular expression:
 +
 +```go-html-template
 +{{ $s := "http://gohugo.io/docs" }}
 +{{ replaceRE "^https?://([^/]+).*" "$1" $s }} → gohugo.io
 +```
 +
 +{{% note %}}
 +You can write and test your regular expression using [regex101.com](https://regex101.com/). Be sure to select the Go flavor before you begin.
 +{{% /note %}}
 +
 +[RE2]: https://github.com/google/re2/wiki/Syntax
 +[string literal]: https://go.dev/ref/spec#String_literals
index 835ad3065191866cfcdb0213869ce45c41389dff,0000000000000000000000000000000000000000..93595286cba2ed1eb7541bee00b14249d59a598b
mode 100644,000000..100644
--- /dev/null
@@@ -1,34 -1,0 +1,27 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-26
 +---
 +title: safeCSS
 +description: Declares the provided string as a known "safe" CSS string.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [style,css,strings]
 +signature: ["safeCSS INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: [safeHTML,safeHTMLAttr,]
- {{% note "ZgotmplZ" %}}
 +---
 +
 +In this context, *safe* means CSS content that matches any of the following:
 +
 +1. The CSS3 stylesheet production, such as `p { color: purple }`.
 +2. The CSS3 rule production, such as `a[href=~"https:"].foo#bar`.
 +3. CSS3 declaration productions, such as `color: red; margin: 2px`.
 +4. The CSS3 value production, such as `rgba(0, 0, 255, 127)`.
 +
 +Example: Given `style = "color: red;"` defined in the front matter of your `.md` file:
 +
 +* <span class="good">`<p style="{{ .Params.style | safeCSS }}">…</p>` &rarr; `<p style="color: red;">…</p>`</span>
 +* <span class="bad">`<p style="{{ .Params.style }}">…</p>` &rarr; `<p style="ZgotmplZ">…</p>`</span>
 +
++{{% note %}}
 +"ZgotmplZ" is a special value that indicates that unsafe content reached a CSS or URL context.
 +{{% /note %}}
index 5a0aa1e053c052ac4fd472931354c66018ff4c32,0000000000000000000000000000000000000000..182633e46d2051e64c45a64fac83ac6d43bb395a
mode 100644,000000..100644
--- /dev/null
@@@ -1,40 -1,0 +1,33 @@@
- # linktitle:
 +---
 +title: safeHTML
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Declares a provided string as a "safe" HTML document to avoid escaping by Go templates.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature: ["safeHTML INPUT"]
- deprecated: false
 +relatedfuncs: []
- ```
 +---
 +
 +It should not be used for HTML from a third-party, or HTML with unclosed tags or comments.
 +
 +Given a site-wide [`config.toml`][config] with the following `copyright` value:
 +
 +{{< code-toggle file="config" >}}
 +copyright = "© 2015 Jane Doe.  <a href=\"https://creativecommons.org/licenses/by/4.0/\">Some rights reserved</a>."
 +{{< /code-toggle >}}
 +
 +`{{ .Site.Copyright | safeHTML }}` in a template would then output:
 +
 +```html
 +© 2015 Jane Doe.  <a href="https://creativecommons.org/licenses/by/4.0/">Some rights reserved</a>.
 +```
 +
 +However, without the `safeHTML` function, html/template assumes `.Site.Copyright` to be unsafe and therefore escapes all HTML tags and renders the whole string as plain text:
 +
++```html
 +<p>© 2015 Jane Doe.  &lt;a href=&#34;https://creativecommons.org/licenses by/4.0/&#34;&gt;Some rights reserved&lt;/a&gt;.</p>
 +```
 +
 +[config]: /getting-started/configuration/
index 7e730412aac2f23079df3e62d64553a395a6f489,0000000000000000000000000000000000000000..8d1d7efbcf9fc9e8b06e832f838f4ce00d00879c
mode 100644,000000..100644
--- /dev/null
@@@ -1,46 -1,0 +1,45 @@@
- aliases: []
 +---
 +title: safeHTMLAttr
 +description: Declares the provided string as a safe HTML attribute.
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: functions
 +keywords: [strings]
 +signature: ["safeHTMLAttr INPUT"]
 +relatedfuncs: []
 +---
 +
 +Given a site configuration that contains this menu entry:
 +
 +{{< code-toggle file="config" >}}
 +[[menu.main]]
 +  name = "IRC"
 +  url = "irc://irc.freenode.net/#golang"
 +{{< /code-toggle >}}
 +
 +Attempting to use the `url` value directly in an attribute:
 +
 +```go-html-template
 +{{ range site.Menus.main }}
 +  <a href="{{ .URL }}">{{ .Name }}</a>
 +{{ end }}
 +``` 
 +
 +Will produce:
 +
 +```html
 +<a href="#ZgotmplZ">IRC</a>
 +```
 +
 +`ZgotmplZ` is a special value, inserted by Go's [template/html] package, that indicates that unsafe content reached a CSS or URL context.
 +
 +To override the safety check, use the `safeHTMLAttr` function:
 +
 +```go-html-template
 +{{ range site.Menus.main }}
 +  <a {{ printf "href=%q" .URL | safeHTMLAttr }}>{{ .Name }}</a>
 +{{ end }}
 +``` 
 +
 +[template/html]: https://pkg.go.dev/html/template
index c67bfa61ccf516d94aa19bdb4a1d8e1ef589192b,0000000000000000000000000000000000000000..48c2c363bbfe9587383e17fba58f6a043f7dacd0
mode 100644,000000..100644
--- /dev/null
@@@ -1,29 -1,0 +1,20 @@@
- # linktitle:
 +---
 +title: safeJS
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Declares the provided string as a known safe JavaScript string.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature: ["safeJS INPUT"]
- deprecated: false
- draft: false
- aliases: []
 +relatedfuncs: []
 +---
 +
 +In this context, *safe* means the string encapsulates a known safe EcmaScript5 Expression (e.g., `(x + y * z())`).
 +
 +Template authors are responsible for ensuring that typed expressions do not break the intended precedence and that there is no statement/expression ambiguity as when passing an expression like `{ foo:bar() }\n['foo']()`, which is both a valid expression and a valid program with a very different meaning.
 +
 +Example: Given `hash = "619c16f"` defined in the front matter of your `.md` file:
 +
 +* <span class="good">`<script>var form_{{ .Params.hash | safeJS }};…</script>` &rarr; `<script>var form_619c16f;…</script>`</span>
 +* <span class="bad">`<script>var form_{{ .Params.hash }};…</script>` &rarr; `<script>var form_"619c16f";…</script>`</span>
index 285542ea998fc27fa397d6b34ea59779d490c4c1,0000000000000000000000000000000000000000..4d517bd1e24cb42790565cb0c746c2e6ca52b3ef
mode 100644,000000..100644
--- /dev/null
@@@ -1,71 -1,0 +1,64 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: safeURL
 +description: Declares the provided string as a safe URL or URL substring.
-     parent: "functions"
 +keywords: [strings,urls]
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +signature: ["safeURL INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- {{< code file="config.toml" copy="false" >}}
 +---
 +
 +`safeURL` declares the provided string as a "safe" URL or URL substring (see [RFC 3986]). A URL like `javascript:checkThatFormNotEditedBeforeLeavingPage()` from a trusted source should go in the page, but by default dynamic `javascript:` URLs are filtered out since they are a frequently exploited injection vector.
 +
 +Without `safeURL`, only the URI schemes `http:`, `https:` and `mailto:` are considered safe by Go templates. If any other URI schemes (e.g., `irc:` and `javascript:`) are detected, the whole URL will be replaced with `#ZgotmplZ`. This is to "defang" any potential attack in the URL by rendering it useless.
 +
 +The following examples use a [site `config.toml`][configuration] with the following [menu entry][menus]:
 +
-     name = "IRC: #golang at freenode"
-     url = "irc://irc.freenode.net/#golang"
- {{< /code >}}
++{{< code-toggle file="config" copy=false >}}
 +[[menu.main]]
- {{< code file="layouts/partials/bad-url-sidebar-menu.html" copy="false" >}}
++name = "IRC: #golang at freenode"
++url = "irc://irc.freenode.net/#golang"
++{{< /code-toggle >}}
 +
 +The following is an example of a sidebar partial that may be used in conjunction with the preceding front matter example:
 +
-   <li><a href="{{ .URL }}">{{ .Name }}</a></li>
++{{< code file="layouts/partials/bad-url-sidebar-menu.html" copy=false >}}
 +<!-- This unordered list may be part of a sidebar menu -->
 +<ul>
 +  {{ range .Site.Menus.main }}
- {{< output file="bad-url-sidebar-menu-output.html" >}}
++    <li><a href="{{ .URL }}">{{ .Name }}</a></li>
 +  {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +This partial would produce the following HTML output:
 +
-     <li><a href="#ZgotmplZ">IRC: #golang at freenode</a></li>
++```html
 +<!-- This unordered list may be part of a sidebar menu -->
 +<ul>
- {{< /output >}}
++  <li><a href="#ZgotmplZ">IRC: #golang at freenode</a></li>
 +</ul>
- {{< code file="layouts/partials/correct-url-sidebar-menu.html" copy="false" >}}
++```
 +
 +The odd output can be remedied by adding ` | safeURL` to our `.URL` page variable:
 +
- {{< output file="correct-url-sidebar-menu-output.html" >}}
++{{< code file="layouts/partials/correct-url-sidebar-menu.html" copy=false >}}
 +<!-- This unordered list may be part of a sidebar menu -->
 +<ul>
 +    <li><a href="{{ .URL | safeURL }}">{{ .Name }}</a></li>
 +</ul>
 +{{< /code >}}
 +
 +With the `.URL` page variable piped through `safeURL`, we get the desired output:
 +
-     <li><a href="irc://irc.freenode.net/#golang">IRC: #golang at freenode</a></li>
++```html
 +<ul class="sidebar-menu">
- {{< /output >}}
++  <li><a href="irc://irc.freenode.net/#golang">IRC: #golang at freenode</a></li>
 +</ul>
++```
 +
 +[configuration]: /getting-started/configuration/
 +[menus]: /content-management/menus/
 +[RFC 3986]: https://tools.ietf.org/html/rfc3986
index 20f1ba14a7b27bfee5793aafef87e2b251194fce,0000000000000000000000000000000000000000..2e00f41bde8389155510aa359919e1250d64e6dc
mode 100644,000000..100644
--- /dev/null
@@@ -1,154 -1,0 +1,147 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: .Scratch
 +description: Acts as a "scratchpad" to store and manipulate data.
-     parent: "functions"
 +keywords: [iteration]
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +toc:
 +signature: []
- deprecated: false
- draft: false
 +relatedfuncs: []
 +aliases: [/extras/scratch/,/doc/scratch/]
 +---
 +
 +Scratch is a Hugo feature designed to conveniently manipulate data in a Go Template world. It is either a Page or Shortcode method for which the resulting data will be attached to the given context, or it can live as a unique instance stored in a variable.
 +
 +{{% note %}}
 +Note that Scratch was initially created as a workaround for a [Go template scoping limitation](https://github.com/golang/go/issues/10608) that affected Hugo versions prior to 0.48. For a detailed analysis of `.Scratch` and contextual use cases, see [this blog post](https://regisphilibert.com/blog/2017/04/hugo-scratch-explained-variable/).
 +{{% /note %}}
 +
 +### Contexted `.Scratch` vs. local `newScratch`
 +
 +Since Hugo 0.43, there are two different ways of using Scratch:
 +
 +#### The Page's `.Scratch`
 +
 +`.Scratch` is available as a Page method or a Shortcode method and attaches the "scratched" data to the given page. Either a Page or a Shortcode context is required to use `.Scratch`.
 +
 +```go-html-template
 +{{ .Scratch.Set "greeting" "bonjour" }}
 +{{ range .Pages }}
 +  {{ .Scratch.Set "greeting" (print "bonjour" .Title) }}
 +{{ end }}
 +```
 +
 +#### The local `newScratch`
 +
 +A Scratch instance can also be assigned to any variable using the `newScratch` function. In this case, no Page or Shortcode context is required and the scope of the scratch is only local. The methods detailed below are available from the variable the Scratch instance was assigned to.
 +
 +```go-html-template
 +{{ $data := newScratch }}
 +{{ $data.Set "greeting" "hola" }}
 +```
 +
 +### Methods
 +
 +A Scratch has the following methods:
 +
 +{{% note %}}
 +Note that the following examples assume a [local Scratch instance](#the-local-newscratch) has been stored in `$scratch`.
 +{{% /note %}}
 +
 +#### .Set
 +
 +Set the value of a given key.
 +
 +```go-html-template
 +{{ $scratch.Set "greeting" "Hello" }}
 +```
 +
 +#### .Get
 +
 +Get the value of a given key.
 +
 +```go-html-template
 +{{ $scratch.Set "greeting" "Hello" }}
 +----
 +{{ $scratch.Get "greeting" }} > Hello
 +```
 +
 +#### .Add
 +
 +Add 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.Add "greetings" "Hello" }}
 +{{ $scratch.Add "greetings" "Welcome" }}
 +----
 +{{ $scratch.Get "greetings" }} > HelloWelcome
 +```
 +
 +```go-html-template
 +{{ $scratch.Add "total" 3 }}
 +{{ $scratch.Add "total" 7 }}
 +----
 +{{ $scratch.Get "total" }} > 10
 +```
 +
 +```go-html-template
 +{{ $scratch.Add "greetings" (slice "Hello") }}
 +{{ $scratch.Add "greetings" (slice "Welcome" "Cheers") }}
 +----
 +{{ $scratch.Get "greetings" }} > []interface {}{"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[french:Bonjour english:Hello]
 +```
 +
 +#### .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
 +
 +Return 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
 +
 +Remove the given key.
 +
 +```go-html-template
 +{{ $scratch.Set "greeting" "Hello" }}
 +----
 +{{ $scratch.Delete "greeting" }}
 +```
 +
 +#### .Values
 +
 +Return the raw backing map. Note that you should only use this method on the locally scoped Scratch instances you obtain via [`newScratch`](#the-local-newscratch), not `.Page.Scratch` etc., as that will lead to concurrency issues.
 +
 +
 +[pagevars]: /variables/page/
index a880ec2412f9f734db4e38d02af69f64220e5969,0000000000000000000000000000000000000000..75edf5d2dff4450cdee00291c65b239239a57e30
mode 100644,000000..100644
--- /dev/null
@@@ -1,50 -1,0 +1,28 @@@
- # linktitle:
- description: Creates a sequence of integers.
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: seq
-     parent: "functions"
++description: Returns a slice of integers.
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: []
 +signature: ["seq LAST", "seq FIRST LAST", "seq FIRST INCREMENT LAST"]
- deprecated: false
- draft: false
- aliases: []
 +relatedfuncs: []
- It's named and used in the model of [GNU's seq].
- ```
- 3 → 1, 2, 3
- 1 2 4 → 1, 3
- -3 → -1, -2, -3
- 1 4 → 1, 2, 3, 4
- 1 -2 → 1, 0, -1, -2
 +---
 +
- ## Example: `seq` with `range` and `after`
- You can use `seq` in combination with `range` and `after`. The following will return 19 elements:
++```go-html-template
++{{ seq 2 }} → [1 2]
++{{ seq 0 2 }} → [0 1 2]
++{{ seq -2 2 }} → [-2 -1 0 1 2]
++{{ seq -2 2 2 }} → [-2 0 2]
 +```
 +
- ```
- {{ range after 1 (seq 20)}}
++Iterate over a sequence of integers:
 +
- However, when ranging with an index, the following may be less confusing in that `$indexStartingAt1` and `$num` will return `1,2,3 ... 20`:
- ```
- {{ range $index, $num := (seq 20) }}
- $indexStartingAt1 := (add $index 1)
- {{ end }}
- ```
- [GNU's seq]: https://www.gnu.org/software/coreutils/manual/html_node/seq-invocation.html#seq-invocation
++```go-html-template
++{{ $product := 1 }}
++{{ range seq 4 }}
++  {{ $product = mul $product . }}
 +{{ end }}
++{{ $product }} → 24
 +```
index 24ad165a87e7cf440439da56d98eea04dbdcc046,0000000000000000000000000000000000000000..1f6cf8da0aabbe12d83771aaa0d24666fccf72f9
mode 100644,000000..100644
--- /dev/null
@@@ -1,33 -1,0 +1,26 @@@
- # linktitle: sha
 +---
 +title: sha
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Hashes the given input and returns either an SHA1 or SHA256 checksum.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [sha,checksum]
 +signature: ["sha1 INPUT", "sha256 INPUT"]
- deprecated: false
 +relatedfuncs: [md5]
- ```
 +aliases: [sha1, sha256]
 +---
 +
 +`sha1` hashes the given input and returns its SHA1 checksum.
 +
- ```
++```go-html-template
 +{{ sha1 "Hello world, gophers!" }}
 +<!-- returns the string "c8b5b0e33d408246e30f53e32b8f7627a7a649d4" -->
 +```
 +
 +`sha256` hashes the given input and returns its SHA256 checksum.
 +
++```go-html-template
 +{{ sha256 "Hello world, gophers!" }}
 +<!-- returns the string "6ec43b78da9669f50e4e422575c54bf87536954ccd58280219c393f2ce352b46" -->
 +```
index 95a586e44d7c4d46a2c0b6cfaf692739cba0fc9b,0000000000000000000000000000000000000000..4de66da287e3b66088dd5076fbf55b14e63195be
mode 100644,000000..100644
--- /dev/null
@@@ -1,38 -1,0 +1,19 @@@
- # linktitle:
 +---
 +title: shuffle
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-04-30
 +description: Returns a random permutation of a given array or slice.
-     parent: "functions"
 +keywords: [ordering]
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +signature: ["shuffle COLLECTION"]
- deprecated: false
- draft: false
- aliases: []
 +relatedfuncs: [seq]
- {{< code file="shuffle-input.html" >}}
- <!-- Shuffled sequence = -->
- <div>{{ shuffle (seq 1 5) }}</div>
- <!-- Shuffled slice =  -->
- <div>{{ shuffle (slice "foo" "bar" "buzz") }}</div>
- {{< /code >}}
 +---
 +
- This example would return the following:
 +
- {{< output file="shuffle-output.html" >}}
- <!-- Shuffled sequence =  -->
- <div>2 5 3 1 4</div>
- <!-- Shuffled slice =  -->
- <div>buzz foo bar</div>
- {{< /output >}}
- This example also makes use of the [slice](/functions/slice/) and [seq](/functions/seq/) functions.
++```go-html-template
++{{ shuffle (seq 1 2 3) }} → [3 1 2] 
++{{ shuffle (slice "a" "b" "c") }} → [b a c] 
++```
 +
++The result will vary from one build to the next.
index 8ca46d4330c07e5f345e9c9f3d0df637b8aacfb7,0000000000000000000000000000000000000000..4e56684b9069c2a1b6b6c4b24cc68efe0c757ea7
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,15 @@@
- # linktitle: singularize
 +---
 +title: singularize
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Converts a word according to a set of common English singularization rules.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings,singular]
 +signature: ["singularize INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
 +---
 +
 +`{{ "cats" | singularize }}` → "cat"
 +
 +See also the `.Data.Singular` [taxonomy variable](/variables/taxonomy/) for singularizing taxonomy names.
index d4b8e417ce4a67624903da08773297c48d8d313a,0000000000000000000000000000000000000000..b408f7141f8070ad30af4e6453bbcd103b4302a7
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,14 @@@
- linktitle: site
 +---
 +title: site
- date: 2021-02-11
- publishdate: 2021-02-11
- lastmod: 2021-02-11
 +description: The `site` function provides global access to the same data as the `.Site` page method.
-     parent: "functions"
 +keywords: []
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +toc:
 +signature: ["site"]
- deprecated: false
- draft: false
- aliases: []
 +relatedfuncs: ["hugo"]
- `site` is a global function which returns the same data as the `.Site` page method. See: [Site Variables]({{< relref "/variables/site" >}}).
 +---
 +
++`site` is a global function which returns the same data as the `.Site` page method. See: [Site Variables](/variables/site).
index 9b5580d4446b14aa2691f7ec568121b5b24f1d56,0000000000000000000000000000000000000000..d2ef62861930419c0ccd828660d0228f77754de5
mode 100644,000000..100644
--- /dev/null
@@@ -1,33 -1,0 +1,23 @@@
- # linktitle: slice
 +---
 +title: slice
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Creates a slice (array) of all passed arguments.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [slice, array, interface]
 +signature: ["slice ITEM..."]
- deprecated: false
- draft: false
- aliases: []
- toc: false
 +relatedfuncs: []
 +---
 +
 +One use case is the concatenation of elements in combination with the [`delimit` function]:
 +
 +{{< code file="slice.html" >}}
 +{{ $sliceOfStrings := slice "foo" "bar" "buzz" }}
 +<!-- returns the slice [ "foo", "bar", "buzz"] -->
 +{{ delimit ($sliceOfStrings) ", " }}
 +<!-- returns the string "foo, bar, buzz" -->
 +{{< /code >}}
 +
 +
 +[`delimit` function]: /functions/delimit/
index 8164f2720b1a72b845b8f04632e4686cd9b465af,0000000000000000000000000000000000000000..bbdf956969a27d96f7934fc5e3fa38a9d3289e5e
mode 100644,000000..100644
--- /dev/null
@@@ -1,27 -1,0 +1,19 @@@
- # linktitle:
 +---
 +title: slicestr
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Creates a slice of a half-open range, including start and end indices.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature:
 +  - "slicestr STRING START [END]"
 +  - "strings.SliceString STRING START [END]"
- deprecated: false
- aliases: []
 +relatedfuncs: []
- * `{{slicestr "BatMan" 3}}` → "Man"
- * `{{slicestr "BatMan" 0 3}}` → "Bat"
 +---
 +
 +For example, 1 and 4 creates a slice including elements 1 through 3.
 +The `end` index can be omitted; it defaults to the string's length.
 +
++* `{{ slicestr "BatMan" 3 }}` → "Man"
++* `{{ slicestr "BatMan" 0 3 }}` → "Bat"
index b48aad1aaf2b1bc2378e1e3fdc703ee07796ed06,0000000000000000000000000000000000000000..fc147c9fb919b852559cd4c255f04d017a4fffd9
mode 100644,000000..100644
--- /dev/null
@@@ -1,63 -1,0 +1,126 @@@
- # linktitle: sort
- description: Sorts maps, arrays, and slices and returns a sorted slice.
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: sort
-     parent: "functions"
++description: Sorts slices, maps, and page collections.
 +categories: [functions]
++signature: ["sort COLLECTION [KEY] [ORDER]"]
 +menu:
 +  docs:
- signature: []
- workson: [lists,taxonomies,terms,groups]
- hugoversion:
- relatedfuncs: []
- deprecated: false
- aliases: []
++    parent: functions
 +keywords: [ordering,sorting,lists]
- A sorted array of map values will be returned with the keys eliminated. There are two optional arguments: `sortByField` and `sortAsc`. If left blank, sort will sort by keys (for maps) in ascending order as its default behavior.
++toc: true
 +---
 +
- ```
- ---
- tags: ["tag3", "tag1", "tag2"]
- ---
++The `KEY` is optional when sorting slices in ascending order, otherwise it is required. When sorting slices, use the literal `value` in place of the `KEY`. See examples below.
 +
- // Site config
- +++
- [params.authors]
-   [params.authors.Joe]
-     firstName = "Joe"
-     lastName  = "Bergevin"
-   [params.authors.Derek]
-     firstName = "Derek"
-     lastName  = "Perkins"
-   [params.authors.Tanner]
-     firstName = "Tanner"
-     lastName  = "Linsley"
- +++
++The `ORDER` may be either `asc` (ascending) or `desc` (descending). The default sort order is ascending.
++
++## Sort a slice
++
++The examples below assume this site configuration:
++
++{{< code-toggle file="config" copy=false >}}
++[params]
++grades = ['b','a','c']
++{{< /code-toggle >}}
++
++### Ascending order {#slice-ascending-order}
++
++Sort slice elements in ascending order using either of these constructs:
++
++{{< code file="layouts/_default/single.html" copy=false >}}
++{{ sort site.Params.grades }} → [a b c]
++{{ sort site.Params.grades "value" "asc" }} → [a b c]
++{{< /code >}}
++
++In the examples above, `value` is the `KEY` representing the value of the slice element.
++
++### Descending order {#slice-descending-order}
++
++Sort slice elements in descending order:
++
++{{< code file="layouts/_default/single.html" copy=false >}}
++{{ sort site.Params.grades "value" "desc" }} → [c b a]
++{{< /code >}}
++
++In the example above, `value` is the `KEY` representing the value of the slice element.
 +
- // Sort by value, ascending (default for lists)
- Tags: {{ range sort .Params.tags }}{{ . }} {{ end }}
++## Sort a map
++
++The examples below assume this site configuration:
++
++{{< code-toggle file="config" copy=false >}}
++[params.authors.a]
++firstName = "Marius"
++lastName  = "Pontmercy"
++[params.authors.b]
++firstName = "Victor"
++lastName  = "Hugo"
++[params.authors.c]
++firstName = "Jean"
++lastName  = "Valjean"
++{{< /code-toggle >}}
++
++{{% note %}}
++When sorting maps, the `KEY` argument must be lowercase.
++{{% /note %}}
++
++### Ascending order {#map-ascending-order}
++
++Sort map objects in ascending order using either of these constructs:
++
++{{< code file="layouts/_default/single.html" copy=false >}}
++{{ range sort site.Params.authors "firstname" }}
++  {{ .firstName }}
++{{ end }}
++
++{{ range sort site.Params.authors "firstname" "asc" }}
++  {{ .firstName }}
++{{ end }}
++{{< /code >}}
++
++These produce:
++
++```text
++Jean Marius Victor
 +```
 +
++### Descending order {#map-descending-order}
++
++Sort map objects in descending order:
++
++{{< code file="layouts/_default/single.html" copy=false >}}
++{{ range sort site.Params.authors "firstname" "desc" }}
++  {{ .firstName }}
++{{ end }}
++{{< /code >}}
++
++This produces:
++
++```text
++Victor Marius Jean
 +```
- → Outputs Tags: tag1 tag2 tag3
 +
- // Sort by value, descending
- Tags: {{ range sort .Params.tags "value" "desc" }}{{ . }} {{ end }}
++## Sort a page collection
 +
- → Outputs Tags: tag3 tag2 tag1
++Although you can use the `sort` function to sort a page collection, Hugo provides [built-in methods for sorting page collections] by:
 +
- // Sort by key, ascending (default for maps)
- Authors: {{ range sort .Site.Params.authors }}{{ .firstName }} {{ end }}
++- weight
++- linktitle
++- title
++- front matter parameter
++- date
++- expiration date
++- last modified date
++- publish date
++- length
 +
- → Outputs Authors: Derek Joe Tanner
++In this contrived example, sort the site's regular pages by `.Type` in descending order:
 +
- // Sort by field, descending
- Authors: {{ range sort .Site.Params.authors "lastName" "desc" }}{{ .lastName }} {{ end }}
++{{< code file="layouts/_default/home.html" copy=false >}}
++{{ range sort site.RegularPages "Type" "desc" }}
++  <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
++{{ end }}
++{{< /code >}}
 +
- → Outputs Authors: Perkins Linsley Bergevin
- ```
 +
++[built-in methods for sorting page collections]: /templates/lists/#order-content
index 51d1a64f77187a10425f62ba5f3b5f5ae7b2eae9,0000000000000000000000000000000000000000..d2f3cc8b33a9ce2138d6a6b417e8fd1dc13d2d76
mode 100644,000000..100644
--- /dev/null
@@@ -1,30 -1,0 +1,23 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2022-11-06
 +---
 +title: split
 +description: Returns a slice of strings by splitting STRING by DELIM.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature: ["split STRING DELIM"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- `split` essentially does the opposite of [delimit]({{< ref "functions/delimit" >}}). While `split` creates a slice from a string, `delimit` creates a string from a slice.
 +---
 +
 +Examples:
 +
 +```go-html-template
 +{{ split "tag1,tag2,tag3" "," }} → ["tag1", "tag2", "tag3"]
 +{{ split "abc" "" }} → ["a", "b", "c"]
 +```
 +
 +
 +{{% note %}}
++`split` essentially does the opposite of [delimit](/functions/delimit). While `split` creates a slice from a string, `delimit` creates a string from a slice.
 +{{% /note %}}
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..d57194d80bc2463266cd3f4ef28f8cc1f00a2bc1
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,105 @@@
++---
++title: .Store
++description: Returns a Scratch that is not reset on server rebuilds.
++categories: [functions]
++menu:
++  docs:
++    parent: functions
++keywords: [scratch]
++signature: []
++---
++
++The `.Store` method on `.Page` returns a [Scratch] to store and manipulate data. In contrast to the `.Scratch` method, this Scratch is not reset on server rebuilds.
++
++[Scratch]: /functions/scratch/
++
++### 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.Add "greetings" "Hello" }}
++{{ .Store.Add "greetings" "Welcome" }}
++
++{{ .Store.Get "greetings" }} → HelloWelcome
++```
++
++```go-html-template
++{{ .Store.Add "total" 3 }}
++{{ .Store.Add "total" 7 }}
++
++{{ .Store.Get "total" }} → 10
++```
++
++```go-html-template
++{{ .Store.Add "greetings" (slice "Hello") }}
++{{ .Store.Add "greetings" (slice "Welcome" "Cheers") }}
++
++{{ .Store.Get "greetings" }} → []interface {}{"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[french:Bonjour english:Hello]
++```
++
++#### .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" }}
++```
index 33a781e45f42b59bfc58ad06841ed70cee8d2e72,0000000000000000000000000000000000000000..df9d071168b1554850e79a006c0cd531e53d605a
mode 100644,000000..100644
--- /dev/null
@@@ -1,21 -1,0 +1,48 @@@
- # linktitle: string
- description: Creates a string from the argument passed to the function
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: string
-     parent: "functions"
- keywords: [strings]
++description: Cast a value to a string.
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
++keywords: [cast,strings]
 +signature: ["string INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- * `{{string "BatMan"}}` → "BatMan"
 +---
 +
++With a decimal (base 10) input:
++
++```go-html-template
++{{ string 11 }} → 11 (string)
++{{ string "11" }} → 11 (string)
++
++{{ string 11.1 }} → 11.1 (string)
++{{ string "11.1" }} → 11.1 (string)
++
++{{ string 11.9 }} → 11.9 (string)
++{{ string "11.9" }} → 11.9 (string)
++```
++
++With a binary (base 2) input:
++
++```go-html-template
++{{ string 0b11 }} → 3 (string)
++{{ string "0b11" }} → 0b11 (string)
++```
++
++With an octal (base 8) input (use either notation):
++
++```go-html-template
++{{ string 011 }} → 9 (string)
++{{ string "011" }} → 011 (string)
++
++{{ string 0o11 }} → 9 (string)
++{{ string "0o11" }} → 0o11 (string)
++```
++
++With a hexadecimal (base 16) input:
++
++```go-html-template
++{{ string 0x11 }} → 17 (string)
++{{ string "0x11" }} → 0x11 (string)
++```
index 8ebd9ad3333f3477f11ca31032ebaaa31f4a45a2,0000000000000000000000000000000000000000..44cb73b8143f6dc4b9fb0a79640dbb8fb73ee287
mode 100644,000000..100644
--- /dev/null
@@@ -1,18 -1,0 +1,17 @@@
-     parent: "functions"
 +---
 +title: strings.Contains
 +description: Reports whether a string contains a substring.
 +categories: [functions]
 +menu:
 +  docs:
- aliases: []
++    parent: functions
 +keywords: [string strings substring contains]
 +signature: ["strings.Contains STRING SUBSTRING"]
 +relatedfuncs: [strings.ContainsAny]
 +---
 +
 +    {{ strings.Contains "Hugo" "go" }} → true
 +
 +The check is case sensitive: 
 +
 +    {{ strings.Contains "Hugo" "Go" }} → false
index bfbc2242b688f2b21488a6c08c7214fed518e9f5,0000000000000000000000000000000000000000..36fa8701be0efc2f94b1500603555babe8ccc062
mode 100644,000000..100644
--- /dev/null
@@@ -1,18 -1,0 +1,17 @@@
-     parent: "functions"
 +---
 +title: strings.ContainsAny
 +description: Reports whether a string contains any character from a given string.
 +categories: [functions]
 +menu:
 +  docs:
- aliases: []
++    parent: functions
 +keywords: [string strings substring contains any]
 +signature: ["strings.ContainsAny STRING CHARACTERS"]
 +relatedfuncs: [strings.Contains]
 +---
 +
 +    {{ strings.ContainsAny "Hugo" "gm" }} → true
 +
 +The check is case sensitive: 
 +
 +    {{ strings.ContainsAny "Hugo" "Gm" }} → false
index c0b11233c26ba3ee4ceb725dd90eb3f7732114ef,0000000000000000000000000000000000000000..7c3945693070641df248fb2c3d41e9ecb52ec688
mode 100644,000000..100644
--- /dev/null
@@@ -1,27 -1,0 +1,20 @@@
- date: 2020-09-07
- publishdate: 2020-09-07
- lastmod: 2020-09-07
 +---
 +title: strings.Count
 +description: Returns the number of non-overlapping instances of a substring within a string.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [count, counting, character count]
 +signature: ["strings.Count SUBSTR STRING"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
 +---
 +
 +If `SUBSTR` is an empty string, this function returns 1 plus the number of Unicode code points in `STRING`.
 +
 +Example|Result
 +:--|:--
 +`{{ "aaabaab" \| strings.Count "a" }}`|5
 +`{{ "aaabaab" \| strings.Count "aa" }}`|2
 +`{{ "aaabaab" \| strings.Count "aaa" }}`|1
 +`{{ "aaabaab" \| strings.Count "" }}`|8
index b97d00f294686cec7df3d3fedee361bbb8a6ef13,0000000000000000000000000000000000000000..fab82a2dc631472f1a56a387f55708f427734535
mode 100644,000000..100644
--- /dev/null
@@@ -1,14 -1,0 +1,12 @@@
-     parent: "functions"
 +---
 +title: strings.FirstUpper
 +description: Capitalizes the first character of a given string.
 +categories: [functions]
 +menu:
 +  docs:
- hugoversion:
- aliases: []
++    parent: functions
 +keywords: [strings capitalize uppercase first]
 +signature: ["strings.FirstUpper STRING"]
 +---
 +
 +    {{ strings.FirstUpper "foo" }} → "Foo"
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..70317a4c19c9b1b00a65e8736272e2e748c8fafa
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,16 @@@
++---
++title: strings.HasPrefix
++description: Tests whether a string begins with prefix.
++categories: [functions]
++menu:
++  docs:
++    parent: functions
++keywords: [strings]
++signature: ["hasPrefix STRING PREFIX","strings.HasPrefix STRING PREFIX"]
++relatedfuncs: [hasSuffix]
++aliases: [/functions/hasprefix/]
++---
++
++```go-html-template
++{{ hasPrefix "Hugo" "Hu" }} → true
++```
index 78688a5cbe28839b1efbb257073e885d5f95cdb1,0000000000000000000000000000000000000000..3ead121a3330ae5de2d48e2e0765b7cebf464740
mode 100644,000000..100644
--- /dev/null
@@@ -1,22 -1,0 +1,16 @@@
- description: Determine whether a given string ends with the provided trailing suffix string.
- date: 2019-08-13
- publishdate: 2019-08-13
- lastmod: 2019-08-13
 +---
 +title: strings.HasSuffix
-     parent: "functions"
++description: Tests whether a string ends with suffix.
 +categories: [functions]
 +menu:
 +  docs:
- signature: ["strings.HasSuffix STRING SUFFIX"]
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
- deprecated: false
- aliases: []
++signature: ["hasSuffix STRING SUFFIX","strings.HasSuffix STRING SUFFIX"]
 +relatedfuncs: [hasPrefix]
-     {{ $pdfPath := "/path/to/some.pdf" }}
-     {{ strings.HasSuffix $pdfPath "pdf" }} → true
-     {{ strings.HasSuffix $pdfPath "txt" }} → false
++aliases: [/functions/hassuffix/]
 +---
 +
++```go-html-template
++{{ hasSuffix "Hugo" "go" }} → true
++```
index 7cba6d075d9cd582926d4678dc6d7829ad230700,0000000000000000000000000000000000000000..99b2fe5a5e9bfe9c74b69020b5d76244b4b88a32
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,16 @@@
- # linktitle:
 +---
 +title: strings.Repeat
- date: 2018-05-31
- publishdate: 2018-05-31
- lastmod: 2018-05-31
 +description: Returns INPUT repeated COUNT times.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature: ["strings.Repeat COUNT INPUT"]
- deprecated: false
 +relatedfuncs: []
- ```
 +---
 +
++```go-html-template
 +{{ strings.Repeat 3 "yo" }} → "yoyoyo"
 +{{ "yo" | strings.Repeat 3 }} → "yoyoyo"
 +```
index de335f8623d2f4a4b9d76679441b131f1b48d02a,0000000000000000000000000000000000000000..3a72e339a3bb7abf9627882f163c63fdaa983922
mode 100644,000000..100644
--- /dev/null
@@@ -1,27 -1,0 +1,20 @@@
- date: 2018-06-01
- publishdate: 2018-06-01
- lastmod: 2018-06-01
 +---
 +title: strings.RuneCount
 +description: Determines the number of runes in a string.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [counting, character count, length, rune length, rune count]
 +signature: ["strings.RuneCount INPUT"]
- deprecated: false
- aliases: []
 +relatedfuncs: ["len", "countrunes"]
- ```
 +---
 +
 +In contrast with `strings.CountRunes` function, which strips HTML and whitespace before counting runes, `strings.RuneCount` simply counts all the runes in a string. It relies on the Go [`utf8.RuneCountInString`] function.
 +
++```go-html-template
 +{{ "Hello, 世界" | strings.RuneCount }}
 +<!-- outputs a content length of 9 runes. -->
 +```
 +
 +[`utf8.RuneCount`]: https://golang.org/pkg/unicode/utf8/#RuneCount
index 2d71a136775e9f3be45f141ede27cd80c1222e54,0000000000000000000000000000000000000000..b0271c8a852a7c97f7da7a5a0d5ad9d1d99f9291
mode 100644,000000..100644
--- /dev/null
@@@ -1,26 -1,0 +1,19 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: strings.TrimLeft
 +description: Returns a slice of a given string with all leading characters contained in the cutset removed.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature: ["strings.TrimLeft CUTSET STRING"]
- deprecated: false
- aliases: []
 +relatedfuncs: [strings.TrimRight]
 +---
 +
 +Given the string `"abba"`, leading `"a"`'s can be removed a follows:
 +
 +    {{ strings.TrimLeft "a" "abba" }} → "bba"
 +
 +Numbers can be handled as well:
 +
 +    {{ strings.TrimLeft 12 1221341221 }} → "341221"
index a66bbe3dbceeb5e78fb84ab4a257bba1732dee55,0000000000000000000000000000000000000000..c3f7029610ab5c8598d1b4f2e3a2ddcc5827cdcd
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,17 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: strings.TrimPrefix
 +description: Returns a given string s without the provided leading prefix string. If s doesn't start with prefix, s is returned unchanged.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature: ["strings.TrimPrefix PREFIX STRING"]
- deprecated: false
- aliases: []
 +relatedfuncs: [strings.TrimSuffix]
 +---
 +
 +Given the string `"aabbaa"`, the specified prefix is only removed if `"aabbaa"` starts with it:
 +
 +    {{ strings.TrimPrefix "a" "aabbaa" }} → "abbaa"
 +    {{ strings.TrimPrefix "aa" "aabbaa" }} → "bbaa"
 +    {{ strings.TrimPrefix "aaa" "aabbaa" }} → "aabbaa"
index 05084a4c0a0ce3c6356ed4a6ff090aba77d06b4a,0000000000000000000000000000000000000000..e61b884cd456f291d8e63e7a3aaff274b7a7fb23
mode 100644,000000..100644
--- /dev/null
@@@ -1,26 -1,0 +1,19 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: strings.TrimRight
 +description: Returns a slice of a given string with all trailing characters contained in the cutset removed.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature: ["strings.TrimRight CUTSET STRING"]
- deprecated: false
- aliases: []
 +relatedfuncs: [strings.TrimRight]
 +---
 +
 +Given the string `"abba"`, trailing `"a"`'s can be removed a follows:
 +
 +    {{ strings.TrimRight "a" "abba" }} → "abb"
 +
 +Numbers can be handled as well:
 +
 +    {{ strings.TrimRight 12 1221341221 }} → "122134"
index 916038054ca4290e495ba405d82a20f6efda50ab,0000000000000000000000000000000000000000..05bb92400aa050c061d1ad66519d4fd3851f203e
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,17 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: strings.TrimSuffix
 +description: Returns a given string s without the provided trailing suffix string. If s doesn't end with suffix, s is returned unchanged.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature: ["strings.TrimSuffix SUFFIX STRING"]
- deprecated: false
- aliases: []
 +relatedfuncs: [strings.TrimPrefix]
 +---
 +
 +Given the string `"aabbaa"`, the specified suffix is only removed if `"aabbaa"` ends with it:
 +
 +    {{ strings.TrimSuffix "a" "aabbaa" }} → "aabba"
 +    {{ strings.TrimSuffix "aa" "aabbaa" }} → "aabb"
 +    {{ strings.TrimSuffix "aaa" "aabbaa" }} → "aabbaa"
index 4a00b6eb1f01fff4f642cbef762eda044a67024b,0000000000000000000000000000000000000000..6a5f15592eb9fd42f85752fbb3eaf6a7235f0811
mode 100644,000000..100644
--- /dev/null
@@@ -1,47 -1,0 +1,39 @@@
- # linktitle:
 +---
 +title: substr
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Extracts parts of a string from a specified character's position and returns the specified number of characters.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- aliases: []
++    parent: functions
 +keywords: [strings]
- workson: []
- hugoversion:
 +signature:
 +  - "substr STRING START [LENGTH]"
 +  - "strings.Substr STRING START [LENGTH]"
- deprecated: false
 +relatedfuncs: []
- ```
 +---
 +
 +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.
 +
 +If `length` is given and is negative, that number of characters will be omitted from the end of string.
 +
++```go-html-template
 +{{ substr "abcdef" 0 }} → "abcdef"
 +{{ substr "abcdef" 1 }} → "bcdef"
 +
 +{{ substr "abcdef" 0 1 }} → "a"
 +{{ substr "abcdef" 1 1 }} → "b"
 +
 +{{ substr "abcdef" 0 -1 }} → "abcde"
 +{{ substr "abcdef" 1 -1 }} → "bcde"
 +
 +{{ substr "abcdef" -1 }} → "f"
 +{{ substr "abcdef" -2 }} → "ef"
 +
 +{{ substr "abcdef" -1 1 }} → "f"
 +{{ substr "abcdef" -2 1 }} → "e"
 +
 +{{ substr "abcdef" -3 -1 }} → "de"
 +{{ substr "abcdef" -3 -2 }} → "d"
 +```
index bac1f1ffe283d15e7a41651aee00d202d48ee7e3,0000000000000000000000000000000000000000..ffc3094186e4670ff231744f9261c8c4514b1ab8
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,20 @@@
- title: "symdiff"
 +---
- date: 2018-11-07
++title: symdiff
 +description: "`collections.SymDiff` (alias `symdiff`) returns the symmetric difference of two collections."
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- hugoversion: "0.51"
- aliases: []
++    parent: functions
 +keywords: [collections,intersect,union,complement]
 +signature: ["COLLECTION | symdiff COLLECTION" ]
 +---
 +
 +Example:
 +
 +```go-html-template
 +{{ slice 1 2 3 | symdiff (slice 3 4) }}
 +```
 +
 +The above will print `[1 2 4]`.
 +
 +Also see https://en.wikipedia.org/wiki/Symmetric_difference
index 36fa0ea60901e6b3ec12183dfaef0764ad321a27,0000000000000000000000000000000000000000..b9f340c21c481444282af29db70e73369791967c
mode 100644,000000..100644
--- /dev/null
@@@ -1,36 -1,0 +1,26 @@@
- linktitle: ""
 +---
 +title: templates.Exists
- date: 2018-11-01
- publishdate: 2018-11-01
- lastmod: 2018-11-01
 +description: "Checks whether a template file exists under the given path relative to the `layouts` directory."
-     parent: "functions"
 +categories: [functions]
 +tags: []
 +menu:
 +  docs:
- workson: []
- hugoversion: "0.46"
- aliases: []
++    parent: functions
 +ns: ""
 +keywords: ["templates", "template", "layouts"]
 +signature: ["templates.Exists PATH"]
- toc: false
- deprecated: false
 +relatedfuncs: []
 +---
 +
 +A template file is any file living below the `layouts` directories of either the project or any of its theme components including partials and shortcodes.
 +
 +The function is particularly handy with dynamic path. The following example ensures the build will not break on a `.Type` missing its dedicated `header` partial.
 +
 +```go-html-template
 +{{ $partialPath := printf "headers/%s.html" .Type }}
 +{{ if templates.Exists ( printf "partials/%s" $partialPath ) }}
 +  {{ partial $partialPath . }}
 +{{ else }}
 +  {{ partial "headers/default.html" . }}
 +{{ end }}
 +```
index aabba601ab4e3f80d39aa790c48af12cc2f2c9cc,0000000000000000000000000000000000000000..0332c1706346b63940e7f39ee154b9f2461a15fd
mode 100644,000000..100644
--- /dev/null
@@@ -1,20 -1,0 +1,18 @@@
-     parent: "functions"
 +---
 +title: time.ParseDuration
 +description: Parses a given duration string into a `time.Duration` structure.
 +categories: [functions]
 +menu:
 +  docs:
- hugoversion:
- aliases: []
++    parent: functions
 +keywords: [time parse duration]
 +signature: ["time.ParseDuration DURATION"]
 +---
 +
 +`time.ParseDuration` parses a duration string into a [`time.Duration`](https://pkg.go.dev/time#Duration) structure so you can access its fields.
 +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`.
 +
 +You can perform [time operations](https://pkg.go.dev/time#Duration) on the returned `time.Duration` value:
 +
 +    {{ printf "There are %.0f seconds in one day." (time.ParseDuration "24h").Seconds }}
 +    <!-- Output: There are 86400 seconds in one day. -->
index 175e2dbfe34b9c1fd279042c1e74b7a9a0324fd6,0000000000000000000000000000000000000000..7cb55f6f1684f64cb8b617f8d1c01d85117ea12f
mode 100644,000000..100644
--- /dev/null
@@@ -1,62 -1,0 +1,54 @@@
- linktitle:
 +---
 +title: time
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Converts a timestamp string into a `time.Time` structure.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion: "v0.77.0"
++    parent: functions
 +keywords: [dates,time,location]
 +signature: ["time INPUT [TIMEZONE]"]
- deprecated: false
- aliases: []
 +relatedfuncs: []
- ```
 +---
 +
 +
 +`time` converts a timestamp string with an optional default location into a [`time.Time`](https://godoc.org/time#Time) structure so you can access its fields:
 +
- ```
++```go-html-template
 +{{ time "2016-05-28" }} → "2016-05-28T00:00:00Z"
 +{{ (time "2016-05-28").YearDay }} → 149
 +{{ mul 1000 (time "2016-05-28T10:30:00.00+10:00").Unix }} → 1464395400000, or Unix time in milliseconds
 +```
 +
 +## Using Locations
 +
 +The optional `TIMEZONE` parameter is a string that sets a default time zone (or more specific, the location, which represents the collection of time offsets in a geographical area) that is associated with the specified time value. If the time value has an explicit timezone or offset specified, it will take precedence over the `TIMEZONE` parameter.
 +
 +The list of valid locations may be system dependent, but should include `UTC`, `Local`, or any location in the [IANA Time Zone database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
 +
 +If no `TIMEZONE` is set, the `timeZone` from site configuration will be used.
 +
- {{$time := time (int .Params.addDate)}}
++```go-html-template
 +{{ time "2020-10-20" }} → 2020-10-20 00:00:00 +0000 UTC
 +{{ time "2020-10-20" "America/Los_Angeles" }} → 2020-10-20 00:00:00 -0700 PDT
 +{{ time "2020-01-20" "America/Los_Angeles" }} → 2020-01-20 00:00:00 -0800 PST
 +```
 +
 +## Example: Using `time` to get Month Index
 +
 +The following example takes a UNIX timestamp---set as `utimestamp: "1489276800"` in a content's front matter---converts the timestamp (string) to an integer using the [`int` function][int], and then uses [`printf`] to convert the `Month` property of `time` into an index.
 +
 +The following example may be useful when setting up [multilingual sites][multilingual]:
 +
 +{{< code file="unix-to-month-integer.html" >}}
- {{$time.Month}}
++{{ $time := time (int .Params.addDate)}}
 +=> $time = 1489276800
- {{$monthindex := printf "%d" $time.Month }}
++{{ $time.Month }}
 +=> "March"
++{{ $monthindex := printf "%d" $time.Month }}
 +=> $monthindex = 3
 +{{< /code >}}
 +
 +
 +[int]: /functions/int/
 +[multilingual]: /content-management/multilingual/
 +[`printf`]: /functions/printf/
index 6c87d69ac94e5a2a10a91218fec50fa1bec6f717,0000000000000000000000000000000000000000..d8e0f73a494f59bae12f1e6510d41e61307b4ff7
mode 100644,000000..100644
--- /dev/null
@@@ -1,38 -1,0 +1,23 @@@
- # linktitle:
- description: Converts all characters in the provided string to title case.
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: title
-     parent: "functions"
++description: Converts the provided string to title case.
 +categories: [functions]
 +menu:
 +  docs:
-   - "title INPUT"
-   - "strings.Title INPUT"
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature:
- deprecated: false
- aliases: []
++  - "title STRING"
++  - "strings.Title STRING"
 +relatedfuncs: []
- ```
- {{title "BatMan"}}` → "Batman"
- ```
- Can be combined in pipes. In the following snippet, the link text is cleaned up using `humanize` to remove dashes and `title` to convert the value of `$name` to Initial Caps.
- ```
- {{ range $name, $items := .Site.Taxonomies.categories }}
-     <li><a href="{{ printf "%s/%s" "categories" ($name | urlize | lower) | absURL }}">{{ $name | humanize | title }} ({{ len $items }})</a></li>
- {{ end }}
 +---
 +
- ## Configure Title Case
++```go-html-template
++{{ title "table of contents (TOC)" }} → "Table of Contents (TOC)"
 +```
 +
- The default is AP Stylebook, but you can [configure it](/getting-started/configuration/#configure-title-case).
++By default, Hugo adheres to the capitalization rules in the [Associated Press (AP) Stylebook]. Change your [site configuration] if you would prefer to follow the [Chicago Manual of Style], or to use Go's convention of capitalizing every word.
 +
++[Associated Press (AP) Stylebook]: https://www.apstylebook.com/
++[Chicago Manual of Style]: https://www.chicagomanualofstyle.org/home.html
++[site configuration]: /getting-started/configuration/#configure-title-case
index 9b380dc578c74aeb8a59da142b392650c31c82e4,0000000000000000000000000000000000000000..d238565e2fffe19cff6dffe228b47edd7921e62d
mode 100644,000000..100644
--- /dev/null
@@@ -1,76 -1,0 +1,73 @@@
- title: "transform.Unmarshal"
 +---
- date: 2018-12-23
++title: transform.Unmarshal
 +description: "`transform.Unmarshal` (alias `unmarshal`) parses the input and converts it into a map or an array. Supported formats are JSON, TOML, YAML, XML and CSV."
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- hugoversion: "0.53"
- aliases: []
++    parent: functions
 +keywords: []
 +signature: ["RESOURCE or STRING | transform.Unmarshal [OPTIONS]"]
- ```
 +---
 +
 +The function accepts either a `Resource` created in [Hugo Pipes](/hugo-pipes/) or via [Page Bundles](/content-management/page-bundles/), or simply a string. The two examples below will produce the same map:
 +
 +```go-html-template
 +{{ $greetings := "hello = \"Hello Hugo\"" | transform.Unmarshal }}`
 +```
 +
 +```go-html-template
 +{{ $greetings := "hello = \"Hello Hugo\"" | resources.FromString "data/greetings.toml" | transform.Unmarshal }}
 +```
 +
 +In both the above examples, you get a map you can work with:
 +
 +```go-html-template
 +{{ $greetings.hello }}
 +```
 +
 +The above prints `Hello Hugo`.
 +
 +## CSV Options
 +
 +Unmarshal with CSV as input has some options you can set:
 +
 +delimiter
 +: The delimiter used, default is `,`.
 +
 +comment
 +: The comment character used in the CSV. If set, lines beginning with the comment character without preceding whitespace are ignored.:
 +
 +Example:
 +
 +```go-html-template
 +{{ $csv := "a;b;c" | transform.Unmarshal (dict "delimiter" ";") }}
 +```
 +
 +## XML data
 +
 +As a convenience, Hugo allows you to access XML data in the same way that you access JSON, TOML, and YAML: you do not need to specify the root node when accessing the data.
 +
 +To get the contents of `<title>` in the document below, you use `{{ .message.title }}`:
 +
- ```
++```xml
 +<root>
 +    <message>
 +        <title>Hugo rocks!</title>
 +        <description>Thanks for using Hugo</description>
 +    </message>
 +</root>
 +```
 +
 +The following example lists the items of an RSS feed:
 +
++```go-html-template
 +{{ with resources.Get "https://example.com/rss.xml" | transform.Unmarshal }}
 +    {{ range .channel.item }}
 +        <strong>{{ .title | plainify | htmlUnescape }}</strong><br />
 +        <p>{{ .description | plainify | htmlUnescape }}</p>
 +        {{ $link := .link | plainify | htmlUnescape }}
 +        <a href="{{ $link }}">{{ $link }}</a><br />
 +        <hr>
 +    {{ end }}
 +{{ end }}
 +```
index fec435ec7667249e2c7dfeb68668074430dce4a2,0000000000000000000000000000000000000000..3d664abea9168317cddf7aef4cc761c6636f6b9a
mode 100644,000000..100644
--- /dev/null
@@@ -1,43 -1,0 +1,36 @@@
- # linktitle:
 +---
 +title: trim
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Returns a slice of a passed string with all leading and trailing characters from cutset removed.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [strings]
 +signature:
 +  - "trim INPUT CUTSET"
 +  - "strings.Trim INPUT CUTSET"
- deprecated: false
 +relatedfuncs: []
- ```
 +---
 +
- ```
- {{ trim .Inner}}
++```go-html-template
 +{{ trim "++Batman--" "+-" }} → "Batman"
 +```
 +
 +`trim` *requires* the second argument, which tells the function specifically what to remove from the first argument. There is no default value for the second argument, so **the following usage will not work**:
 +
- ```
++```go-html-template
++{{ trim .Inner }}
 +```
 +
 +Instead, the following example tells `trim` to remove extra new lines from the content contained in the [shortcode `.Inner` variable][shortcodevars]:
 +
++```go-html-template
 +{{ trim .Inner "\n" }}
 +```
 +
 +{{% note %}}
 +Go templates also provide a simple [method for trimming whitespace](/templates/introduction/#whitespace) from either side of a Go tag by including a hyphen (`-`).
 +{{% /note %}}
 +
 +
 +[shortcodevars]: /variables/shortcodes/
index 54cfb361281f3b4ebcd9287b392ee8817b19700a,0000000000000000000000000000000000000000..cf38a2dfda8a4960f91b0cfb6c9eb21c3caaf814
mode 100644,000000..100644
--- /dev/null
@@@ -1,30 -1,0 +1,23 @@@
- # linktitle: truncate
 +---
 +title: truncate
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Truncates a text to a max length without cutting words or leaving unclosed HTML tags.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion: 19
++    parent: functions
 +keywords: [strings]
 +signature:
 +  - "truncate SIZE [ELLIPSIS] INPUT"
 +  - "strings.Truncate SIZE [ELLIPSIS] INPUT"
- deprecated: false
 +relatedfuncs: []
- ```
 +---
 +
 +Since Go templates are HTML-aware, `truncate` will intelligently handle normal strings vs HTML strings:
 +
++```go-html-template
 +{{ "<em>Keep my HTML</em>" | safeHTML | truncate 10 }}` → <em>Keep my …</em>`
 +```
 +
 +{{% note %}}
 +If you have a raw string that contains HTML tags you want to remain treated as HTML, you will need to convert the string to HTML using the [`safeHTML` template function](/functions/safehtml) before sending the value to truncate. Otherwise, the HTML tags will be escaped when passed through the `truncate` function.
 +{{% /note %}}
index 465abcdd8d05475b3df95b05983954765f4287f6,0000000000000000000000000000000000000000..b73e06d38cd1baf5e84ce9cdeebf44cd227be94e
mode 100644,000000..100644
--- /dev/null
@@@ -1,49 -1,0 +1,41 @@@
- # linktitle: union
 +---
 +title: union
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-03-12
 +description: Given two arrays or slices, returns a new array that contains the elements or objects that belong to either or both arrays/slices.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion: 0.20
++    parent: functions
 +keywords: [collections,intersect,union,complement]
 +signature: ["union SET1 SET2"]
- deprecated: false
- aliases: []
 +relatedfuncs: [intersect,where]
- ```
 +---
 +
 +Given two arrays (or slices) A and B, this function will return a new array that contains the elements or objects that belong to either A or to B or to both. The elements supported are strings, integers, and floats (only float64).
 +
- ```
++```go-html-template
 +{{ union (slice 1 2 3) (slice 3 4 5) }}
 +<!-- returns [1 2 3 4 5] -->
 +
 +{{ union (slice 1 2 3) nil }}
 +<!-- returns [1 2 3] -->
 +
 +{{ union nil (slice 1 2 3) }}
 +<!-- returns [1 2 3] -->
 +
 +{{ union nil nil }}
 +<!-- returns an error because both arrays/slices have to be of the same type -->
 +```
 +
 +## OR filter in where query
 +
 +This is also very useful to use as `OR` filters when combined with where:
 +
++```go-html-template
 +{{ $pages := where .Site.RegularPages "Type" "not in" (slice "page" "about") }}
 +{{ $pages = $pages | union (where .Site.RegularPages "Params.pinned" true) }}
 +{{ $pages = $pages | intersect (where .Site.RegularPages "Params.images" "!=" nil) }}
 +```
 +
 +The above fetches regular pages not of `page` or `about` type unless they are pinned. And finally, we exclude all pages with no `images` set in Page params.
 +
 +See [intersect](/functions/intersect) for `AND`.
index 73ca32488cebfae126bb279fbded693d9ddb9c26,0000000000000000000000000000000000000000..4584ec5ad774136cad3c8015ef583e9fdfbc8854
mode 100644,000000..100644
--- /dev/null
@@@ -1,18 -1,0 +1,15 @@@
- linktitle: uniq
 +---
 +title: uniq
- aliases: []
 +description: Takes in a slice or array and returns a slice with duplicate elements removed.
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: functions
 +keywords: [multilingual,i18n,urls]
 +signature: [uniq SET]
- ```
 +---
 +
 +
++```go-html-template
 +{{ slice 1 3 2 1 | uniq }} --> [1 3 2]
 +```
index 98fcc74a4fc83a261ebe4739ad346c4f623ba1cf,0000000000000000000000000000000000000000..60fae9248a072ffe33d1cf73d0620510de15fcfd
mode 100644,000000..100644
--- /dev/null
@@@ -1,31 -1,0 +1,30 @@@
- date: 2017-02-01
 +---
 +title: .Unix
 +description: Converts a time.Time value to the number of seconds elapsed since the Unix epoch, excluding leap seconds. The Unix epoch is 00:00:00&nbsp;UTC on 1 January 1970.
-     parent: "functions"
 +keywords: [dates,time]
 +categories: [functions]
 +menu:
 +  docs:
++    parent: functions
 +signature: [".Unix",".UnixMilli",".UnixMicro",".UnixNano"]
 +relatedfuncs: [Format,dateFormat,now,time]
 +---
 +
 +The `Milli`, `Micro`, and `Nano` variants return the number of milliseconds, microseconds, and nanoseconds (respectively) elapsed since the Unix epoch.
 +
 +```go-html-template
 +.Date.Unix        --> 1637259694
 +.ExpiryDate.Unix  --> 1672559999
 +.Lastmod.Unix     --> 1637361786
 +.PublishDate.Unix --> 1637421261
 +
 +("1970-01-01T00:00:00-00:00" | time.AsTime).Unix --> 0
 +("1970-01-01T00:00:42-00:00" | time.AsTime).Unix --> 42
 +("1970-04-11T01:48:29-08:00" | time.AsTime).Unix --> 8675309
 +("2026-05-02T20:09:31-07:00" | time.AsTime).Unix --> 1777777771
 +
 +now.Unix      --> 1637447841
 +now.UnixMilli --> 1637447841347
 +now.UnixMicro --> 1637447841347378
 +now.UnixNano  --> 1637447841347378799
 +```
index 02f4cd578816cbf5de6180bc1d4e5160b892412b,0000000000000000000000000000000000000000..e11065f79c1419d1f701a9e8abe71196aa64590b
mode 100644,000000..100644
--- /dev/null
@@@ -1,30 -1,0 +1,21 @@@
- # linktitle: upper
 +---
 +title: upper
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Converts all characters in a string to uppercase
-     parent: "functions"
 +keywords: []
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +toc:
 +signature:
 +  - "upper INPUT"
 +  - "strings.ToUpper INPUT"
- deprecated: false
- draft: false
- aliases: []
 +relatedfuncs: []
 +---
 +
 +Note that `upper` can be applied in your templates in more than one way:
 +
 +```go-html-template
 +{{ upper "BatMan" }} → "BATMAN"
 +{{ "BatMan" | upper }} → "BATMAN"
 +```
index 048946cd377c1091f8aa15ad6278493b97c6dfb8,0000000000000000000000000000000000000000..8c9aeb1c37083e75e7b22df6dea72d6e7830b995
mode 100644,000000..100644
--- /dev/null
@@@ -1,71 -1,0 +1,62 @@@
- # linktitle: urlize
 +---
 +title: urlize
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Takes a string, sanitizes it for usage in URLs, and converts spaces to hyphens.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- hugoversion:
- deprecated: false
- workson: []
++    parent: functions
 +keywords: [urls,strings]
 +signature: ["urlize INPUT"]
- {{< code file="content/blog/greatest-city.md" copy="false">}}
- +++
 +relatedfuncs: []
 +---
 +
 +The following examples pull from a content file with the following front matter:
 +
- +++
- {{< /code >}}
++{{< code-toggle file="content/blog/greatest-city.md" fm=true copy=false >}}
 +title = "The World's Greatest City"
 +location = "Chicago IL"
 +tags = ["pizza","beer","hot dogs"]
- {{< code file="layouts/partials/content-header.html" download="content-header.html" >}}
++{{< /code-toggle >}}
 +
 +The following might be used as a partial within a [single page template][singletemplate]:
 +
-     <h1>{{.Title}}</h1>
++{{< code file="layouts/partials/content-header.html" >}}
 +<header>
-         <div><a href="/locations/{{ . | urlize}}">{{.}}</a></div>
++    <h1>{{ .Title }}</h1>
 +    {{ with .Params.location }}
-         {{range .}}
++        <div><a href="/locations/{{ . | urlize }}">{{ . }}</a></div>
 +    {{ end }}
 +    <!-- Creates a list of tags for the content and links to each of their pages -->
 +    {{ with .Params.tags }}
 +    <ul>
-         {{end}}
++        {{ range .}}
 +            <li>
 +                <a href="/tags/{{ . | urlize }}">{{ . }}</a>
 +            </li>
- The preceding partial would then output to the rendered page as follows, assuming the page is being built with Hugo's default pretty URLs.
++        {{ end }}
 +    </ul>
 +    {{ end }}
 +</header>
 +{{< /code >}}
 +
- {{< output file="/blog/greatest-city/index.html" >}}
++The preceding partial would then output to the rendered page as follows:
 +
-     <h1>The World&#39;s Greatest City</h1>
-     <div><a href="/locations/chicago-il">Chicago IL</a></div>
-     <ul>
-         <li>
-             <a href="/tags/pizza">pizza</a>
-         </li>
-         <li>
-             <a href="/tags/beer">beer</a>
-         </li>
-         <li>
-             <a href="/tags/hot-dogs">hot dogs</a>
-         </li>
-     </ul>
++```html
 +<header>
- {{< /output >}}
++  <h1>The World&#39;s Greatest City</h1>
++  <div><a href="/locations/chicago-il">Chicago IL</a></div>
++  <ul>
++    <li>
++      <a href="/tags/pizza">pizza</a>
++    </li>
++    <li>
++      <a href="/tags/beer">beer</a>
++    </li>
++    <li>
++      <a href="/tags/hot-dogs">hot dogs</a>
++    </li>
++  </ul>
 +</header>
++```
 +
 +[singletemplate]: /templates/single-page-templates/
index ca00e6e6d2f027778c9b5ef050490d37ffbb1e5e,0000000000000000000000000000000000000000..11ada38c44eddaa70cf693638b91f94f6947b36e
mode 100644,000000..100644
--- /dev/null
@@@ -1,33 -1,0 +1,25 @@@
- linktitle: urlquery
 +---
 +title: urlquery
- date: 2022-01-18
- publishdate: 2022-01-18
- lastmod: 2022-01-18
 +description: Returns the escaped value of the textual representation of its arguments in a form suitable for embedding in a URL query.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- hugoversion:
- deprecated: false
- workson: []
++    parent: functions
 +keywords: [urls]
 +signature: ["urlquery INPUT [INPUT]..."]
- aliases: []
 +relatedfuncs: []
 +---
 +
 +
 +This template code:
 +
 +```go-html-template
 +{{ $u := urlquery "https://" "example.com" | safeURL }}
 +<a href="https://example.org?url={{ $u }}">Link</a>
 +```
 +
 +Is rendered to:
 +
 +```html
 +<a href="https://example.org?url=https%3A%2F%2Fexample.com">Link</a>
 +```
index 988ecb3ac017c112e7e9c50dbca410dfbf7abc76,0000000000000000000000000000000000000000..b2d781e7f0f187fffaa8d69701dcedd8adfe6f43
mode 100644,000000..100644
--- /dev/null
@@@ -1,31 -1,0 +1,32 @@@
- description: Parse parses a given URL, which may be relative or absolute, into a URL structure.
- date: 2017-09-25
- publishdate: 2017-09-25
- lastmod: 2017-09-25
 +---
 +title: urls.Parse
-     parent: "functions"
++description: Parses a URL into a URL structure.
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
- deprecated: false
- aliases: []
++    parent: functions
 +keywords: [urls]
 +signature: ["urls.Parse URL"]
- `urls.Parse` takes a url as input
 +---
 +
- ```go-html-template
- {{ $url := urls.Parse "http://www.gohugo.io" }}
- ```
- and returns a [URL](https://godoc.org/net/url#URL) structure. The struct fields are accessed via the `.` notation:
++The `urls.Parse` function parses a URL into a [URL structure](https://godoc.org/net/url#URL). The URL may be relative (a path, without a host) or absolute (starting with a [scheme]). Hugo throws an error when parsing an invalid URL.
 +
++[scheme]: https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml#uri-schemes-1
 +
- {{ $url.Scheme }} → "http"
- {{ $url.Host }} → "www.gohugo.io"
 +
 +```go-html-template
++{{ $url := "https://example.org:123/foo?a=6&b=7#bar" }}
++{{ $u := urls.Parse $url }}
++
++{{ $u.IsAbs }} → true
++{{ $u.Scheme }} → https
++{{ $u.Host }} → example.org:123
++{{ $u.Hostname }} → example.org
++{{ $u.RequestURI }} → /foo?a=6&b=7
++{{ $u.Path }} → /foo
++{{ $u.Query }} → map[a:[6] b:[7]]
++{{ $u.Query.a }} → [6]
++{{ $u.Query.Get "a" }} → 6
++{{ $u.Query.Has "b" }} → true
++{{ $u.Fragment }} → bar
 +```
index b7d31f645e6cca6284783cc1b01da7fbd096dc5a,0000000000000000000000000000000000000000..49882b807a846ef595f44f17cb74544ad70551b2
mode 100644,000000..100644
--- /dev/null
@@@ -1,176 -1,0 +1,167 @@@
- # linktitle: where
 +---
 +title: where
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Filters an array to only the elements containing a matching value for a given field.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: [lists,taxonomies,terms,groups]
- hugoversion:
++    parent: functions
 +keywords: [filtering]
 +signature: ["where COLLECTION KEY [OPERATOR] MATCH"]
- deprecated: false
 +relatedfuncs: [intersect,first,after,last]
- needsexample: true
 +toc: true
- ```
- +++
 +---
 +
 +`where` filters an array to only the elements containing a matching
 +value for a given field.
 +
 +It works in a similar manner to the [`where` keyword in
 +SQL][wherekeyword].
 +
 +```go-html-template
 +{{ range where .Pages "Section" "foo" }}
 +  {{ .Content }}
 +{{ end }}
 +```
 +
 +It can be used by dot-chaining the second argument to refer to a nested element of a value.
 +
- +++
- ```
++{{< code-toggle file="content/example.md" fm=true copy=false >}}
++title: Example
 +series: golang
- {{range where .Pages "Draft" true}}
-         <p>{{.Title}}</p>
- {{end}}
++{{< /code-toggle >}}
 +
 +```go-html-template
 +{{ range where .Site.Pages "Params.series" "golang" }}
 +   {{ .Content }}
 +{{ end }}
 +```
 +
 +It can also be used with the logical operators `!=`, `>=`, `in`, etc. Without an operator, `where` compares a given field with a matching value equivalent to `=`.
 +
 +```go-html-template
 +{{ range where .Pages "Section" "!=" "foo" }}
 +   {{ .Content }}
 +{{ end }}
 +```
 +
 +The following logical operators are available with `where`:
 +
 +`=`, `==`, `eq`
 +: `true` if a given field value equals a matching value
 +
 +`!=`, `<>`, `ne`
 +: `true` if a given field value doesn't equal a matching value
 +
 +`>=`, `ge`
 +: `true` if a given field value is greater than or equal to a matching value
 +
 +`>`, `gt`
 +: `true` if a given field value is greater than a matching value
 +
 +`<=`, `le`
 +: `true` if a given field value is lesser than or equal to a matching value
 +
 +`<`, `lt`
 +: `true` if a given field value is lesser than a matching value
 +
 +`in`
 +: `true` if a given field value is included in a matching value; a matching value must be an array or a slice
 +
 +`not in`
 +: `true` if a given field value isn't included in a matching value; a matching value must be an array or a slice
 +
 +`intersect`
 +: `true` if a given field value that is a slice/array of strings or integers contains elements in common with the matching value; it follows the same rules as the [`intersect` function][intersect].
 +
 +## Use `where` with `Booleans`
 +When using booleans you should not put quotation marks.
 +```go-html-template
- sections**]({{< relref "where.md#mainsections" >}}), sorts it using the [default
++{{ range where .Pages "Draft" true }}
++        <p>{{ .Title }}</p>
++{{ end }}
 +```
 +  
 +
 +## Use `where` with `intersect`
 +
 +```go-html-template
 +{{ range where .Site.Pages "Params.tags" "intersect" .Params.tags }}
 +  {{ if ne .Permalink $.Permalink }}
 +    {{ .Render "summary" }}
 +  {{ end }}
 +{{ end }}
 +```
 +
 +You can also put the returned value of the `where` clauses into a variable:
 +
 +{{< code file="where-intersect-variables.html" >}}
 +{{ $v1 := where .Site.Pages "Params.a" "v1" }}
 +{{ $v2 := where .Site.Pages "Params.b" "v2" }}
 +{{ $filtered := $v1 | intersect $v2 }}
 +{{ range $filtered }}
 +{{ end }}
 +{{< /code >}}
 +
 +## Use `where` with `first`
 +
 +Using `first` and `where` together can be very
 +powerful. Below snippet gets a list of posts only from [**main
++sections**](#mainsections), sorts it using the [default
 +ordering](/templates/lists/) for lists (i.e., `weight => date`), and
 +then ranges through only the first 5 posts in that list:
 +
 +{{< code file="first-and-where-together.html" >}}
 +{{ range first 5 (where site.RegularPages "Type" "in" site.Params.mainSections) }}
 +   {{ .Content }}
 +{{ end }}
 +{{< /code >}}
 +
 +## Nest `where` Clauses
 +
 +You can also nest `where` clauses to drill down on lists of content by more than one parameter. The following first grabs all pages in the "blog" section and then ranges through the result of the first `where` clause and finds all pages that are *not* featured:
 +
 +```go-html-template
 +{{ range where (where .Pages "Section" "blog" ) "Params.featured" "!=" true }}
 +```
 +
 +## Unset Fields
 +
 +Filtering only works for set fields. To check whether a field is set or exists, you can use the operand `nil`.
 +
 +This can be useful to filter a small amount of pages from a large pool. Instead of setting a field on all pages, you can set that field on required pages only.
 +
 +Only the following operators are available for `nil`
 +
 +* `=`, `==`, `eq`: True if the given field is not set.
 +* `!=`, `<>`, `ne`: True if the given field is set.
 +
 +```go-html-template
 +{{ range where .Pages "Params.specialpost" "!=" nil }}
 +   {{ .Content }}
 +{{ end }}
 +```
 +
 +## Portable `where` filters -- `site.Params.mainSections` {#mainsections}
 +
 +**This is especially important for themes.**
 +
 +To list the most relevant pages on the front page or similar, you
 +should use the `site.Params.mainSections` list instead of comparing
 +section names to hard-coded values like `"posts"` or `"post"`.
 +
 +```go-html-template
 +{{ $pages := where site.RegularPages "Type" "in" site.Params.mainSections }}
 +```
 +
 +If the user has not set this config parameter in their site config, it
 +will default to the *section with the most pages*.
 +
 +The user can override the default:
 +
 +{{< code-toggle file="config" >}}
 +[params]
 +  mainSections = ["blog", "docs"]
 +{{< /code-toggle >}}
 +
 +[intersect]: /functions/intersect/
 +[wherekeyword]: https://www.techonthenet.com/sql/where.php
index ae643caf7d365efcb9dd76b9abfa145d1fa2a04d,0000000000000000000000000000000000000000..591aea01ea878c12cf6b40651a0a1cc5879f7f4a
mode 100644,000000..100644
--- /dev/null
@@@ -1,34 -1,0 +1,27 @@@
- # linktitle: with
 +---
 +title: with
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-03-12
 +description: Rebinds the context (`.`) within its scope and skips the block if the variable is absent or empty.
-     parent: "functions"
 +categories: [functions]
 +menu:
 +  docs:
- workson: []
- hugoversion:
++    parent: functions
 +keywords: [conditionals]
 +signature: ["with INPUT"]
- deprecated: false
 +relatedfuncs: []
- {{with .Site.Params.twitteruser}}<span class="twitter">
- <a href="https://twitter.com/{{.}}" rel="author">
- <img src="/images/twitter.png" width="48" height="48" title="Twitter: {{.}}"
 +---
 +
 +An alternative way of writing an `if` statement and then referencing the same value is to use `with` instead. `with` rebinds the context (`.`) within its scope and skips the block if the variable is absent, unset or empty.
 +
 +The set of *empty* values is defined by [the Go templates package](https://golang.org/pkg/text/template/). Empty values include `false`, the number zero, and the empty string.
 +
 +If you want to render a block if an index or key is present in a slice, array, channel or map, regardless of whether the value is empty, you should use [`isset`](/functions/isset) instead.
 +
 +The following example checks for a [user-defined site variable](/variables/site/) called `twitteruser`. If the key-value is not set, the following will render nothing:
 +
 +{{< code file="layouts/partials/twitter.html" >}}
- </span>{{end}}
++{{ with .Site.Params.twitteruser }}<span class="twitter">
++<a href="https://twitter.com/{{ . }}" rel="author">
++<img src="/images/twitter.png" width="48" height="48" title="Twitter: {{ . }}"
 + alt="Twitter"></a>
++</span>{{ end }}
 +{{< /code >}}
index f953abb22cdac929dd5959801f23d8fc2c258482,0000000000000000000000000000000000000000..b08a949fb8a271bbe30102ff4ae7fb3f3fbf95d0
mode 100644,000000..100644
--- /dev/null
@@@ -1,22 -1,0 +1,19 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
 +---
 +title: Get Started
 +linktitle: Get Started Overview
 +description: Quick start and guides for installing Hugo on your preferred operating system.
-     parent: "getting-started"
 +categories: [getting started]
 +keywords: [usage,docs]
 +menu:
 +  docs:
- weight: 0001  #rem
++    parent: getting-started
 +    weight: 1
- toc: false
++weight: 0001
 +aliases: [/overview/introduction/]
 +---
 +
 +If this is your first time using Hugo and you've [already installed Hugo on your machine][installed], we recommend the [quick start]. You can also use [external learning resources] to learn Hugo.
 +
 +[installed]: /installation/
 +[quick start]: /getting-started/quick-start/
 +[external learning resources]: /getting-started/external-learning-resources/
index d1d237b2a986dc47c7aaacb7de6567d430ddd704,0000000000000000000000000000000000000000..4ab6b84a03993555df6da53d99a4ff1b775ddc5e
mode 100644,000000..100644
--- /dev/null
@@@ -1,113 -1,0 +1,111 @@@
- date: 2019-11-15
 +---
 +title: Configure Markup
 +description: How to handle Markdown and other markup related configuration.
- sections_weight: 65
 +categories: [getting started,fundamentals]
 +keywords: [configuration,highlighting]
 +weight: 65
 +slug: configuration-markup
 +toc: true
 +---
 +
 +## Configure Markup
 +
 +See [Goldmark](#goldmark) for settings related to the default Markdown handler in Hugo.
 +
 +Below are all markup related configuration in Hugo with their default settings:
 +
 +{{< code-toggle config="markup" />}}
 +
 +**See each section below for details.**
 +
 +### Goldmark
 +
 +[Goldmark](https://github.com/yuin/goldmark/) is from Hugo 0.60 the default library used for Markdown. It's fast, it's [CommonMark](https://spec.commonmark.org/0.29/) compliant and it's very flexible.
 +
 +This is the default configuration:
 +
 +{{< code-toggle config="markup.goldmark" />}}
 +
 +For details on the extensions, refer to [this section](https://github.com/yuin/goldmark/#built-in-extensions) of the Goldmark documentation
 +
 +Some settings explained:
 +
 +hardWraps
 +: By default, Goldmark ignores newlines within a paragraph. Set to `true` to render newlines as `<br>` elements.
 +
 +unsafe
 +: By default, Goldmark does not render raw HTMLs and potentially dangerous links. If you have lots of inline HTML and/or JavaScript, you may need to turn this on.
 +
 +typographer
 +: This extension substitutes punctuations with typographic entities like [smartypants](https://daringfireball.net/projects/smartypants/).
 +
 +attribute
 +: Enable custom attribute support for titles and blocks by adding attribute lists inside single curly brackets (`{.myclass class="class1 class2" }`) and placing it _after the Markdown element it decorates_, on the same line for titles and on a new line directly below for blocks.
 +
 +Hugo supports adding attributes (e.g. CSS classes) to Markdown blocks, e.g. tables, lists, paragraphs etc.
 +
 +A blockquote with a CSS class:
 +
 +```md
 +> foo
 +> bar
 +{.myclass}
 +```
 +
 +There are some current limitations: For tables you can currently only apply it to the full table, and for lists the `ul`/`ol`-nodes only, e.g.:
 +
 +```md
 +* Fruit
 +  * Apple
 +  * Orange
 +  * Banana
 +  {.fruits}
 +* Dairy
 +  * Milk
 +  * Cheese
 +  {.dairies}
 +{.list}
 +```
 +
 +Note that attributes in [code fences](/content-management/syntax-highlighting/#highlighting-in-code-fences) must come after the opening tag, with any other highlighting processing instruction, e.g.:
 +
 +````txt
 +```go {.myclass linenos=table,hl_lines=[8,"15-17"],linenostart=199}
 +// ... code
 +```
 +````
 +
 +autoHeadingIDType ("github")
 +: The strategy used for creating auto IDs (anchor names). Available types are `github`, `github-ascii` and `blackfriday`. `github` produces GitHub-compatible IDs, `github-ascii` will drop any non-Ascii characters after accent normalization, and `blackfriday` will make the IDs compatible with Blackfriday, the default Markdown engine before Hugo 0.60. Note that if Goldmark is your default Markdown engine, this is also the strategy used in the [anchorize](/functions/anchorize/) template func.
 +
 +### Highlight
 +
 +This is the default `highlight` configuration. Note that some of these settings can be set per code block, see [Syntax Highlighting](/content-management/syntax-highlighting/).
 +
 +{{< code-toggle config="markup.highlight" />}}
 +
 +For `style`, see these galleries:
 +
 +* [Short snippets](https://xyproto.github.io/splash/docs/all.html)
 +* [Long snippets](https://xyproto.github.io/splash/docs/longer/all.html)
 +
 +For CSS, see [Generate Syntax Highlighter CSS](/content-management/syntax-highlighting/#generate-syntax-highlighter-css).
 +
 +### Table Of Contents
 +
 +{{< code-toggle config="markup.tableOfContents" />}}
 +
 +These settings only works for the Goldmark renderer:
 +
 +startLevel
 +: The heading level, values starting at 1 (`h1`), to start render the table of contents.
 +
 +endLevel
 +: The heading level, inclusive, to stop render the table of contents.
 +
 +ordered
 +: Whether or not to generate an ordered list instead of an unordered list.
 +
 +## Markdown Render Hooks
 +
 +See [Markdown Render Hooks](/templates/render-hooks/).
index 99d11fbb174c058b19d960b75384bc391c7cf967,0000000000000000000000000000000000000000..e47d3c9426fcd0103beb036cfbd457f681f780de
mode 100644,000000..100644
--- /dev/null
@@@ -1,791 -1,0 +1,792 @@@
- date: 2013-07-01
- publishdate: 2017-01-02
 +---
 +title: Configure Hugo
 +linktitle: Configuration
 +description: How to configure your Hugo site.
-     parent: "getting-started"
 +categories: [getting started,fundamentals]
 +keywords: [configuration,toml,yaml,json]
 +menu:
 +  docs:
- sections_weight: 60
++    parent: getting-started
 +    weight: 60
 +weight: 60
- {{< todo >}}TODO: distinct config.toml and others (the root object files){{< /todo >}}
 +aliases: [/overview/source-directory/,/overview/configuration/]
 +toc: true
 +---
 +
 +## Configuration File
 +
 +Hugo uses the `config.toml`, `config.yaml`, or `config.json` (if found in the
 +site root) as the default site config file.
 +
 +The user can choose to override that default with one or more site config files
 +using the command-line `--config` switch.
 +
 +Examples:
 +
 +```txt
 +hugo --config debugconfig.toml
 +hugo --config a.toml,b.toml,c.toml
 +```
 +
 +{{% note %}}
 +Multiple site config files can be specified as a comma-separated string to the `--config` switch.
 +{{% /note %}}
 +
- In Hugo 0.110.0 we changed the default config base filename to `hugo`, e.g. `hugo.toml`. We will still look for `config.toml` etc., but we recommend you eventually rename it (but you need to wait if you want to support older Hugo versions). The main reason we're doing this is to make it easier code editors and build tools to identify this as a Hugo configuration file and project. 
 +## hugo.toml vs config.toml
 +
- 1. In `_default/config.toml` you don't need to mention `googleAnalytics` parameter at all. This ensures that no Google Analytics code is loaded in your development server i.e. when you run `hugo serve`. This works since, by default Hugo sets `Environment=development` when you run `hugo serve` which uses the config files from `_default` folder
++In Hugo 0.110.0 we changed the default config base filename to `hugo`, e.g. `hugo.toml`. We will still look for `config.toml` etc., but we recommend you eventually rename it (but you need to wait if you want to support older Hugo versions). The main reason we're doing this is to make it easier for code editors and build tools to identify this as a Hugo configuration file and project.
 +
 +{{< new-in "0.110.0" >}}
 +
 +## Configuration Directory
 +
 +In addition to using a single site config file, one can use the `configDir` directory (default to `config/`) to maintain easier organization and environment specific settings.
 +
 +- Each file represents a configuration root object, such as `params.toml` for `[Params]`, `menu(s).toml` for `[Menu]`, `languages.toml` for `[Languages]` etc...
 +- Each file's content must be top-level, for example:
 +
 +{{< code-toggle file="config" >}}
 +[Params]
 +  foo = "bar"
 +{{< /code-toggle >}}
 +
 +{{< code-toggle file="params" >}}
 +foo = "bar"
 +{{< /code-toggle >}}
 +
 +- Each directory holds a group of files containing settings unique to an environment.
 +- Files can be localized to become language specific.
 +
 +
 +```txt
 +├── config
 +│   ├── _default
 +│   │   ├── config.toml
 +│   │   ├── languages.toml
 +│   │   ├── menus.en.toml
 +│   │   ├── menus.zh.toml
 +│   │   └── params.toml
 +│   ├── production
 +│   │   ├── config.toml
 +│   │   └── params.toml
 +│   └── staging
 +│       ├── config.toml
 +│       └── params.toml
 +```
 +
 +Considering the structure above, when running `hugo --environment staging`, Hugo will use every setting from `config/_default` and merge `staging`'s on top of those.
 +
 +Let's take an example to understand this better. Let's say you are using Google Analytics for your website. This requires you to specify `googleAnalytics = "G-XXXXXXXX"` in `config.toml`. Now consider the following scenario:
 +- You don't want the Analytics code to be loaded in development i.e. in your `localhost`
 +- You want to use separate googleAnalytics IDs for your production & staging environments (say):
 +  - `G-PPPPPPPP` for production
 +  - `G-SSSSSSSS` for staging
 +
 +This is how you need to configure your `config.toml` files considering the above scenario:
- Hostname (and path) to the root, e.g. https://bep.is/
++1. In `_default/config.toml` you don't need to mention `googleAnalytics` parameter at all. This ensures that no Google Analytics code is loaded in your development server i.e. when you run `hugo server`. This works since, by default Hugo sets `Environment=development` when you run `hugo server` which uses the config files from `_default` folder
 +2. In `production/config.toml` you just need to have one line:
 +
 +    ```googleAnalytics = "G-PPPPPPPP"```
 +
 +    You don't need to mention all other parameters like `title`, `baseURL`, `theme` etc. again in this config file. You need to mention only those parameters which are different or new for the production environment. This is due to the fact that Hugo is going to __merge__ this on top of `_default/config.toml`. Now when you run `hugo` (build command), by default hugo sets `Environment=production`, so the `G-PPPPPPPP` analytics code will be there in your production website
 +3. Similarly in `staging/config.toml` you just need to have one line:
 +
 +    ```googleAnalytics = "G-SSSSSSSS"```
 +
 +    Now you need to tell Hugo that you are using the staging environment. So your build command should be `hugo --environment staging` which will load the `G-SSSSSSSS` analytics code in your staging website
 +
 +{{% note %}}
 +Default environments are __development__ with `hugo server` and __production__ with `hugo`.
 +{{%/ note %}}
 +
 +## Merge Configuration from Themes
 +
 +The configuration value for `_merge` can be one of:
 +
 +none
 +: No merge.
 +
 +shallow
 +: Only add values for new keys.
 +
 +deep
 +: Add values for new keys, merge existing.
 +
 +Note that you don't need to be so verbose as in the default setup below; a `_merge` value higher up will be inherited if not set.
 +
 +{{< code-toggle config="mergeStrategy" skipHeader=true />}}
 +
 +## All Configuration Settings
 +
 +The following is the full list of Hugo-defined variables. Users may choose to override those values in their site
 +config file(s).
 +
 +### archetypeDir
 +
 +**Default value:** "archetypes"
 +
 +The directory where Hugo finds archetype files (content templates). {{% module-mounts-note %}}
 +
 +### assetDir
 +
 +**Default value:** "assets"
 +
 +The directory where Hugo finds asset files used in [Hugo Pipes](/hugo-pipes/). {{% module-mounts-note %}}
 +
 +### baseURL
 +
- See [Add Non-content Entries to a Menu](/content-management/menus/#add-non-content-entries-to-a-menu).
++The absolute URL (protocol, host, path, and trailing slash) of your published site (e.g., `https://www.example.org/docs/`).
 +
 +### build
 +
 +See [Configure Build](#configure-build)
 +
 +### buildDrafts (false)
 +
 +**Default value:** false
 +
 +Include drafts when building.
 +
 +### buildExpired
 +
 +**Default value:** false
 +
 +Include content already expired.
 +
 +### buildFuture
 +
 +**Default value:** false
 +
 +Include content with publishdate in the future.
 +
 +### caches
 +
 +See [Configure File Caches](#configure-file-caches)
 +
 +### cascade
 +
 +Pass down default configuration values (front matter) to pages in the content tree. The options in site config is the same as in page front matter, see [Front Matter Cascade](/content-management/front-matter#front-matter-cascade).
 +
 +### canonifyURLs
 +
 +**Default value:** false
 +
 +Enable to turn relative URLs into absolute.
 +
 +### cleanDestinationDir
 +
 +**Default value:** false
 +
 +When building, removes files from destination not found in static directories.
 +
 +### contentDir
 +
 +**Default value:** "content"
 +
 +The directory from where Hugo reads content files. {{% module-mounts-note %}}
 +
 +### copyright
 +
 +**Default value:** ""
 +
 +Copyright notice for your site, typically displayed in the footer.
 +
 +### dataDir
 +
 +**Default value:** "data"
 +
 +The directory from where Hugo reads data files. {{% module-mounts-note %}}
 +
 +### defaultContentLanguage
 +
 +**Default value:** "en"
 +
 +Content without language indicator will default to this language.
 +
 +### defaultContentLanguageInSubdir
 +
 +**Default value:**  false
 +
 +Render the default content language in subdir, e.g. `content/en/`. The site root `/` will then redirect to `/en/`.
 +
 +### disableAliases
 +
 +**Default value:**  false
 +
 +Will disable generation of alias redirects. Note that even if `disableAliases` is set, the aliases themselves are preserved on the page. The motivation with this is to be able to generate 301 redirects in an `.htaccess`, a Netlify `_redirects` file or similar using a custom output format.
 +
 +### disableHugoGeneratorInject
 +
 +**Default value:**  false
 +
 +Hugo will, by default, inject a generator meta tag in the HTML head on the _home page only_. You can turn it off, but we would really appreciate if you don't, as this is a good way to watch Hugo's popularity on the rise.
 +
 +### disableKinds
 +
 +**Default value:**  []
 +
 +Enable disabling of all pages of the specified *Kinds*. Allowed values in this list: `"page"`, `"home"`, `"section"`, `"taxonomy"`, `"term"`, `"RSS"`, `"sitemap"`, `"robotsTXT"`, `"404"`.
 +
 +### disableLiveReload
 +
 +**Default value:**  false
 +
 +Disable automatic live reloading of browser window.
 +
 +### disablePathToLower
 +
 +**Default value:**  false
 +
 +Do not convert the url/path to lowercase.
 +
 +### enableEmoji
 +
 +**Default value:**  false
 +
 +Enable Emoji emoticons support for page content; see the [Emoji Cheat Sheet](https://www.webpagefx.com/tools/emoji-cheat-sheet/).
 +
 +### enableGitInfo
 +
 +**Default value:**  false
 +
 +Enable `.GitInfo` object for each page (if the Hugo site is versioned by Git). This will then update the `Lastmod` parameter for each page using the last git commit date for that content file.
 +
 +### enableInlineShortcodes
 +
 +**Default value:**  false
 +
 +Enable inline shortcode support. See [Inline Shortcodes](/templates/shortcode-templates/#inline-shortcodes).
 +
 +### enableMissingTranslationPlaceholders
 +
 +**Default value:**  false
 +
 +Show a placeholder instead of the default value or an empty string if a translation is missing.
 +
 +### enableRobotsTXT
 +
 +**Default value:**  false
 +
 +Enable generation of `robots.txt` file.
 +
 +### frontmatter
 +
 +See [Front matter Configuration](#configure-front-matter).
 +
 +### googleAnalytics
 +
 +**Default value:**  ""
 +
 +Google Analytics tracking ID.
 +
 +### hasCJKLanguage
 +
 +**Default value:** false
 +
 +If true, auto-detect Chinese/Japanese/Korean Languages in the content. This will make `.Summary` and `.WordCount` behave correctly for CJK languages.
 +
 +### imaging
 +
 +See [Image Processing Config](/content-management/image-processing/#imaging-configuration).
 +
 +### languageCode
 +
 +**Default value:**  ""
 +
 +A language tag as defined by [RFC 5646](https://datatracker.ietf.org/doc/html/rfc5646). This value is used to populate:
 +
 +- The `<language>` element in the internal [RSS template](https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/rss.xml)
 +- The `lang` attribute of the `<html>` element in the internal [alias template](https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/alias.html)
 +
 +### languages
 +
 +See [Configure Languages](/content-management/multilingual/#configure-languages).
 +
 +### disableLanguages
 +
 +See [Disable a Language](/content-management/multilingual/#disable-a-language)
 +
 +### markup
 +
 +See [Configure Markup](/getting-started/configuration-markup).
 +
 +### mediaTypes
 +
 +See [Configure Media Types](/templates/output-formats/#media-types).
 +
 +### menus
 +
- See ["Section Menu for Lazy Bloggers"](/templates/menu-templates/#section-menu-for-lazy-bloggers).
++See [Menus](/content-management/menus/#define-in-site-configuration).
 +
 +### minify
 +
 +See [Configure Minify](#configure-minify)
 +
 +### module
 +
 +Module config see [Module Config](/hugo-modules/configuration/).
 +
 +### newContentEditor
 +
 +**Default value:** ""
 +
 +The editor to use when creating new content.
 +
 +### noChmod
 +
 +**Default value:** false
 +
 +Don't sync permission mode of files.
 +
 +### noTimes
 +
 +**Default value:** false
 +
 +Don't sync modification time of files.
 +
 +### outputFormats
 +
 +See [Configure Output Formats](#configure-additional-output-formats).
 +
 +### paginate
 +
 +**Default value:** 10
 +
 +Default number of elements per page in [pagination](/templates/pagination/).
 +
 +### paginatePath
 +
 +**Default value:** "page"
 +
 +The path element used during pagination (`https://example.com/page/2`).
 +
 +### permalinks
 +
 +See [Content Management](/content-management/urls/#permalinks).
 +
 +### pluralizeListTitles
 +
 +**Default value:** true
 +
 +Pluralize titles in lists.
 +
 +### publishDir
 +
 +**Default value:** "public"
 +
 +The directory to where Hugo will write the final static site (the HTML files etc.).
 +
 +### related
 +
 +: See [Related Content](/content-management/related/#configure-related-content).
 +
 +### relativeURLs
 +
 +**Default value:** false
 +
 +Enable this to make all relative URLs relative to content root. Note that this does not affect absolute URLs.
 +
 +### refLinksErrorLevel
 +
 +**Default value:** "ERROR"
 +
 +When using `ref` or `relref` to resolve page links and a link cannot be resolved, it will be logged with this log level. Valid values are `ERROR` (default) or `WARNING`. Any `ERROR` will fail the build (`exit -1`).
 +
 +### refLinksNotFoundURL
 +
 +URL to be used as a placeholder when a page reference cannot be found in `ref` or `relref`. Is used as-is.
 +
 +### removePathAccents
 +
 +**Default value:** false
 +
 +Removes [non-spacing marks](https://www.compart.com/en/unicode/category/Mn) from [composite characters](https://en.wikipedia.org/wiki/Precomposed_character) in content paths.
 +
 +```text
 +content/post/hügó.md --> https://example.org/post/hugo/
 +```
 +
 +### rssLimit
 +
 +**Default value:** -1 (unlimited)
 +
 +Maximum number of items in the RSS feed.
 +
 +### sectionPagesMenu
 +
- ```toml
++See [Menus](/content-management/menus/#define-in-site-configuration).
 +
 +### security
 +
 +See [Security Policy](/about/security-model/#security-policy)
 +
 +### sitemap
 +
 +Default [sitemap configuration](/templates/sitemap-template/#configuration).
 +
 +### summaryLength
 +
 +**Default value:** 70
 +
 +The length of text in words to show in a [`.Summary`](/content-management/summaries/#automatic-summary-splitting).
 +
 +### taxonomies
 +
 +See [Configure Taxonomies](/content-management/taxonomies#configure-taxonomies).
 +
 +### theme
 +
 +: See [Module Config](/hugo-modules/configuration/#module-config-imports) for how to import a theme.
 +
 +### themesDir
 +
 +**Default value:**  "themes"
 +
 +The directory where Hugo reads the themes from.
 +
 +### timeout
 +
 +**Default value:** "30s"
 +
 +Timeout for generating page contents, specified as a [duration](https://pkg.go.dev/time#Duration) or in milliseconds. *Note:*&nbsp;this is used to bail out of recursive content generation. You might need to raise this limit if your pages are slow to generate (e.g., because they require large image processing or depend on remote contents).
 +
 +### timeZone
 +
 +The time zone (or location), e.g. `Europe/Oslo`,  used to parse front matter dates without such information and in the [`time` function](/functions/time/). The list of valid values may be system dependent, but should include `UTC`, `Local`, and any location in the [IANA Time Zone database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
 +
 +### title
 +
 +Site title.
 +
 +### titleCaseStyle
 +
 +**Default value:**  "AP"
 +
 +See [Configure Title Case](#configure-title-case)
 +
 +### uglyURLs
 +
 +**Default value:** false
 +
 +When enabled, creates URL of the form `/filename.html` instead of `/filename/`.
 +
 +### watch
 +
 +**Default value:** false
 +
 +Watch filesystem for changes and recreate as needed.
 +
 +{{% note %}}
 +If you are developing your site on a \*nix machine, here is a handy shortcut for finding a configuration option from the command line:
 +```txt
 +cd ~/sites/yourhugosite
 +hugo config | grep emoji
 +```
 +
 +which shows output like
 +
 +```txt
 +enableemoji: true
 +```
 +{{% /note %}}
 +
 +## Configure Build
 +
 +The `build` configuration section contains global build-related configuration options.
 +
 +{{< code-toggle file="config">}}
 +[build]
 +useResourceCacheWhen="fallback"
 +writeStats = false
 +noJSConfigInAssets = false
 +{{< /code-toggle >}}
 +
 +
 +useResourceCacheWhen
 +: When to use the cached resources in `/resources/_gen` for PostCSS and ToCSS. Valid values are `never`, `always` and `fallback`. The last value means that the cache will be tried if PostCSS/extended version is not available.
 +
 +writeStats
 +: When enabled, a file named `hugo_stats.json` will be written to your project root with some aggregated data about the build, e.g. list of HTML entities published to be used to do [CSS pruning](/hugo-pipes/postprocess/#css-purging-with-postcss). If you're only using this for the production build, you should consider placing it below [config/production](/getting-started/configuration/#configuration-directory). It's also worth mentioning that, due to the nature of the partial server builds, new HTML entities will be added when you add or change them while the server is running, but the old values will not be removed until you restart the server or run a regular `hugo` build.
 +
 +**Note** that the prime use case for this is purging of unused CSS; it is built for speed and there may be false positives (e.g., detection of HTML elements that are not HTML elements).
 +
 +noJSConfigInAssets
 +: Turn off writing a `jsconfig.json` into your `/assets` folder with mapping of imports from running [js.Build](https://gohugo.io/hugo-pipes/js). This file is intended to help with intellisense/navigation inside code editors such as [VS Code](https://code.visualstudio.com/). Note that if you do not use `js.Build`, no file will be written.
 +
 +## Configure Server
 +
 +This is only relevant when running `hugo server`, and it allows to set HTTP headers during development, which allows you to test out your Content Security Policy and similar. The configuration format matches [Netlify's](https://docs.netlify.com/routing/headers/#syntax-for-the-netlify-configuration-file) with slightly more powerful [Glob matching](https://github.com/gobwas/glob):
 +
 +
 +{{< code-toggle file="config">}}
 +[server]
 +[[server.headers]]
 +for = "/**"
 +
 +[server.headers.values]
 +X-Frame-Options = "DENY"
 +X-XSS-Protection = "1; mode=block"
 +X-Content-Type-Options = "nosniff"
 +Referrer-Policy = "strict-origin-when-cross-origin"
 +Content-Security-Policy = "script-src localhost:1313"
 +{{< /code-toggle >}}
 +
 +Since this is "development only", it may make sense to put it below the `development` environment:
 +
 +
 +{{< code-toggle file="config/development/server">}}
 +[[headers]]
 +for = "/**"
 +
 +[headers.values]
 +X-Frame-Options = "DENY"
 +X-XSS-Protection = "1; mode=block"
 +X-Content-Type-Options = "nosniff"
 +Referrer-Policy = "strict-origin-when-cross-origin"
 +Content-Security-Policy = "script-src localhost:1313"
 +{{< /code-toggle >}}
 +
 +You can also specify simple redirects rules for the server. The syntax is again similar to Netlify's.
 +
 +Note that a `status` code of 200 will trigger a [URL rewrite](https://docs.netlify.com/routing/redirects/rewrites-proxies/), which is what you want in SPA situations, e.g:
 +
 +{{< code-toggle file="config/development/server">}}
 +[[redirects]]
 +from = "/myspa/**"
 +to = "/myspa/"
 +status = 200
 +force = false
 +{{< /code-toggle >}}
 +
 +Setting `force=true` will make a redirect even if there is existing content in the path. Note that before Hugo 0.76  `force` was the default behavior, but this is inline with how Netlify does it.
 +
 +## 404 Server Error Page {#_404-server-error-page}
 +
 +{{< new-in "0.103.0" >}}
 +
 +Hugo will, by default, render all 404 errors when running `hugo server` with the `404.html` template. Note that if you have already added one or more redirects to your [Server Config](#configure-server), you need to add the 404 redirect explicitly, e.g:
 +
-     from   = "/**"
-     to     = "/404.html"
-     status = 404
- ```
++{{< code-toggle file="config/development/server" copy=false >}}
 +[[redirects]]
- Set `titleCaseStyle` to specify the title style used by the [title](/functions/title/) template function and the automatic section titles in Hugo. It defaults to [AP Stylebook](https://www.apstylebook.com/) for title casing, but you can also set it to `Chicago` or `Go` (every word starts with a capital letter).
++from   = "/**"
++to     = "/404.html"
++status = 404
++{{< /code-toggle >}}
 +
 +## Configure Title Case
 +
- {{% note "Setting Environment Variables" %}}
++Set `titleCaseStyle` to specify the title style used by the [title](/functions/title/) template function and the automatic section titles in Hugo. 
++
++By default, Hugo adheres to the capitalization rules in the [Associated Press (AP) Stylebook]. Set `titleCaseStyle` to `chicago` if you would prefer to follow the [Chicago Manual of Style], or set if to `go` to use Go's convention of capitalizing every word.
++
++[Associated Press (AP) Stylebook]: https://www.apstylebook.com/
++[Chicago Manual of Style]: https://www.chicagomanualofstyle.org/home.html
++[site configuration]: /getting-started/configuration/#configure-title-case
 +
 +## Configuration Environment Variables
 +
 +HUGO_NUMWORKERMULTIPLIER
 +: Can be set to increase or reduce the number of workers used in parallel processing in Hugo. If not set, the number of logical CPUs will be used.
 +
 +## Configuration Lookup Order
 +
 +Similar to the template [lookup order], Hugo has a default set of rules for searching for a configuration file in the root of your website's source directory as a default behavior:
 +
 +1. `./config.toml`
 +2. `./config.yaml`
 +3. `./config.json`
 +
 +In your `config` file, you can direct Hugo as to how you want your website rendered, control your website's menus, and arbitrarily define site-wide parameters specific to your project.
 +
 +
 +## Example Configuration
 +
 +The following is a typical example of a configuration file. The values nested under `params:` will populate the [`.Site.Params`] variable for use in [templates]:
 +
 +{{< code-toggle file="config">}}
 +baseURL: "https://yoursite.example.com/"
 +title: "My Hugo Site"
 +permalinks:
 +  posts: /:year/:month/:title/
 +params:
 +  Subtitle: "Hugo is Absurdly Fast!"
 +  AuthorName: "Jon Doe"
 +  GitHubUser: "spf13"
 +  ListOfFoo:
 +    - "foo1"
 +    - "foo2"
 +  SidebarRecentLimit: 5
 +{{< /code-toggle >}}
 +
 +## Configure with Environment Variables
 +
 +In addition to the 3 config options already mentioned, configuration key-values can be defined through operating system environment variables.
 +
 +For example, the following command will effectively set a website's title on Unix-like systems:
 +
 +```txt
 +$ env HUGO_TITLE="Some Title" hugo
 +```
 +
 +This is really useful if you use a service such as Netlify to deploy your site. Look at the Hugo docs [Netlify configuration file](https://github.com/gohugoio/hugoDocs/blob/master/netlify.toml) for an example.
 +
- To exclude specific files from the `content` and `data` directories when rendering your site, set `ignoreFiles` to one or more regular expressions to match against the absolute file path.
++{{% note %}}
 +Names must be prefixed with `HUGO_` and the configuration key must be set in uppercase when setting operating system environment variables.
 +
 +To set config params, prefix the name with `HUGO_PARAMS_`
 +{{% /note %}}
 +
 +If you are using snake_cased variable names, the above will not work. Hugo determines the delimiter to use by the first character after `HUGO`. This allows you to define environment variables on the form `HUGOxPARAMSxAPI_KEY=abcdefgh`, using any [allowed](https://stackoverflow.com/questions/2821043/allowed-characters-in-linux-environment-variable-names#:~:text=So%20names%20may%20contain%20any,not%20begin%20with%20a%20digit.) delimiter.
 +
 +{{< todo >}}
 +Test and document setting params via JSON env var.
 +{{< /todo >}}
 +
 +## Ignore Content and Data Files when Rendering
 +
 +**Note:** This works, but we recommend you use the newer and more powerful [includeFiles and excludeFiles](https://gohugo.io/hugo-modules/configuration/#module-config-mounts) mount options.
 +
- {{< code-toggle copy="false" >}}
++To exclude specific files from the `content`, `data`, and `i18n` directories when rendering your site, set `ignoreFiles` to one or more regular expressions to match against the absolute file path.
 +
 +To ignore files ending with `.foo` or `.boo`:
 +
- {{< code-toggle copy="false" >}}
++{{< code-toggle copy=false >}}
 +ignoreFiles = ['\.foo$', '\.boo$']
 +{{< /code-toggle >}}
 +
 +To ignore a file using the absolute file path:
 +
++{{< code-toggle copy=false >}}
 +ignoreFiles = ['^/home/user/project/content/test\.md$']
 +{{< /code-toggle >}}
 +
 +## Configure Front Matter
 +
 +### Configure Dates
 +
 +Dates are important in Hugo, and you can configure how Hugo assigns dates to your content pages. You do this by adding a `frontmatter` section to your `config.toml`.
 +
 +The default configuration is:
 +
 +{{< code-toggle file="config" >}}
 +[frontmatter]
 +date = ["date", "publishDate", "lastmod"]
 +lastmod = [":git", "lastmod", "date", "publishDate"]
 +publishDate = ["publishDate", "date"]
 +expiryDate = ["expiryDate"]
 +{{< /code-toggle >}}
 +
 +If you, as an example, have a non-standard date parameter in some of your content, you can override the setting for `date`:
 +
 +{{< code-toggle file="config" >}}
 +[frontmatter]
 +date = ["myDate", ":default"]
 +{{< /code-toggle >}}
 +
 +The `:default` is a shortcut to the default settings. The above will set `.Date` to the date value in `myDate` if present, if not we will look in `date`,`publishDate`, `lastmod` and pick the first valid date.
 +
 +In the list to the right, values starting with ":" are date handlers with a special meaning (see below). The others are just names of date parameters (case insensitive) in your front matter configuration.  Also note that Hugo have some built-in aliases to the above: `lastmod` => `modified`, `publishDate` => `pubdate`, `published` and `expiryDate` => `unpublishdate`. With that, as an example, using `pubDate` as a date in front matter, will, by default, be assigned to `.PublishDate`.
 +
 +The special date handlers are:
 +
 +
 +`:fileModTime`
 +: Fetches the date from the content file's last modification timestamp.
 +
 +An example:
 +
 +{{< code-toggle file="config" >}}
 +[frontmatter]
 +lastmod = ["lastmod", ":fileModTime", ":default"]
 +{{< /code-toggle >}}
 +
 +
 +The above will try first to extract the value for `.Lastmod` starting with the `lastmod` front matter parameter, then the content file's modification timestamp. The last, `:default` should not be needed here, but Hugo will finally look for a valid date in `:git`, `date` and then `publishDate`.
 +
 +
 +`:filename`
 +: Fetches the date from the content file's filename. For example, `2018-02-22-mypage.md` will extract the date `2018-02-22`. Also, if `slug` is not set, `mypage` will be used as the value for `.Slug`.
 +
 +An example:
 +
 +{{< code-toggle file="config" >}}
 +[frontmatter]
 +date  = [":filename", ":default"]
 +{{< /code-toggle >}}
 +
 +The above will try first to extract the value for `.Date` from the filename, then it will look in front matter parameters `date`, `publishDate` and lastly `lastmod`.
 +
 +
 +`:git`
 +: This is the Git author date for the last revision of this content file. This will only be set if `--enableGitInfo` is set or `enableGitInfo = true` is set in site config.
 +
 +## Configure Additional Output Formats
 +
 +Hugo v0.20 introduced the ability to render your content to multiple output formats (e.g., to JSON, AMP html, or CSV). See [Output Formats] for information on how to add these values to your Hugo project's configuration file.
 +
 +## Configure Minify
 +
 +Default configuration:
 +
 +{{< code-toggle config="minify" />}}
 +
 +## Configure File Caches
 +
 +Since Hugo 0.52 you can configure more than just the `cacheDir`. This is the default configuration:
 +
 +{{< code-toggle >}}
 +[caches]
 +[caches.getjson]
 +dir = ":cacheDir/:project"
 +maxAge = -1
 +[caches.getcsv]
 +dir = ":cacheDir/:project"
 +maxAge = -1
 +[caches.getresource]
 +dir = ":cacheDir/:project"
 +maxAge = -1
 +[caches.images]
 +dir = ":resourceDir/_gen"
 +maxAge = -1
 +[caches.assets]
 +dir = ":resourceDir/_gen"
 +maxAge = -1
 +[caches.modules]
 +dir = ":cacheDir/modules"
 +maxAge = -1
 +{{< /code-toggle >}}
 +
 +You can override any of these cache settings in your own `config.toml`.
 +
 +### The keywords explained
 +
 +`:cacheDir`
 +: This is the value of the `cacheDir` config option if set (can also be set via OS env variable `HUGO_CACHEDIR`). It will fall back to `/opt/build/cache/hugo_cache/` on Netlify, or a `hugo_cache` directory below the OS temp dir for the others. This means that if you run your builds on Netlify, all caches configured with `:cacheDir` will be saved and restored on the next build. For other CI vendors, please read their documentation. For an CircleCI example, see [this configuration](https://github.com/bep/hugo-sass-test/blob/6c3960a8f4b90e8938228688bc49bdcdd6b2d99e/.circleci/config.yml).
 +
 +`:project`
 +: The base directory name of the current Hugo project. This means that, in its default setting, every project will have separated file caches, which means that when you do `hugo --gc` you will not touch files related to other Hugo projects running on the same PC.
 +
 +`:resourceDir`
 +: This is the value of the `resourceDir` config option.
 +
 +maxAge
 +: This is the duration before a cache entry will be evicted, -1 means forever and 0 effectively turns that particular cache off. Uses Go's `time.Duration`, so valid values are `"10s"` (10 seconds), `"10m"` (10 minutes) and `"10h"` (10 hours).
 +
 +dir
 +: The absolute path to where the files for this cache will be stored. Allowed starting placeholders are `:cacheDir` and `:resourceDir` (see above).
 +
 +## Configuration Format Specs
 +
 +- [TOML Spec][toml]
 +- [YAML Spec][yaml]
 +- [JSON Spec][json]
 +
 +[`.Site.Params`]: /variables/site/
 +[directory structure]: /getting-started/directory-structure
 +[json]: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf "Specification for JSON, JavaScript Object Notation"
 +[lookup order]: /templates/lookup-order/
 +[Output Formats]: /templates/output-formats/
 +[templates]: /templates/
 +[toml]: https://github.com/toml-lang/toml
 +[yaml]: https://yaml.org/spec/
 +[static-files]: /content-management/static-files/
index b8c22b1df95352024bf220b0bb94235be4c93a3a,0000000000000000000000000000000000000000..da0f9c761e893004008055d40cade2663ea742e6
mode 100644,000000..100644
--- /dev/null
@@@ -1,96 -1,0 +1,92 @@@
- linktitle: Directory Structure
 +---
 +title: Directory Structure
- date: 2017-01-02
- publishdate: 2017-02-01
 +description: Hugo's CLI scaffolds a project directory structure and then takes that single directory and uses it as the input to create a complete website.
-     parent: "getting-started"
 +categories: [getting started,fundamentals]
 +keywords: [source, organization, directories]
 +menu:
 +  docs:
- sections_weight: 50
++    parent: getting-started
 +    weight: 50
 +weight: 50
- [`assets`]: /hugo-pipes/introduction#asset-directory/
 +aliases: [/overview/source-directory/]
 +toc: true
 +---
 +
 +## New Site Scaffolding
 +
 +{{< youtube sB0HLHjgQ7E >}}
 +
 +Running `hugo new site example` from the command line creates a directory structure with the following elements:
 +
 +```txt
 +example/
 +├── archetypes/
 +│   └── default.md
 +├── assets/
 +├── content/
 +├── data/
 +├── layouts/
 +├── public/
 +├── static/
 +├── themes/
 +└── config.toml
 +```
 +
 +## Directory Structure Explained
 +
 +The following is a high-level overview of each of the directories with links to each of their respective sections within the Hugo docs.
 +
 +[`archetypes`](/content-management/archetypes/)
 +: You can create new content files in Hugo using the `hugo new` command.
 +By default, Hugo will create new content files with at least `date`, `title` (inferred from the filename), and `draft = true`. This saves time and promotes consistency for sites using multiple content types. You can create your own [archetypes] with custom preconfigured front matter fields as well.
 +
 +[`assets`]
 +: Stores all the files which need be processed by [Hugo Pipes](/hugo-pipes/). Only the files whose `.Permalink` or `.RelPermalink` are used will be published to the `public` directory.
 +
 +[`config`](/getting-started/configuration/)
 +: Hugo ships with a large number of [configuration directives].
 +The [config directory](/getting-started/configuration/#configuration-directory) is where those directives are stored as JSON, YAML, or TOML files. Every root setting object can stand as its own file and structured by environments.
 +Projects with minimal settings and no need for environment awareness can use a single `config.toml` file at its root.
 +
 +Many sites may need little to no configuration, but Hugo ships with a large number of [configuration directives] for more granular directions on how you want Hugo to build your website. Note: config directory is not created by default.
 +
 +[`content`]
 +: All content for your website will live inside this directory. Each top-level folder in Hugo is considered a [content section]. For example, if your site has three main sections---`blog`, `articles`, and `tutorials`---you will have three directories at `content/blog`, `content/articles`, and `content/tutorials`. Hugo uses sections to assign default [content types].
 +
 +[`data`](/templates/data-templates/)
 +: This directory is used to store configuration files that can be
 +used by Hugo when generating your website. You can write these files in YAML, JSON, or TOML format. In addition to the files you add to this folder, you can also create [data templates] that pull from dynamic content.
 +
 +[`layouts`]
 +: Stores templates in the form of `.html` files that specify how views of your content will be rendered into a static website. Templates include [list pages][lists], your [homepage], [taxonomy templates], [partials], [single page templates][singles], and more.
 +
 +[`static`]
 +: Stores all the static content: images, CSS, JavaScript, etc. When Hugo builds your site, all assets inside your static directory are copied over as-is. A good example of using the `static` folder is for [verifying site ownership on Google Search Console][searchconsole], where you want Hugo to copy over a complete HTML file without modifying its content.
 +
 +{{% note %}}
 +From **Hugo 0.31** you can have multiple static directories.
 +{{% /note %}}
 +
 +[`resources`]
 +: Caches some files to speed up generation. Can be also used by template authors to distribute built Sass files, so you don't have to have the preprocessor installed. Note: resources directory is not created by default.
 +
 +[archetypes]: /content-management/archetypes/
- [lists]: /templates/list/
++[`assets`]: /hugo-pipes/introduction#asset-directory
 +[configuration directives]: /getting-started/configuration/#all-configuration-settings
 +[`content`]: /content-management/organization/
 +[content section]: /content-management/sections/
 +[content types]: /content-management/types/
 +[data templates]: /templates/data-templates/
 +[homepage]: /templates/homepage/
 +[`layouts`]: /templates/
 +[`static`]: /content-management/static-files/
 +[`resources`]: /getting-started/configuration/#configure-file-caches
++[lists]: /templates/lists/
 +[pagevars]: /variables/page/
 +[partials]: /templates/partials/
 +[searchconsole]: https://support.google.com/webmasters/answer/9008080#zippy=%2Chtml-file-upload
 +[singles]: /templates/single-page-templates/
 +[starters]: /tools/starter-kits/
 +[taxonomies]: /content-management/taxonomies/
 +[taxonomy templates]: /templates/taxonomy-templates/
 +[types]: /content-management/types/
index 61e7ed649bd206f3457cb9646a0bef5625e5a6aa,0000000000000000000000000000000000000000..7f993736ab0fe36d0c04547b25ce21869da94902
mode 100644,000000..100644
--- /dev/null
@@@ -1,43 -1,0 +1,36 @@@
- linktitle: External Learning Resources
 +---
 +title: External Learning Resources
- date: 2019-10-20
- publishdate: 2019-10-20
- lastmod: 2019-10-20
 +description: A list of tutorials and books on Hugo.
-     parent: "getting-started"
 +keywords: [books, tutorials, learning, usage]
 +menu:
 +  docs:
- sections_weight: 70
- draft: false
- toc: false
++    parent: getting-started
 +    weight: 70
 +weight: 70
 +---
 +
 +## Books
 +
 +### Hugo In Action
 +
 +[![Hugo In Action](hia.jpg)](https://www.manning.com/books/hugo-in-action)
 +
 +Hugo in Action is a step-by-step guide to using Hugo to create static websites. Working with a complete example website and source code samples, you’ll learn how to build and host a low-maintenance, high-performance site that will wow your users and stay stable without relying on a third-party server.
 +
 +[Hugo In Action Home Page](https://www.manning.com/books/hugo-in-action)
 +
 +### Build Websites with Hugo
 +
 +[Build Websites with Hugo - Fast Web Development with Markdown (2020)](https://pragprog.com/titles/bhhugo/) by Brian P. Hogan.
 +
 +## Beginner tutorials
 +
 +### Hugo tutorial by CloudCannon
 +
 +[Step-by-step written tutorial](https://cloudcannon.com/community/learn/hugo-beginner-tutorial/) to teach you the basics of creating a Hugo site.
 +
 +## Video tutorials
 +
 +* Mike Dane explains the various features of Hugo via dedicated tutorials on [YouTube](https://www.youtube.com/watch?list=PLLAZ4kZ9dFpOnyRlyS-liKL5ReHDcj4G3&v=qtIqKaDlqXo).
 +
 +* [Introduction to building your first Hugo site](https://cloudcannon.com/community/learn/hugo-beginner-tutorial/) by Mike Neumegen.
index d49997570a28573fb2edc30e63f4938419472bf8,0000000000000000000000000000000000000000..da35c314c2472ea901eec651a369de64c0581086
mode 100644,000000..100644
--- /dev/null
@@@ -1,225 -1,0 +1,224 @@@
- linktitle: Quick Start
 +---
 +title: Quick Start
 +description: Learn to create a Hugo site in minutes.
 +categories: [getting started]
 +keywords: [quick start,usage]
 +menu:
 +  docs:
 +    parent: getting-started
 +    weight: 10
 +weight: 10
 +toc: true
 +aliases: [/quickstart/,/overview/quickstart/]
 +---
 +
 +In this tutorial you will:
 +
 +1. Create a site
 +2. Add content
 +3. Configure the site
 +4. Publish the site
 +
 +## Prerequisites
 +
 +Before you begin this tutorial you must:
 +
 +1. [Install Hugo] (the extended edition)
 +1. [Install Git]
 +
 +You must also be comfortable working from the command line.
 +
 +## Create a site
 +
 +### Commands
 +
 +{{% note %}}
 +**If you are a Windows user:**
 +
 +- Do not use the Command Prompt
 +- Do not use Windows PowerShell
 +- Run these commands from [PowerShell] or a Linux terminal such as WSL or Git Bash
 +
 +PowerShell and Windows PowerShell are different applications.
 +
 +[PowerShell]: https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows
 +{{% /note %}}
 +
 +Run these commands to create a Hugo site with the [Ananke] theme. The next section provides an explanation of each command.
 +
 +```text
 +hugo new site quickstart
 +cd quickstart
 +git init
 +git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke themes/ananke
 +echo "theme = 'ananke'" >> config.toml
 +hugo server
 +```
 +
 +View your site at the URL displayed in your terminal. Press `Ctrl + C` to stop Hugo's development server.
 +
 +### Explanation of commands
 +
 +Create the [directory structure] for your project in the `quickstart` directory.
 +
 +```text
 +hugo new site quickstart
 +```
 +
 +Change the current directory to the root of your project.
 +
 +```text
 +cd quickstart
 +```
 +
 +Initialize an empty Git repository in the current directory.
 +
 +```text
 +git init
 +```
 +
 +Clone the [Ananke] theme into the `themes` directory, adding it to your project as a [Git submodule].
 +
 +```text
 +git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke themes/ananke
 +```
 +
 +Append a line to the site configuration file, indicating the current theme.
 +
 +```text
 +echo "theme = 'ananke'" >> config.toml
 +```
 +
 +Start Hugo's development server to view the site.
 +
 +```text
 +hugo server
 +```
 +
 +Press `Ctrl + C` to stop Hugo's development server.
 +
 +## Add content
 +
 +Add a new page to your site.
 +
 +```text
 +hugo new posts/my-first-post.md
 +```
 +
 +Hugo created the file in the `content/posts` directory. Open the file with your editor.
 +
 +```text
 +---
 +title: "My First Post"
 +date: 2022-11-20T09:03:20-08:00
 +draft: true
 +---
 +```
 +
 +Notice the `draft` value in the [front matter] is `true`. By default, Hugo does not publish draft content when you build the site. Learn more about [draft, future, and expired content].
 +
 +Add some [markdown] to the body of the post, but do not change the `draft` value.
 +
 +[markdown]: https://commonmark.org/help/
 +
 +```text
 +---
 +title: "My First Post"
 +date: 2022-11-20T09:03:20-08:00
 +draft: true
 +---
 +## Introduction
 +
 +This is **bold** text, and this is *emphasized* text.
 +
 +Visit the [Hugo](https://gohugo.io) website!
 +```
 +
 +Save the file, then start Hugo’s development server to view the site. You can run either of the following commands to include draft content.
 +
 +```text
 +hugo server --buildDrafts
 +hugo server -D
 +```
 +
 +View your site at the URL displayed in your terminal. Keep the development server running as you continue to add and change content.
 +
 +{{% note %}}
 +Hugo's rendering engine conforms to the CommonMark [specification] for markdown. The CommonMark organization provides a useful [live testing tool] powered by the reference implementation.
 +
 +[live testing tool]: https://spec.commonmark.org/dingus/
 +[specification]: https://spec.commonmark.org/
 +{{% /note %}}
 +
 +## Configure the site
 +
 +With your editor, open the [site configuration] file (`config.toml`) in the root of your project.
 +
 +```text
 +baseURL = 'http://example.org/'
 +languageCode = 'en-us'
 +title = 'My New Hugo Site'
 +theme = 'ananke'
 +```
 +
 +Make the following changes:
 +
 +1. Set the `baseURL` for your production site. This value must begin with the protocol and end with a slash, as shown above.
 +
 +2. Set the `languageCode` to your language and region.
 +
 +3. Set the `title` for your production site.
 +
 +Start Hugo's development server to see your changes, remembering to include draft content.
 +
 +```text
 +hugo server -D
 +```
 +
 +{{% note %}}
 +Most theme authors provide configuration guidelines and options. Make sure to visit your theme's repository or documentation site for details.
 +
 +[The New Dynamic], authors of the Ananke theme, provide [documentation] for configuration and usage. They also provide a [demonstration site].
 +
 +[demonstration site]: https://gohugo-ananke-theme-demo.netlify.app/
 +[documentation]: https://github.com/theNewDynamic/gohugo-theme-ananke#readme
 +[The New Dynamic]: https://www.thenewdynamic.com/
 +{{% /note %}}
 +
 +## Publish the site
 +
 +In this step you will _publish_ your site, but you will not _deploy_ it.
 +
 +When you _publish_ your site, Hugo creates the entire static site in the `public` directory in the root of your project. This includes the HTML files, and assets such as images, CSS files, and JavaScript files.
 +
 +When you publish your site, you typically do _not_ want to include [draft, future, or expired content]. The command is simple.
 +
 +```text
 +hugo
 +```
 +
 +To learn how to _deploy_ your site, see the [hosting and deployment] section.
 +
 +## Ask for help
 +
 +Hugo's [forum] is an active community of users and developers who answer questions, share knowledge, and provide examples. A quick search of over 20,000 topics will often answer your question. Please be sure to read about [requesting help] before asking your first question.
 +
 +## Other resources
 +
 +For other resources to help you learn Hugo, including books and video tutorials, see the [external learning resources](/getting-started/external-learning-resources/) page.
 +
 +[Ananke]: https://github.com/theNewDynamic/gohugo-theme-ananke
 +[directory structure]: /getting-started/directory-structure
 +[draft, future, and expired content]: /getting-started/usage/#draft-future-and-expired-content
 +[draft, future, or expired content]: /getting-started/usage/#draft-future-and-expired-content
 +[external learning resources]:/getting-started/external-learning-resources/
 +[forum]: https://discourse.gohugo.io/
 +[forum]: https://discourse.gohugo.io/
 +[front matter]: /content-management/front-matter
 +[Git submodule]: https://git-scm.com/book/en/v2/Git-Tools-Submodules
 +[hosting and deployment]: /hosting-and-deployment/
 +[Install Git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
 +[Install Hugo]: /installation/
 +[Requesting Help]: https://discourse.gohugo.io/t/requesting-help/9132
 +[Requesting Help]: https://discourse.gohugo.io/t/requesting-help/9132
 +[site configuration]: /getting-started/configuration/
index 15cf46cbf60c9edad66c6edd6e482cb4c54388bc,0000000000000000000000000000000000000000..908edca7e6b3b17891a1ec79e67d94e099bf9e4e
mode 100644,000000..100644
--- /dev/null
@@@ -1,172 -1,0 +1,170 @@@
- linktitle: Basic usage
 +---
 +title: Basic usage
-     parent: "getting-started"
 +description: Hugo's command line interface (CLI) is fully featured but simple to use, even for those with limited experience working from the command line.
 +categories: [getting started]
 +keywords: [usage,livereload,command,flags]
 +menu:
 +  docs:
- sections_weight: 40
++    parent: getting-started
 +    weight: 40
 +weight: 40
 +aliases: [/overview/usage/,/extras/livereload/,/doc/usage/,/usage/]
 +toc: true
 +---
 +
 +## Test your installation
 +
 +After [installing] Hugo, test your installation by running:
 +
 +```bash
 +hugo version
 +```
 +
 +You should see something like:
 +
 +```text
 +hugo v0.105.0-0e3b42b4a9bdeb4d866210819fc6ddcf51582ffa+extended linux/amd64 BuildDate=2022-10-28T12:29:05Z VendorInfo=snap:0.105.0
 +```
 +
 +## Display available commands
 +
 +To see a list of the available commands and flags:
 +
 +```bash
 +hugo help
 +```
 +
 +To get help with a subcommand, use the `--help` flag. For example:
 +
 +```bash
 +hugo server --help
 +```
 +
 +## Build your site
 +
 +To build your site, `cd` into your project directory and run:
 +
 +```bash
 +hugo
 +```
 +
 +The [`hugo`] command builds your site, publishing the files to the `public` directory. To publish your site to a different directory, use the [`--destination`] flag or set [`publishDir`] in your site configuration.
 +
 +{{% note %}}
 +Hugo does not clear the `public` directory before building your site. Existing files are overwritten, but not deleted. This behavior is intentional to prevent the inadvertent removal of files that you may have added to the `public` directory after the build.
 +
 +Depending on your needs, you may wish to manually clear the contents of the public directory before every build.
 +{{% /note %}}
 +
 +## Draft, future, and expired content
 +
 +Hugo allows you to set `draft`, `date`, `publishDate`, and `expiryDate` in the [front matter] of your content. By default, Hugo will not publish content when:
 +
 +
 +- The `draft` value is `true`
 +- The `date` is in the future
 +- The `publishDate` is in the future
 +- The `expiryDate` is in the past
 +
 +You can override the default behavior when running `hugo` or `hugo server` with command line flags:
 +
 +```bash
 +hugo --buildDrafts    # or -D
 +hugo --buildExpired   # or -E
 +hugo --buildFuture    # or -F
 +```
 +
 +Although you can also set these values in your site configuration, it can lead to unwanted results unless all content authors are aware of, and understand, the settings.
 +
 +{{% note %}}
 +As noted above, Hugo does not clear the `public` directory before building your site. Depending on the _current_ evaluation of the four conditions above, after the build your `public` directory may contain extraneous files from a previous build.
 +
 +A common practice is to manually clear the contents of the `public` directory before each build to remove draft, expired, and future content.
 +{{% /note %}}
 +
 +## Develop and test your site
 +
 +To view your site while developing layouts or creating content, `cd` into your project directory and run:
 +
 +```bash
 +hugo server
 +```
 +
 +The [`hugo server`] command builds your site into memory, and serves your pages using a minimal HTTP server. When you run `hugo server` it will display the URL of your local site:
 +
 +```text
 +Web Server is available at http://localhost:1313/ 
 +```
 +
 +While the server is running, it watches your project directory for changes to assets, configuration, content, data, layouts, translations, and static files. When it detects a change, the server rebuilds your site and refreshes your browser using [LiveReload].
 +
 +Most Hugo builds are so fast that you may not notice the change unless you are looking directly at your browser.
 +
 +### LiveReload
 +
 +While the server is running, Hugo injects JavaScript into the generated HTML pages. The LiveReload script creates a connection from the browser to the server via web sockets. You do not need to install any software or browser plugins, nor is any configuration required.
 +
 +### Automatic redirection
 +
 +When editing content, if you want your browser to automatically redirect to the page you last modified, run:
 +
 +```bash
 +hugo server --navigateToChanged
 +```
 +
 +## Deploy your site
 +
 +{{% note %}}
 +As noted above, Hugo does not clear the public directory before building your site. Manually clear the contents of the public directory before each build to remove draft, expired, and future content.
 +{{% /note %}}
 +
 +When you are ready to deploy your site, run:
 +
 +```bash
 +hugo
 +```
 +
 +This builds your site, publishing the files to the public directory. The directory structure will look something like this:
 +
 +```text
 +public/
 +├── categories/
 +│   ├── index.html
 +│   └── index.xml  <-- RSS feed for this section
 +├── post/
 +│   ├── my-first-post/
 +│   │   └── index.html
 +│   ├── index.html
 +│   └── index.xml  <-- RSS feed for this section
 +├── tags/
 +│   ├── index.html
 +│   └── index.xml  <-- RSS feed for this section
 +├── index.html
 +├── index.xml      <-- RSS feed for the site
 +└── sitemap.xml
 +```
 +
 +In a simple hosting environment, where you typically `ftp`, `rsync`, or `scp` your files to the root of a virtual host, the contents of the `public` directory are all that you need.
 +
 +Most of our users deploy their sites using a CI/CD workflow, where a push[^1] to their GitHub or GitLab repository triggers a build and deployment. Popular providers include [AWS Amplify], [CloudCannon], [Cloudflare Pages], [GitHub Pages], [GitLab Pages], and [Netlify].
 +
 +Learn more in the [hosting and deployment] section.
 +
 +[^1]: The Git repository contains the entire project directory, typically excluding the public directory because the site is built _after_ the push.
 +
 +[`--destination`]: /commands/hugo/#options
 +[`hugo server`]: /commands/hugo_server/
 +[`hugo`]: /commands/hugo/
 +[`publishDir`]: /getting-started/configuration/#publishdir
 +[AWS Amplify]: https://aws.amazon.com/amplify/
 +[CloudCannon]: https://cloudcannon.com/
 +[Cloudflare Pages]: https://pages.cloudflare.com/
 +[commands]: /commands/
 +[front matter]: /content-management/front-matter/
 +[GitHub Pages]: https://pages.github.com/
 +[GitLab Pages]: https://docs.gitlab.com/ee/user/project/pages/
 +[hosting and deployment]: /hosting-and-deployment/
 +[hosting]: /hosting-and-deployment/
 +[installing]: /installation/
 +[LiveReload]: https://github.com/livereload/livereload-js
 +[Netlify]: https://www.netlify.com/
index ea9f60f1793c9e902422fe7a03c8ca13d486b600,0000000000000000000000000000000000000000..0d5ada297ff7bcb2ba93de51f33133c3fdd7e983
mode 100644,000000..100644
--- /dev/null
@@@ -1,20 -1,0 +1,14 @@@
- date: 2016-11-01
- publishdate: 2016-11-01
- lastmod: 2016-11-01
 +---
 +title: Hosting & Deployment
 +linktitle: Hosting & Deployment Overview
 +description: Site builds, automated deployments, and popular hosting solutions.
-     parent: "hosting-and-deployment"
 +categories: [hosting and deployment]
 +keywords: []
 +menu:
 +  docs:
- weight: 01    #rem
- draft: false
- aliases: []
- toc: false
++    parent: hosting-and-deployment
 +    weight: 01
++weight: 01
 +---
 +
 +Because Hugo renders *static* websites, you can host your new Hugo website virtually anywhere. The following represent only a few of the more popular hosting and automated deployment solutions used by the Hugo community.
index 8682787404f6a67260bdf0d41c9dbeae53cbc0d1,0000000000000000000000000000000000000000..27cd312efb901d17f95306535194b43c097ddba9
mode 100644,000000..100644
--- /dev/null
@@@ -1,57 -1,0 +1,49 @@@
- linktitle: Deployment with Rclone
 +---
 +title: Deployment with Rclone
- date: 2021-08-09
- publishdate: 2021-08-09
- lastmod: 2021-08-09
 +description: If you have access to your web host with SFTP/FTP/SSH/HTTP(DAV), you can use rclone to incrementally deploy your entire Hugo website.
- authors: [Daniel F. Dickinson]
 +categories: [hosting and deployment]
 +keywords: [rclone,sftp,deployment]
-     parent: "hosting-and-deployment"
 +menu:
 +  docs:
- sections_weight: 80
- draft: false
++    parent: hosting-and-deployment
 +    weight: 80
 +weight: 80
- notesforauthors:
 +aliases: [/tutorials/deployment-with-rclone/]
 +toc: true
 +---
 +
 +## Assumptions
 +
 +* A web host running a web server. This could be a shared hosting environment or a VPS.
 +* Access to your web host with any of the [protocols supported by rclone](https://rclone.org/#providers), such as SFTP.
 +* A functional static website built with Hugo
 +* Deploying from an [Rclone](https://rclone.org) compatible operating system
 +* You have [installed Rclone](https://rclone.org/install/).
 +
 +**NB**: You can remove ``--interactive`` in the commands below once you are comfortable with rclone, if you wish. Also, ``--gc`` and ``--minify`` are optional in the ``hugo`` commands below.
 +
 +## Getting Started
 +
 +The spoiler is that you can even deploy your entire website from any compatible OS with no configuration. Using SFTP for example:
 +
 +```txt
 +hugo --gc --minify
 +rclone sync --interactive --sftp-host sftp.example.com --sftp-user www-data --sftp-ask-password public/ :sftp:www/
 +```
 +
 +## Configure Rclone for Even Easier Usage
 +
 +The easiest way is simply to run ``rclone config``.
 +
 +The [Rclone docs](https://rclone.org/docs/) provide [an example of configuring Rclone to use SFTP](https://rclone.org/sftp/).
 +
 +For the next commands, we will assume you configured a remote you named ``hugo-www``
 +
 +The above 'spoiler' commands could become:
 +
 +```txt
 +hugo --gc --minify
 +rclone sync --interactive public/ hugo-www:www/
 +```
 +
 +After you issue the above commands (and respond to any prompts), check your website and you will see that it is deployed.
index dec0556cf601f3450e83b1110beb6facd80d90e0,0000000000000000000000000000000000000000..0bb23d04466887e350a775dee1113a4d8dfd98cb
mode 100644,000000..100644
--- /dev/null
@@@ -1,148 -1,0 +1,141 @@@
- linktitle: Deployment with Rsync
 +---
 +title: Deployment with Rsync
- date: 2017-02-01
- publishdate: 2017-02-01
 +description: If you have access to your web host with SSH, you can use a simple rsync one-liner to incrementally deploy your entire Hugo website.
- authors: [Adrien Poupin]
 +categories: [hosting and deployment]
 +keywords: [rsync,deployment]
-     parent: "hosting-and-deployment"
 +menu:
 +  docs:
- sections_weight: 70
- draft: false
++    parent: hosting-and-deployment
 +    weight: 70
 +weight: 70
- notesforauthors:
 +aliases: [/tutorials/deployment-with-rsync/]
 +toc: true
- First, install the ssh client. On Debian/Ubuntu/derivates, use the following command:
 +---
 +
 +## Assumptions
 +
 +* A web host running a web server. This could be a shared hosting environment or a VPS.
 +* Access to your web host with SSH
 +* A functional static website built with Hugo
 +
 +The spoiler is that you can deploy your entire website with a command that looks like the following:
 +
 +```txt
 +hugo && rsync -avz --delete public/ www-data@ftp.topologix.fr:~/www/
 +```
 +
 +As you will see, we'll put this command in a shell script file, which makes building and deployment as easy as executing `./deploy`.
 +
 +## Copy Your SSH Key to your Host
 +
 +To make logging in to your server more secure and less interactive, you can upload your SSH key. If you have already installed your SSH key to your server, you can move on to the next section.
 +
++First, install the ssh client. On Debian distributions, use the following command:
 +
 +{{< code file="install-openssh.sh" >}}
 +sudo apt-get install openssh-client
 +{{< /code >}}
 +
 +Then generate your ssh key. First, create the `.ssh` directory in your home directory if it doesn't exist:
 +
 +```txt
 +~$ cd && mkdir .ssh & cd .ssh
 +```
 +
 +Next, execute this command to generate a new keypair called `rsa_id`:
 +
 +```txt
 +~/.ssh/$ ssh-keygen -t rsa -q -C "For SSH" -f rsa_id
 +```
 +
 +You'll be prompted for a passphrase, which is an extra layer of protection. Enter the passphrase you'd like to use, and then enter it again when prompted, or leave it blank if you don't want to have a passphrase. Not using a passphrase will let you transfer files non-interactively, as you won't be prompted for a password when you log in, but it is slightly less secure.
 +
 +To make logging in easier, add a definition for your web host to the file  `~/.ssh/config` with the following command, replacing `HOST` with the IP address or hostname of your web host, and `USER` with the username you use to log in to your web host when transferring files:
 +
 +```txt
 +~/.ssh/$ cat >> config <<EOF
 +Host HOST
 +     Hostname HOST
 +     Port 22
 +     User USER
 +     IdentityFile ~/.ssh/rsa_id
 +EOF
 +```
 +
 +Then copy your ssh public key to the remote server with the `ssh-copy-id` command:
 +
 +```txt
 +~/.ssh/$ ssh-copy-id -i rsa_id.pub USER@HOST.com
 +```
 +
 +Now you can easily connect to the remote server:
 +
 +```txt
 +~$ ssh user@host
 +Enter passphrase for key '/home/mylogin/.ssh/rsa_id':
 +```
 +
 +Now that you can log in with your SSH key, let's create a script to automate deployment of your Hugo site.
 +
 +## Shell Script
 +
 +Create a new script called `deploy` the root of your Hugo tree:
 +
 +```txt
 +~/websites/topologix.fr$ editor deploy
 +```
 +
 +Add the following content. Replace the `USER`, `HOST`, and `DIR` values with your own values:
 +
 +```bash
 +#!/bin/sh
 +USER=my-user
 +HOST=my-server.com
 +DIR=my/directory/to/topologix.fr/   # the directory where your web site files should go
 +
 +hugo && rsync -avz --delete public/ ${USER}@${HOST}:~/${DIR} # this will delete everything on the server that's not in the local public folder 
 +
 +exit 0
 +```
 +
 +Note that `DIR` is the relative path from the remote user's home. If you have to specify a full path (for instance `/var/www/mysite/`) you must change `~/${DIR}` to `${DIR}` inside the command-line. For most cases you should not have to.
 +
 +Save and close, and make the `deploy` file executable:
 +
 +```txt
 +~/websites/topologix.fr$ chmod +x deploy
 +```
 +
 +Now you only have to enter the following command to deploy and update your website:
 +
 +```txt
 +~/websites/topologix.fr$ ./deploy
 +```
 +
 +Your site builds and deploys:
 +
 +```txt
 +Started building sites ...
 +Built site for language en:
 +0 draft content
 +0 future content
 +0 expired content
 +5 pages created
 +0 non-page files copied
 +0 paginator pages created
 +0 tags created
 +0 categories created
 +total in 56 ms
 +sending incremental file list
 +404.html
 +index.html
 +index.xml
 +sitemap.xml
 +posts/
 +posts/index.html
 +
 +sent 9,550 bytes  received 1,708 bytes  7,505.33 bytes/sec
 +total size is 966,557  speedup is 85.86
 +```
 +
 +You can incorporate other proprocessing tasks into this deployment script as well.
index fa5bb41df81e37aac7899c8ecf45756583198119,0000000000000000000000000000000000000000..62eb331a18bbd8018851f319782391c55d014b22
mode 100644,000000..100644
--- /dev/null
@@@ -1,65 -1,0 +1,58 @@@
- linktitle: Host on 21YunBox
 +---
 +title: Host on 21YunBox
- date: 2021-01-06
- publishdate: 2021-01-06
 +description: Host your Hugo site with 21YunBox's blazing fast Chinese CDN, fully-managed SSL and auto deploys from Gitee.
- authors: [Toby Glei]
 +categories: [hosting and deployment]
 +keywords: [21yunbox,hosting,deployment]
-     parent: "hosting-and-deployment"
 +menu:
 +  docs:
- sections_weight: 10
- draft: false
- aliases: []
++    parent: hosting-and-deployment
 +    weight: 10
 +weight: 10
 +toc: true
 +---
 +
 +[21YunBox](https://www.21yunbox.com) is a fully-managed cloud platform dedicated to make web deployment easy within the Chinese Great Firewall where you can host static sites, backend APIs, databases, cron jobs, and all your other apps in one place. It provides blazing fast Chinese CDN, continuous deployment, one-click HTTPS and [other services like managed databases and backend web services](https://www.21yunbox.com/docs/), providing an avenue to launch web projects in China.
 +
 +21YunBox includes the following features:
 +
 +- Continuous, automatic builds & deploys from GitHub and Gitee
 +- Automatic SSL certificates through [Let's Encrypt](https://letsencrypt.org)
 +- Instant cache invalidation with a blazing fast, Chinese CDN
 +- Unlimited [custom domains](https://www.21yunbox.com/docs/#/custom-domains)
 +- Automatic [Brotli compression](https://en.wikipedia.org/wiki/Brotli) for faster sites
 +- Native HTTP/2 support
 +- Automatic HTTP → HTTPS redirects
 +- Custom URL redirects and rewrites
 +
 +## Prerequisites
 +
 +This guide assumes you already have a Hugo project to deploy. If you need a project, use the [Quick Start](/getting-started/quick-start/) to get started or fork 21YunBox's [Hugo Example](https://gitee.com/eryiyunbox-examples/hello-hugo) before continuing.
 +
 +## Setup
 +
 +You can set up a Hugo site on 21YunBox in two quick steps:
 +
 +1. Create a new web service on 21YunBox, and give 21YunBox permission to access your GitHub or Gitee repo.
 +2. Use the following values during creation:
 +
 +   |    Field              | Value                                            |
 +   | --------------------- | ------------------------------------------------ |
 +   | **Environment**       | `Static Site`                                    |
 +   | **Build Command**     | `hugo --gc --minify` (or your own build command) |
 +   | **Publish Directory** | `./public` (or your own output directory)        |
 +
 +That's it! Your site will be live on your 21YunBox URL (which looks like `yoursite.21yunbox.com`) as soon as the build is done.
 +
 +## Continuous deploys
 +
 +Now that 21YunBox is connected to your repo, it will automatically build and publish your site any time you push to GitHub.
 +
 +Every deploy automatically and instantly invalidates the CDN cache, so your users can always access the latest content on your site.
 +
 +## Custom domains
 +
 +Add your own domains to your site easily using 21YunBox's [custom domains](https://www.21yunbox.com/docs/#/custom-domains) guide.
 +
 +## Support
 +
 +Click [here](https://www.21yunbox.com/docs/#/contact) to contact with 21YunBox' experts if you need help.
index 803a73e4683087bd6c29873cd70713b91ff51883,0000000000000000000000000000000000000000..90fb5c083de1061867f041c9179feb1ff787192b
mode 100644,000000..100644
--- /dev/null
@@@ -1,54 -1,0 +1,48 @@@
- linktitle: Host on AWS Amplify
 +---
 +title: Host on AWS Amplify
- date: 2018-01-31
- publishdate: 2018-01-31
 +description: Develop and deploy a cloud-powered web app with AWS Amplify.
- authors: [Nikhil Swaminathan]
 +categories: [hosting and deployment]
 +keywords: [amplify,hosting,deployment]
-     parent: "hosting-and-deployment"
 +menu:
 +  docs:
- sections_weight: 10
- aliases: []
++    parent: hosting-and-deployment
 +    weight: 10
 +weight: 10
 +toc: true
 +---
 +
 +In this guide we'll walk through how to deploy and host your Hugo site using the [AWS Amplify Console](https://console.amplify.aws).
 +
 +AWS Amplify is a combination of client library, CLI toolchain, and a Console for continuous deployment and hosting. The Amplify CLI and library allow developers to get up & running with full-stack cloud-powered applications with features like authentication, storage, serverless GraphQL or REST APIs, analytics, Lambda functions, & more. The Amplify Console provides continuous deployment and hosting for modern web apps (single page apps and static site generators). Continuous deployment allows developers to deploy updates to their web app on every code commit to their Git repository. Hosting includes features such as globally available CDNs, easy custom domain setup + HTTPS, feature branch deployments, and password protection.
 +
 +## Pre-requisites
 +
 +* [Sign up for an AWS Account](https://portal.aws.amazon.com/billing/signup?redirect_url=https%3A%2F%2Faws.amazon.com%2Fregistration-confirmation). There are no upfront charges or any term commitments to create an AWS account and signing up gives you immediate access to the AWS Free Tier.
 +* You have an account with GitHub, GitLab, or Bitbucket.
 +* You have completed the [Quick Start] or have a Hugo website you are ready to deploy and share with the world.
 +
 +## Hosting
 +
 +1. Log in to the [AWS Amplify Console](https://console.aws.amazon.com/amplify/home) and choose Get Started under Deploy.
 +   ![Hugo Amplify](/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-gettingstarted.png)
 +
 +1. Connect a branch from your GitHub, Bitbucket, GitLab, or AWS CodeCommit repository. Connecting your repository allows Amplify to deploy updates on every code commit to a branch.
 +   ![Hugo Amplify](/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-connect-repo.gif)
 +
 +1. Accept the default build settings. The Amplify Console automatically detects your Hugo build settings and output directory.
 +   ![Hugo Amplify](/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-build-settings.png)
 +
 +1. Review your changes and then choose **Save and deploy**. The Amplify Console will pull code from your repository, build changes to the backend and frontend, and deploy your build artifacts at `https://master.unique-id.amplifyapp.com`. Bonus: Screenshots of your app on different devices to find layout issues.
 +
 +## Using a newer version of Hugo
 +
 +If you need to use a different, perhaps newer, version of Hugo than the version currently supported by AWS Amplify:
 +
 +1. Visit the [AWS Amplify Console](https://console.aws.amazon.com/amplify/home), and click the app you would like to modify
 +1. In the side navigation bar, Under App Settings, click **Build settings**
 +1. On the Build settings page, near the bottom, there is a section called **Build image settings**. Click **Edit**
 +1. Under **Live package updates**, click **Add package version override**
 +1. From the selection, click **Hugo** and ensure the version field says `latest`
 +1. Click **Save** to save the changes.
 +
 +[Quick Start]: /getting-started/quick-start/
index cf06580e78660db34d7e80e83aae517aa1f5ce46,0000000000000000000000000000000000000000..f0d1d5de499618e93ab5510e6d11a4e97934f79d
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,16 @@@
- linktitle: Hosting on Azure Static Web Apps
 +---
 +title: Hosting on Azure Static Web Apps
- date: 2022-05-09
- publishdate: 2022-05-09
 +description: Learn how to deploy a Hugo application to Azure Static Web Apps.
- authors: [Azure Static Web Apps]
 +categories: [hosting and deployment]
 +keywords: [hosting,Azure Static Web Apps]
-     parent: "hosting-and-deployment"
 +menu:
 +  docs:
- sections_weight: 200
- draft: false
++    parent: hosting-and-deployment
 +    weight: 200
 +weight: 200
- aliases: []
 +toc: true
 +---
 +
 +You can create and deploy a Hugo web application to Azure Static Web Apps. The final result is a new Azure Static Web App with associated GitHub Actions that give you control over how the app is built and published. You'll learn how to create a Hugo app, set up an Azure Static Web App and deploy the Hugo app to Azure.
 +
 +Here's the tutorial on how to [Publish a Hugo site to Azure Static Web Apps](https://docs.microsoft.com/en-us/azure/static-web-apps/publish-hugo).
index fd48ac9ad6a08c2db5cd32844834b82862d57c29,0000000000000000000000000000000000000000..e76957d515a8f25b34b85749a39828954473678c
mode 100644,000000..100644
--- /dev/null
@@@ -1,101 -1,0 +1,96 @@@
- linktitle: Host on Azure Static Web Apps
- description: Deploy Hugo to Azure Static Web Apps and automate the whole process with Github Action Workflow
- date: 2021-03-12
- publishdate: 2021-03-12
 +---
 +title: Host on Azure Static Web Apps
- authors: [Aaron Powell]
++description: Deploy Hugo to Azure Static Web Apps and automate the whole process with GitHub Action Workflow
 +categories: [hosting and deployment]
 +keywords: [azure,git,deployment,hosting]
-     parent: "hosting-and-deployment"
 +menu:
 +  docs:
- sections_weight: 10
++    parent: hosting-and-deployment
 +    weight: 10
 +weight: 10
- 3. You have an Azure account. You can sign up for a [Free Trail][azuretrial].
 +toc: true
 +---
 +
 +[Azure Static Web Apps] is a service that automatically builds and deploys full stack web apps to Azure from a Git repository, using [GitHub Actions] or [Azure DevOps].
 +
 +_The following documentation covers how to use GitHub Actions for the deployment. If you are using Azure DevOps, follow the Microsoft documentation._
 +
 +## Assumptions
 +
 +1. You have Git 2.8 or greater [installed on your machine][installgit].
 +2. You have a GitHub account. [Signing up][ghsignup] for GitHub is free.
++3. You have an Azure account. You can sign up for a [Free Trial][azuretrial].
 +4. You have a ready-to-publish Hugo website or have at least completed the [Quick Start].
 +
 +## Deploy Hugo to Azure Static Web Apps
 +
 +1. Navigate to the [Azure Portal][azureportal]
 +2. Click **Create a Resource**
 +3. Search for **Static Web Apps**
 +4. Click **Static Web Apps**
 +5. Click **Create**
 +
 +![Create in Azure Portal](/images/hosting-and-deployment/hosting-on-azure/create-in-portal.png)
 +
 +6. For **Subscription**, accept the subscription that is listed or select a new one from the drop-down list.
 +7. In _Resource group_, select **New**. In _New resource group name_, enter **hugo-static-app** and select **OK**.
 +8. Next, a name for your app in the **Name** box. Valid characters include `a-z`, `A-Z`, `0-9` and `-`.
 +9. For _Region_, select an available region close to you.
 +10. For _SKU_, select **Free**.
 +
 +![Basic app details](/images/hosting-and-deployment/hosting-on-azure/basic-app-details.png)
 +
 +11. Click the **Sign in with GitHub** button.
 +12. Select the **Organization** under which your repo exists.
 +13. Select the Hugo app you wish to deploy as the _Repository_ .
 +14. For the _Branch_ select the branch you want to deploy (eg: **main**).
 +15. Select **Hugo** under the _Build Presets_, which will populate the configuration files with the standard Hugo build options
 +  * **App Location** is the path in the Git repo where Hugo's config file is
 +  * **Api Location** is the path where the Serverless API is (or left blank if there is no API)
 +  * **Artifact Location** is the path where Hugo publishes to
 +16. Click **Review + Create** to review the details and then **Create** to start the creation of the Azure Static Web Apps and create the GitHub Action workflow for deployment.
 +
 +A GitHub Action workflow will immediately start a build using Hugo and deployment to Azure. The website can be accessed via the URL shown on the _Overview_ page of the Azure Static Web Apps resource in Azure.
 +
 +## Using A Custom Hugo Version
 +
 +When you create a Static Web App, a [workflow file][swaconfig] is generated which contains the deployment settings for the site. You can configure a specific Hugo version in the workflow file by providing a value for `HUGO_VERSION` in the `env` section of the `Azure/static-web-apps-deploy` GitHub Action.
 +
 +```yaml
 +jobs:
 +  build_and_deploy_job:
 +    if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
 +    runs-on: ubuntu-latest
 +    name: Build and Deploy Job
 +    steps:
 +      - uses: actions/checkout@v3
 +        with:
 +          submodules: true
 +      - name: Build And Deploy
 +        id: builddeploy
 +        uses: Azure/static-web-apps-deploy@v1
 +        with:
 +          azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
 +          repo_token: ${{ secrets.GITHUB_TOKEN }}
 +          action: "upload"
 +          app_location: "/" # App source code path
 +          api_location: "api" # Api source code path - optional
 +          output_location: "public" # Built app content directory - optional
 +        env:
 +          HUGO_VERSION: 0.100.2
 +```
 +
 +## Use a Custom Domain
 +
 +Azure Static Web Apps supports custom domains as a CNAME or APEX domain mapping. You can configure the custom domains via the Azure Portal. Refer to the [official documentation for custom domains][domains] for more information.
 +
 +[Azure Static Web Apps]: https://docs.microsoft.com/azure/static-web-apps/?WT.mc_id=javascript-26008-aapowell
 +[GitHub Actions]: https://docs.github.com/en/actions
 +[Azure DevOps]: https://docs.microsoft.com/azure/static-web-apps/publish-devops?WT.mc_id=javascript-26008-aapowell
 +[ghsignup]: https://github.com/join
 +[installgit]: https://git-scm.com/downloads
 +[azuretrial]: https://azure.microsoft.com/free/?WT.mc_id=javascript-26008-aapowell
 +[azureportal]: https://portal.azure.com/
 +[swaconfig]: https://docs.microsoft.com/azure/static-web-apps/github-actions-workflow?WT.mc_id=javascript-26008-aapowell
 +[domains]: https://docs.microsoft.com/azure/static-web-apps/custom-domain?WT.mc_id=javascript-26008-aapowell
 +[Quick Start]: /getting-started/quick-start/
index f001d8662d0b24d43de1a317d59f2abf27387ca8,0000000000000000000000000000000000000000..2138f4a160f2543e7ad79f8a00414080e582fc8e
mode 100644,000000..100644
--- /dev/null
@@@ -1,19 -1,0 +1,15 @@@
- linktitle: Host on Cloudflare Pages
 +---
 +title: Host on Cloudflare Pages
- date: 2022-04-07
- publishdate: 2022-04-07
 +description: Cloudflare Pages can host your Hugo site with CDN, continuous deployment, 1-click HTTPS, an admin GUI, and its own environment variables.
-     parent: "hosting-and-deployment"
 +categories: [hosting and deployment]
 +menu:
 +  docs:
- sections_weight: 50
++    parent: hosting-and-deployment
 +    weight: 50
 +weight: 50
- [Cloudflare Pages](https://developers.cloudflare.com/pages/) are super fast, always up-to-date, and deployed directly from your Git provider (currently supports only GitHub and GitLab).
 +toc: true
 +---
 +
++[Cloudflare Pages](https://developers.cloudflare.com/pages/) are super fast, always up-to-date, and deployed directly from your [Git provider](https://developers.cloudflare.com/pages/get-started/#connect-your-git-provider-to-pages).
 +
 +Cloudflare Pages docs have a detailed tutorial on [how to deploy a Hugo site](https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site/).
index 4e31f1cd0afed0186fc035aa25a5852defd1d501,0000000000000000000000000000000000000000..406f6abc3e3511cd6a4836abf6a623a24fb56f2e
mode 100644,000000..100644
--- /dev/null
@@@ -1,119 -1,0 +1,113 @@@
- linktitle: Host on Firebase
 +---
 +title: Host on Firebase
- date: 2017-03-12
- publishdate: 2017-03-12
 +description: You can use Firebase's free tier to host your static website; this also gives you access to Firebase's NOSQL API.
- authors: [Michel Racic]
 +categories: [hosting and deployment]
 +keywords: [hosting,firebase]
-     parent: "hosting-and-deployment"
 +menu:
 +  docs:
- sections_weight: 20
++    parent: hosting-and-deployment
 +    weight: 20
 +weight: 20
- aliases: []
 +toc: true
- ## Using Firebase & Github CI/CD
 +---
 +
 +## Assumptions
 +
 +1. You have an account with [Firebase][signup]. (If you don't, you can sign up for free using your Google account.)
 +2. You have completed the [Quick Start] or have a completed Hugo website ready for deployment.
 +
 +## Initial setup
 +
 +Go to the [Firebase console][console] and create a new project (unless you already have a project). You will need to globally install `firebase-tools` (node.js):
 +
 +```txt
 +npm install -g firebase-tools
 +```
 +
 +Log in to Firebase (setup on your local machine) using `firebase login`, which opens a browser where you can select your account. Use `firebase logout` in case you are already logged in but to the wrong account.
 +
 +
 +```txt
 +firebase login
 +```
 +
 +In the root of your Hugo project, initialize the Firebase project with the `firebase init` command:
 +
 +```txt
 +firebase init
 +```
 +
 +From here:
 +
 +1. Choose Hosting in the feature question
 +2. Choose the project you just set up
 +3. Accept the default for your database rules file
 +4. Accept the default for the publish directory, which is `public`
 +5. Choose "No" in the question if you are deploying a single-page app
 +
- Firebase script with retrive credentials, create a service account you can later manage in your github settings.
++## Using Firebase & GitHub CI/CD
 +
 +In new versions of Firebase, some other questions apply:
 +
 +6. Set up automatic builds and deploys with GitHub? 
 +
 +Here you will be redirected to login in your GitHub account to get permissions. Confirm.
 +
 +7. For which GitHub repository would you like to set up a GitHub workflow? (format: user/repository) 
 +
 +Include the repository you will use in the format above (Account/Repo)
- With this you will have the app initialized manually. After that you can manage and fix your github workflow from: https://github.com/your-account/yout-repo/actions
++Firebase script with retrive credentials, create a service account you can later manage in your GitHub settings.
 +
 +8. Set up the workflow to run a build script before every deploy? 
 +
 +Here is your opportunity to include some commands before you run the deploy.
 +
 +9. Set up automatic deployment to your site's live channel when a PR is merged? 
 +
 +You can let in the default option (main)
 +
 +After that Firebase has been set in your project with CI/CD. After that run:
 +
 +```
 +hugo && firebase deploy
 +```
 +
++With this you will have the app initialized manually. After that you can manage and fix your GitHub workflow from: https://github.com/your-account/your-repo/actions
 +
 +Don't forget to update your static pages before push!
 +
 +## Manual Deploy
 +
 +To deploy your Hugo site, execute the `firebase deploy` command, and your site will be up in no time:
 +
 +```txt
 +hugo && firebase deploy
 +```
 +
 +## CI Setup (Other tools)
 +
 +You can generate a deploy token using
 +
 +```txt
 +firebase login:ci
 +```
 +
 +You can also set up your CI and add the token to a private variable like `$FIREBASE_DEPLOY_TOKEN`.
 +
 +{{% note %}}
 +This is a private secret and it should not appear in a public repository. Make sure you understand your chosen CI and that it's not visible to others.
 +{{% /note %}}
 +
 +You can then add a step in your build to do the deployment using the token:
 +
 +```txt
 +firebase deploy --token $FIREBASE_DEPLOY_TOKEN
 +```
 +
 +## Reference links
 +
 +* [Firebase CLI Reference](https://firebase.google.com/docs/cli/#administrative_commands)
 +
 +[console]: https://console.firebase.google.com/
 +[Quick Start]: /getting-started/quick-start/
 +[signup]: https://console.firebase.google.com/
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..29912f25ca0042332bc60f4bc4bd006941b123ab
new file mode 100644 (file)
Binary files differ
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..0050d33e23451d8d79317a9483d2d0a7c20ae096
new file mode 100644 (file)
Binary files differ
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..d2904cae17c4fa19b494474432a936397e29838c
new file mode 100644 (file)
Binary files differ
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..75774462b1faa05b9c1e71ad0349291e297327eb
new file mode 100644 (file)
Binary files differ
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..efe26129a2bc5ec3cde28ad41329da57a1649c48
new file mode 100644 (file)
Binary files differ
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e5cbe192280aad86eadc8170d4ffc1c3cbecbc6c
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,180 @@@
++---
++title: Host on GitHub
++description: Deploy Hugo as a GitHub Pages project or personal/organizational site and automate the whole process with Github Actions
++categories: [hosting and deployment]
++keywords: [github,git,deployment,hosting]
++menu:
++  docs:
++    parent: hosting-and-deployment
++    weight: 30
++weight: 30
++toc: true
++aliases: [/tutorials/github-pages-blog/]
++---
++
++GitHub provides free and fast static hosting over SSL for personal, organization, or project pages directly from a GitHub repository via its GitHub Pages service and automating development workflows and build with GitHub Actions.
++
++## Prerequisites
++
++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 then 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
++: Create an empty file in your local repository.
++
++```text
++.github/workflows/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" >}}
++# 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.111.3
++    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 Embedded
++        run: sudo snap install dart-sass-embedded
++      - name: Checkout
++        uses: actions/checkout@v3
++        with:
++          submodules: recursive
++          fetch-depth: 0
++      - name: Setup Pages
++        id: pages
++        uses: actions/configure-pages@v3
++      - name: Install Node.js dependencies
++        run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
++      - name: Build with Hugo
++        env:
++          # For maximum backward compatibility with Hugo modules
++          HUGO_ENVIRONMENT: production
++          HUGO_ENV: production
++        run: |
++          hugo \
++            --gc \
++            --minify \
++            --baseURL "${{ steps.pages.outputs.base_url }}/"
++      - name: Upload artifact
++        uses: actions/upload-pages-artifact@v1
++        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@v2
++{{< /code >}}
++
++Step 7
++: Commit the change to your local repository with a commit message of something like "Add workflow", and push to GitHub.
++
++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.
++
++## Additional 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 6eb816171d60379e12085669a3583065f1d20697,0000000000000000000000000000000000000000..1e43e5975dbde497781a80fb025d296f70a20244
mode 100644,000000..100644
--- /dev/null
@@@ -1,86 -1,0 +1,78 @@@
- linktitle: Host on GitLab
 +---
 +title: Host on GitLab
- date: 2016-06-23
- publishdate: 2016-06-23
- lastmod: 2017-11-16
 +description: GitLab makes it easy to build, deploy, and host your Hugo website via their free GitLab Pages service, which provides native support for Hugo.
- authors: [Riku-Pekka Silvola]
 +categories: [hosting and deployment]
 +keywords: [hosting,deployment,git,gitlab]
-     parent: "hosting-and-deployment"
 +menu:
 +  docs:
- sections_weight: 40
- draft: false
++    parent: hosting-and-deployment
 +    weight: 40
 +weight: 40
- wip: false
 +toc: true
 +aliases: [/tutorials/hosting-on-gitlab/]
 +---
 +
 +## Assumptions
 +
 +* Working familiarity with Git for version control
 +* Completion of the Hugo [Quick Start]
 +* A [GitLab account](https://gitlab.com/users/sign_in)
 +* A Hugo website on your local machine that you are ready to publish
 +
 +## BaseURL
 +
 +The `baseURL` in your [site configuration](/getting-started/configuration/) must reflect the full URL of your GitLab pages repository if you are using the default GitLab Pages URL (e.g., `https://<YourUsername>.gitlab.io/<your-hugo-site>/`) and not a custom domain.
 +
 +## Configure GitLab CI/CD
 +
 +Define your [CI/CD](https://docs.gitlab.com/ee/ci/quick_start/) jobs by creating a `.gitlab-ci.yml` file in the root of your project.
 +
 +{{< code file=".gitlab-ci.yml" >}}
 +image: registry.gitlab.com/pages/hugo/hugo_extended:latest
 +
 +variables:
 +  GIT_SUBMODULE_STRATEGY: recursive
 +
 +pages:
 +  script:
 +  - hugo
 +  artifacts:
 +    paths:
 +    - public
 +  rules:
 +  - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
 +{{< /code >}}
 +
 +{{% note %}}
 +See [this list](https://gitlab.com/pages/hugo/container_registry) if you wish to use a particular Hugo version to build your site.
 +{{% /note %}}
 +
 +## Push your Hugo website to GitLab
 +
 +Next, create a new repository on GitLab. It is *not* necessary to make the repository public. In addition, you might want to add `/public` to your .gitignore file, as there is no need to push compiled assets to GitLab or keep your output website in version control.
 +
 +```bash
 +# initialize new git repository
 +git init
 +
 +# add /public directory to our .gitignore file
 +echo "/public" >> .gitignore
 +
 +# commit and push code to master branch
 +git add .
 +git commit -m "Initial commit"
 +git remote add origin https://gitlab.com/YourUsername/your-hugo-site.git
 +git push -u origin master
 +```
 +
 +## Wait for your page to build
 +
 +That's it! You can now follow the CI agent building your page at `https://gitlab.com/<YourUsername>/<your-hugo-site>/pipelines`.
 +
 +After the build has passed, your new website is available at `https://<YourUsername>.gitlab.io/<your-hugo-site>/`.
 +
 +## Next steps
 +
 +GitLab supports using custom CNAME's and TLS certificates. For more details on GitLab Pages, see the [GitLab Pages setup documentation](https://about.gitlab.com/2016/04/07/gitlab-pages-setup/).
 +
 +[Quick Start]: /getting-started/quick-start/
index 85a5ab5f48a03da2fa5f4f8d4072c5298fc193a5,0000000000000000000000000000000000000000..bf6565899162f1f5c0d4baec21723969e2c1de33
mode 100644,000000..100644
--- /dev/null
@@@ -1,93 -1,0 +1,89 @@@
- date: 2017-09-12
 +---
 +title: "Host on KeyCDN"
-     parent: "hosting-and-deployment"
 +description: "Accelerate your Hugo site globally with a KeyCDN integration. This tutorial shows you how to set up your static site as a GitLab page behind a KeyCDN pull zone."
 +categories: [hosting and deployment]
 +keywords: [keycdn,hosting,deployment,cdn]
 +menu:
 +  docs:
- slug: ""
- aliases: []
- toc: false
++    parent: hosting-and-deployment
 +    weight: 40
- You can watch the progress and CI job output in your Gitlab project under “Pipelines”.
 +---
 +
 +[KeyCDN](https://www.keycdn.com/) provides a multitude of features to help accelerate and secure your Hugo site globally including Brotli compression, Let's Encrypt support, Origin Shield, and more.
 +
 +## Assumptions
 +
 +- You already have a Hugo page configured
 +- You have a GitLab account
 +- You have a KeyCDN account
 +
 +## Create a KeyCDN Pull Zone
 +
 +The first step will be to log in to your KeyCDN account and create a new zone. Name this whatever you like and select the [Pull Zone](https://www.keycdn.com/support/create-a-pull-zone/) option. As for the origin URL, your site will be running on [GitLab Pages](https://docs.gitlab.com/ee/user/project/pages/getting_started_part_one.html) with a URL of `https://youruser.gitlab.io/reponame/`. Use this as the Origin URL.
 +
 +![Screenshot of KeyCDN's pull zone creation page](/images/hosting-and-deployment/hosting-on-keycdn/keycdn-pull-zone.png)
 +
 +While the origin location doesn’t exist yet, you will need to use your new Zone URL address (or [Zone Alias](https://www.keycdn.com/support/create-a-zone-alias/)) in the `.gitlab-ci.yml` file that will be uploaded to your GitLab project.
 +
 +Ensure that you use your Zone URL or Zone alias as the `BASEURL` variable in the example below. This will be the user-visible website address.
 +
 +## Configure Your .gitlab-ci.yml File
 +
 +Your `.gitlab-ci.yml` file should look similar to the example below. Be sure to modify any variables that are specific to your setup.
 +
 +```yml
 +image: alpine:latest
 +
 +variables:
 +    BASEURL: "https://cipull-7bb7.kxcdn.com/"
 +    HUGO_VERSION: "0.26"
 +    HUGO_CHECKSUM: "67e4ba5ec2a02c8164b6846e30a17cc765b0165a5b183d5e480149baf54e1a50"
 +    KEYCDN_ZONE_ID: "75544"
 +
 +before_script:
 +    - apk update
 +    - apk add curl
 +
 +pages:
 +    stage: deploy
 +    script:
 +    - apk add git
 +    - git submodule update --init
 +    - curl -sSL https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_Linux-64bit.tar.gz -o /tmp/hugo.tar.gz
 +    - echo "${HUGO_CHECKSUM}  /tmp/hugo.tar.gz" | sha256sum -c
 +    - tar xf /tmp/hugo.tar.gz hugo -C /tmp/ && cp /tmp/hugo /usr/bin
 +    - hugo --baseURL ${BASEURL}
 +    - curl "https://api.keycdn.com/zones/purge/${KEYCDN_ZONE_ID}.json" -u "${KEYCDN_API_KEY}:"
 +    artifacts:
 +    paths:
 +    - public
 +    only:
 +    - master
 +
 +```
 +Using this integration method,  you will have to specify the Zone ID and your [KeyCDN API](https://www.keycdn.com/api) key as secret variables. To do this, navigate to the top-left menu bar in GitLab and select Projects. Then, select your project and click on the Settings page. Finally, select Pipelines from the sub-menu and scroll down to the Secret Variable section.
 +
 +The Secret Variable for your Zone ID should look similar to:
 +
 +![Screenshot of setting the Zone ID secret variable](/images/hosting-and-deployment/hosting-on-keycdn/secret-zone-id.png)
 +
 +While the Secret Variable for your API Key will look similar to:
 +
 +![Screenshot of setting the API Key secret variable](/images/hosting-and-deployment/hosting-on-keycdn/secret-api-key.png)
 +
 +The Zone ID and API key are used to purge your zone – it’s not strictly needed but otherwise, the CDN might deliver older versions of your assets for quite a while.
 +
 +## Push Your Changes to GitLab
 +
 +Now it’s time to push the newly created repository to GitLab:
 +
 +```bash
 +git remote add origin git@gitlab.com:youruser/ci-example.git
 +git push -u origin master
 +```
 +
++You can watch the progress and CI job output in your GitLab project under “Pipelines”.
 +
 +After verifying your CI job ran without issues, first check that your GitLab page shows up under `https://youruser.gitlab.io/reponame/` (it might look broken depending on your browser settings as all links point to your KeyCDN zone – don’t worry about that) and then by heading to whatever Zone alias / Zone URL you defined.
 +
 +To learn more about Hugo hosting options with KeyCDN, check out the complete [Hugo hosting with KeyCDN integration guide](https://www.keycdn.com/support/hugo-hosting/).
index 7aa9283f8c802adec703c45394b9f4c8701bba13,0000000000000000000000000000000000000000..7d620f11abfc162d7afc88d10b73715eb73905fb
mode 100644,000000..100644
--- /dev/null
@@@ -1,156 -1,0 +1,147 @@@
- linktitle: Host on Netlify
 +---
 +title: Host on Netlify
- date: 2017-02-01
- publishdate: 2017-02-01
 +description: Netlify can host your Hugo site with CDN, continuous deployment, 1-click HTTPS, an admin GUI, and its own CLI.
- authors: [Ryan Watters, Seth MacLeod]
 +categories: [hosting and deployment]
 +keywords: [netlify,hosting,deployment]
-     parent: "hosting-and-deployment"
 +menu:
 +  docs:
- sections_weight: 10
- aliases: []
++    parent: hosting-and-deployment
 +    weight: 10
 +weight: 10
- {{< code file="netlify.toml" codeLang="toml" >}}
 +toc: true
 +---
 +
 +[Netlify][netlify] provides continuous deployment services, global CDN, ultra-fast DNS, atomic deploys, instant cache invalidation, one-click SSL, a browser-based interface, a CLI, and many other features for managing your Hugo website.
 +
 +## Assumptions
 +
 +* You have an account with GitHub, GitLab, or Bitbucket.
 +* You have completed the [Quick Start] or have a Hugo website you are ready to deploy and share with the world.
 +* You do not already have a Netlify account.
 +
 +## Create a Netlify account
 +
 +Go to [app.netlify.com] and select your preferred signup method. This will likely be a hosted Git provider, although you also have the option to sign up with an email address.
 +
 +The following examples use GitHub, but other git providers will follow a similar process.
 +
 +![Screenshot of the homepage for app.netlify.com, containing links to the most popular hosted git solutions.](/images/hosting-and-deployment/hosting-on-netlify/netlify-signup.jpg)
 +
 +Selecting GitHub will bring up an authorization modal for authentication. Select "Authorize application."
 +
 +![Screenshot of the authorization popup for Netlify and GitHub.](/images/hosting-and-deployment/hosting-on-netlify/netlify-first-authorize.jpg)
 +
 +## Create a new site with continuous deployment
 +
 +You're now already a Netlify member and should be brought to your new dashboard. Select "New site from git."
 +
 +![Screenshot of the blank Netlify admin panel with no sites and highlighted 'add new site' button'](/images/hosting-and-deployment/hosting-on-netlify/netlify-add-new-site.jpg)
 +
 +Netlify will then start walking you through the steps necessary for continuous deployment. First, you'll need to select your git provider again, but this time you are giving Netlify added permissions to your repositories.
 +
 +![Screenshot of step 1 of create a new site for Netlify: selecting the git provider](/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-1.jpg)
 +
 +And then again with the GitHub authorization modal:
 +
 +![Screenshot of step 1 of create a new site for Netlify: selecting the git provider](/images/hosting-and-deployment/hosting-on-netlify/netlify-authorize-added-permissions.jpg)
 +
 +Select the repo you want to use for continuous deployment. If you have a large number of repositories, you can filter through them in real time using repo search:
 +
 +![Screenshot of step 1 of create a new site for Netlify: selecting the git provider](/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-2.jpg)
 +
 +Once selected, you'll be brought to a screen for basic setup. Here you can select the branch you want to publish, your [build command], and your publish (i.e. deploy) directory. The publish directory should mirror that of what you've set in your [site configuration][config], the default of which is `public`. The following steps assume you are publishing from the `master` branch.
 +
 +## Configure Hugo version in Netlify
 +
 +You can [set Hugo version](https://www.netlify.com/blog/2017/04/11/netlify-plus-hugo-0.20-and-beyond/) for your environments in `netlify.toml` file or set `HUGO_VERSION` as a build environment variable in the Netlify console.
 +
 +For production:
 +
- {{< code file="netlify.toml" codeLang="toml" >}}
++{{< code file="netlify.toml" >}}
 +[context.production.environment]
 +  HUGO_VERSION = "0.99.1"
 +{{< /code >}}
 +
 +For testing:
 +
- {{< code file="netlify.toml" nocode="true" >}}
++{{< code file="netlify.toml" >}}
 +[context.deploy-preview.environment]
 +  HUGO_VERSION = "0.99.1"
 +{{< /code >}}
 +
 +The Netlify configuration file can be a little hard to understand and get right for the different environment, and you may get some inspiration and tips from this site's `netlify.toml`:
 +
- {{< /code >}}
 +{{< readfile file="netlify.toml" highlight="toml" >}}
- The [`git clone` method for installing themes][installthemes] is not supported by Netlify. If you were to use `git clone`, it would require you to recursively remove the `.git` subdirectory from the theme folder and would therefore prevent compatibility with future versions of the theme.
 +
 +## Build and Deploy Site
 +
 +In the Netlify console, selecting "Deploy site" will immediately take you to a terminal for your build:.
 +
 +![Animated gif of deploying a site to Netlify, including the terminal read out for the build.](/images/hosting-and-deployment/hosting-on-netlify/netlify-deploying-site.gif)
 +
 +Once the build is finished---this should only take a few seconds--you should now see a "Hero Card" at the top of your screen letting you know the deployment is successful. The Hero Card is the first element that you see in most pages. It allows you to see a quick summary of the page and gives access to the most common/pertinent actions and information. You'll see that the URL is automatically generated by Netlify. You can update the URL in "Settings."
 +
 +![Screenshot of successful deploy badge at the top of a deployments screen from within the Netlify admin.](/images/hosting-and-deployment/hosting-on-netlify/netlify-deploy-published.jpg)
 +
 +![Screenshot of homepage to https://hugo-netlify-example.netlify.com, which is mostly dummy text](/images/hosting-and-deployment/hosting-on-netlify/netlify-live-site.jpg)
 +
 +[Visit the live site][visit].
 +
 +Now every time you push changes to your hosted git repository, Netlify will rebuild and redeploy your site.
 +
 +See [this blog post](https://www.netlify.com/blog/2017/04/11/netlify-plus-hugo-0.20-and-beyond/) for more details about how Netlify handles Hugo versions.
 +
 +## Use Hugo Themes with Netlify
 +
- [build command]: /getting-started/usage/#the-hugo-command
++The `git clone` method for installing themes is not supported by Netlify. If you were to use `git clone`, it would require you to recursively remove the `.git` subdirectory from the theme folder and would therefore prevent compatibility with future versions of the theme.
 +
 +A *better* approach is to install a theme as a proper git submodule. You can [read the GitHub documentation for submodules][ghsm] or those found on [Git's website][gitsm] for more information, but the command is similar to that of `git clone`:
 +
 +```txt
 +cd themes
 +git submodule add https://github.com/<THEMECREATOR>/<THEMENAME>
 +```
 +
 +It is recommended to only use stable versions of a theme (if it’s versioned) and always check the changelog. This can be done by checking out a specific release within the theme's directory.
 +
 +Switch to the theme's directory and list all available versions:
 +
 +```txt
 +cd themes/<theme>
 +git tag
 +# exit with q
 +```
 +
 +You can checkout a specific version as follows:
 +
 +```txt
 +git checkout tags/<version-name>
 +```
 +
 +You can update a theme to the latest version by executing the following command in the *root* directory of your project:
 +
 +```txt
 +git submodule update --rebase --remote
 +```
 +
 +## Next Steps
 +
 +You now have a live website served over HTTPS, distributed through CDN, and configured for continuous deployment. Dig deeper into the Netlify documentation:
 +
 +1. [Using a Custom Domain]
 +2. [Setting up HTTPS on Custom Domains][httpscustom]
 +3. [Redirects and Rewrite Rules]
 +
 +[app.netlify.com]: https://app.netlify.com
- [installthemes]: /themes/installing/
++[build command]: /getting-started/usage/#build-your-site
 +[config]: /getting-started/configuration/
 +[ghsm]: https://github.com/blog/2104-working-with-submodules
 +[gitsm]: https://git-scm.com/book/en/v2/Git-Tools-Submodules
 +[httpscustom]: https://www.netlify.com/docs/ssl/
 +[hugoversions]: https://github.com/netlify/build-image/blob/master/Dockerfile#L216
 +[netlify]: https://www.netlify.com/
 +[netlifysignup]: https://app.netlify.com/signup
 +[Quick Start]: /getting-started/quick-start/
 +[Redirects and Rewrite Rules]: https://www.netlify.com/docs/redirects/
 +[Using a Custom Domain]: https://www.netlify.com/docs/custom-domains/
 +[visit]: https://hugo-netlify-example.netlify.com
index f099f2168835e4c4528437afe2534e7d4335f186,0000000000000000000000000000000000000000..d8f03c3e7808e6a9d33de39d84b695bde91f6e35
mode 100644,000000..100644
--- /dev/null
@@@ -1,90 -1,0 +1,83 @@@
- linktitle: Host on Render
 +---
 +title: Host on Render
- date: 2019-06-06
- publishdate: 2019-06-06
 +description: Host your Hugo site for free with Render's global CDN, fully-managed SSL and auto deploys from GitHub.
- authors: [Anurag Goel]
 +categories: [hosting and deployment]
 +keywords: [hosting,deployment]
-     parent: "hosting-and-deployment"
 +menu:
 +  docs:
- sections_weight: 10
- draft: false
- aliases: []
++    parent: hosting-and-deployment
 +    weight: 10
 +weight: 10
- 1. Create a new **Static Site** on Render, and give Render permission to access your GitHub/Gitlab repo.
 +toc: true
 +---
 +
 +## Introduction
 +
 +[Render](https://render.com) is a fully-managed cloud platform where you can host static sites, backend APIs, databases, cron jobs, and all your other apps in one place.
 +
 +Static sites are **completely free** on Render and include the following:
 +
 +- Continuous, automatic builds & deploys from [GitHub](https://render.com/docs/github) and [GitLab](https://render.com/docs/gitlab).
 +- Automatic SSL certificates through [Let's Encrypt](https://letsencrypt.org).
 +- Instant cache invalidation with a lightning fast, global CDN.
 +- Unlimited collaborators.
 +- Unlimited [custom domains](https://render.com/docs/custom-domains).
 +- Automatic [Brotli compression](https://en.wikipedia.org/wiki/Brotli) for faster sites.
 +- Native HTTP/2 support.
 +- [Pull Request Previews](https://render.com/docs/pull-request-previews).
 +- Automatic HTTP → HTTPS redirects.
 +- Custom URL redirects and rewrites.
 +
 +## Assumptions
 +
 +- You have an account with GitHub or GitLab.
 +- You have completed the [Quick Start] or have a Hugo website you are ready to deploy and share with the world.
 +- You have a Render account. You can sign up at https://render.com/register.
 +
 +## Deployment
 +
 +You can set up a Hugo site on Render in two quick steps:
 +
- Now that Render is connected to your repo, it will **automatically build and publish your site** any time you push to your GitHub/Gitlab.
++1. Create a new **Static Site** on Render, and give Render permission to access your GitHub/GitLab repo.
 +2. Use the following values during creation:
 +
 +  Field                | Value
 +  -------------------  |  -------------------
 + **Build Command**     | `hugo --gc --minify` (or your own build command)
 + **Publish Directory** | `public` (or your own output directory)
 +
 +That's it! Your site will be live on your Render URL (which looks like `yoursite.onrender.com`) as soon as the build is done.
 +
 +## Continuous Deploys
 +
++Now that Render is connected to your repo, it will **automatically build and publish your site** any time you push to your GitHub/GitLab.
 +
 +You can choose to disable auto deploys under the **Settings** section for your site and deploy it manually from the Render dashboard.
 +
 +## CDN and Cache Invalidation
 +
 +Render hosts your site on a global, lightning fast CDN which ensures the fastest possible download times for all your users across the globe.
 +
 +Every deploy automatically and instantly invalidates the CDN cache, so your users can always access the latest content on your site.
 +
 +## Custom Domains
 +
 +Add your own domains to your site easily using Render's [custom domains](https://render.com/docs/custom-domains) guide.
 +
 +## Pull Request Previews
 +
 +With Pull Request (PR) previews, you can visualize changes introduced in a pull request instead of simply relying on code reviews.
 +
 +Once enabled, every PR for your site will automatically generate a new static site based on the code in the PR. It will have its own URL, and it will be deleted automatically when the PR is closed.
 +
 +Read more about [Pull Request Previews](https://render.com/docs/pull-request-previews) on Render.
 +
 +## Hugo Themes
 +
 +Render automatically downloads all Git submodules defined in your Git repo on every build. This way Hugo themes added as submodules work as expected.
 +
 +## Support
 +
 +Chat with Render developers at https://render.com/chat or email `support@render.com` if you need help.
 +
 +[Quick Start]: /getting-started/quick-start/
index 02a23fe121be821e8b1c74994ac9f8d25b8921c9,0000000000000000000000000000000000000000..e0c98de2a1e85042d1e3c7b0083d147b202665dd
mode 100644,000000..100644
--- /dev/null
@@@ -1,142 -1,0 +1,134 @@@
- linktitle: Hugo Deploy
 +---
 +title: Hugo Deploy
- date: 2019-05-30
- publishdate: 2019-05-30
- lastmod: 2021-05-03
 +description: You can upload your site to GCS, S3, or Azure using the Hugo CLI.
- authors: [Robert van Gent]
 +categories: [hosting and deployment]
 +keywords: [s3,gcs,azure,hosting,deployment]
-     parent: "hosting-and-deployment"
 +menu:
 +  docs:
- sections_weight: 2
- draft: false
- aliases: []
++    parent: hosting-and-deployment
 +    weight: 2
 +weight: 2
 +toc: true
 +---
 +
 +You can use the "hugo deploy" command to upload your site directly to a Google Cloud Storage (GCS) bucket, an AWS S3 bucket, and/or an Azure Storage container.
 +
 +## Assumptions
 +
 +* You have completed the [Quick Start] or have a Hugo website you are ready to deploy and share with the world.
 +* You have an account with the service provider ([Google Cloud](https://cloud.google.com/), [AWS](https://aws.amazon.com), or [Azure](https://azure.microsoft.com)) that you want to deploy to.
 +* You have authenticated.
 +  * Google Cloud: [Install the CLI](https://cloud.google.com/sdk) and run [`gcloud auth login`](https://cloud.google.com/sdk/gcloud/reference/auth/login).
 +  * AWS: [Install the CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) and run [`aws configure`](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
 +  * Azure: [Install the CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) and run [`az login`](https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli).
 +  * NOTE: Each service supports alternatives for authentication, including using environment variables. See [here](https://gocloud.dev/howto/blob/#services) for more details.
 +
 +## Create a bucket to deploy to
 +
 +Create a storage bucket to deploy your site to. If you want your site to be
 +public, be sure to configure the bucket to be publicly readable.
 +
 +### Google Cloud Storage (GCS)
 +
 +Follow the [GCS instructions for how to create a bucket](https://cloud.google.com/storage/docs/creating-buckets).
 +
 +### AWS S3
 +
 +Follow the [AWS instructions for how to create a bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html).
 +
 +### Azure Storage
 +
 +Follow the [Azure instructions for how to create a storage container](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal).
 +
 +## Configure the deployment
 +
 +In the configuration file for your site, add a `[deployment]` section with one
 +or more `[[deployment.targets]]` section, one for each deployment target. Here's
 +a detailed example:
 +
 +```toml
 +[deployment]
 +# By default, files are uploaded in an arbitrary order.
 +# Files that match the regular expressions in the "Order" list
 +# will be uploaded first, in the listed order.
 +order = [".jpg$", ".gif$"]
 +
 +
 +[[deployment.targets]]
 +# An arbitrary name for this target.
 +name = "mydeployment"
 +# The Go Cloud Development Kit URL to deploy to. Examples:
 +# GCS; see https://gocloud.dev/howto/blob/#gcs
 +# URL = "gs://<Bucket Name>"
 +
 +# S3; see https://gocloud.dev/howto/blob/#s3
 +# For S3-compatible endpoints, see https://gocloud.dev/howto/blob/#s3-compatible
 +# URL = "s3://<Bucket Name>?region=<AWS region>"
 +
 +# Azure Blob Storage; see https://gocloud.dev/howto/blob/#azure
 +# URL = "azblob://$web"
 +
 +# You can use a "prefix=" query parameter to target a subfolder of the bucket:
 +# URL = "gs://<Bucket Name>?prefix=a/subfolder/"
 +
 +# If you are using a CloudFront CDN, deploy will invalidate the cache as needed.
 +cloudFrontDistributionID = <ID>
 +
 +# Optionally, you can include or exclude specific files.
 +# See https://godoc.org/github.com/gobwas/glob#Glob for the glob pattern syntax.
 +# If non-empty, the pattern is matched against the local path.
 +# All paths are matched against in their filepath.ToSlash form.
 +# If exclude is non-empty, and a local or remote file's path matches it, that file is not synced.
 +# If include is non-empty, and a local or remote file's path does not match it, that file is not synced.
 +# As a result, local files that don't pass the include/exclude filters are not uploaded to remote,
 +# and remote files that don't pass the include/exclude filters are not deleted.
 +# include = "**.html" # would only include files with ".html" suffix
 +# exclude = "**.{jpg, png}" # would exclude files with ".jpg" or ".png" suffix
 +
 +
 +# [[deployment.matchers]] configure behavior for files that match the Pattern.
 +# See https://golang.org/pkg/regexp/syntax/ for pattern syntax.
 +# Pattern searching is stopped on first match.
 +
 +# Samples:
 +
 +[[deployment.matchers]]
 +# Cache static assets for 1 year.
 +pattern = "^.+\\.(js|css|svg|ttf)$"
 +cacheControl = "max-age=31536000, no-transform, public"
 +gzip = true
 +
 +[[deployment.matchers]]
 +pattern = "^.+\\.(png|jpg)$"
 +cacheControl = "max-age=31536000, no-transform, public"
 +gzip = false
 +
 +[[deployment.matchers]]
 +# Set custom content type for /sitemap.xml
 +pattern = "^sitemap\\.xml$"
 +contentType = "application/xml"
 +gzip = true
 +
 +[[deployment.matchers]]
 +pattern = "^.+\\.(html|xml|json)$"
 +gzip = true
 +```
 +
 +## Deploy
 +
 +To deploy to a target:
 +
 +```bash
 +hugo deploy [--target=<target name>, defaults to first target]
 +```
 +
 +Hugo will identify and apply any local changes that need to be reflected to the
 +remote target. You can use `--dryRun` to see the changes without applying them,
 +or `--confirm` to be prompted before making changes.
 +
 +See `hugo help deploy` for more command-line options.
 +
 +[Quick Start]: /getting-started/quick-start/
 +[Google Cloud]: [https://cloud.google.com]
 +[AWS]: [https://aws.amazon.com]
 +[Azure]: [https://azure.microsoft.com]
index b2951da9a2a713015bb72894ec291535346f50a2,0000000000000000000000000000000000000000..76f21d43fd7722e86b3dda36f560eaa86b6778ef
mode 100644,000000..100644
--- /dev/null
@@@ -1,32 -1,0 +1,28 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
 +---
 +title: Hugo Modules
 +linktitle: Hugo Modules Overview
 +description: How to use Hugo Modules.
-     parent: "modules"
 +menu:
 +  docs:
- sections_weight: 01
++    parent: modules
 +    weight: 01
 +weight: 01
- draft: false
 +categories: [hugo modules]
 +keywords: [themes,modules]
 +aliases: [/themes/overview/,/themes/]
 +toc: true
 +---
 +
 +**Hugo Modules** are the core building blocks in Hugo. A _module_ can be your main project or a smaller module providing one or more of the 7 component types defined in Hugo: **static**, **content**, **layouts**, **data**, **assets**, **i18n**, and **archetypes**.
 +
 +You can combine modules in any combination you like, and even mount directories from non-Hugo projects, forming a big, virtual union file system.
 +
 +Hugo Modules are powered by Go Modules. For more information about Go Modules, see:
 +
 +- [https://github.com/golang/go/wiki/Modules](https://github.com/golang/go/wiki/Modules)
 +- [https://go.dev/blog/using-go-modules](https://go.dev/blog/using-go-modules)
 +
 +This is all very much brand new and there are only a few example projects around:
 +
 +- [https://github.com/bep/docuapi](https://github.com/bep/docuapi) is a theme that has been ported to Hugo Modules while testing this feature. It is a good example of a non-Hugo-project mounted into Hugo’s folder structure. It even shows a JS Bundler implementation in regular Go templates.
 +- [https://github.com/bep/my-modular-site](https://github.com/bep/my-modular-site) is a very simple site used for testing.
index 5b19d2419f3dc3a6057a5e32b4db253d707e19e3,0000000000000000000000000000000000000000..8620314d08a96b2c594595d92aaadef10bbaebf9
mode 100644,000000..100644
--- /dev/null
@@@ -1,168 -1,0 +1,180 @@@
- linktitle: Configure Modules
 +---
 +title: Configure Modules
- date: 2019-07-24
 +description: This page describes the configuration options for a module.
-     parent: "modules"
 +categories: [hugo modules]
 +keywords: [themes, source, organization, directories]
 +menu:
 +  docs:
- sections_weight: 10
++    parent: modules
 +    weight: 10
 +weight: 10
- : A comma separated (or a slice) list of module path to directory replacement mapping, e.g. `github.com/bep/my-theme -> ../..,github.com/bep/shortcodes -> /some/path`. This is mostly useful for temporary locally development of a module, and then it makes sense to set it as an OS environment variable, e.g: `env HUGO_MODULE_REPLACEMENTS="github.com/bep/my-theme -> ../.."`. Any relative path is relate to [themesDir](https://gohugo.io/getting-started/configuration/#all-configuration-settings), and absolute paths are allowed.
 +toc: true
 +---
 +
 +## Module Config: Top level
 +
 +{{< code-toggle file="config">}}
 +[module]
 +noVendor = ""
 +proxy = "direct"
 +noProxy = "none"
 +private = "*.*"
 +replacements = ""
 +workspace = "off"
 +{{< /code-toggle >}}
 +
 +noVendor
 +: A optional Glob pattern matching module paths to skip when vendoring, e.g. "github.com/**"
 +
 +vendorClosest
 +: When enabled, we will pick the vendored module closest to the module using it. The default behavior is to pick the first. Note that there can still be only one dependency of a given module path, so once it is in use it cannot be redefined.
 +
 +proxy
 +: Defines the proxy server to use to download remote modules. Default is `direct`, which means "git clone" and similar.
 +
 +noProxy
 +: Comma separated glob list matching paths that should not use the proxy configured above.
 +
 +private
 +: Comma separated glob list matching paths that should be treated as private.
 +
 +workspace
 +: The workspace file to use. This enables Go workspace mode. Note that this can also be set via OS env, e.g. `export HUGO_MODULE_WORKSPACE=/my/hugo.work` This only works with Go 1.18+. In Hugo `v0.109.0` we changed the default to `off` and we now resolve any relative work filenames relative to the working directory.
 +
 +replacements
- {{% warning %}}
++: A comma-separated list of mappings from module paths to directories, e.g. `github.com/bep/my-theme -> ../..,github.com/bep/shortcodes -> /some/path`. This is mostly useful for temporary local development of a module, in which case you might want to save it as an environment variable, e.g: `env HUGO_MODULE_REPLACEMENTS="github.com/bep/my-theme -> ../.."`. Relative paths are relative to [themesDir](https://gohugo.io/getting-started/configuration/#all-configuration-settings). Absolute paths are allowed.
 +
 +Note that the above terms maps directly to their counterparts in Go Modules. Some of these setting may be natural to set as OS environment variables. To set the proxy server to use, as an example:
 +
 +```txt
 +env HUGO_MODULE_PROXY=https://proxy.example.org hugo
 +```
 +
 +{{< gomodules-info >}}
 +
 +## Module Config: hugoVersion
 +
 +If your module requires a particular version of Hugo to work, you can indicate that in the `module` section and the user will be warned if using a too old/new version.
 +
 +{{< code-toggle file="config">}}
 +[module]
 +[module.hugoVersion]
 +  min = ""
 +  max = ""
 +  extended = false
 +
 +{{< /code-toggle >}}
 +
 +Any of the above can be omitted.
 +
 +min
 +: The minimum Hugo version supported, e.g. `0.55.0`
 +
 +max
 +: The maximum Hugo version supported, e.g. `0.55.0`
 +
 +extended
 +: Whether the extended version of Hugo is required.
 +
 +## Module Config: imports
 +
 +{{< code-toggle file="config">}}
 +[module]
 +[[module.imports]]
 +  path = "github.com/gohugoio/hugoTestModules1_linux/modh1_2_1v"
 +  ignoreConfig = false
 +  ignoreImports = false
 +  disable = false
 +[[module.imports]]
 +  path = "my-shortcodes"
 +{{< /code-toggle >}}
 +
 +path
 +: Can be either a valid Go Module module path, e.g. `github.com/gohugoio/myShortcodes`, or the directory name for the module as stored in your themes folder.
 +
 +ignoreConfig
 +: If enabled, any module configuration file, e.g. `config.toml`, will not be loaded. Note that this will also stop the loading of any transitive module dependencies.
 +
 +ignoreImports
 +: If enabled, module imports will not be followed.
 +
 +disable
 +: Set to `true` to disable the module while keeping any version info in the `go.*` files.
 +
 +noMounts
 +:  Do not mount any folder in this import.
 +
 +noVendor
 +:  Never vendor this import (only allowed in main project).
 +
 +{{< gomodules-info >}}
 +
 +## Module Config: mounts
 +
 +{{% note %}}
 +When the `mounts` config was introduced in Hugo 0.56.0, we were careful to preserve the existing `contentDir`, `staticDir`, and similar configuration to make sure all existing sites just continued to work. But you should not have both: if you add a `mounts` section you should remove the old `contentDir`, `staticDir`, etc. settings.
 +{{% /note %}}
 +
- {{% /warning %}}
++{{% note %}}
 +When you add a mount, the default mount for the concerned target root is ignored: be sure to explicitly add it.
++{{% /note %}}
 +
 +**Default mounts**
 +{{< code-toggle file="config">}}
 +[module]
 +[[module.mounts]]
 +    source="content"
 +    target="content"
 +[[module.mounts]]
 +    source="static"
 +    target="static"
 +[[module.mounts]]
 +    source="layouts"
 +    target="layouts"
 +[[module.mounts]]
 +    source="data"
 +    target="data"
 +[[module.mounts]]
 +    source="assets"
 +    target="assets"
 +[[module.mounts]]
 +    source="i18n"
 +    target="i18n"
 +[[module.mounts]]
 +    source="archetypes"
 +    target="archetypes"
 +{{< /code-toggle >}}
 +
 +source
 +: The source directory of the mount. For the main project, this can be either project-relative or absolute and even a symbolic link. For other modules it must be project-relative.
 +
 +target
 +: Where it should be mounted into Hugo's virtual filesystem. It must start with one of Hugo's component folders: `static`, `content`, `layouts`, `data`, `assets`, `i18n`, or `archetypes`. E.g. `content/blog`.
 +
 +lang
 +: The language code, e.g. "en". Only relevant for `content` mounts, and `static` mounts when in multihost mode.
 +
 +includeFiles (string or slice)
 +: One or more [glob](https://github.com/gobwas/glob) patterns matching files or directories to include. If `excludeFiles` is not set, the files matching `includeFiles` will be the files mounted.
 +
 +The glob patterns are matched to the filenames starting from the `source` root, they should have Unix styled slashes even on Windows, `/` matches the mount root and `**` can be used as a  super-asterisk to match recursively down all directories, e.g `/posts/**.jpg`.
 +
 +The search is case-insensitive.
 +
 +excludeFiles (string or slice)
 +: One or more glob patterns matching files to exclude.
++
++**Example**
++{{< code-toggle file="config">}}
++[module]
++[[module.mounts]]
++    source="content"
++    target="content"
++    excludeFiles="docs/*"
++[[module.mounts]]
++    source="node_modules"
++    target="assets"
++[[module.mounts]]
++    source="assets"
++    target="assets"
++{{< /code-toggle >}}
index 5b01e98e960052eacf21101623b94accd92d16fd,0000000000000000000000000000000000000000..10aa1277fd50192eb131e461c20261edb6f43184
mode 100644,000000..100644
--- /dev/null
@@@ -1,49 -1,0 +1,45 @@@
- linktitle: Theme Components
 +---
 +title: Theme Components
- date: 2017-02-01
 +description: Hugo provides advanced theming support with Theme Components.
-     parent: "modules"
 +categories: [hugo modules]
 +keywords: [themes, theme, source, organization, directories]
 +menu:
 +  docs:
- sections_weight: 50
- draft: false
++    parent: modules
 +    weight: 50
 +weight: 50
 +aliases: [/themes/customize/,/themes/customizing/]
 +toc: true
 +---
 +
 +{{% note %}}
 +This section contain information that may be outdated and is in the process of being rewritten.
 +{{% /note %}}
 +Since Hugo `0.42` a project can configure a theme as a composite of as many theme components you need:
 +
 +{{< code-toggle file="config">}}
 +theme = ["my-shortcodes", "base-theme", "hyde"]
 +{{< /code-toggle >}}
 +
 +You can even nest this, and have the theme component itself include theme components in its own `config.toml` (theme inheritance).[^1]
 +
 +The theme definition example above in `config.toml` creates a theme with 3 theme components with precedence from left to right.
 +
 +For any given file, data entry, etc., Hugo will look first in the project and then in `my-shortcodes`, `base-theme`, and lastly `hyde`.
 +
 +Hugo uses two different algorithms to merge the filesystems, depending on the file type:
 +
 +* For `i18n` and `data` files, Hugo merges deeply using the translation ID and data key inside the files.
 +* For `static`, `layouts` (templates), and `archetypes` files, these are merged on file level. So the left-most file will be chosen.
 +
 +The name used in the `theme` definition above must match a folder in `/your-site/themes`, e.g. `/your-site/themes/my-shortcodes`. There are plans to improve on this and get a URL scheme so this can be resolved automatically.
 +
 +Also note that a component that is part of a theme can have its own configuration file, e.g. `config.toml`. There are currently some restrictions to what a theme component can configure:
 +
 +* `params` (global and per language)
 +* `menu` (global and per language)
 +* `outputformats` and `mediatypes`
 +
 +The same rules apply here: The left-most param/menu etc. with the same ID will win. There are some hidden and experimental namespace support in the above, which we will work to improve in the future, but theme authors are encouraged to create their own namespaces to avoid naming conflicts.
 +
 +[^1]: For themes hosted on the [Hugo Themes Showcase](https://themes.gohugo.io/) components need to be added as git submodules that point to the directory `exampleSite/themes`
index 977a52bd6e24467d09f143a750124ffac9b600db,0000000000000000000000000000000000000000..99c1229b583111f29ec2121152ae1060f40d0f1a
mode 100644,000000..100644
--- /dev/null
@@@ -1,167 -1,0 +1,162 @@@
- linktitle: Use Hugo Modules
 +---
 +title: Use Hugo Modules
- date: 2019-07-24
 +description: How to use Hugo Modules to build and manage your site.
-     parent: "modules"
 +categories: [hugo modules]
 +keywords: [install, themes, source, organization, directories,usage,modules]
 +menu:
 +  docs:
- sections_weight: 20
- draft: false
++    parent: modules
 +    weight: 20
 +weight: 20
 +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.:
 +
 +```bash
 +hugo mod init github.com/gohugoio/myShortcodes
 +```
 +
 +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 config.
 +
 +1. Initialize the hugo module system: `hugo mod init github.com/<your_user>/<your_project>`
 +2. Import the theme:
 +
 +{{< code-toggle file="config" >}}
 +[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-config-imports).
 +
 +To update or manage versions, you can use `hugo mod get`.
 +
 +Some examples:
 +
 +### Update All Modules
 +
 +```bash
 +hugo mod get -u
 +```
 +
 +### Update All Modules Recursively
 +
 +```bash
 +hugo mod get -u ./...
 +```
 +
 +### Update One Module
 +
 +```bash
 +hugo mod get -u github.com/gohugoio/myShortcodes
 +```
 +
 +### Get a Specific Version
 +
 +```bash
 +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`:
 +
 +```bash
 +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 config [`replacements`](https://gohugo.io/hugo-modules/configuration/#module-config-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
 +
 +{{< new-in "0.109.0" >}}
 +
 +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/hugo.work) file in the Hugo Docs repo for an example:
 +
 +```
 +go 1.19
 +
 +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:
 +
 +```
 +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 078e1f18602852aaacd74c1a3dce520daaaa8dd7,0000000000000000000000000000000000000000..438ee2fe016528b8ceefcf1263895c076c2e8a44
mode 100755,000000..100755
--- /dev/null
@@@ -1,13 -1,0 +1,10 @@@
- date: 2018-07-14
- publishdate: 2018-07-14
 +---
 +title: Hugo Pipes Overview
-     parent: "pipes"
 +categories: [asset management]
 +keywords: []
 +menu:
 +  docs:
- sections_weight: 10
- ---
++    parent: pipes
 +    weight: 10
 +weight: 10
++---
index 48db15c8dbce558a5def37f06312c69ae69f7464,0000000000000000000000000000000000000000..1762f85e562ab32fb15927ba35da438eddc154ea
mode 100755,000000..100755
--- /dev/null
@@@ -1,76 -1,0 +1,76 @@@
- date: 2019-03-21
- publishdate: 2019-03-21
 +---
 +title: Babel
 +description: Hugo Pipes can process JS files with Babel.
-     parent: "pipes"
 +categories: [asset management]
 +keywords: []
 +menu:
 +  docs:
- sections_weight: 48
++    parent: pipes
 +    weight: 48
 +weight: 48
++signature: ["resources.Babel RESOURCE [OPTIONS]", "babel RESOURCE [OPTIONS]"]
 +---
 +
++## Usage
++
 +Any JavaScript resource file can be transpiled to another JavaScript version using `resources.Babel` which takes for argument the resource object and an optional dict of options listed below. Babel uses the [babel cli](https://babeljs.io/docs/en/babel-cli).
 +
 +
 +{{% note %}}
 +Hugo Pipe's Babel requires the `@babel/cli` and `@babel/core` JavaScript packages to be installed in the project or globally (`npm install -g @babel/cli @babel/core`) along with any Babel plugin(s) or preset(s) used (e.g., `npm install @babel/preset-env --save-dev`).
 +
 +If you are using the Hugo Snap package, Babel and plugin(s) need to be installed locally within your Hugo site directory, e.g., `npm install @babel/cli @babel/core --save-dev` without the `-g` flag.
 +{{% /note %}}
 +
 +### Config
 +
 +We add the main project's `node_modules` to `NODE_PATH` when running Babel and similar tools. There are some known [issues](https://github.com/babel/babel/issues/5618) with Babel in this area, so if you have a `babel.config.js` living in a Hugo Module (and not in the project itself), we recommend using `require` to load the presets/plugins, e.g.:
 +
 +
 +```js
 +module.exports = {
 +  presets: [
 +    [
 +      require("@babel/preset-env"),
 +      {
 +        useBuiltIns: "entry",
 +        corejs: 3,
 +      },
 +    ],
 +  ],
 +};
 +```
 +
 +### Options
 +
 +config [string]
 +: Path to the Babel configuration file. Hugo will, by default, look for a `babel.config.js` in your project. More information on these configuration files can be found here: [babel configuration](https://babeljs.io/docs/en/configuration).
 +
 +minified [bool]
 +: Save as many bytes as possible when printing
 +
 +noComments [bool]
 +: Write comments to generated output (true by default)
 +
 +compact [bool]
 +: Do not include superfluous whitespace characters and line terminators. Defaults to `auto` if not set.
 +
 +verbose [bool]
 +: Log everything
 +
 +sourceMap [string]
 +: Output `inline` or `external` sourcemap from the babel compile. External sourcemaps will be written to the target with the output filename + ".map". Input sourcemaps can be read from js.Build and node modules and combined into the output sourcemaps.
 +
 +
 +### Examples
 +
 +```go-html-template
 +{{- $transpiled := resources.Get "scripts/main.js" | babel  -}}
 +```
 +
 +Or with options:
 +
 +```go-html-template
 +{{ $opts := dict "noComments" true }}
 +{{- $transpiled := resources.Get "scripts/main.js" | babel $opts -}}
 +```
index 227c7b1a32612d6da5ea622ddd4e6f786a6f4282,0000000000000000000000000000000000000000..ae625537a2d2f9ca18e3bcd98e02fd8ef040274c
mode 100755,000000..100755
--- /dev/null
@@@ -1,23 -1,0 +1,23 @@@
- title: Asset bundling
- description: Hugo Pipes can bundle any number of assets together.
- date: 2018-07-14
- publishdate: 2018-07-14
- lastmod: 2018-07-14
 +---
-     parent: "pipes"
++title: Concat
++linkTitle: Concatenating assets
++description: Bundle any number of assets into one resource.
 +categories: [asset management]
 +keywords: []
 +menu:
 +  docs:
- sections_weight: 60
++    parent: pipes
 +    weight: 60
 +weight: 60
- Asset files of the same MIME type can be bundled into one resource using `resources.Concat` which takes two arguments, a target path and a slice of resource objects.
++signature: ["resources.Concat TARGET_PATH SLICE_RESOURCES"]
 +---
 +
++## Usage
++
++Asset files of the same MIME type can be bundled into one resource using `resources.Concat` which takes two arguments, the target path for the created resource bundle and a slice of resource objects to be concatenated.
 +
 +```go-html-template
 +{{ $plugins := resources.Get "js/plugins.js" }}
 +{{ $global := resources.Get "js/global.js" }}
 +{{ $js := slice $plugins $global | resources.Concat "js/bundle.js" }}
 +```
index f27ef7b5526028c0ded0328c4be1fd5b3c1754bc,0000000000000000000000000000000000000000..d002dd3e21230440097178c5b2d23f92f64cd7bb
mode 100755,000000..100755
--- /dev/null
@@@ -1,26 -1,0 +1,27 @@@
- title: Fingerprinting and SRI
- description: Hugo Pipes allows Fingerprinting and Subresource Integrity.
- date: 2018-07-14
- publishdate: 2018-07-14
 +---
-     parent: "pipes"
++title: Fingerprint
++linkTitle: Fingerprinting and SRI
++description: Process a given resource, adding a hash string of the resource's content.
 +categories: [asset management]
 +keywords: []
 +menu:
 +  docs:
- sections_weight: 70
++    parent: pipes
 +    weight: 70
 +weight: 70
- Fingerprinting and [SRI](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) can be applied to any asset file using `resources.Fingerprint` which takes two arguments, the resource object and a [hash function](https://en.wikipedia.org/wiki/Cryptographic_hash_function).
++signature: ["resources.Fingerprint RESOURCE [ALGORITHM]", "fingerprint RESOURCE [ALGORITHM]"]
 +---
 +
- The default hash function is `sha256`. Other available functions are `sha384` (from Hugo `0.55`), `sha512` and `md5`.
++## Usage
 +
- Any so processed asset will bear a `.Data.Integrity` property containing an integrity string, which is made up of the name of the hash function, one hyphen and the base64-encoded hash sum.
++Fingerprinting and [SRI](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) can be applied to any asset file using `resources.Fingerprint` which takes two arguments, the resource object and an optional [hash algorithm](https://en.wikipedia.org/wiki/Secure_Hash_Algorithms).
 +
++The default hash algorithm is `sha256`. Other available algorithms are `sha384` and (as of Hugo `0.55`) `sha512` and `md5`.
++
++Any so processed asset will bear a `.Data.Integrity` property containing an integrity string, which is made up of the name of the hash algorithm, one hyphen and the base64-encoded hash sum.
 +
 +```go-html-template
 +{{ $js := resources.Get "js/global.js" }}
 +{{ $secureJS := $js | resources.Fingerprint "sha512" }}
 +<script src="{{ $secureJS.Permalink }}" integrity="{{ $secureJS.Data.Integrity }}"></script>
 +```
index e83741f7430894aa4a8a4832f6b9d52c1b70d26f,0000000000000000000000000000000000000000..c551dad61f330d9174e00a7501b8de727858796b
mode 100755,000000..100755
--- /dev/null
@@@ -1,187 -1,0 +1,170 @@@
- date: 2018-07-14
- publishdate: 2018-07-14
 +---
 +title: Hugo Pipes Introduction
 +linkTitle: Hugo Pipes
 +description: Hugo Pipes is Hugo's asset processing set of functions.
-     parent: "pipes"
 +categories: [asset management]
 +keywords: []
 +menu:
 +  docs:
- sections_weight: 01
- draft: false
++    parent: pipes
 +    weight: 20
 +weight: 01
- ## Copy a Resource
- {{< new-in "0.100.0" >}}
- `resources.Copy` allows you to copy almost any Hugo `Resource` (the one exception is the `Page`), possibly most useful for renaming things:
- ```go-html-template
- {{ $resized := $image.Resize "400x400" |  resources.Copy "images/mynewname.jpg" }}
- <img src="{{ $resized.RelPermalink }}">
- ```
 +toc: true
 +aliases: [/assets/]
 +---
 +
 +## Find Resources in /assets
 +
 +This is about the global Resources mounted inside `/assets`. For the `.Page` scoped Resources, see [Page Resources](/content-management/page-resources/).
 +
 +Note that you can mount any directory into Hugo's virtual `assets` folder using the [Mount Configuration](/hugo-modules/configuration/#module-config-mounts).
 +
 +| Function  | Description |
 +| ------------- | ------------- |
 +| `resources.Get`  | Get locates the filename given in Hugo's assets filesystem and creates a `Resource` object that can be used for further transformations. See [Get Resource with resources.Get and resources.GetRemote](#get-resource-with-resourcesget-and-resourcesgetremote).  |
 +| `resources.GetRemote`  | Same as `Get`, but it accepts remote URLs. See [Get Resource with resources.Get and resources.GetRemote](#get-resource-with-resourcesget-and-resourcesgetremote).|
 +| `resources.GetMatch`  | `GetMatch` finds the first Resource matching the given pattern, or nil if none found. See Match for a more complete explanation about the rules used. |
 +| `resources.Match`  | `Match` gets all resources matching the given base path prefix, e.g "*.png" will match all png files. The "*" does not match path delimiters (/), so if you organize your resources in sub-folders, you need to be explicit about it, e.g.: "images/*.png". To match any PNG image anywhere in the bundle you can do "\*\*.png", and to match all PNG images below the images folder, use "images/\*\*.jpg". The matching is case insensitive. Match matches by using the files name with path relative to the file system root with Unix style slashes (/) and no leading slash, e.g. "images/logo.png". See https://github.com/gobwas/glob for the full rules set.|
 +
 +See the [GoDoc Page](https://pkg.go.dev/github.com/gohugoio/hugo@v0.93.1/tpl/resources) for the `resources` package for an up to date overview of all template functions in this namespace.
 +
 +## Get Resource with resources.Get and resources.GetRemote
 +
 +In order to process an asset with Hugo Pipes, it must be retrieved as a `Resource` using `resources.Get` or `resources.GetRemote`.
 +
 +With `resources.Get`, the first argument is a local path relative to the `assets` directory/directories:
 +
 +```go-html-template
 +{{ $local := resources.Get "sass/main.scss" }}
 +```
 +
 +With `resources.GetRemote`, the first argument is a remote URL:
 +
 +```go-html-template
 +{{ $remote := resources.GetRemote "https://www.example.com/styles.scss" }}
 +```
 +
 +`resources.Get` and `resources.GetRemote` return `nil` if the resource is not found.
 +
 +{{< new-in "0.110.0" >}} You can get information about the HTTP Response using `.Data` in the returned `Resource`. This is especially useful for HEAD request without any body. The Data object contains:
 +
 +StatusCode
 +: The HTTP status code, e.g. 200
 +Status
 +: The HTTP status text, e.g. "200 OK"
 +TransferEncoding
 +: The transfer encoding, e.g. "chunked"
 +ContentLength
 +: The content length, e.g. 1234
 +ContentType
 +: The content type, e.g. "text/html"
 +
- When fetching a remote `Resource`, `resources.GetRemote` takes an optional options map as the last argument, e.g.:
 +### Caching
 +
 +By default, Hugo calculates a cache key based on the `URL` and the `options` (e.g. headers) given.
 +
 +{{< new-in "0.97.0" >}} You can override this by setting a `key` in the options map. This can be used to get more fine grained control over how often a remote resource is fetched, e.g.:
 +
 +
 +```go-html-template
 +{{ $cacheKey := print $url (now.Format "2006-01-02") }}
 +{{ $resource := resource.GetRemote $url (dict "key" $cacheKey) }}
 +```
 +
 +### Error Handling
 +
 +The return value from `resources.GetRemote` includes an `.Err` method that will return an error if the call failed. If you want to just log any error as a `WARNING` you can use a construct similar to the one below.
 +
 +```go-html-template
 +{{ with resources.GetRemote "https://gohugo.io/images/gohugoio-card-1.png" }}
 +  {{ with .Err }}
 +    {{ warnf "%s" . }}
 +  {{ else }}
 +    <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt="">
 +  {{ end }}
 +{{ end }}
 +```
 +
 +Note that if you do not handle `.Err` yourself, Hugo will fail the build the first time you start using the `Resource` object.
 +
 +### Remote Options
 +
- {{ $resource := resources.GetRemote "https://example.org/api" (dict "headers" (dict "Authorization" "Bearer abcd"))  }}
++When fetching a remote `Resource`, `resources.GetRemote` takes an optional options map as the second argument, e.g.:
 +
 +```go-html-template
- {{ $resource := resources.GetRemote "https://example.org/api"  (dict "headers" (dict "X-List" (slice "a" "b" "c")))  }}
++{{ $resource := resources.GetRemote "https://example.org/api" (dict "headers" (dict "Authorization" "Bearer abcd")) }}
 +```
 +
 +If you need multiple values for the same header key, use a slice:
 +
 +```go-html-template
++{{ $resource := resources.GetRemote "https://example.org/api"  (dict "headers" (dict "X-List" (slice "a" "b" "c"))) }}
 +```
 +
 +You can also change the request method and set the request body:
 +
 +```go-html-template
 +{{ $postResponse := resources.GetRemote "https://example.org/api"  (dict 
 +    "method" "post"
 +    "body" `{"complete": true}` 
 +    "headers" (dict 
 +        "Content-Type" "application/json"
 +    )
 +)}}
 +```
 +
 +### Caching of Remote Resources
 +
 +Remote resources fetched with `resources.GetRemote` will be cached on disk. See [Configure File Caches](/getting-started/configuration/#configure-file-caches) for details.
 +
 +## Copy a Resource
 +
 +{{< new-in "0.100.0" >}}
 +
 +`resources.Copy` allows you to copy almost any Hugo `Resource` (the one exception is the `Page`), possibly most useful for renaming things:
 +
 +```go-html-template
 +{{ $resized := $image.Resize "400x400" |  resources.Copy "images/mynewname.jpg" }}
 +<img src="{{ $resized.RelPermalink }}">
 +```
 +
 +## Asset directory
 +
 +Asset files must be stored in the asset directory. This is `/assets` by default, but can be configured via the configuration file's `assetDir` key.
 +
 +### Asset Publishing
 +
 +Hugo publishes assets to the `publishDir` (typically `public`) when you invoke `.Permalink`, `.RelPermalink`, or `.Publish`. You can use `.Content` to inline the asset.
 +
 +## Go Pipes
 +
 +For improved readability, the Hugo Pipes examples of this documentation will be written using [Go Pipes](/templates/introduction/#pipes):
 +
 +```go-html-template
 +{{ $style := resources.Get "sass/main.scss" | resources.ToCSS | resources.Minify | resources.Fingerprint }}
 +<link rel="stylesheet" href="{{ $style.Permalink }}">
 +```
 +
 +## Method aliases
 +
 +Each Hugo Pipes `resources` transformation method uses a __camelCased__ alias (`toCSS` for `resources.ToCSS`).
 +Non-transformation methods deprived of such aliases are `resources.Get`, `resources.FromString`, `resources.ExecuteAsTemplate` and `resources.Concat`.
 +
 +The example above can therefore also be written as follows:
 +
 +```go-html-template
 +{{ $style := resources.Get "sass/main.scss" | toCSS | minify | fingerprint }}
 +<link rel="stylesheet" href="{{ $style.Permalink }}">
 +```
 +
 +## Caching
 +
 +Hugo Pipes invocations are cached based on the entire *pipe chain*.
 +
 +An example of a pipe chain is:
 +
 +```go-html-template
 +{{ $mainJs := resources.Get "js/main.js" | js.Build "main.js" | minify | fingerprint }}
 +```
 +
 +The pipe chain is only invoked the first time it is encountered in a site build, and results are otherwise loaded from cache. As such, Hugo Pipes can be used in templates which are executed thousands or millions of times without negatively impacting the build performance.
index 6905a6555a1bd4203e074139035788fbabc3ad0e,0000000000000000000000000000000000000000..c880ac6fa78d8834b9560e27c7ac890624c614d5
mode 100644,000000..100644
--- /dev/null
@@@ -1,163 -1,0 +1,164 @@@
- title: JavaScript Building
- description: Hugo Pipes can process JavaScript files with [ESBuild](https://github.com/evanw/esbuild).
- date: 2020-07-20
- publishdate: 2020-07-20
 +---
-     parent: "pipes"
++title: js.Build
++linkTitle: JavaScript Building
++description: Process a JavaScript file with [ESBuild](https://github.com/evanw/esbuild).
 +categories: [asset management]
 +keywords: []
 +menu:
 +  docs:
- sections_weight: 45
++    parent: pipes
 +    weight: 45
 +weight: 45
++signature: ["js.Build RESOURCE [OPTIONS]"]
 +---
 +
++## Usage
++
 +Any JavaScript resource file can be transpiled and "tree shaken" using `js.Build` which takes for argument either a string for the filepath or a dict of options listed below.
 +
 +### Options
 +
 +targetPath [string]
 +: If not set, the source path will be used as the base target path.
 +Note that the target path's extension may change if the target MIME type is different, e.g. when the source is TypeScript.
 +
 +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. config settings. For larger data, please put/mount the files into `/assets` and import them directly.
 +
 +minify [bool]
 +: Let `js.Build` handle the minification.
 +
 +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';
 +```
 +
 +target [string]
 +: The language target.
 +  One of: `es5`, `es2015`, `es2016`, `es2017`, `es2018`, `es2019`, `es2020` or `esnext`.
 +  Default is `esnext`.
 +
 +externals [slice]
 +: External dependencies. Use this to trim dependencies you know will never be executed. See https://esbuild.github.io/api/#external
 +
 +
 +defines [map]
 +: Allow to define a set of string replacement to be performed when building. Should be a map where each key is to be replaced by its value.
 +
 +```go-html-template
 +{{ $defines := dict "process.env.NODE_ENV" `"development"` }}
 +```
 +
 +format [string]
 +: The output format.
 +  One of: `iife`, `cjs`, `esm`.
 +  Default is `iife`, a self-executing function, suitable for inclusion as a <script> tag.
 +
 +sourceMap [string]
 +: Whether to generate `inline` or `external` source maps from esbuild. External source maps will be written to the target with the output filename + ".map". Input source maps can be read from js.Build and node modules and combined into the output source maps. By default, source maps are not created.
 +
 +### Import JS code from /assets
 +
 +`js.Build` has full support for the virtual union file system in [Hugo Modules](/hugo-modules/). You can see some simple examples in this [test project](https://github.com/gohugoio/hugoTestProjectJSModImports), but in short this means that you can do this:
 +
 +```js
 +import { hello } from 'my/module';
 +```
 +
 +And it will resolve to the top-most `index.{js,ts,tsx,jsx}` inside `assets/my/module` in the layered file system.
 +
 +```js
 +import { hello3 } from 'my/module/hello3';
 +```
 +
 +Will resolve to `hello3.{js,ts,tsx,jsx}` inside `assets/my/module`.
 +
 +Any imports starting with `.` is resolved relative to the current file:
 +
 +```js
 +import { hello4 } from './lib';
 +```
 +
 +For other files (e.g. `JSON`, `CSS`) you need to use the relative path including any extension, e.g:
 +
 +```js
 +import * as data from 'my/module/data.json';
 +```
 +
 +Any imports in a file outside `/assets` or that does not resolve to a component inside `/assets` will be resolved by [ESBuild](https://esbuild.github.io/) with the **project directory** as the resolve directory (used as the starting point when looking for `node_modules` etc.). Also see [hugo mod npm pack](/commands/hugo_mod_npm_pack/).  If you have any imported npm dependencies in your project, you need to make sure to run `npm install` before you run `hugo`.
 +
 +Also note the new `params` option that can be passed from template to 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';
 +```
 +
 +Hugo will, by default, generate a `assets/jsconfig.json` file that maps the imports. This is useful for navigation/intellisense help inside code editors, but if you don't need/want it, you can [turn it off](/getting-started/configuration/#configure-build).
 +
 +
 +### Include Dependencies In package.json / node_modules
 +
 +Any imports in a file outside `/assets` or that does not resolve to a component inside `/assets` will be resolved by [ESBuild](https://esbuild.github.io/) with the **project directory** as the resolve directory (used as the starting point when looking for `node_modules` etc.). Also see [hugo mod npm pack](/commands/hugo_mod_npm_pack/).  If you have any imported npm dependencies in your project, you need to make sure to run `npm install` before you run `hugo`.
 +
 +The start directory for resolving npm packages (aka. packages that live inside a `node_modules` folder) is always the main project folder.
 +
 +**Note:** If you're developing a theme/component that is supposed to be imported and depends on dependencies inside `package.json`, we recommend reading about [hugo mod npm pack](/commands/hugo_mod_npm_pack/), a tool to consolidate all the npm dependencies in a project.
 +
 +
 +### Examples
 +
 +```go-html-template
 +{{ $built := resources.Get "js/index.js" | js.Build "main.js" }}
 +```
 +
 +Or with options:
 +
 +```go-html-template
 +{{ $externals := slice "react" "react-dom" }}
 +{{ $defines := dict "process.env.NODE_ENV" `"development"` }}
 +
 +{{ $opts := dict "targetPath" "main.js" "externals" $externals "defines" $defines }}
 +{{ $built := resources.Get "scripts/main.js" | js.Build $opts }}
 +<script src="{{ $built.RelPermalink }}" defer></script>
 +```
index 6e539e0e71aba26424459973cb84c8e14bc7cf6a,0000000000000000000000000000000000000000..100bd3353e8be0d8da4bfe4e7dee713445284341
mode 100755,000000..100755
--- /dev/null
@@@ -1,23 -1,0 +1,24 @@@
- title: Asset minification
- description: Hugo Pipes allows the minification of any CSS, JS, JSON, HTML, SVG or XML resource.
- date: 2018-07-14
- publishdate: 2018-07-14
 +---
-     parent: "pipes"
++title: Minify
++linkTitle: Asset minification
++description: Minifies a given resource.
 +categories: [asset management]
 +keywords: []
 +menu:
 +  docs:
- sections_weight: 50
++    parent: pipes
 +    weight: 50
 +weight: 50
- Any resource of the aforementioned types can be minified using `resources.Minify` which takes for argument the resource object.
++signature: ["resources.Minify RESOURCE", "minify RESOURCE"]
 +---
 +
++## Usage
++
++Any CSS, JS, JSON, HTML, SVG or XML resource can be minified using `resources.Minify` which takes for argument the resource object.
 +
 +```go-html-template
 +{{ $css := resources.Get "css/main.css" }}
 +{{ $style := $css | resources.Minify }}
 +```
 +
 +Note that you can also minify the final HTML output to `/public` by running `hugo --minify`.
index caf575c177e315ea3263126d4ad7743d9c987202,0000000000000000000000000000000000000000..0804c1072ba52781f43646a6bdf87de38e7bd4c9
mode 100755,000000..100755
--- /dev/null
@@@ -1,80 -1,0 +1,128 @@@
- description: Hugo Pipes can process CSS files with PostCSS.
 +---
 +title: PostCSS
-     parent: "pipes"
++description: Process CSS files with PostCSS, using any of the available plugins.
 +categories: [asset management]
 +keywords: []
 +menu:
 +  docs:
- Any asset file can be processed using `resources.PostCSS` which takes for argument the resource object and a slice of options listed below.
++    parent: pipes
 +    weight: 40
++toc: true
 +weight: 40
++signature: ["resources.PostCSS RESOURCE [OPTIONS]", "postCSS RESOURCE [OPTIONS]"]
 +---
 +
- The resource will be processed using the project's or theme's own `postcss.config.js` or any file set with the `config` option.
++## Setup
 +
- ```go-html-template
- {{ $css := resources.Get "css/main.css" }}
- {{ $style := $css | resources.PostCSS }}
- ```
++Follow the steps below to transform CSS using any of the [available PostCSS plugins](https://www.postcss.parts/).
 +
- You must install the required Node.js packages to use the PostCSS feature. For example, to use the `autoprefixer` package, run these commands from the root of your project:
++Step 1
++: Install [Node.js](https://nodejs.org/en/download).
 +
- ```text
++Step 2
++: Install the required Node.js packages in the root of your project. For example, to add vendor prefixes to CSS rules:
 +
- ### Options
++```bash
 +npm install postcss postcss-cli autoprefixer
 +```
 +
- config [string]
- : Set a custom directory to look for a config file
++Step 3
++: Create a PostCSS configuration file in the root of your project. You must name this file `postcss.config.js` or one of the other [supported file names]. For example:
++
++[supported file names]: https://github.com/postcss/postcss-load-config#usage
++
++{{< code file="postcss.config.js" >}}
++module.exports = {
++  plugins: [
++    require('autoprefixer')
++  ]
++};
++{{< /code >}}
++
++{{% note %}}
++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](https://github.com/postcss/postcss-load-config#packagejson) and issue [#7333](https://github.com/gohugoio/hugo/issues/7333).
++{{% /note %}}
++
++Step 4
++: Place your CSS file within the `assets` directory.
++
++Step 5
++: Capture the CSS file as a resource and pipe it through `resources.PostCSS` (alias `postCSS`):
 +
- noMap [bool]
- : Default is `false`. Disable the default inline sourcemaps
++{{< code file="layouts/partials/css.html" >}}
++{{ with resources.Get "css/main.css" | postCSS }}
++  <link rel="stylesheet" href="{{ .RelPermalink }}">
++{{ end }}
++{{< /code >}}
 +
- inlineImports [bool]
- : Default is `false`. Enable inlining of @import statements. It does so recursively, but will only import a file once.
++If starting with a Sass file within the `assets` directory:
 +
- skipInlineImportsNotFound [bool] {{< new-in "0.99.0" >}}
- : 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.
++{{< code file="layouts/partials/css.html" >}}
++{{ with resources.Get "sass/main.scss" | toCSS | postCSS }}
++  <link rel="stylesheet" href="{{ .RelPermalink }}">
++{{ end }}
++{{< /code >}}
++
++## Options
++
++The `resources.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.
 +
- _If no configuration file is used:_
++skipInlineImportsNotFound {{< new-in "0.99.0" >}}
++: (`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.
 +
- use [string]
- : Space-delimited list of PostCSS plugins to use
++{{< code file="layouts/partials/css.html" >}}
++{{ $opts := dict "config" "config-directory" "noMap" true }}
++{{ with resources.Get "css/main.css" | postCSS $opts }}
++  <link rel="stylesheet" href="{{ .RelPermalink }}">
++{{ end }}
++{{< /code >}}
 +
- parser [string]
- : Custom PostCSS parser
++## No configuration file
 +
- stringifier [string]
- : Custom PostCSS stringifier
++To avoid using a PostCSS configuration file, you can specify a minimal configuration using the options map.
 +
- syntax [string]
- : Custom postcss syntax
++use
++: (`string`) A space-delimited list of PostCSS plugins to use.
 +
- ```go-html-template
- {{ $options := dict "config" "/path/to/custom-config-directory" "noMap" true }}
- {{ $style := resources.Get "css/main.css" | resources.PostCSS $options }}
++parser
++: (`string`) A custom PostCSS parser.
 +
- {{ $options := dict "use" "autoprefixer postcss-color-alpha" }}
- {{ $style := resources.Get "css/main.css" | resources.PostCSS $options }}
- ```
++stringifier
++: (`string`) A custom PostCSS stringifier.
 +
- ## Check Hugo Environment from postcss.config.js
++syntax
++: (`string`) Custom postcss syntax.
 +
- ```js
++{{< code file="layouts/partials/css.html" >}}
++{{ $opts := dict "use" "autoprefixer postcss-color-alpha" }}
++{{ with resources.Get "css/main.css" | postCSS $opts }}
++  <link rel="stylesheet" href="{{ .RelPermalink }}">
++{{ end }}
++{{< /code >}}
++
++## Check Hugo environment
 +
 +The current Hugo environment name (set by `--environment` or in config or OS environment) is available in the Node context, which allows constructs like this:
 +
- ```
++{{< code file="postcss.config.js" >}}
 +module.exports = {
 +  plugins: [
 +    require('autoprefixer'),
 +    ...process.env.HUGO_ENVIRONMENT === 'production'
 +      ? [purgecss]
 +      : []
 +  ]
 +}
++{{< /code >}}
index 55552d105575cebd86b3cc4fb347e99fa70874cc,0000000000000000000000000000000000000000..b9e5c62c6d8ec5b2b04d41f8bb839b09447bea85
mode 100755,000000..100755
--- /dev/null
@@@ -1,97 -1,0 +1,97 @@@
- date: 2020-04-09
 +---
 +title: PostProcess
 +description: Allows delaying of resource transformations to after the build.
-     parent: "pipes"
 +categories: [asset management]
 +keywords: []
 +menu:
 +  docs:
- sections_weight: 39
++    parent: pipes
 +    weight: 39
 +weight: 39
- : {{ 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:
++signature: ["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 | resources.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="config" >}}
 +[build]
 +  writeStats = true
 +{{< /code-toggle >}}
 +
 +`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 | resources.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 (and the alias HUGO_ENV)
 +: The value e.g. set with `hugo -e production` (defaults to `production` for `hugo` and `development` for `hugo server`).
 +
 +HUGO_PUBLISHDIR
- 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 do do this and similar:
++: {{< 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:
 +
 +```
 +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 ae7598ebec24ce6a116909c872a517cfeaa1617b,0000000000000000000000000000000000000000..221898dba98f673c51dec4688f5ce8b00b3879bc
mode 100755,000000..100755
--- /dev/null
@@@ -1,29 -1,0 +1,29 @@@
- title: Creating a resource from a string
 +---
- description: Hugo Pipes allows the creation of a resource from a string.
- date: 2018-07-14
- publishdate: 2018-07-14
++title: FromString
 +linkTitle: Resource from String
-     parent: "pipes"
++description: Creates a resource from a string.
 +categories: [asset management]
 +keywords: []
 +menu:
 +  docs:
- sections_weight: 90
++    parent: pipes
 +    weight: 90
 +weight: 90
- It is possible to create a resource directly from the template using `resources.FromString` which takes two arguments, the given string and the resource target path.
++signature: ["resources.FromString TARGET_PATH CONTENT"]
 +---
 +
++## Usage
++
++It is possible to create a resource directly from the template using `resources.FromString` which takes two arguments, the target path for the created resource and the given content string.
 +
 +The following example creates a resource file containing localized variables for every project's languages.
 +
 +```go-html-template
 +{{ $string := (printf "var rootURL = '%s'; var apiURL = '%s';" (absURL "/") (.Param "API_URL")) }}
 +{{ $targetPath := "js/vars.js" }}
 +{{ $vars := $string | resources.FromString $targetPath }}
 +{{ $global := resources.Get "js/global.js" | resources.Minify }}
 +
 +<script src="{{ $vars.Permalink }}"></script>
 +<script src="{{ $global.Permalink }}"></script>
 +```
index bb0fdb2c287e0dabaadc6834b5b112c5e4242088,0000000000000000000000000000000000000000..778eb03419dd808bfca58b96f8bacdc2dc441d31
mode 100755,000000..100755
--- /dev/null
@@@ -1,35 -1,0 +1,35 @@@
- title: Creating a resource from template
 +---
- description: Hugo Pipes allows the creation of a resource from an asset file using Go Template.
- date: 2018-07-14
- publishdate: 2018-07-14
++title: ExecuteAsTemplate
 +linkTitle: Resource from Template
-     parent: "pipes"
++description: Creates a resource from a template
 +categories: [asset management]
 +keywords: []
 +menu:
 +  docs:
- sections_weight: 80
++    parent: pipes
 +    weight: 80
 +weight: 80
- The function takes three arguments: the resource target path, the template context, and the resource object.
++signature: ["resources.ExecuteAsTemplate TARGET_PATH CONTEXT RESOURCE"]
 +---
 +
++## Usage
++
 +In order to use Hugo Pipes function on an asset file containing Go Template magic the function `resources.ExecuteAsTemplate` must be used.
 +
++The function takes three arguments: the target path for the created resource, the template context, and the resource object.
 +
 +```go-html-template
 +// assets/sass/template.scss
 +$backgroundColor: {{ .Param "backgroundColor" }};
 +$textColor: {{ .Param "textColor" }};
 +body{
 +  background-color:$backgroundColor;
 +  color: $textColor;
 +}
 +// [...]
 +```
 +
 +```go-html-template
 +{{ $sassTemplate := resources.Get "sass/template.scss" }}
 +{{ $style := $sassTemplate | resources.ExecuteAsTemplate "main.scss" . | resources.ToCSS }}
 +```
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..9af649acbc893df207cb460fd0c0ad80c967c34c
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,58 @@@
++---
++title: ToCSS
++linkTitle: Transpile Sass to SCSS
++description: Transpile Sass to CSS.
++categories: [asset management]
++keywords: []
++menu:
++  docs:
++    parent: pipes
++    weight: 30
++weight: 02
++signature: ["resources.ToCSS RESOURCE [OPTIONS]", "toCSS RESOURCE [OPTIONS]"]
++---
++
++## Usage
++
++Any Sass or SCSS file can be transformed into a CSS file using `resources.ToCSS` which takes two arguments, the resource object and a map of options listed below.
++
++```go-html-template
++{{ $sass := resources.Get "sass/main.scss" }}
++{{ $style := $sass | resources.ToCSS }}
++```
++
++### Options
++
++transpiler [string]
++
++: The `transpiler` to use, valid values are `libsass` (default) and `dartsass`. If you want to use Hugo with Dart Sass you need to download a release binary from [Embedded Dart Sass](https://github.com/sass/dart-sass-embedded/releases) and make sure it's in your PC's `$PATH` (or `%PATH%` on Windows).
++
++targetPath [string]
++: If not set, the transformed resource's target path will be the asset file original path with its extension replaced by `.css`.
++
++vars [map]
++: Map of key/value pairs that will be available in the `hugo:vars` namespace, e.g. with `@use "hugo:vars" as v;` or (globally) with `@import "hugo:vars";` {{< new-in "0.109.0" >}}
++
++outputStyle [string]
++: Default is `nested` (LibSass) and `expanded` (Dart Sass). Other available output styles for LibSass are `expanded`, `compact` and `compressed`. Dart Sass only supports `expanded` and `compressed`.
++
++precision [int]
++: Precision of floating point math. **Note:** This option is not supported by Dart Sass.
++
++enableSourceMap [bool]
++: When enabled, a source map will be generated.
++
++sourceMapIncludeSources [bool]
++: When enabled, sources will be embedded in the generated source map. (Dart Sass only). {{< new-in "0.108.0" >}}
++
++includePaths [string slice]
++: Additional SCSS/Sass include paths. Paths must be relative to the project directory.
++
++```go-html-template
++{{ $options := (dict "targetPath" "style.css" "outputStyle" "compressed" "enableSourceMap" (not hugo.IsProduction) "includePaths" (slice "node_modules/myscss")) }}
++{{ $style := resources.Get "sass/main.scss" | resources.ToCSS $options }}
++```
++
++{{% note %}}
++Setting `outputStyle` to `compressed` will handle Sass/SCSS files minification better than the more generic [`resources.Minify`](/hugo-pipes/minification).
++{{% /note %}}
index e5a34b1f2e5ad424a260b170917d1196c7ff764c,0000000000000000000000000000000000000000..3a7713dd5a2bdcc5a9173275c7facff9a3e8c6ad
mode 100644,000000..100644
--- /dev/null
@@@ -1,15 -1,0 +1,14 @@@
- toc: false
 +---
 +title: Installation
 +linkTitle: Installation overview
 +description: Install Hugo on macOS, Linux, Windows, BSD, and on any machine that can run the Go compiler tool chain.
 +aliases: [/getting-started/installing/]
 +categories: [installation]
 +keywords: [installation]
 +menu:
 +  docs:
 +    parent: installation
 +    weight: 10
 +---
 +
 +{{% param "description" %}}
index 2728e91cbf1b245083926fdcb787222d9c8ad2b1,0000000000000000000000000000000000000000..5fbc4bfad6374f39cd1ff7c23ff2ee1c29363985
mode 100644,000000..100644
--- /dev/null
@@@ -1,75 -1,0 +1,74 @@@
- linkTitle: BSD
 +---
 +title: BSD
 +description: Install Hugo on BSD derivatives.
 +categories: [installation]
 +menu:
 +  docs:
 +    parent: installation
 +    weight: 50
 +toc: true
 +weight: 50
 +---
 +{{% readfile file="/installation/common/01-editions.md" %}}
 +
 +{{% readfile file="/installation/common/02-prerequisites.md" %}}
 +
 +{{% readfile file="/installation/common/03-prebuilt-binaries.md" %}}
 +
 +## Repository packages
 +
 +Most BSD derivatives maintain a repository for commonly installed applications. Please note that these repositories may not contain the [latest release].
 +
 +[latest release]: https://github.com/gohugoio/hugo/releases/latest
 +
 +### DragonFly BSD
 +
 +[DragonFly BSD] includes Hugo in its package repository. This will install the extended edition of Hugo:
 +
 +```sh
 +sudo pkg install gohugo
 +```
 +
 +[DragonFly BSD]: https://www.dragonflybsd.org/
 +
 +### FreeBSD
 +
 +[FreeBSD] includes Hugo in its package repository. This will install the extended edition of Hugo:
 +
 +```sh
 +sudo pkg install gohugo
 +```
 +
 +[FreeBSD]: https://www.freebsd.org/
 +
 +### NetBSD
 +
 +[NetBSD] includes Hugo in its package repository. This will install the extended edition of Hugo:
 +
 +```sh
 +sudo pkgin install go-hugo
 +```
 +
 +[NetBSD]: https://www.netbsd.org/
 +
 +### OpenBSD
 +
 +[OpenBSD] includes Hugo in its package repository. This will prompt you to select which edition of Hugo to install:
 +
 +```sh
 +doas pkg_add hugo
 +```
 +
 +[OpenBSD]: https://www.openbsd.org/
 +
 +{{% readfile file="/installation/common/05-build-from-source.md" %}}
 +
 +## Comparison
 +
 +||Prebuilt binaries|Repository packages|Build from source
 +:--|:--:|:--:|:--:
 +Easy to install?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
 +Easy to upgrade?|:heavy_check_mark:|varies|:heavy_check_mark:
 +Easy to downgrade?|:heavy_check_mark:|varies|:heavy_check_mark:
 +Automatic updates?|:x:|varies|:x:
 +Latest version available?|:heavy_check_mark:|varies|:heavy_check_mark:
index 03ffe9430dd3b023218c2c36258d292835582abb,0000000000000000000000000000000000000000..eafbe21259dd4ad52b11a4ca5bb532fdc153ed0a
mode 100644,000000..100644
--- /dev/null
@@@ -1,125 -1,0 +1,129 @@@
- linkTitle: Linux
 +---
 +title: Linux
- [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. This will install the extended edition of Hugo:
 +description: Install Hugo on Linux.
 +categories: [installation]
 +menu:
 +  docs:
 +    parent: installation
 +    weight: 30
 +toc: true
 +weight: 30
 +---
 +{{% readfile file="/installation/common/01-editions.md" %}}
 +
 +{{% readfile file="/installation/common/02-prerequisites.md" %}}
 +
 +{{% readfile file="/installation/common/03-prebuilt-binaries.md" %}}
 +
 +## Package managers
 +
 +### Snap
 +
- [Solus]: https://getsol.us/home/
++[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.
++
++This will install the extended edition of Hugo:
 +
 +```sh
 +sudo snap install hugo
 +```
 +
 +[most distributions]: https://snapcraft.io/docs/installing-snapd
++[strictly confined]: https://snapcraft.io/docs/snap-confinement
 +[Snap]: https://snapcraft.io/
 +
 +{{% readfile file="/installation/common/homebrew.md" %}}
 +
 +## Repository packages
 +
 +Most Linux distributions maintain a repository for commonly installed applications. Please note that these repositories may not contain the [latest release].
 +
 +[latest release]: https://github.com/gohugoio/hugo/releases/latest
 +
 +### Arch Linux
 +
 +Derivatives of the [Arch Linux] distribution of Linux include [EndeavourOS], [Garuda Linux], [Manjaro], and others. This will 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. This will 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/
 +[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/
 +
 +### Fedora
 +
 +Derivatives of the [Fedora] distribution of Linux include [CentOS], [Red Hat Enterprise Linux], and others. This will 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/
 +
 +### openSUSE
 +
 +Derivatives of the [openSUSE] distribution of Linux include [GeckoLinux], [Linux Karmada], and others. This will 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. This will install the _standard_ edition of Hugo:
 +
 +```sh
 +sudo eopkg install hugo
 +```
 +
++[Solus]: https://getsol.us/
 +
 +{{% readfile file="/installation/common/04-docker.md" %}}
 +
 +{{% readfile file="/installation/common/05-build-from-source.md" %}}
 +
 +## Comparison
 +
 +||Prebuilt binaries|Package managers|Repository packages|Docker|Build from source
 +:--|:--:|:--:|:--:|:--:|:--:
 +Easy to install?|:heavy_check_mark:|: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:|:heavy_check_mark:
 +Easy to downgrade?|:heavy_check_mark:|:heavy_check_mark: [^1]|varies|:heavy_check_mark:|:heavy_check_mark:
 +Automatic updates?|:x:|varies [^2]|:x:|:x: [^3]|:x:
 +Latest version available?|:heavy_check_mark:|:heavy_check_mark:|varies|:heavy_check_mark:|:heavy_check_mark:
 +
 +[^1]: Easy if a previous version is still installed.
 +[^2]: Snap packages are automatically updated. Homebrew requires advanced configuration.
 +[^3]: Possible but requires advanced configuration.
index c614f39bad65b847bbf7b7dcc6e345ed062d974a,0000000000000000000000000000000000000000..9d10642de4ebe7312c5ef583636beb2db1baf9d6
mode 100644,000000..100644
--- /dev/null
@@@ -1,48 -1,0 +1,47 @@@
- linkTitle: macOS
 +---
 +title: macOS
 +description: Install Hugo on macOS.
 +categories: [installation]
 +menu:
 +  docs:
 +    parent: installation
 +    weight: 20
 +toc: true
 +weight: 20
 +---
 +{{% readfile file="/installation/common/01-editions.md" %}}
 +
 +{{% readfile file="/installation/common/02-prerequisites.md" %}}
 +
 +{{% readfile file="/installation/common/03-prebuilt-binaries.md" %}}
 +
 +## Package managers
 +
 +{{% readfile file="/installation/common/homebrew.md" %}}
 +
 +### MacPorts
 +
 +[MacPorts] is a free and open source package manager for macOS. This will install the extended edition of Hugo:
 +
 +```sh
 +sudo port install hugo
 +```
 +
 +[MacPorts]: https://www.macports.org/
 +
 +{{% readfile file="/installation/common/04-docker.md" %}}
 +
 +{{% readfile file="/installation/common/05-build-from-source.md" %}}
 +
 +## Comparison
 +
 +||Prebuilt binaries|Package managers|Docker|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:|:heavy_check_mark:|:heavy_check_mark:
 +Easy to downgrade?|:heavy_check_mark:|:heavy_check_mark: [^1]|:heavy_check_mark:|:heavy_check_mark:
 +Automatic updates?|:x:|:x: [^2]|:x: [^2]|:x:
 +Latest version available?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
 +
 +[^1]: Easy if a previous version is still installed.
 +[^2]: Possible but requires advanced configuration.
index 6ef17acd40bf370f1a5a2601f8ab7aa1dac27795,0000000000000000000000000000000000000000..9959f590a56e5a312eb4caecb5393ee0786d278e
mode 100644,000000..100644
--- /dev/null
@@@ -1,63 -1,0 +1,72 @@@
- linkTitle: Windows
 +---
 +title: Windows
 +description: Install Hugo on Windows.
 +categories: [installation]
 +menu:
 +  docs:
 +    parent: installation
 +    weight: 40
 +toc: true
 +weight: 40
 +---
 +{{% readfile file="/installation/common/01-editions.md" %}}
 +
 +{{% readfile file="/installation/common/02-prerequisites.md" %}}
 +
 +{{% readfile file="/installation/common/03-prebuilt-binaries.md" %}}
 +
 +## Package managers
 +
 +### Chocolatey
 +
 +[Chocolatey] is a free and open source package manager for Windows. This will install the extended edition of Hugo:
 +
 +```sh
 +choco install hugo-extended
 +```
 +
 +[Chocolatey]: https://chocolatey.org/
 +
 +### Scoop
 +
 +[Scoop] is a free and open source package manager for Windows. This will install the extended edition of Hugo:
 +
 +```sh
 +scoop install hugo-extended
 +```
 +
 +[Scoop]: https://scoop.sh/
 +
++### Winget
++
++[Winget] is Microsoft's official free and open source package manager for Windows. This will install the extended edition of Hugo:
++
++```sh
++winget install Hugo.Hugo.Extended
++```
++
++[Winget]: https://learn.microsoft.com/en-us/windows/package-manager/
++
 +{{% readfile file="/installation/common/04-docker.md" %}}
 +
 +{{% readfile file="/installation/common/05-build-from-source.md" %}}
 +
 +{{% note %}}
 +When building the extended edition of Hugo from source on Windows, you will also need to install the [GCC compiler]. See these [detailed instructions].
 +
 +[detailed instructions]: https://discourse.gohugo.io/t/41370
 +[GCC compiler]: https://gcc.gnu.org/
 +{{% /note %}}
 +
 +## Comparison
 +
 +||Prebuilt binaries|Package managers|Docker|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:|:heavy_check_mark:|:heavy_check_mark:
 +Easy to downgrade?|:heavy_check_mark:|:heavy_check_mark: [^2]|:heavy_check_mark:|:heavy_check_mark:
 +Automatic updates?|:x:|:x: [^1]|:x: [^1]|:x:
 +Latest version available?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
 +
 +[^1]: Possible but requires advanced configuration.
 +[^2]: Easy if a previous version is still installed.
index 691a5d47ce07e1ac4b25f0211ea00d3bb0db5fd9,0000000000000000000000000000000000000000..fd8828bb2c021f6eecf63a28aa60d735399b0a2d
mode 100644,000000..100644
--- /dev/null
@@@ -1,14 -1,0 +1,10 @@@
- date: 2018-02-09
 +---
 +title: Maintenance
 +description: Some lists useful for the maintenance of the Hugo docs site.
- slug:
- aliases: []
 +categories: [maintenance]
 +keywords: [maintenance]
 +menu:
 +  docs:
 +    weight: 200
 +toc: true
 +---
index dc4115fe0af5cf4cbf4de731af23eda2a8fb0c37,0000000000000000000000000000000000000000..884e43449548c5c97cff81f3dc741131c9aec918
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,23 @@@
- - [Builders](/extras/builders) to quickly create a new site, content or theme
- - [XML sitemap](/templates/sitemap) generation
- - [Integrated Disqus](/extras/comments) support
- - Streamlined [template organization](/templates/overview)
 +---
 +date: 2014-05-29T22:53:22Z
 +description: "Now 3–4 times faster, Hugo 0.11 brings live reload, theme engine, menu system, XML sitemap, and more!"
 +title: "Hugo 0.11"
 +categories: ["Releases"]
 +---
 +
 +- Considerably faster... about 3 - 4x faster on average
 +- [Live Reload](/getting-started/usage/#livereload). Hugo will automatically reload the browser when the build is complete
 +- Theme engine w/[Theme Repository](http://github.com/spf13/hugoThemes)
 +- [Menu system](/content-management/menus/) with support for active page
- - More [sort](/functions/sort/#readout) options
++- [Builders](/commands/hugo_new) to quickly create a new site, content or theme
++- [XML sitemap](/templates/sitemap-template) generation
++- [Integrated Disqus](/content-management/comments) support
++- Streamlined [template organization](/templates/introduction)
 +- Brand new docs site
 +- Support for publishDate which allows for posts to be dated in the future
- - Renamed Indexes > [Taxonomies](/taxonomies/overview)
++- More [sort](/functions/sort) options
 +- Logging support
 +- Much better error handling
 +- More informative verbose output
++- Renamed Indexes > [Taxonomies](/content-management/taxonomies/)
 +- Renamed Chrome > [Partials](/templates/partials)
index 0c62ea5b139e6061fa70bd0cc8b94b2148430132,0000000000000000000000000000000000000000..0209c5811db2546fbe050635d31d3fd1209b1863
mode 100644,000000..100644
--- /dev/null
@@@ -1,29 -1,0 +1,29 @@@
- - [shortcode](/extras/shortcodes/) support in themes
 +---
 +date: 2015-01-21T20:35:00Z
 +description: "Hugo 0.12 focused on polishing the theme engine and adding critical functionality to the templates."
 +title: "Hugo 0.12"
 +categories: ["Releases"]
 +---
 +
 +A lot has happened since Hugo v0.11.0 was released. Most of the work has been
 +focused on polishing the theme engine and adding critical functionality to the
 +templates.
 +
 +This release represents over 90 code commits from 28 different contributors.
 +
 +- 10 [new themes](https://github.com/spf13/hugoThemes) created by the community
 +- fully themable [partials](/templates/partials/)
 +- [404 template](/templates/404/) support in themes
- - inner [shortcode](/extras/shortcodes/) content now treated as markdown
++- [shortcode](/content-management/shortcodes/) support in themes
 +- [views](/templates/views/) support in themes
- - [groupby](/templates/list) & [groupbydate](/templates/list) methods to group pages
- - taxonomy [pages list](/taxonomies/methods/) now sortable, filterable, limitable & groupable
++- inner [shortcode](/content-management/shortcodes) content now treated as markdown
 +- support for header ids in markdown (# header {#myid})
 +- [where](/functions/where/) template function to filter lists of content, taxonomies, etc.
- - [baseurl](/overview/configuration/) can now include a subdirectory
++- [groupby](/templates/lists#by-page-field) & [groupbydate](/templates/lists/#by-date-1) methods to group pages
++- taxonomy [pages list](/templates/taxonomy-templates#taxonomy-methods) now sortable, filterable, limitable & groupable
 +- general cleanup to taxonomies & documentation to make it more clear and consistent
 +- [showcase](/showcase/) returned and has been expanded
 +- pretty links now always have trailing slashes
++- [baseurl](/getting-started/configuration#baseurl) can now include a subdirectory
 +- better feedback about draft & future post rendering
 +- a variety of improvements to [the website](/)
index 9b7928b47e795dd90c562c8bda64ebc11450ae79,0000000000000000000000000000000000000000..d70d217eb25bb4642ae255bf43999f501d022d15
mode 100644,000000..100644
--- /dev/null
@@@ -1,54 -1,0 +1,54 @@@
- [cobra](https://github.com/spf13/cobra), [viper](https://github.com/spf13/viper), [blackfriday](https://github.com/russross/blackfriday), [pflag](https://github.com/spf13/pflag), [HugoThemes](https://github.com/spf13/hugothemes), [BurntSushi/Toml](github.com/BurntSushi/toml), [goYaml](https://github.com/go-yaml/yaml/tree/v2), and the Go standard library.
 +---
 +date: 2015-05-26T01:32:45Z
 +description: "The v0.14.0 Hugo release brings of the most demanded features to Hugo. The foundation of Hugo is stabilizing nicely and a lot of polish has been added. We’ve expanded support for additional content types with support for AsciiDoc, Restructured Text, HTML and Markdown."
 +title: "Hugo 0.14"
 +categories: ["Releases"]
 +---
 +
 +The v0.14.0 Hugo release brings of the most demanded features to Hugo. The foundation of Hugo is stabilizing nicely and a lot of polish has been added. We’ve expanded support for additional content types with support for AsciiDoc, Restructured Text, HTML and Markdown. Some of these types depend on external libraries as there does not currently exist native support in Go. We’ve tried to make the experience as seamless as possible. Look for more improvements here in upcoming releases.
 +
 +A lot of work has been done to improve the user experience, with extra polish to the Windows experience. Hugo errors are more helpful overall and Hugo now can detect if it’s being run in Windows Explorer and provide additional instructions to run it via the command prompt.
 +
 +The Hugo community continues to grow. Hugo has over 4000 stars on github, 165 contributors, 35 themes and 1000s of happy users. It is now the 5th most popular static site generator (by Stars) and has the 3rd largest contributor community.
 +
 +This release represents over **240 contributions by 36 contributors** to the main Hugo codebase.
 +
 +Big shout out to [@bep](https://github.com/bep) who led the development of Hugo this release, [@anthonyfok](https://github.com/anthonyfok), [@eparis](https://github.com/eparis), [@SchumacherFM](https://github.com/SchumacherFM), [@RickCogley](https://github.com/RickCogley) & [@mdhender](https://github.com/mdhender) for their significant contributions and [@tatsushid](https://github.com/tatsushid) for his continuous improvements to the templates. Also a big thanks to all the theme creators. 11 new themes have been added since last release and the [hugoThemes repo now has previews of all of them](https://github.com/spf13/hugoThemes/blob/master/README.md#theme-list).
 +
 +Hugo also depends on a lot of other great projects. A big thanks to all of our dependencies inclding:
++[cobra](https://github.com/spf13/cobra), [viper](https://github.com/spf13/viper), [blackfriday](https://github.com/russross/blackfriday), [pflag](https://github.com/spf13/pflag), [HugoThemes](https://github.com/spf13/hugothemes), [BurntSushi/Toml](https://github.com/BurntSushi/toml), [goYaml](https://github.com/go-yaml/yaml/tree/v2), and the Go standard library.
 +
 +## New features
 +- Support for all file types in content directory.
 +  - If dedicated file type handler isn’t found it will be copied to the destination.
 +- Add `AsciiDoc` support using external helpers.
 +- Add experimental support for [`Mmark`](https://github.com/miekg/mmark) markdown processor
 +- Bash autocomplete support via `genautocomplete` command
 +- Add section menu support for a [Section Menu for Lazy Bloggers](https://gohugo.io/templates/menu-templates/#section-menu-for-lazy-bloggers)
 +- Add support for `Ace` base templates
 +- Adding `RelativeURLs = true` to site config will now make all the relative URLs relative to the content root.
 +- New template functions:
 +  - `getenv`
 +  - The string functions `substr` and `slicestr`
 +    *`seq`, a sequence generator very similar to its Gnu counterpart
 +  - `absURL` and `relURL`, both of which takes the `BaseURL` setting into account
 +
 +## Improvements
 +- Highlighting with `Pygments` is now cached to disk -- expect a major speed boost if you use it!
 +- More Pygments highlighting options, including `line numbers`
 +- Show help information to Windows users who try to double click on `hugo.exe`.
 +- Add `bind` flag to `hugo server` to set the interface to which the server will bind
 +- Add support for `canonifyurls` in `srcset`
 +- Add shortcode support for HTML (content) files
 +- Allow the same `shortcode` to  be used with or without inline content
 +- Configurable RSS output filename
 +
 +## Bugfixes
 +- Fix panic with paginator and zero pages in result set.
 +- Fix crossrefs on Windows.
 +- Fix `eq` and `ne` template functions when used with a raw number combined with the result of `add`, `sub` etc.
 +- Fix paginator with uglyurls
 +- Fix [#998](https://github.com/spf13/hugo/issues/988), supporting UTF8 characters in Permalinks.
 +
 +## Notices
 +- To get variable and function names in line with the rest of the Go community, a set of variable and function names has been deprecated: These will still  work in 0.14, but will be removed in 0.15. What to do should be obvious by  the build log; `getJson` to `getJSON`, `getCsv` to `getCSV`, `safeHtml` to   `safeHTML`, `safeCss` to `safeCSS`, `safeUrl` to `safeURL`, `Url` to `URL`,  `UrlPath` to `URLPath`, `BaseUrl` to `BaseURL`, `Recent` to `Pages`,  `Indexes` to `Taxonomies`.
index 034e8e891559214fc481ad58efd3fb4deb7e6b9e,0000000000000000000000000000000000000000..d2f9068a9b57afe98124062bac3597eb7109b39b
mode 100644,000000..100644
--- /dev/null
@@@ -1,93 -1,0 +1,91 @@@
- author: bep
 +---
- draft: false
 +categories: ["Releases"]
 +date: 2016-10-07T13:54:06-04:00
 +description: "Hugo now supports multilingual sites with the most simple and elegant experience."
 +link: ""
 +title: "0.17: Hugo is going global"
 +aliases: [/0-17/]
 +---
 +Hugo is going global with our 0.17 release.  We put a lot of thought into how we could extend Hugo
 +to support multilingual websites with the most simple and elegant experience. Hugo's multilingual
 +capabilities rival the best web and documentation software, but Hugo's experience is unmatched.
 +If you have a single language website, the simple Hugo experience you already love is unchanged.
 +Adding additional languages to your website is simple and straightforward. Hugo has been completely
 +internally rewritten to be multilingual aware with translation and internationalization features
 +embedded throughout Hugo.
 +
 +Hugo continues its trend of each release being faster than the last. It's quite a challenge to consistently add
 +significant new functionality and simultaneously dramatically improve performance. {{<gh "@bep">}} has made it
 +his personal mission to apply the Go mantra of "Enable more. Do less" to Hugo. Hugo's consistent improvement
 +is a testament to his brilliance and his dedication to his craft. Hugo additionally benefits from the
 +performance improvements from the Go team in the Go 1.7 release.
 +
 +This release represents **over 300 contributions by over 70 contributors** to
 +the main Hugo code base. Since last release Hugo has **gained 2000 stars, 50 new
 +contributors and 20 additional themes.**
 +
 +Hugo now has:
 +
 +* 12,000 stars on GitHub
 +* 370+ contributors
 +* 110+ themes
 +
 +{{<gh "@bep" >}} continues to lead the project with the lionshare of contributions
 +and reviews. A special thanks to {{<gh "@bep" >}} and {{<gh "@abourget" >}} for their
 +considerable work on multilingual support.
 +
 +A big welcome to newcomers {{<gh "@MarkDBlackwell" >}}, {{<gh "@bogem" >}} and
 +{{<gh "@g3wanghc" >}} for their critical contributions.
 +
 +### Highlights
 +
 +**Multilingual Support:**
 +Hugo now supports multiple languages side-by-side. A single site can now have multiple languages rendered with
 +full support for translation and i18n.
 +
 +**Performance:**
 +Hugo is faster than ever! Hugo 0.17 is not only our fastest release, it's also the most efficient.
 +Hugo 0.17 is **nearly twice as fast as Hugo 0.16** and uses about 10% less memory.
 +This means that the same site will build in nearly half the time it took with Hugo 0.16.
 +For the first time Hugo sites are averaging well under 1ms per rendered content.
 +
 +**Docs overhaul:**
 +This release really focused on improving the documentation. [Gohugo.io](http://gohugo.io) is
 +more accurate and complete than ever.
 +
 +**Support for macOS Sierra**
 +
 +### New Features
 +* Multilingual support {{<gh 2303>}}
 +* Allow content expiration {{<gh 2137 >}}
 +* New templates functions:
 +  * `querify` function to generate query strings inside templates {{<gh 2257>}}
 +  * `htmlEscape` and `htmlUnescape` template functions {{<gh 2287>}}
 +  * `time` converts a timestamp string into a time.Time structure {{<gh 2329>}}
 +
 +### Enhancements
 +
 +* Render the shortcodes as late as possible {{<gh 0xed0985404db4630d1b9d3ad0b7e41fb186ae0112>}}
 +* Remove unneeded casts in page.getParam {{<gh 2186 >}}
 +* Automatic page date fallback {{<gh 2239>}}
 +* Enable safeHTMLAttr {{<gh 2234>}}
 +* Add TODO list support for markdown {{<gh 2296>}}
 +* Make absURL and relURL accept any type {{<gh 2352>}}
 +* Suppress 'missing static' error {{<gh 2344>}}
 +* Make summary, wordcount etc. more efficient {{<gh 2378>}}
 +* Better error reporting in `hugo convert` {{<gh 2440>}}
 +* Reproducible builds thanks to govendor {{<gh 2461>}}
 +
 +### Fixes
 +
 +* Fix shortcode in markdown headers {{<gh 2210 >}}
 +* Explicitly bind livereload to hugo server port {{<gh 2205>}}
 +* Fix Emojify for certain text patterns {{<gh 2198>}}
 +* Normalize file name to NFC {{<gh 2259>}}
 +* Ignore emacs temp files {{<gh 2266>}}
 +* Handle symlink change event {{<gh 2273>}}
 +* Fix panic when using URLize {{<gh 2274>}}
 +* `hugo import jekyll`: Fixed target path location check {{<gh 2293>}}
 +* Return all errors from casting in templates {{<gh 2356>}}
 +* Fix paginator counter on x86-32 {{<gh 2420>}}
 +* Fix half-broken self-closing shortcodes {{<gh 2499>}}
index 5aaab9ffe071f79bf630f2ffc41ccc1561a340f8,0000000000000000000000000000000000000000..3720c7929567d0751b7be906dc3b61c20fc470de
mode 100644,000000..100644
--- /dev/null
@@@ -1,114 -1,0 +1,112 @@@
- draft: false
- author: bep
 +---
 +date: 2016-12-30T13:54:02-04:00
 +categories: ["Releases"]
 +description: "The primary new feature in Hugo 0.18 is that every piece of content is now a Page."
 +link: ""
 +title: "Hugo 0.18"
 +aliases: [/0-18/]
 +---
 +
 +Hugo 0.18.1 is a bug fix release fixing some issues introduced in Hugo 0.18:
 +
 +* Fix 32-bit binaries {{<gh 2847 >}}
 +* Fix issues with `preserveTaxonomyNames` {{<gh 2809 >}}
 +* Fix `.URL` for taxonomy pages when `uglyURLs=true` {{<gh 2819 >}}
 +* Fix `IsTranslated` and `Translations` for node pages {{<gh 2812 >}}
 +* Make template error messages more verbose {{<gh 2820 >}}
 +
 +## **0.18.0** December 19th 2016
 +
 +Today, we're excited to release the much-anticipated Hugo 0.18!
 +
 +We're heading towards the end of the year 2016, and we can look back on three releases and a steady growing community around the project.
 +This release includes **over 220 contributions by nearly 50 contributors** to the main codebase.
 +Since the last release, Hugo has **gained 1750 stars and 27 additional themes**.
 +
 +Hugo now has:
 +
 +- 13750+ stars
 +- 408+ contributors
 +- 137+ themes
 +
 +{{< gh "@bep" >}} once again took the lead of Hugo and contributed a significant amount of additions.
 +Also a big shoutout to {{< gh "@digitalcraftsman" >}} for his relentless work on keeping the documentation and the themes site in pristine condition,
 +and also a big thanks to {{< gh "@moorereason" >}} and {{< gh "@bogem" >}} for their contributions.
 +
 +We wish you all a Merry Christmas and a Happy New Year.<br>
 +*The Hugo team*
 +
 +### Highlights
 +
 +The primary new feature in Hugo 0.18 is that every piece of content is now a `Page` ({{<gh 2297>}}). This means that every page, including the homepage, can have a content file with front matter.
 +
 +Not only is this a much simpler model to understand, it is also faster and paved the way for several important new features:
 +
 +* Enable proper titles for Nodes {{<gh 1051>}}
 +* Sitemap.xml should include nodes, as well as pages {{<gh 1303>}}
 +* Document homepage content workaround {{<gh 2240>}}
 +* Allow home page to be easily authored in markdown {{<gh 720>}}
 +* Minimalist website with homepage as content {{<gh 330>}}
 +
 +Hugo again continues its trend of each release being faster than the last. It's quite a challenge to consistently add significant new functionality and simultaneously dramatically improve performance. Running [this benchmark]( https://github.com/bep/hugo-benchmark) with [these sites](https://github.com/bep/hugo-benchmark/tree/master/sites) (renders to memory) shows about   60% reduction in time spent and 30% reduction in memory usage compared to Hugo 0.17.
 +
 +### Other New Features
 +
 +* Every `Page` now has a `Kind` property. Since everything is a `Page` now, the `Kind` is used to differentiate different kinds of pages.
 +  Possible values are `page`, `home`, `section`, `taxonomy`, and `taxonomyTerm`.
 +  (Internally, we also define `RSS`, `sitemap`, `robotsTXT`, and `404`, but those have no practical use for end users at the moment since they are not included in any collections.)
 +* Add a `GitInfo` object to `Page` if `enableGitInfo` is set. It then also sets `Lastmod` for the given `Page` to the author date provided by Git. {{<gh 2291>}}
 +* Implement support for alias templates  {{<gh 2533 >}}
 +* New template functions:
 +  * Add `imageConfig` function {{<gh 2677>}}
 +  * Add `sha256` function {{<gh 2762>}}
 +  * Add `partialCached` template function {{<gh 1368>}}
 +* Add shortcode to display Instagram images {{<gh 2690>}}
 +* Add `noChmod` option to disable perm sync {{<gh 2749>}}
 +* Add `quiet` build mode {{<gh 1218>}}
 +
 +
 +### Notices
 +
 +* `.Site.Pages` will now contain *several kinds of pages*, including regular pages, sections, taxonomies, and the home page.
 +  If you want a specific kind of page, you can filter it with `where` and `Kind`.
 +  `.Site.RegularPages` is a shortcut to the page collection you have been used to getting.
 +* `RSSlink` is now deprecated.  Use `RSSLink` instead.
 +  Note that in Hugo 0.17 both of them existed, so there is a fifty-fifty chance you will not have to do anything
 +  (if you use a theme, the chance is close to 0), and `RSSlink` will still work for two Hugo versions.
 +
 +### Fixes
 +
 +* Revise the `base` template lookup logic so it now better matches the behavior of regular templates, making it easier to override the master templates from the theme {{<gh 2783>}}
 +* Add workaround for `block` template crash.
 +  Block templates are very useful, but there is a bug in Go 1.6 and 1.7 which makes the template rendering crash if you use the block template in more complex scenarios.
 +  This is fixed in the upcoming Go 1.8, but Hugo adds a temporary workaround in Hugo 0.18. {{<gh 2549>}}
 +* All the `Params` configurations are now case insensitive {{<gh 1129>}} {{<gh 2590>}} {{<gh 2615>}}
 +* Make RawContent raw again {{<gh 2601>}}
 +* Fix archetype title and date handling {{<gh 2750>}}
 +* Fix TOML archetype parsing in `hugo new` {{<gh 2745>}}
 +* Fix page sorting when weight is zero {{<gh 2673>}}
 +* Fix page names that contain dot {{<gh 2555>}}
 +* Fix RSS Title regression {{<gh 2645>}}
 +* Handle ToC before handling shortcodes {{<gh 2433>}}
 +* Only watch relevant themes dir {{<gh 2602>}}
 +* Hugo new content creates TOML slices with closing bracket on new line {{<gh 2800>}}
 +
 +### Improvements
 +
 +* Add page information to error logging in rendering {{<gh 2570>}}
 +* Deprecate `RSSlink` in favor of `RSSLink`
 +* Make benchmark command more useful {{<gh 2432>}}
 +* Consolidate the `Param` methods {{<gh 2590>}}
 +* Allow to set cache dir in config file
 +* Performance improvements:
 +  * Avoid repeated Viper loads of `sectionPagesMenu` {{<gh 2728>}}
 +  * Avoid reading from Viper for path and URL funcs {{<gh 2495>}}
 +  * Add `partialCached` template function. This can be a significant performance boost if you have complex partials that does not need to be rerendered for every page. {{<gh 1368>}}
 +
 +### Documentation Updates
 +
 +* Update roadmap {{<gh 2666>}}
 +* Update multilingual example {{<gh 2417>}}
 +* Add a "Deployment with rsync" tutorial page {{<gh 2658>}}
 +* Refactor `/docs` to use the `block` keyword {{<gh 2226>}}
index 073b474957b98411747e484466d70af195672cbc,0000000000000000000000000000000000000000..7068020b81e334e8828d1ebd1af4f2627fa8e7cf
mode 100644,000000..100644
--- /dev/null
@@@ -1,83 -1,0 +1,81 @@@
- draft: false
- author: budparr
 +---
 +date: 2017-02-27T13:53:58-04:00
 +categories: ["Releases"]
 +description: "Hugo 0.19 brings native Emacs Org-mode content support, and Hugo has its own Twitter account"
 +link: ""
 +title: "Hugo 0.19"
 +aliases: [/0-19/]
 +---
 +
 +We're happy to announce the first release of Hugo in 2017.
 +
 +This release represents **over 180 contributions by over 50 contributors** to the main Hugo code base. Since last release Hugo has **gained 1450 stars, 35 new contributors, and 15 additional themes.**
 +
 +Hugo now has:
 +
 +* 15200+ stars
 +* 470+ contributors
 +* 151+ themes
 +
 +Furthermore, Hugo has its own Twitter account ([@gohugoio](https://twitter.com/gohugoio)) where we share bite-sized news and themes from the Hugo community.
 +
 +{{< gh "@bep" >}} leads the Hugo development and once again contributed a significant amount of additions. Also a big shoutout to  {{< gh "@chaseadamsio" >}} for the Emacs Org-mode support, {{< gh "@digitalcraftsman" >}} for his relentless work on keeping the documentation and the themes site in pristine condition, {{< gh "@fj" >}}for his work on revising the `params` handling in Hugo, and {{< gh "@moorereason" >}} and {{< gh "@bogem" >}} for their ongoing contributions.
 +
 +### Highlights
 +
 +Hugo `0.19` brings native Emacs Org-mode content support ({{<gh 1483>}}), big thanks to {{< gh "@chaseadamsio" >}}.
 +
 +Also, a considerably amount of work have been put into cleaning up the Hugo source code, in an issue titled [Refactor the globals out of site build](https://github.com/gohugoio/hugo/issues/2701). This is not immediately visible to the Hugo end user, but will speed up future development.
 +
 +Hugo `0.18` was bringing full-parallel page rendering, so workarounds depending on rendering order did not work anymore, and pages with duplicate target paths (common examples would be `/index.md` or `/about/index.md`) would now conflict with the home page or the section listing.
 +
 +With Hugo `0.19`, you can control this behaviour by turning off page types you do not want ({{<gh 2534 >}}). In its most extreme case, if you put the below setting in your [`config.toml`](/getting-started/configuration/), you will get **nothing!**:
 +
 +{{< code-toggle file="config" >}}
 +disableKinds = ["page", "home", "section", "taxonomy", "taxonomyTerm", "RSS", "sitemap", "robotsTXT", "404"]
 +{{< /code-toggle >}}
 +
 +### Other New Features
 +
 +* Add ability to sort pages by front matter parameters, enabling easy custom "top 10" page lists. {{<gh 3022 >}}
 +* Add `truncate` template function {{<gh 2882 >}}
 +* Add `now` function, which replaces the now deprecated `.Now` {{<gh 2859 >}}
 +* Make RSS item limit configurable {{<gh 3035 >}}
 +
 +### Enhancements
 +
 +*  Enhance `.Param` to permit arbitrarily nested parameter references {{<gh 2598 >}}
 +* Use `Page.Params` more consistently when adding metadata {{<gh 3033 >}}
 +* The `sectionPagesMenu` feature ("Section menu for the lazy blogger") is now integrated with the section content pages. {{<gh 2974 >}}
 +* Hugo `0.19` is compiled with Go 1.8!
 +* Make template funcs like `findRE` and friends more liberal in what argument types they accept {{<gh 3018 >}} {{<gh 2822 >}}
 +* Improve generation of OpenGraph date tags {{<gh 2979 >}}
 +
 +### Notes
 +
 +* `sourceRelativeLinks` is now deprecated and will be removed in Hugo `0.21` if  no one is stepping up to the plate and fixes and maintains this feature. {{<gh 3028 >}}
 +
 +### Fixes
 +
 +* Fix `.Site.LastChange` on sites where the default sort order is not chronological. {{<gh 2909 >}}
 +* Fix regression of `.Truncated` evaluation in manual summaries. {{<gh 2989 >}}
 +* Fix `preserveTaxonomyNames` regression {{<gh 3070 >}}
 +* Fix issue with taxonomies when only some have content page {{<gh 2992 >}}
 +* Fix instagram shortcode panic on invalid ID {{<gh 3048 >}}
 +* Fix subtle data race in `getJSON` {{<gh 3045 >}}
 +* Fix deadlock in cached partials {{<gh 2935 >}}
 +* Avoid double-encoding of paginator URLs {{<gh 2177 >}}
 +* Allow tilde in URLs {{<gh 2177 >}}
 +* Fix `.Site.Pages` handling on live reloads {{<gh 2869 >}}
 +* `UniqueID` now correctly uses the fill file path from the content root to calculate the hash, and is finally ... unique!
 +* Discard current language based on `.Lang()`, go get translations correct for paginated pages. {{<gh 2972 >}}
 +* Fix infinite loop in template AST handling for recursive templates  {{<gh 2927 >}}
 +* Fix issue with watching when config loading fails {{<gh 2603 >}}
 +* Correctly flush the imageConfig on live-reload {{<gh 3016 >}}
 +* Fix parsing of TOML arrays in front matter {{<gh 2752 >}}
 +
 +### Docs
 +
 +* Add tutorial "How to use Google Firebase to host a Hugo site" {{<gh 3007 >}}
 +* Improve documentation for menu rendering {{<gh 3056 >}}
 +* Revise GitHub Pages deployment tutorial {{<gh 2930 >}}
index 27e4d48f70446599f620760a310060412b44a627,0000000000000000000000000000000000000000..239230d6bd9cdb615fe2ae20a2e681ce4f3bd12e
mode 100644,000000..100644
--- /dev/null
@@@ -1,72 -1,0 +1,70 @@@
- draft: false
- author: bep
 +---
 +date: 2017-04-10T13:53:58-04:00
 +categories: ["Releases"]
 +description: "Hugo 0.20 introduces the powerful and long sought after feature Custom Output Formats"
 +link: ""
 +title: "Hugo 0.20"
- Hugo `0.20` introduces the powerful and long sought after feature [Custom Output Formats](http://gohugo.io/extras/output-formats/); Hugo isn’t just that “static HTML with an added RSS feed” anymore. _Say hello_ to calendars, e-book formats, Google AMP, and JSON search indexes, to name a few ( [#2828](//github.com/gohugoio/hugo/issues/2828) ).
 +aliases: [/0-20/]
 +---
 +
- [@bep](//github.com/bep) still leads the Hugo development with his witty Norwegian humor, and once again contributed a significant amount of additions. Also a big shoutout to [@digitalcraftsman](//github.com/digitalcraftsman) for his relentless work on keeping the documentation and the themes site in pristine condition, and [@moorereason](//github.com/moorereason) and [@bogem](//github.com/bogem) for their ongoing contributions.
++Hugo `0.20` introduces the powerful and long sought after feature [Custom Output Formats](http://gohugo.io/extras/output-formats/); Hugo isn’t just that “static HTML with an added RSS feed” anymore. _Say hello_ to calendars, e-book formats, Google AMP, and JSON search indexes, to name a few ( [#2828](https://github.com/gohugoio/hugo/issues/2828) ).
 +
 +This release represents **over 180 contributions by over 30 contributors** to the main Hugo code base. Since last release Hugo has **gained 1100 stars, 20 new contributors and 5 additional themes.**
 +
 +Hugo now has:
 +
 +*   16300+ stars
 +*   495+ contributors
 +*   156+ themes
 +
- [@bogem](//github.com/bogem) has also contributed TOML as an alternative and much simpler format for language/i18n files ([#3200](//github.com/gohugoio/hugo/issues/3200)). A feature you will appreciate when you start to work on larger translations.
++[@bep](https://github.com/bep) still leads the Hugo development with his witty Norwegian humor, and once again contributed a significant amount of additions. Also a big shoutout to [@digitalcraftsman](https://github.com/digitalcraftsman) for his relentless work on keeping the documentation and the themes site in pristine condition, and [@moorereason](https://github.com/moorereason) and [@bogem](https://github.com/bogem) for their ongoing contributions.
 +
 +## Other Highlights
 +
- Also, there have been some important updates in the Emacs Org-mode handling: [@chaseadamsio](//github.com/chaseadamsio) has fixed the newline-handling ( [#3126](//github.com/gohugoio/hugo/issues/3126) ) and [@clockoon](//github.com/clockoon) has added basic footnote support.
++[@bogem](https://github.com/bogem) has also contributed TOML as an alternative and much simpler format for language/i18n files ([#3200](https://github.com/gohugoio/hugo/issues/3200)). A feature you will appreciate when you start to work on larger translations.
 +
- Worth mentioning is also the ongoing work that [@rdwatters](//github.com/rdwatters) and [@budparr](//github.com/budparr) is doing to re-do the [gohugo.io](https://gohugo.io/) site, including a total restructuring and partial rewrite of the documentation. It is getting close to finished, and it looks fantastic!
++Also, there have been some important updates in the Emacs Org-mode handling: [@chaseadamsio](https://github.com/chaseadamsio) has fixed the newline-handling ( [#3126](https://github.com/gohugoio/hugo/issues/3126) ) and [@clockoon](https://github.com/clockoon) has added basic footnote support.
 +
- *   Hugo does no longer append missing trailing slash to `baseURL` set as a command line parameter, making it consistent with how it behaves from site config. [#3262](//github.com/gohugoio/hugo/issues/3262)
++Worth mentioning is also the ongoing work that [@rdwatters](https://github.com/rdwatters) and [@budparr](https://github.com/budparr) is doing to re-do the [gohugo.io](https://gohugo.io/) site, including a total restructuring and partial rewrite of the documentation. It is getting close to finished, and it looks fantastic!
 +
 +## Notes
 +
 +*   `RSS` description in the built-in template is changed from full `.Content` to `.Summary`. This is a somewhat breaking change, but is what most people expect from their RSS feeds. If you want full content, please provide your own RSS template.
 +*   The deprecated `.RSSlink` is now removed. Use `.RSSLink`.
 +*   `RSSUri` is deprecated and will be removed in a future Hugo version, replace it with an output format definition.
 +*   The deprecated `.Site.GetParam` is now removed, use `.Site.Param`.
- *   Add `.Site.Params.mainSections` that defaults to the section with the most pages. Plan is to get themes to use this instead of the hardcoded `blog` in `where` clauses. [#3206](//github.com/gohugoio/hugo/issues/3206)
- *   File extension is now configurable. [#320](//github.com/gohugoio/hugo/issues/320)
- *   Improve `markdownify` template function performance. [#3292](//github.com/gohugoio/hugo/issues/3292)
- *   Add taxonomy terms’ pages to `.Data.Pages` [#2826](//github.com/gohugoio/hugo/issues/2826)
++*   Hugo does no longer append missing trailing slash to `baseURL` set as a command line parameter, making it consistent with how it behaves from site config. [#3262](https://github.com/gohugoio/hugo/issues/3262)
 +
 +## Enhancements
 +
 +*   Hugo `0.20` is built with Go 1.8.1.
- *   Ignore “.” dirs in `hugo --cleanDestinationDir` [#3202](//github.com/gohugoio/hugo/issues/3202)
- *   Allow `jekyll import` to accept both `2006-01-02` and `2006-1-2` date format [#2738](//github.com/gohugoio/hugo/issues/2738)
- *   Raise the default `rssLimit` [#3145](//github.com/gohugoio/hugo/issues/3145)
- *   Unify section list vs single template lookup order [#3116](//github.com/gohugoio/hugo/issues/3116)
- *   Allow `apply` to be used with the built-in Go template funcs `print`, `printf` and `println`. [#3139](//github.com/gohugoio/hugo/issues/3139)
++*   Add `.Site.Params.mainSections` that defaults to the section with the most pages. Plan is to get themes to use this instead of the hardcoded `blog` in `where` clauses. [#3206](https://github.com/gohugoio/hugo/issues/3206)
++*   File extension is now configurable. [#320](https://github.com/gohugoio/hugo/issues/320)
++*   Improve `markdownify` template function performance. [#3292](https://github.com/gohugoio/hugo/issues/3292)
++*   Add taxonomy terms’ pages to `.Data.Pages` [#2826](https://github.com/gohugoio/hugo/issues/2826)
 +*   Change `RSS` description from full `.Content` to `.Summary`.
- *   Fix deadlock in `getJSON` [#3211](//github.com/gohugoio/hugo/issues/3211)
- *   Make sure empty terms pages are created. [#2977](//github.com/gohugoio/hugo/issues/2977)
- *   Fix base template lookup order for sections [#2995](//github.com/gohugoio/hugo/issues/2995)
++*   Ignore “.” dirs in `hugo --cleanDestinationDir` [#3202](https://github.com/gohugoio/hugo/issues/3202)
++*   Allow `jekyll import` to accept both `2006-01-02` and `2006-1-2` date format [#2738](https://github.com/gohugoio/hugo/issues/2738)
++*   Raise the default `rssLimit` [#3145](https://github.com/gohugoio/hugo/issues/3145)
++*   Unify section list vs single template lookup order [#3116](https://github.com/gohugoio/hugo/issues/3116)
++*   Allow `apply` to be used with the built-in Go template funcs `print`, `printf` and `println`. [#3139](https://github.com/gohugoio/hugo/issues/3139)
 +
 +## Fixes
 +
-     *   Fix pagination URLs with `baseURL` with sub-root and `canonifyUrls=false` [#1252](//github.com/gohugoio/hugo/issues/1252)
-     *   Fix pagination URL for resources with “.” in name [#2110](//github.com/gohugoio/hugo/issues/2110) [#2374](//github.com/gohugoio/hugo/issues/2374) [#1885](//github.com/gohugoio/hugo/issues/1885)
-     *   Handle taxonomy names with period [#3169](//github.com/gohugoio/hugo/issues/3169)
-     *   Handle `uglyURLs` ambiguity in `Permalink` [#3102](//github.com/gohugoio/hugo/issues/3102)
-     *   Fix `Permalink` for language-roots wrong when `uglyURLs` is `true` [#3179](//github.com/gohugoio/hugo/issues/3179)
-     *   Fix misc case issues for `URLs` [#1641](//github.com/gohugoio/hugo/issues/1641)
-     *   Fix for taxonomies URLs when `uglyUrls=true` [#1989](//github.com/gohugoio/hugo/issues/1989)
-     *   Fix empty `RSSLink` for list pages with content page. [#3131](//github.com/gohugoio/hugo/issues/3131)
- *   Correctly identify regular pages on the form “my_index_page.md” [#3234](//github.com/gohugoio/hugo/issues/3234)
- *   `Exit -1` on `ERROR` in global logger [#3239](//github.com/gohugoio/hugo/issues/3239)
- *   Document hugo `help command` [#2349](//github.com/gohugoio/hugo/issues/2349)
- *   Fix internal `Hugo` version handling for bug fix releases. [#3025](//github.com/gohugoio/hugo/issues/3025)
- *   Only return `RSSLink` for pages that actually have a RSS feed. [#1302](//github.com/gohugoio/hugo/issues/1302)
++*   Fix deadlock in `getJSON` [#3211](https://github.com/gohugoio/hugo/issues/3211)
++*   Make sure empty terms pages are created. [#2977](https://github.com/gohugoio/hugo/issues/2977)
++*   Fix base template lookup order for sections [#2995](https://github.com/gohugoio/hugo/issues/2995)
 +*   `URL` fixes:
++    *   Fix pagination URLs with `baseURL` with sub-root and `canonifyUrls=false` [#1252](https://github.com/gohugoio/hugo/issues/1252)
++    *   Fix pagination URL for resources with “.” in name [#2110](https://github.com/gohugoio/hugo/issues/2110) [#2374](https://github.com/gohugoio/hugo/issues/2374) [#1885](https://github.com/gohugoio/hugo/issues/1885)
++    *   Handle taxonomy names with period [#3169](https://github.com/gohugoio/hugo/issues/3169)
++    *   Handle `uglyURLs` ambiguity in `Permalink` [#3102](https://github.com/gohugoio/hugo/issues/3102)
++    *   Fix `Permalink` for language-roots wrong when `uglyURLs` is `true` [#3179](https://github.com/gohugoio/hugo/issues/3179)
++    *   Fix misc case issues for `URLs` [#1641](https://github.com/gohugoio/hugo/issues/1641)
++    *   Fix for taxonomies URLs when `uglyUrls=true` [#1989](https://github.com/gohugoio/hugo/issues/1989)
++    *   Fix empty `RSSLink` for list pages with content page. [#3131](https://github.com/gohugoio/hugo/issues/3131)
++*   Correctly identify regular pages on the form “my_index_page.md” [#3234](https://github.com/gohugoio/hugo/issues/3234)
++*   `Exit -1` on `ERROR` in global logger [#3239](https://github.com/gohugoio/hugo/issues/3239)
++*   Document hugo `help command` [#2349](https://github.com/gohugoio/hugo/issues/2349)
++*   Fix internal `Hugo` version handling for bug fix releases. [#3025](https://github.com/gohugoio/hugo/issues/3025)
++*   Only return `RSSLink` for pages that actually have a RSS feed. [#1302](https://github.com/gohugoio/hugo/issues/1302)
index 109737bb355b55e763d77fc9b36dd73e2a9ffbc8,0000000000000000000000000000000000000000..9e1a963731dd95487d0aa735449d9a73e733fda9
mode 100644,000000..100644
--- /dev/null
@@@ -1,15 -1,0 +1,13 @@@
- draft: false
- author: bep
 +---
 +date: 2017-04-13T13:53:58-04:00
 +categories: ["Releases"]
 +description: "Hugo 0.20.1 is a bug fix release, fixing some important regressions introduced in 0.20"
 +link: ""
 +title: "Hugo 0.20.1"
- *   Fix logic for base template in work dir vs in the theme [#3323](//github.com/gohugoio/hugo/issues/3323)
- *   camelCased templates (partials, shortcodes etc.) not found [#3333](//github.com/gohugoio/hugo/issues/3333)
- *   Live-reload fails with `_index.md` with paginator [#3315](//github.com/gohugoio/hugo/issues/3315)
- *   `rssURI` WARNING always shown [#3319](//github.com/gohugoio/hugo/issues/3319)
 +aliases: [/0-20-1/]
 +---
 +
++*   Fix logic for base template in work dir vs in the theme [#3323](https://github.com/gohugoio/hugo/issues/3323)
++*   camelCased templates (partials, shortcodes etc.) not found [#3333](https://github.com/gohugoio/hugo/issues/3333)
++*   Live-reload fails with `_index.md` with paginator [#3315](https://github.com/gohugoio/hugo/issues/3315)
++*   `rssURI` WARNING always shown [#3319](https://github.com/gohugoio/hugo/issues/3319)
index 2e67d20eaf95bc1b80d7f7cade57a48f63453876,0000000000000000000000000000000000000000..584a0f78831721ac0dd047d6b154e98cb4555aeb
mode 100644,000000..100644
--- /dev/null
@@@ -1,47 -1,0 +1,45 @@@
- draft: false
- author: bep
 +---
 +date: 2017-04-16T13:53:58-04:00
 +categories: ["Releases"]
 +description: "Hugo 0.20.2 adds support for plain text partials included into HTML templates"
 +link: ""
 +title: "Hugo 0.20.2"
- Hugo `0.20.2` adds support for plain text partials included into `HTML` templates. This was a side-effect of the big new [Custom Output Format](https://gohugo.io/extras/output-formats/) feature in `0.20`, and while the change was intentional and there was an ongoing discussion about fixing it in [#3273](//github.com/gohugoio/hugo/issues/3273), it did break some themes. There were valid workarounds for these themes, but we might as well get it right.
 +aliases: [/0-20-2/]
 +---
 +
-     {{ end }}`
++Hugo `0.20.2` adds support for plain text partials included into `HTML` templates. This was a side-effect of the big new [Custom Output Format](https://gohugo.io/extras/output-formats/) feature in `0.20`, and while the change was intentional and there was an ongoing discussion about fixing it in [#3273](https://github.com/gohugoio/hugo/issues/3273), it did break some themes. There were valid workarounds for these themes, but we might as well get it right.
 +
 +The most obvious use case for this is inline `CSS` styles, which you now can do without having to name your partials with a `html` suffix.
 +
 +A simple example:
 +
 +In `layouts/partials/mystyles.css`:
 +
 +    body {
 +      background-color: {{ .Param "colors.main" }}
 +    }
 +
 +Then in `config.toml` (note that by using the `.Param` lookup func, we can override the color in a page’s front matter if we want):
 +
 +{{< code-toggle file="config" >}}
 +[params]
 +[params.colors]
 +main = "green"
 +text = "blue"
 +{{< /code-toggle >}}
 +
 +And then in `layouts/partials/head.html` (or the partial used to include the head section into your layout):
 +
 +    <head>
 +        <style type="text/css">
 +        {{ partial "mystyles.css" . | safeCSS }}
 +        </style>
 +    </head>
 +
 +Of course, `0.20` also made it super-easy to create external `CSS` stylesheets based on your site and page configuration. A simple example:
 +
 +Add “CSS” to your home page’s `outputs` list, create the template `/layouts/index.css` using Go template syntax for the dynamic parts, and then include it into your `HTML` template with:
 +
 +    {{ with  .OutputFormats.Get "css" }}
 +    <link rel="{{ .Rel }}" type="{{ .MediaType.Type }}" href="{{ .Permalink |  safeURL }}">
++    {{ end }}`
index c79d9b202a0a0a0ac1ae70b74e6236ca22653f8a,0000000000000000000000000000000000000000..77a3511f2fc0e96f32d6d7155f2007d74780cc9f
mode 100644,000000..100644
--- /dev/null
@@@ -1,26 -1,0 +1,24 @@@
- draft: false
- author: bep
 +---
 +date: 2017-04-24T13:53:58-04:00
 +categories: ["Releases"]
 +description: "This is a bug-fix release with one important fix. But it also adds some harness around GoReleaser"
 +link: ""
 +title: "Hugo 0.20.3"
- * Fix handling of zero-length files [9bf5c381](https://github.com/gohugoio/hugo/commit/9bf5c381b6b3e69d4d8dbfd7a40074ac44792bbf) [@bep](https://github.com/bep) [#3355](https://github.com/gohugoio/hugo/issues/3355) 
 +aliases: [/0-20-3/]
 +---
 +
 +This is a bug-fix release with one important fix. But it also adds some harness around [GoReleaser](https://github.com/goreleaser/goreleaser) to automate the Hugo release process. Big thanks to [@caarlos0](https://github.com/caarlos0) for great and super-fast support fixing issues along the way.
 +
 +Hugo now has:
 +
 +* 16619&#43; [stars](https://github.com/gohugoio/hugo/stargazers)
 +* 458&#43; [contributors](https://github.com/gohugoio/hugo/graphs/contributors)
 +* 156&#43; [themes](http://themes.gohugo.io/)
 +
 +## Enhancement
 +
 +* Automate the Hugo release process [550eba64](https://github.com/gohugoio/hugo/commit/550eba64705725eb54fdb1042e0fb4dbf6f29fd0) [@bep](https://github.com/bep) [#3358](https://github.com/gohugoio/hugo/issues/3358) 
 +
 +## Fix
 +
++* Fix handling of zero-length files [9bf5c381](https://github.com/gohugoio/hugo/commit/9bf5c381b6b3e69d4d8dbfd7a40074ac44792bbf) [@bep](https://github.com/bep) [#3355](https://github.com/gohugoio/hugo/issues/3355) 
index 2fde30e14ab1f2abcbcee06464043fb4cb7270c9,0000000000000000000000000000000000000000..59903b8164d0bcd1ec9b985ccc737727987f17b2
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,22 @@@
- draft: false
- author: bep
 +---
 +date: 2017-04-24T17:53:58-04:00
 +categories: ["Releases"]
 +description: "This is the second bug-fix release of the day, fixing a couple of issues related to the new release scripts"
 +link: ""
 +title: "Hugo 0.20.4"
- * Fix version calculation [cb3c6b6f](https://github.com/gohugoio/hugo/commit/cb3c6b6f7670f85189a4a3637e7132901d1ed6e9) [@bep](https://github.com/bep) 
 +aliases: [/0-20-4/]
 +---
 +
 +This is the second bug-fix release of the day, fixing a couple of issues related to the new release scripts.
 +
 +Hugo now has:
 +
 +* 16626&#43; [stars](https://github.com/gohugoio/hugo/stargazers)
 +* 457&#43; [contributors](https://github.com/gohugoio/hugo/graphs/contributors)
 +* 156&#43; [themes](http://themes.gohugo.io/)
 +
 +## Fixes
 +
 +* Fix statically linked binaries [275bcf56](https://github.com/gohugoio/hugo/commit/275bcf566c7cb72367d4423cf4810319311ff680) [@munnerz](https://github.com/munnerz) [#3382](https://github.com/gohugoio/hugo/issues/3382) 
 +* Filename change in Hugo 0.20.3 binaries [#3385](https://github.com/gohugoio/hugo/issues/3385)
++* Fix version calculation [cb3c6b6f](https://github.com/gohugoio/hugo/commit/cb3c6b6f7670f85189a4a3637e7132901d1ed6e9) [@bep](https://github.com/bep) 
index eaed2783289f078489f01ca54d1091396cbb1c00,0000000000000000000000000000000000000000..86a2601613012c62babf8882d425c3fb4ebacdd5
mode 100644,000000..100644
--- /dev/null
@@@ -1,12 -1,0 +1,10 @@@
- draft: false
- author: bep
 +---
 +date: 2017-04-25T17:53:58-04:00
 +categories: ["Releases"]
 +description: ""
 +link: ""
 +title: "Hugo 0.20.5"
- This is a bug-fix release which fixes the version number of `0.20.4` (which wrongly shows up as `0.21-DEV`) ([#3388](https://github.com/gohugoio/hugo/issues/3388)).
 +aliases: [/0-20-5/]
 +---
 +
++This is a bug-fix release which fixes the version number of `0.20.4` (which wrongly shows up as `0.21-DEV`) ([#3388](https://github.com/gohugoio/hugo/issues/3388)).
index 52189092a78b5fbb0f4323747ed58190ad544207,0000000000000000000000000000000000000000..848eb1347670f1a9fa0204f5b952b131a9a10f3e
mode 100644,000000..100644
--- /dev/null
@@@ -1,24 -1,0 +1,22 @@@
- draft: false
- author: bep
 +---
 +date: 2017-04-27T17:53:58-04:00
 +categories: ["Releases"]
 +description: ""
 +link: ""
 +title: "Hugo 0.20.6"
- * Fix some of the fpm fields for deb [3bd1d057](https://github.com/gohugoio/hugo/commit/3bd1d0571d5f2f6bf0dc8f90a8adf2dbfcb2fdfd) [@anthonyfok](https://github.com/anthonyfok) 
 +aliases: [/0-20-6/]
 +---
 +
 +There have been some [shouting on discuss.gohugo.io](https://discuss.gohugo.io/t/index-md-is-generated-in-subfolder-index-index-html-hugo-0-20/6338/15) about some broken sites after the release of Hugo `0.20`. This release reintroduces the old behaviour, making  `/my-blog-post/index.md` work as expected.
 +
 +Hugo now has:
 +
 +* 16675&#43; [stars](https://github.com/gohugoio/hugo/stargazers)
 +* 456&#43; [contributors](https://github.com/gohugoio/hugo/graphs/contributors)
 +* 156&#43; [themes](http://themes.gohugo.io/)
 +
 +## Fixes
 +
 +* Avoid index.md in /index/index.html [#3396](https://github.com/gohugoio/hugo/issues/3396) 
 +* Make missing GitInfo a WARNING [b30ca4be](https://github.com/gohugoio/hugo/commit/b30ca4bec811dbc17e9fd05925544db2b75e0e49) [@bep](https://github.com/bep) [#3376](https://github.com/gohugoio/hugo/issues/3376) 
++* Fix some of the fpm fields for deb [3bd1d057](https://github.com/gohugoio/hugo/commit/3bd1d0571d5f2f6bf0dc8f90a8adf2dbfcb2fdfd) [@anthonyfok](https://github.com/anthonyfok) 
index 50ac365d5b0c50880d7a9e5ca365f4a32ef24275,0000000000000000000000000000000000000000..ff64602349c6dd1cbdbe26555868915e9925f806
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,21 @@@
- draft: false
- author: bep
 +---
 +date: 2017-05-03T17:53:58-04:00
 +categories: ["Releases"]
 +description: "This just fixes an issue with the release scripts, no change in the binaries"
 +link: ""
 +title: "Hugo 0.20.7"
- * Push the tag before goreleaser is run [3682bf52](https://github.com/gohugoio/hugo/commit/3682bf527989e86d9da32d76809306cb576383e8) [@bep](https://github.com/bep) [#3405](https://github.com/gohugoio/hugo/issues/3405) 
 +aliases: [/0-20-7/]
 +---
 +
 +This just fixes an issue with the release scripts, no change in the binaries.
 +
 +
 +Hugo now has:
 +
 +* 16782&#43; [stars](https://github.com/gohugoio/hugo/stargazers)
 +* 458&#43; [contributors](https://github.com/gohugoio/hugo/graphs/contributors)
 +* 156&#43; [themes](http://themes.gohugo.io/)
 +
 +## Fix
 +
++* Push the tag before goreleaser is run [3682bf52](https://github.com/gohugoio/hugo/commit/3682bf527989e86d9da32d76809306cb576383e8) [@bep](https://github.com/bep) [#3405](https://github.com/gohugoio/hugo/issues/3405) 
index aae1fd0b4b878693f7d002ebe0f13b0585eb8316,0000000000000000000000000000000000000000..444b819cbe48f571130fa393ab62e8821d31151e
mode 100644,000000..100644
--- /dev/null
@@@ -1,105 -1,0 +1,103 @@@
- draft: false
- author: bep
 +---
 +date: 2017-05-22T17:53:58-04:00
 +categories: ["Releases"]
 +description: "Hugo 0.21 brings full support for shortcodes per Output Format, the last vital piece of that puzzle"
 +link: ""
 +title: "Hugo 0.21"
- * Skip `.git` directories in file scan [94b5be67](https://github.com/gohugoio/hugo/commit/94b5be67fc73b87d114d94a7bb1a33ab997f30f1) [@bogem](https://github.com/bogem) [#3468](https://github.com/gohugoio/hugo/issues/3468) 
 +aliases: [/0-21/]
 +---
 +
 +Hugo `0.21` brings full support for shortcodes per [Output Format](https://gohugo.io/extras/output-formats/) ([#3220](https://github.com/gohugoio/hugo/issues/3220)), the last vital piece of that puzzle. This is especially useful for `Google AMP` with its many custom media tags.
 +
 +This release represents **126 contributions by 29 contributors** to the main Hugo code base. Since last main release Hugo has **gained 850 stars and 7 additional themes**.
 +
 +Hugo now has:
 +
 +* 17156&#43; [stars](https://github.com/gohugoio/hugo/stargazers)
 +* 457&#43; [contributors](https://github.com/gohugoio/hugo/graphs/contributors)
 +* 163&#43; [themes](http://themes.gohugo.io/)
 +
 +[@bep](https://github.com/bep) leads the Hugo development with a significant amount of contributions, but also a big shoutout to [@moorereason](https://github.com/moorereason), [@bogem](https://github.com/bogem), and [@munnerz](https://github.com/munnerz) for their ongoing contributions. And as always a big thanks to [@digitalcraftsman](https://github.com/digitalcraftsman) for his relentless work on keeping the documentation and the themes site in pristine condition.
 +
 +## Other Highlights
 +
 +On a more technical side, [@moorereason](https://github.com/moorereason) and [@bep](https://github.com/bep) have introduced namespaces for Hugo&#39;s many template funcs ([#3042](https://github.com/gohugoio/hugo/issues/3042) ). There are so many now, and adding more into that big pile would be a sure path toward losing control.  Now they are nicely categorised into namespaces with its own tests and examples, with an API that the documentation site can use to make sure it is correct and up-to-date.
 +
 +## Notes
 +
 +* The deprecated `.Extension`, `.Now` and `.TargetPath` will now `ERROR` [544f0a63](https://github.com/gohugoio/hugo/commit/544f0a6394b0e085d355e8217fc5bb3d96c12a98) [@bep](https://github.com/bep) 
 +* The config settings and flags `disable404`, `disableRSS`, `disableSitemap`, `disableRobotsTXT` are now deprecated. Use `disableKinds`. [5794a265](https://github.com/gohugoio/hugo/commit/5794a265b41ffdeebfd8485eecf65cf4088d49d6) [@bep](https://github.com/bep) [#3345](https://github.com/gohugoio/hugo/issues/3345) 
 +
 +## Enhancements
 +
 +### Templates
 +
 +* Log a WARNING on wrong usage of `IsSet` [38661c17](https://github.com/gohugoio/hugo/commit/38661c17bb8c31c9f31ee18f8eba5e3bfddd5574) [@moorereason](https://github.com/moorereason) [#3092](https://github.com/gohugoio/hugo/issues/3092) 
 +* Add support for ellipsed paginator navigator, making paginators with lots of pages more compact  [b6ea492b](https://github.com/gohugoio/hugo/commit/b6ea492b7a6325d04d44eeb00a990a3a0e29e0c0) [@bep](https://github.com/bep) [#3466](https://github.com/gohugoio/hugo/issues/3466) 
 +* Add support for interfaces to `intersect` [f1c29b01](https://github.com/gohugoio/hugo/commit/f1c29b017bbd88e701cd5151dd186e868672ef89) [@moorereason](https://github.com/moorereason) [#1952](https://github.com/gohugoio/hugo/issues/1952) 
 +* Add `NumFmt` function [93b3b138](https://github.com/gohugoio/hugo/commit/93b3b1386714999d716e03b131f77234248f1724) [@moorereason](https://github.com/moorereason) [#1444](https://github.com/gohugoio/hugo/issues/1444) 
 +* Add template function namespaces [#3418](https://github.com/gohugoio/hugo/issues/3418)  [#3042](https://github.com/gohugoio/hugo/issues/3042)  [@moorereason](https://github.com/moorereason)  [@bep](https://github.com/bep) 
 +* Add translation links to the default sitemap template [90d3fbf1](https://github.com/gohugoio/hugo/commit/90d3fbf1da93a279cfe994a226ae82cf5441deab) [@rayjolt](https://github.com/rayjolt) [#2569](https://github.com/gohugoio/hugo/issues/2569) 
 +* Allow text partials in HTML templates and the other way around [1cf29200](https://github.com/gohugoio/hugo/commit/1cf29200b4bb0a9c006155ec76759b7f4b1ad925) [@bep](https://github.com/bep) [#3273](https://github.com/gohugoio/hugo/issues/3273) 
 +
 +### Output
 +
 +* Refactor site rendering with an &#34;output format context&#34;. In this release, this is used for shortcode handling only, but this paves the way for future niceness [1e4d082c](https://github.com/gohugoio/hugo/commit/1e4d082cf5b92fedbc60b1b4f0e9d1ee6ec45e33) [@bep](https://github.com/bep) [#3397](https://github.com/gohugoio/hugo/issues/3397)  [2bcbf104](https://github.com/gohugoio/hugo/commit/2bcbf104006e0ec03be4fd500f2519301d460f8c) [@bep](https://github.com/bep) [#3220](https://github.com/gohugoio/hugo/issues/3220) 
 +
 +
 +### Core
 +
 +* Handle `shortcode` per `Output Format` [af72db80](https://github.com/gohugoio/hugo/commit/af72db806f2c1c0bf1dfe5832275c41eeba89906) [@bep](https://github.com/bep) [#3220](https://github.com/gohugoio/hugo/issues/3220) 
 +* Improve shortcode error message [58d9cbd3](https://github.com/gohugoio/hugo/commit/58d9cbd31bcf7c296a39860fd7e566d10faaff28) [@bep](https://github.com/bep) 
 +* Avoid `index.md` in `/index/index.html` [fea4fd86](https://github.com/gohugoio/hugo/commit/fea4fd86a324bf9679df23f8289887d91b42e919) [@bep](https://github.com/bep) [#3396](https://github.com/gohugoio/hugo/issues/3396) 
 +* Make missing `GitInfo` a `WARNING` [5ad2f176](https://github.com/gohugoio/hugo/commit/5ad2f17693a9860be76ef8089c8728d2b59d6b04) [@bep](https://github.com/bep) [#3376](https://github.com/gohugoio/hugo/issues/3376) 
 +* Prevent decoding `pageParam` in common cases [e98f885b](https://github.com/gohugoio/hugo/commit/e98f885b8af27f5473a89d31d0b1f02e61e8a5ec) [@bogem](https://github.com/bogem) 
 +* Ignore non-source files on partial rebuild [b5b6e81c](https://github.com/gohugoio/hugo/commit/b5b6e81c0269abf9b0f4bc6a127744a25344e5c6) [@xofyarg](https://github.com/xofyarg) [#3325](https://github.com/gohugoio/hugo/issues/3325) 
 +* Log `WARNING` only on unknown `/data` files [ab692e73](https://github.com/gohugoio/hugo/commit/ab692e73dea3ddfe979c88ee236cc394e47e82f1) [@bep](https://github.com/bep) [#3361](https://github.com/gohugoio/hugo/issues/3361) 
 +* Avoid processing the same notify event twice [3b677594](https://github.com/gohugoio/hugo/commit/3b67759495c9268c30e6ba2d8c7e3b75d52d2960) [@bep](https://github.com/bep) 
 +* Only show `rssURI` deprecation `WARNING` if it is actually set [cfd3af8e](https://github.com/gohugoio/hugo/commit/cfd3af8e691119461effa4385251b9d3818e2291) [@bep](https://github.com/bep) [#3319](https://github.com/gohugoio/hugo/issues/3319) 
 +
 +### Docs
 +
 +* Add documentation on slug translation [635b3bb4](https://github.com/gohugoio/hugo/commit/635b3bb4eb873978c7d52e6c0cb85da0c4d25299) [@xavib](https://github.com/xavib) 
 +* Replace `cdn.mathjax.org` with `cdnjs.cloudflare.com` [4b637ac0](https://github.com/gohugoio/hugo/commit/4b637ac041d17b22187f5ccd0f65461f0065aaa9) [@takuti](https://github.com/takuti) 
 +* Add notes about some output format behaviour [162d3a58](https://github.com/gohugoio/hugo/commit/162d3a586d36cabf6376a76b096fd8b6414487ae) [@jpatters](https://github.com/jpatters) 
 +* Add `txtpen` as alternative commenting service [7cdc244a](https://github.com/gohugoio/hugo/commit/7cdc244a72de4c08edc0008e37aec83d945dccdf) [@rickyhan](https://github.com/rickyhan) 
 +
 +### Other
 +
 +* Embed `Page` in `WeightedPage` [ebf677a5](https://github.com/gohugoio/hugo/commit/ebf677a58360126d8b9a1e98d086aa4279f53181) [@bep](https://github.com/bep) [#3435](https://github.com/gohugoio/hugo/issues/3435) 
 +* Improve the detection of untranslated strings [a40d1f6e](https://github.com/gohugoio/hugo/commit/a40d1f6ed2aedddc99725658993258cd557640ed) [@bogem](https://github.com/bogem) [#2607](https://github.com/gohugoio/hugo/issues/2607) 
 +* Make first letter of the Hugo commands flags&#39; usage lowercase [f0f69d03](https://github.com/gohugoio/hugo/commit/f0f69d03c551acb8ac2eeedaad579cf0b596f9ef) [@bogem](https://github.com/bogem) 
 +* Import `Octopress` image tag in `Jekyll importer` [5f3ad1c3](https://github.com/gohugoio/hugo/commit/5f3ad1c31985450fab8d6772e9cbfcb57cf5cc53) [@buynov](https://github.com/buynov) 
 +
 +## Fixes
 +
 +### Templates
 +
 +*  Do not lower case template names [6d2ea0f7](https://github.com/gohugoio/hugo/commit/6d2ea0f7d7e8a54b8edfc36e52ff74266c30dc27) [@bep](https://github.com/bep) [#3333](https://github.com/gohugoio/hugo/issues/3333) 
 +
 +### Output
 +
 +* Fix output format mixup in example [10287263](https://github.com/gohugoio/hugo/commit/10287263f529181d3169668b044cb84e2e3b049a) [@bep](https://github.com/bep) [#3481](https://github.com/gohugoio/hugo/issues/3481) 
 +* Fix base theme vs project base template logic [077005e5](https://github.com/gohugoio/hugo/commit/077005e514b1ed50d84ceb90c7c72f184cb04521) [@bep](https://github.com/bep) [#3323](https://github.com/gohugoio/hugo/issues/3323) 
 +
 +### Core
 +* Render `404` in default language only [154e18dd](https://github.com/gohugoio/hugo/commit/154e18ddb9ad205055d5bd4827c87f3f0daf499f) [@mitchchn](https://github.com/mitchchn) [#3075](https://github.com/gohugoio/hugo/issues/3075) 
 +* Fix `RSSLink` vs `RSS` `Output Format` [e682fcc6](https://github.com/gohugoio/hugo/commit/e682fcc62233b47cf5bdcaf598ac0657ef089471) [@bep](https://github.com/bep) [#3450](https://github.com/gohugoio/hugo/issues/3450) 
 +* Add default config for `ignoreFiles`, making that option work when running in server mode [42f4ce15](https://github.com/gohugoio/hugo/commit/42f4ce15a9d68053da36f9efcf7a7d975cc59559) [@chaseadamsio](https://github.com/chaseadamsio) 
 +* Fix output formats override when no outputs definition given [6e2f2dd8](https://github.com/gohugoio/hugo/commit/6e2f2dd8d3ca61c92a2ee8824fbf05cadef08425) [@bep](https://github.com/bep) [#3447](https://github.com/gohugoio/hugo/issues/3447) 
 +* Fix handling of zero-length files [0e87b18b](https://github.com/gohugoio/hugo/commit/0e87b18b66d2c8ba9e2abc429630cb03f5b093d6) [@bep](https://github.com/bep) [#3355](https://github.com/gohugoio/hugo/issues/3355) 
 +* Must recreate `Paginator` on live-reload [45c74526](https://github.com/gohugoio/hugo/commit/45c74526686f6a2afa02bcee767d837d6b9dd028) [@bep](https://github.com/bep) [#3315](https://github.com/gohugoio/hugo/issues/3315) 
 +
 +### Docs
 +
 +* Fix incorrect path in `templates/list` [27e88154](https://github.com/gohugoio/hugo/commit/27e88154af2dd9af6d0523d6e67b612e6336f91c) [@MunifTanjim](https://github.com/MunifTanjim) 
 +* Fixed incorrect specification of directory structure [a28fbca6](https://github.com/gohugoio/hugo/commit/a28fbca6dcfa80b6541f5ef6c8c12cd1804ae9ed) [@TejasQ](https://github.com/TejasQ) 
 +* Fix `bash` command in `tutorials/github-pages-blog` [c9976155](https://github.com/gohugoio/hugo/commit/c99761555c014e4d041438d5d7e53a6cbaee4492) [@hansott](https://github.com/hansott) 
 +* Fix `.Data.Pages` range in example [b5e32eb6](https://github.com/gohugoio/hugo/commit/b5e32eb60993b4656918af2c959ae217a68c461e) [@hxlnt](https://github.com/hxlnt) 
 +
 +### Other
 +
 +* Fix data race in live-reload close, avoiding some rare panics [355736ec](https://github.com/gohugoio/hugo/commit/355736ec357c81dfb2eb6851ee019d407090c5ec) [@bep](https://github.com/bep) [#2625](https://github.com/gohugoio/hugo/issues/2625) 
++* Skip `.git` directories in file scan [94b5be67](https://github.com/gohugoio/hugo/commit/94b5be67fc73b87d114d94a7bb1a33ab997f30f1) [@bogem](https://github.com/bogem) [#3468](https://github.com/gohugoio/hugo/issues/3468) 
index fefb501f6475b2346be9b8b9ee49fbb319ab3b13,0000000000000000000000000000000000000000..db8d5de85db6c460fb8f4cd68535fc62623dfe96
mode 100644,000000..100644
--- /dev/null
@@@ -1,89 -1,0 +1,87 @@@
- draft: false
- author: bep
 +---
 +date: 2017-06-12T17:53:58-04:00
 +categories: ["Releases"]
 +description: "Hugo 0.22 brings nested sections, by popular demand and a long sought after feature"
 +link: ""
 +title: "Hugo 0.22"
- * Fix parameter name in `YouTube` shortcode section [37e37877](https://github.com/gohugoio/hugo/commit/37e378773fbc127863f2b7a389d5ce3a14674c73) [@zivbk1](https://github.com/zivbk1) 
 +aliases: [/0-22/]
 +---
 +
 +
 +Hugo `0.22` brings **nested sections**, by popular demand and a long sought after feature ([#465](https://github.com/gohugoio/hugo/issues/465)).  We are still low on documentation for this great feature, but [@bep](https://github.com/bep)  has been kind enough to accompany his implementation with a [demo site](http://hugotest.bep.is/).
 +
 +This release represents **58 contributions by 10 contributors** to the main Hugo code base. Since last release Hugo has **gained 420 stars and 2 additional themes.**
 +
 +[@bep](https://github.com/bep) still leads the Hugo development with his witty Norwegian humor, and once again contributed a significant amount of additions. But also a big shoutout to [@bogem](https://github.com/bogem), [@moorereason](https://github.com/moorereason), and [@onedrawingperday](https://github.com/onedrawingperday) for their ongoing contributions. And as always big thanks to [@digitalcraftsman](https://github.com/digitalcraftsman) for his relentless work on keeping the documentation and the themes site in pristine condition.
 +
 +Hugo now has:
 +
 +* 17576&#43; [stars](https://github.com/gohugoio/hugo/stargazers)
 +* 455&#43; [contributors](https://github.com/gohugoio/hugo/graphs/contributors)
 +* 165&#43; [themes](http://themes.gohugo.io/)
 +
 +## Other Highlights
 +
 +`.Site.GetPage` can now also be used to get regular pages ([#2844](https://github.com/gohugoio/hugo/issues/2844)):
 +
 +```
 +{{ (.Site.GetPage "page" "blog" "mypost.md" ).Title }}
 +```
 +
 +Also, considerable work has been put into writing automated benchmark tests for the site builds, and we&#39;re happy to report that although this release comes with fundamental structural changes, this version is -- in general -- even faster than the previous. It’s quite a challenge to consistently add significant new functionality and simultaneously maintain the stellar performance Hugo is famous for. 
 +
 +
 + 
 +## Notes
 +
 +`.Site.Sections` is replaced. We have reworked how sections work in Hugo, they can now be nested and are no longer taxonomies. If you use the old collection, you should get detailed upgrade instructions in the log when you run `hugo`. For more information, see this [demo site](http://hugotest.bep.is/). 
 +
 +## Enhancements
 +
 +### Templates
 +
 +* Add `uint` support to `In` [b82cd82f](https://github.com/gohugoio/hugo/commit/b82cd82f1198a371ed94bda7faafe22813f4cb29) [@moorereason](https://github.com/moorereason) 
 +* Support interfaces in `union` [204c3a9e](https://github.com/gohugoio/hugo/commit/204c3a9e32fcf6617ede978e35d3e2e89a5b491c) [@moorereason](https://github.com/moorereason) [#3411](https://github.com/gohugoio/hugo/issues/3411) 
 +* Add `uniq` function [e28d9aa4](https://github.com/gohugoio/hugo/commit/e28d9aa42c3429d22fe254e69e4605aaf1e684f3) [@adiabatic](https://github.com/adiabatic) 
 +* Handle `template.HTML` and friends in `ToInt` [4113693a](https://github.com/gohugoio/hugo/commit/4113693ac1b275f3a40aa5c248269340ef9b57f6) [@moorereason](https://github.com/moorereason) [#3308](https://github.com/gohugoio/hugo/issues/3308) 
 +
 +
 +### Core
 +
 +* Make the `RSS feed` use the date for the node it represents [f1da5a15](https://github.com/gohugoio/hugo/commit/f1da5a15a37666ee59350d6600a8c14c1383f5bc) [@bep](https://github.com/bep) [#2708](https://github.com/gohugoio/hugo/issues/2708) 
 +* Enable `nested sections` [b3968939](https://github.com/gohugoio/hugo/commit/b39689393ccb8434d9a57658a64b77568c718e99) [@bep](https://github.com/bep) [#465](https://github.com/gohugoio/hugo/issues/465) 
 +* Add test for &#34;no 404&#34; in `sitemap` [8aaec644](https://github.com/gohugoio/hugo/commit/8aaec644a90d09bd7f079d35d382f76bb4ed35db) [@bep](https://github.com/bep) [#3563](https://github.com/gohugoio/hugo/issues/3563) 
 +* Support regular pages in `.Site.GetPage` [e0c2e798](https://github.com/gohugoio/hugo/commit/e0c2e798201f75ae6e9a81a7442355288c2d141b) [@bep](https://github.com/bep) [#2844](https://github.com/gohugoio/hugo/issues/2844) 
 +[#3082](https://github.com/gohugoio/hugo/issues/3082) 
 +
 +### Performance
 +* Add site building benchmarks [8930e259](https://github.com/gohugoio/hugo/commit/8930e259d78cba4041b550cc51a7f40bc91d7c20) [@bep](https://github.com/bep) [#3535](https://github.com/gohugoio/hugo/issues/3535) 
 +* Add a cache to `GetPage` which makes it much faster [50d11138](https://github.com/gohugoio/hugo/commit/50d11138f3e18b545c15fadf52f7b0b744bf3e7c) [@bep](https://github.com/bep) 
 +* Speed up `GetPage` [fbb78b89](https://github.com/gohugoio/hugo/commit/fbb78b89df8ccef8f0ab26af00aa45d35c1ee2cf) [@bep](https://github.com/bep) [#3503](https://github.com/gohugoio/hugo/issues/3503) 
 +* Add BenchmarkFrontmatterTags [3d9c4f51](https://github.com/gohugoio/hugo/commit/3d9c4f513b0443648d7e88995e351df1739646d2) [@bep](https://github.com/bep) [#3464](https://github.com/gohugoio/hugo/issues/3464) 
 +* Add `benchSite.sh` to make it easy to run Hugo performance benchmarks [d74452cf](https://github.com/gohugoio/hugo/commit/d74452cfe8f69a85ec83e05481e16bebf199a5cb) [@bep](https://github.com/bep) 
 +* Cache language config [4aff2b6e](https://github.com/gohugoio/hugo/commit/4aff2b6e7409a308f30cff1825fec02991e0d56a) [@bep](https://github.com/bep) 
 +* Temporarily revert to BurntSushi for `TOML` front matter handling; it is currently much faster [0907a5c1](https://github.com/gohugoio/hugo/commit/0907a5c1c293755e6bf297246f07888448d81f8b) [@bep](https://github.com/bep) [#3541](https://github.com/gohugoio/hugo/issues/3541) [#3464](https://github.com/gohugoio/hugo/issues/3464) 
 +* Add a simple partitioned lazy cache [87203139](https://github.com/gohugoio/hugo/commit/87203139c38e0b992c96d7b8a23c7730649c68e5) [@bep](https://github.com/bep) 
 +
 +### Other
 +
 +* Add `noindex` tag to HTML generated by Hugo aliases [d5ab7f08](https://github.com/gohugoio/hugo/commit/d5ab7f087d967b30e7de7d789e6ad3091b42f1f7) [@onedrawingperday](https://github.com/onedrawingperday) 
 +* Update Go versions [bde807bd](https://github.com/gohugoio/hugo/commit/bde807bd1e560fb4cc765c0fc22132db7f8a0801) [@bep](https://github.com/bep) 
 +* Remove the `rlimit` tweaking on `macOS` [bcd32f10](https://github.com/gohugoio/hugo/commit/bcd32f1086c8c604fb22a7496924e41cc46b1605) [@bep](https://github.com/bep) [#3512](https://github.com/gohugoio/hugo/issues/3512) 
 +
 +### Docs
 +* Rewrite “Archetypes” article [@davidturnbull](https://github.com/davidturnbull) [#3543](https://github.com/gohugoio/hugo/pull/3543/) 
 +* Remove Unmaintained Frontends from Tools. [f41f7282](https://github.com/gohugoio/hugo/commit/f41f72822251c9a31031fd5b3dda585c57c8b028) [@onedrawingperday](https://github.com/onedrawingperday) 
 +
 +## Fixes
 +
 +### Core
 +* Improve `live-reload` on directory structure changes making removal of directories or pasting new content directories into  `/content` just work [fe901b81](https://github.com/gohugoio/hugo/commit/fe901b81191860b60e6fcb29f8ebf87baef2ee79) [@bep](https://github.com/bep) [#3570](https://github.com/gohugoio/hugo/issues/3570) 
 +* Respect `disableKinds=[&#34;sitemap&#34;]` [69d92dc4](https://github.com/gohugoio/hugo/commit/69d92dc49cb8ab9276ab013d427ba2d9aaf9135d) [@bep](https://github.com/bep) [#3544](https://github.com/gohugoio/hugo/issues/3544) 
 +* Fix `disablePathToLower` regression [5be04486](https://github.com/gohugoio/hugo/commit/5be0448635fdf5fe6b1ee673e869f2b9baf1a5c6) [@bep](https://github.com/bep) [#3374](https://github.com/gohugoio/hugo/issues/3374) 
 +* Fix `ref`/`relref` issue with duplicate base filenames [612f6e3a](https://github.com/gohugoio/hugo/commit/612f6e3afe0510c31f70f3621f3dc8ba609dade4) [@bep](https://github.com/bep) [#2507](https://github.com/gohugoio/hugo/issues/2507) 
 +
 +### Docs
 +
++* Fix parameter name in `YouTube` shortcode section [37e37877](https://github.com/gohugoio/hugo/commit/37e378773fbc127863f2b7a389d5ce3a14674c73) [@zivbk1](https://github.com/zivbk1) 
index ceb207d70d13a3447a23bd52e11bac7a66fde407,0000000000000000000000000000000000000000..3b076fd0bc56e6c97614db1fdeaea32ca6948ed7
mode 100644,000000..100644
--- /dev/null
@@@ -1,37 -1,0 +1,35 @@@
- draft: false
- author: bep
 +---
 +date: 2017-06-13T17:53:58-04:00
 +categories: ["Releases"]
 +description: "Hugo 0.22.1 fixes a couple of issues reported after the 0.22 release"
 +link: ""
 +title: "Hugo 0.22.1"
- * Revert: Remove the rlimit tweaking on macOS [26aa06a3](https://github.com/gohugoio/hugo/commit/26aa06a3db57ab7134a900d641fa2976f7971520) [@bep](https://github.com/bep) [#3582](https://github.com/gohugoio/hugo/issues/3582)
 +aliases: [/0-22-1/]
 +---
 +
 +Hugo `0.22.1` fixes a couple of issues reported after the [0.22 release](https://github.com/gohugoio/hugo/releases/tag/v0.22) Monday. Most importantly a fix for detecting regular subfolders below the root-sections.
 +
 +Also, we forgot to adapt the `permalink settings` with support for nested sections, which made that feature less useful than it could be.
 +
 +With this release you can configure **permalinks with sections** like this:
 +
 +**First level only:**
 +
 +```
 +[permalinks]
 +blog = ":section/:title"
 +```
 +
 +**Nested (all levels):**
 +
 +```
 +[permalinks]
 +blog = ":sections/:title"
 +```
 +## Fixes
 +
 +* Fix section logic for root folders with subfolders [a30023f5](https://github.com/gohugoio/hugo/commit/a30023f5cbafd06034807255181a5b7b17f3c25f) [@bep](https://github.com/bep) [#3586](https://github.com/gohugoio/hugo/issues/3586) 
 +* Support sub-sections in permalink settings [1f26420d](https://github.com/gohugoio/hugo/commit/1f26420d392a5ab4c7b7fe1911c0268b45d01ab8) [@bep](https://github.com/bep) [#3580](https://github.com/gohugoio/hugo/issues/3580) 
 +* Adjust rlimit to 64000 [ff54b6bd](https://github.com/gohugoio/hugo/commit/ff54b6bddcefab45339d8dc2b13776b92bdc04b9) [@bep](https://github.com/bep) [#3582](https://github.com/gohugoio/hugo/issues/3582) 
 +* Make error on setting rlimit a warning only [629e1439](https://github.com/gohugoio/hugo/commit/629e1439e819a7118ae483381d4634f16d3474dd) [@bep](https://github.com/bep) [#3582](https://github.com/gohugoio/hugo/issues/3582) 
++* Revert: Remove the rlimit tweaking on macOS [26aa06a3](https://github.com/gohugoio/hugo/commit/26aa06a3db57ab7134a900d641fa2976f7971520) [@bep](https://github.com/bep) [#3582](https://github.com/gohugoio/hugo/issues/3582)
index fdf6e9e73e48c1466044968746993f5736467b6a,0000000000000000000000000000000000000000..e0e500d3867e36fcdbd337f266667a9ce4e23686
mode 100644,000000..100644
--- /dev/null
@@@ -1,46 -1,0 +1,44 @@@
- draft: false
- author: bep
 +---
 +date: 2017-06-16T17:53:58-04:00
 +categories: ["Releases"]
 +description: "Hugo 0.23 is mainly a release that handles all the small changes needed to get Hugo moved to a GitHub organisation"
 +link: ""
 +title: "Hugo 0.23"
- * Update import paths to gohugoio/hugo [d8717cd4](https://github.com/gohugoio/hugo/commit/d8717cd4c74e80ea8e20adead9321412a2d76022) [@bep](https://github.com/bep) 
 +aliases: [/0-23/]
 +---
 +
 +Hugo `0.23` is mainly a release that handles all the small changes needed to get Hugo moved to a GitHub organisation: [gohugoio](https://github.com/gohugoio), but it also contains a couple of important fixes that makes this an update worth-while for all.
 +
 +Hugo now has:
 +
 +* 17739&#43; [stars](https://github.com/gohugoio/hugo/stargazers)
 +* 494&#43; [contributors](https://github.com/gohugoio/hugo/graphs/contributors)
 +* 165&#43; [themes](http://themes.gohugo.io/)
 +
 +## Fixes
 +
 +* Fix handling of duplicate footnotes [a9e551a1](https://github.com/gohugoio/hugo/commit/a9e551a100e60a603210ee083103dd73369d6a98) [@bep](https://github.com/bep) [#1912](https://github.com/gohugoio/hugo/issues/1912) 
 +*  Add support for spaces in project folder for `GitInfo` #3533 #3552
 +
 +## GitHub organisation related changes
 +
 +* Update layout references to gohugoio/hugo [66d4850b](https://github.com/gohugoio/hugo/commit/66d4850b89db293dc58e828de784037f06c6c8dc) [@bep](https://github.com/bep) 
 +* Update content references to gohugoio/hugo [715ff1f8](https://github.com/gohugoio/hugo/commit/715ff1f87406edf27738c8c0f52fe185fa974ee8) [@bep](https://github.com/bep) 
 +* Add note on updates for rpm-based distros [52a0cea6](https://github.com/gohugoio/hugo/commit/52a0cea65de7b75ae1662abe3dec36fca3604617) [@daftaupe](https://github.com/daftaupe) 
 +* Update logo link in README [ccb8300d](https://github.com/gohugoio/hugo/commit/ccb8300d380636d75a39f4133284eb0109e836c3) [@bep](https://github.com/bep) 
 +* Remove docs building from CI builds [214dbdfb](https://github.com/gohugoio/hugo/commit/214dbdfb6f016d21415bc1ed511a37a084238878) [@bep](https://github.com/bep) 
 +* Adjust docs path [729be807](https://github.com/gohugoio/hugo/commit/729be8074bddb58c9111f32c55cc769e49cd0d5a) [@bep](https://github.com/bep) 
 +* Add docs as submodule [6cee0dfe](https://github.com/gohugoio/hugo/commit/6cee0dfe53899d433afc3c173a87d56265904cb0) [@bep](https://github.com/bep) 
 +* Update Gitter link in README [fbb25014](https://github.com/gohugoio/hugo/commit/fbb25014e1306ce7127d53e5fc4fc49867790336) [@bep](https://github.com/bep) 
 +* Change Windows build badge link, take #3 [86543d6a](https://github.com/gohugoio/hugo/commit/86543d6a50251b40540ebd0b851d45eb99d017c7) [@bep](https://github.com/bep) 
 +* Update Windows build link [e6ae32a0](https://github.com/gohugoio/hugo/commit/e6ae32a0ba75b9894418227e87391defbb1b3b49) [@bep](https://github.com/bep) 
 +* Update links in CONTRIBUTING.md due to the org transition [95386544](https://github.com/gohugoio/hugo/commit/95386544e858949a2baa414f395f30aaf66a6257) [@digitalcraftsman](https://github.com/digitalcraftsman) 
 +* Update source path in Dockerfile due to the org transition [7b99fb9f](https://github.com/gohugoio/hugo/commit/7b99fb9f1ca8381457afe9d8e953a388b8ada182) [@digitalcraftsman](https://github.com/digitalcraftsman) 
 +* Update clone folder in appveyor.yml due to the org transition [d531d17b](https://github.com/gohugoio/hugo/commit/d531d17b3be0b14faf4934611e01ac3289e37835) [@digitalcraftsman](https://github.com/digitalcraftsman) 
 +* Update import path in snapcraft.yaml due to the org transition [9266bf9d](https://github.com/gohugoio/hugo/commit/9266bf9d4c24592b875a7f6b92f761b4cea40879) [@digitalcraftsman](https://github.com/digitalcraftsman) 
 +* Run gofmt to get imports in line vs gohugoio/hugo [873a6f18](https://github.com/gohugoio/hugo/commit/873a6f18851bcda79d562ff6c02e1109e8e31a88) [@bep](https://github.com/bep) 
 +* Update Makefile vs gohugoio/hugo [f503d76a](https://github.com/gohugoio/hugo/commit/f503d76a3b2719bbb65ab9df5595d0dbc871fae9) [@bep](https://github.com/bep) 
 +* Update README to point to gohugoio/hugo [93643860](https://github.com/gohugoio/hugo/commit/93643860c9db10c6c32176b17cc83f1c317279bd) [@bep](https://github.com/bep) 
 +* Update examples to point to gohugoio/hugo [db46bcf8](https://github.com/gohugoio/hugo/commit/db46bcf82d060656d4bc731550e63ec9cf8576f2) [@bep](https://github.com/bep) 
 +* Update textual references in Go source to point to gohugoio/hugo [c17ad675](https://github.com/gohugoio/hugo/commit/c17ad675e8fcdb2db40fc50816b8f016bc14294c) [@bep](https://github.com/bep) 
++* Update import paths to gohugoio/hugo [d8717cd4](https://github.com/gohugoio/hugo/commit/d8717cd4c74e80ea8e20adead9321412a2d76022) [@bep](https://github.com/bep) 
index ec71e246fe8dea29a8703a401185b27a5aa10b7d,0000000000000000000000000000000000000000..458b9dded0a6446bd6ce1614cd8d90653d7a84c9
mode 100644,000000..100644
--- /dev/null
@@@ -1,74 -1,0 +1,72 @@@
- draft: false
- author: bep
 +---
 +date: 2017-06-17T17:53:58-04:00
 +categories: ["Releases"]
 +description: "The Revival of the Archetypes!"
 +link: ""
 +title: "Hugo 0.24"
- * Fix handling of quoted brackets in `JSON` front matter [3183b9a2](https://github.com/gohugoio/hugo/commit/3183b9a29d8adac962fbc73f79b04542f4c4c55d) [@bep](https://github.com/bep) [#3511](https://github.com/gohugoio/hugo/issues/3511) 
 +aliases: [/0-24/]
 +---
 +
 +> "A feature that could be the name of the next Indiana Jones movie deserves its own release," says [@bep](https://github.com/bep).
 +
 +Hugo now handles the **archetype files as Go templates**. This means that the issues with sorting and lost comments are long gone. This also means that you will have to supply all values, including title and date. But this also opens up a lot of new windows.
 +
 +A fictional example for the section `newsletter` and the archetype file `archetypes/newsletter.md`:
 +
 +```
 +---
 +title: "{{ replace .TranslationBaseName "-" " " | title }}"
 +date: {{ .Date }}
 +draft: true
 +---
 +
 +**Insert Lead paragraph here.**
 +
 +<!--more-->
 +
 +## New Cool Posts
 +
 +{{ range first 10 ( where .Site.RegularPages "Type" "cool" ) }}
 +* {{ .Title }}
 +{{ end }}
 +```
 +
 +And then create a new post with:
 +
 +```
 +hugo new newsletter/the-latest-cool.stuff.md
 +```
 +
 +**Note:** the site will only be built if the `.Site` is in use in the archetype file, and this can be time consuming for big sites.
 +
 +**Hot Tip:** If you set the `newContentEditor` configuration variable to an editor on your `PATH`, the newly created article will be opened.
 +
 +The above _newsletter type archetype_ illustrates the possibilities: The full Hugo `.Site` and all of Hugo&#39;s template funcs can be used in the archetype file.
 +
 +**Also, Hugo now supports archetype files for all content formats, not just markdown.**
 +
 +Hugo now has:
 +
 +* 17839&#43; [stars](https://github.com/gohugoio/hugo/stargazers)
 +* 493&#43; [contributors](https://github.com/gohugoio/hugo/graphs/contributors)
 +* 166&#43; [themes](http://themes.gohugo.io/)
 +
 +## Notes
 +
 +* Archetype files now need to be complete, including `title` and `date`.
 +* The `-f` (format) flag in `hugo new` is removed: Now use the archetype files as is.
 +
 +## Enhancements
 +
 +* Support extension-less media types. The motivation behind this change is to support Netlify&#39;s `_redirects` files, so we can generate server-side redirects for the Hugo docs site. See [this commit](https://github.com/gohugoio/hugoDocs/commit/c1ab9894e8292e0a74c43bbca2263b1fb3840f9e) to see how we configured that. [0f40e1fa](https://github.com/gohugoio/hugo/commit/0f40e1fadfca2276f65adefa6d7d5d63aef9160a) [@bep](https://github.com/bep) [#3614](https://github.com/gohugoio/hugo/issues/3614) 
 +* Add `disableAliases` [516e6c6d](https://github.com/gohugoio/hugo/commit/516e6c6dc5733cdaf985317d58eedbc6ec0ef2f7) [@bep](https://github.com/bep) [#3613](https://github.com/gohugoio/hugo/issues/3613) 
 +* Support non-md files as archetype files [19f2e729](https://github.com/gohugoio/hugo/commit/19f2e729135af700c5d4aa06e7b3540e6d4847fd) [@bep](https://github.com/bep) [#3597](https://github.com/gohugoio/hugo/issues/3597) [#3618](https://github.com/gohugoio/hugo/issues/3618) 
 +* Identify extension-less text types as text [c43b512b](https://github.com/gohugoio/hugo/commit/c43b512b4700f76ac77f12d632bb030c3a241393) [@bep](https://github.com/bep) [#3614](https://github.com/gohugoio/hugo/issues/3614) 
 +* Add `.Site` to the archetype templates [662e12f3](https://github.com/gohugoio/hugo/commit/662e12f348a638a6fcc92a416ee7f7c2a7ef8792) [@bep](https://github.com/bep) [#1629](https://github.com/gohugoio/hugo/issues/1629) 
 +* Use archetype template as-is as a Go template [422057f6](https://github.com/gohugoio/hugo/commit/422057f60709696bbbd1c38c9ead2bf114d47e31) [@bep](https://github.com/bep) [#452](https://github.com/gohugoio/hugo/issues/452) [#1629](https://github.com/gohugoio/hugo/issues/1629) 
 +* Update links to new discuss URL [4aa12390](https://github.com/gohugoio/hugo/commit/4aa1239070bb9d4324d3582f3e809b702a59d3ac) [@bep](https://github.com/bep) 
 +
 +## Fixes
 +
 +* Fix error handling for `JSON` front matter [fb53987a](https://github.com/gohugoio/hugo/commit/fb53987a4ff2acb9da8dec6ec7b11924d37352ce) [@bep](https://github.com/bep) [#3610](https://github.com/gohugoio/hugo/issues/3610) 
++* Fix handling of quoted brackets in `JSON` front matter [3183b9a2](https://github.com/gohugoio/hugo/commit/3183b9a29d8adac962fbc73f79b04542f4c4c55d) [@bep](https://github.com/bep) [#3511](https://github.com/gohugoio/hugo/issues/3511) 
index 2ec2cef55f388aa8bc6037b9d37b595ba2e4d19d,0000000000000000000000000000000000000000..19e69ce0a28b145e7c2e17e61011b897d0de4740
mode 100644,000000..100644
--- /dev/null
@@@ -1,22 -1,0 +1,20 @@@
- draft: false
- author: bep
 +---
 +date: 2017-06-24T17:53:58-04:00
 +categories: ["Releases"]
 +description: "This release fixes some important archetype-related regressions from Hugo 0.24"
 +link: ""
 +title: "Hugo 0.24.1"
- * Create default archetype on new site [bfa336d9](https://github.com/gohugoio/hugo/commit/bfa336d96173377b9bbe2298dbd101f6a718c174) [@bep](https://github.com/bep) [#3626](https://github.com/gohugoio/hugo/issues/3626) 
 +aliases: [/0-24-1/]
 +---
 +
 +This release fixes some important **archetype-related regressions** from the recent Hugo 0.24-release.
 +
 +## Fixes
 +
 +* Fix archetype regression when no archetype file [4294dd8d](https://github.com/gohugoio/hugo/commit/4294dd8d9d22bd8107b7904d5389967da1f83f27) [@bep](https://github.com/bep) [#3626](https://github.com/gohugoio/hugo/issues/3626) 
 +* Preserve shortcodes in archetype templates [b63e4ee1](https://github.com/gohugoio/hugo/commit/b63e4ee198c875b73a6a9af6bb809589785ed589) [@bep](https://github.com/bep) [#3623](https://github.com/gohugoio/hugo/issues/3623) 
 +* Fix handling of timezones with positive UTC offset (e.g., +0800) in TOML [0744f81e](https://github.com/gohugoio/hugo/commit/0744f81ec00bb8888f59d6c8b5f57096e07e70b1) [@bep](https://github.com/bep) [#3628](https://github.com/gohugoio/hugo/issues/3628) 
 +
 +## Enhancements
 +
++* Create default archetype on new site [bfa336d9](https://github.com/gohugoio/hugo/commit/bfa336d96173377b9bbe2298dbd101f6a718c174) [@bep](https://github.com/bep) [#3626](https://github.com/gohugoio/hugo/issues/3626) 
index 9527c911a9ea25be9a9660ec6f0f39ca23cb003d,0000000000000000000000000000000000000000..6ceef445d31e174c65e274d269ec8f11283f941c
mode 100644,000000..100644
--- /dev/null
@@@ -1,78 -1,0 +1,76 @@@
- draft: false
- author: bep
 +---
 +date: 2017-07-07T17:53:58-04:00
 +categories: ["Releases"]
 +description: "Hugo 0.25 automatically opens the page you&#39;re working on in the browser"
 +link: ""
 +title: "Hugo 0.25"
- * Fix typo in code comment [56d82aa0](https://github.com/gohugoio/hugo/commit/56d82aa025f4d2edb1dc6315132cd7ab52df649a) [@dvic](https://github.com/dvic) 
 +aliases: [/0-25/]
 +---
 +
 +Hugo `0.25` is the **Kinder Surprise**: It automatically opens the page you&#39;re working on in the browser, it adds full `AND` and `OR` support in page queries, and you can now have templates per language.
 +
 +![Hugo Open on Save](https://cdn-standard5.discourse.org/uploads/gohugo/optimized/2X/6/622088d4a8eacaf62bbbaa27dab19d789e10fe09_1_690x345.gif "Hugo Open on Save")
 +
 +If you start with `hugo server --navigateToChanged`, Hugo will navigate to the relevant page on save (see animated GIF). This is extremely useful for site-wide edits. Another very useful feature in this version is the added support for `AND` (`intersect`)  and `OR` (`union`)  filters when combined with `where`.
 +
 +Example:
 +
 +```
 +{{ $pages := where .Site.RegularPages "Type" "not in" (slice "page" "about") }}
 +{{ $pages := $pages | union (where .Site.RegularPages "Params.pinned" true) }}
 +{{ $pages := $pages | intersect (where .Site.RegularPages "Params.images" "!=" nil) }}
 +```
 +
 +The above fetches regular pages not of `page` or `about` type unless they are pinned. And finally, we exclude all pages with no `images` set in Page params.
 +
 +This release represents **36 contributions by 12 contributors** to the main Hugo code base. [@bep](https://github.com/bep) still leads the Hugo development with his witty Norwegian humor, and once again contributed a significant amount of additions. But also a big shoutout to [@yihui](https://github.com/yihui), [@anthonyfok](https://github.com/anthonyfok), and [@kropp](https://github.com/kropp) for their ongoing contributions. And as always a big thanks to [@digitalcraftsman](https://github.com/digitalcraftsman) for his relentless work on keeping the documentation and the themes site in pristine condition.
 +
 +Hugo now has:
 +
 +* 18209&#43; [stars](https://github.com/gohugoio/hugo/stargazers)
 +* 455&#43; [contributors](https://github.com/gohugoio/hugo/graphs/contributors)
 +* 168&#43; [themes](http://themes.gohugo.io/)
 +
 +## Enhancements
 +
 +### Templates
 +
 +* Add `Pages` support to `intersect` (`AND`) and `union`(`OR`). This makes the `where` template func even more powerful. [ccdd08d5](https://github.com/gohugoio/hugo/commit/ccdd08d57ab64441e93d6861ae126b5faacdb92f) [@bep](https://github.com/bep) [#3174](https://github.com/gohugoio/hugo/issues/3174)
 +* Add `math.Log` function. This is very handy for creating tag clouds. [34c56677](https://github.com/gohugoio/hugo/commit/34c566773a1364077e1397daece85b22948dc721) [@artem-sidorenko](https://github.com/artem-sidorenko) 
 +* Add `WebP` images support [8431c8d3](https://github.com/gohugoio/hugo/commit/8431c8d39d878c18c6b5463d9091a953608df10b) [@bep](https://github.com/bep) [#3529](https://github.com/gohugoio/hugo/issues/3529)
 +* Only show post&#39;s own keywords in schema.org [da72805a](https://github.com/gohugoio/hugo/commit/da72805a4304a57362e8e79a01cc145767b027c5) [@brunoamaral](https://github.com/brunoamaral) [#2635](https://github.com/gohugoio/hugo/issues/2635)[#2646](https://github.com/gohugoio/hugo/issues/2646)
 +* Simplify the `Disqus` template a little bit (#3655) [eccb0647](https://github.com/gohugoio/hugo/commit/eccb0647821e9db20ba9800da1b4861807cc5205) [@yihui](https://github.com/yihui) 
 +* Improve the built-in Disqus template (#3639) [2e1e4934](https://github.com/gohugoio/hugo/commit/2e1e4934b60ce8081a7f3a79191ed204f3098481) [@yihui](https://github.com/yihui) 
 +
 +### Output
 +
 +* Support templates per site/language. This is for both regular templates and shortcode templates. [aa6b1b9b](https://github.com/gohugoio/hugo/commit/aa6b1b9be7c9d7322333893b642aaf8c7a5f2c2e) [@bep](https://github.com/bep) [#3360](https://github.com/gohugoio/hugo/issues/3360)
 +
 +### Core
 +
 +* Extend the sections API [a1d260b4](https://github.com/gohugoio/hugo/commit/a1d260b41a6673adef679ec4e262c5f390432cf5) [@bep](https://github.com/bep) [#3591](https://github.com/gohugoio/hugo/issues/3591)
 +* Make `.Site.Sections` return the top level sections [dd9b1baa](https://github.com/gohugoio/hugo/commit/dd9b1baab0cb860a3eb32fd9043bac18cab3f9f0) [@bep](https://github.com/bep) [#3591](https://github.com/gohugoio/hugo/issues/3591)
 +* Render `404.html` for all languages [41805dca](https://github.com/gohugoio/hugo/commit/41805dca9e40e9b0952e04d06074e6fc91140495) [@mitchchn](https://github.com/mitchchn) [#3598](https://github.com/gohugoio/hugo/issues/3598)
 +
 +### Other
 +
 +* Support human-readable `YAML` boolean values in `undraft` [1039356e](https://github.com/gohugoio/hugo/commit/1039356edf747f044c989a5bc0e85d792341ed5d) [@kropp](https://github.com/kropp) 
 +* `hugo import jekyll` support nested `_posts` directories [7ee1f25e](https://github.com/gohugoio/hugo/commit/7ee1f25e9ef3be8f99c171e8e7982f4f82c13e16) [@coderzh](https://github.com/coderzh) [#1890](https://github.com/gohugoio/hugo/issues/1890)[#1911](https://github.com/gohugoio/hugo/issues/1911)
 +* Update `Dockerfile` and add Docker optimizations [118f8f7c](https://github.com/gohugoio/hugo/commit/118f8f7cf22d756d8a894ff93551974a806f2155) [@ellerbrock](https://github.com/ellerbrock) 
 +* Add Blackfriday `joinLines` extension support (#3574) [a5440496](https://github.com/gohugoio/hugo/commit/a54404968a4b36579797f2e7ff7f5eada94866d9) [@choueric](https://github.com/choueric) 
 +* add `--initial-header-level=2` to rst2html (#3528) [bfce30d8](https://github.com/gohugoio/hugo/commit/bfce30d85972c27c27e8a2caac9db6315f813298) [@frankbraun](https://github.com/frankbraun) 
 +* Support open "current content page" in browser [c825a731](https://github.com/gohugoio/hugo/commit/c825a7312131b4afa67ee90d593640dee3525d98) [@bep](https://github.com/bep) [#3643](https://github.com/gohugoio/hugo/issues/3643)
 +* Make `--navigateToChanged` more robust on Windows [30e14cc3](https://github.com/gohugoio/hugo/commit/30e14cc31678ddc204b082ab362f86b6b8063881) [@anthonyfok](https://github.com/anthonyfok) [#3645](https://github.com/gohugoio/hugo/issues/3645)
 +* Remove the docs submodule [31393f60](https://github.com/gohugoio/hugo/commit/31393f6024416ea1b2e61d1080dfd7104df36eda) [@bep](https://github.com/bep) [#3647](https://github.com/gohugoio/hugo/issues/3647)
 +* Use `example.com` as homepage for new theme [aff1ac32](https://github.com/gohugoio/hugo/commit/aff1ac3235b6c075d01f7237addf44fecdd36d82) [@anthonyfok](https://github.com/anthonyfok) 
 +
 +## Fixes
 +
 +### Templates
 +
 +* Fix `in` function for JSON arrays [d12cf5a2](https://github.com/gohugoio/hugo/commit/d12cf5a25df00fa16c59f0b2ae282187a398214c) [@bep](https://github.com/bep) [#1468](https://github.com/gohugoio/hugo/issues/1468)
 +
 +### Other
 +
 +* Fix handling of `JSON` front matter with escaped quotes [e10e51a0](https://github.com/gohugoio/hugo/commit/e10e51a00827b9fdc1bee51439fef05afc529831) [@bep](https://github.com/bep) [#3661](https://github.com/gohugoio/hugo/issues/3661)
++* Fix typo in code comment [56d82aa0](https://github.com/gohugoio/hugo/commit/56d82aa025f4d2edb1dc6315132cd7ab52df649a) [@dvic](https://github.com/dvic) 
index 7d70d87a5e29c3351624d38e66c9d0317c2f05d9,0000000000000000000000000000000000000000..16f5892b7a6b8c22ec24e81766b36e0617d4bde1
mode 100644,000000..100644
--- /dev/null
@@@ -1,25 -1,0 +1,22 @@@
- date: 2017-07-10T17:53:58-04:00
 +---
- draft: false
- author: bep
 +categories: ["Releases"]
 +description: "This is a bug-fix release with a couple of important fixes"
 +link: ""
 +title: "Hugo 0.25.1"
- * Fix issue with escaped JSON front matter [84db6c74](https://github.com/gohugoio/hugo/commit/84db6c74a084d2b52117b999d4ec343cd3389a68) [@bep](https://github.com/bep) [#3682](https://github.com/gohugoio/hugo/issues/3682)
 +aliases: [/0-25-1/]
 +---
 +
 +This is a bug-fix release with a couple of important fixes.
 +
 +Hugo now has:
 +
 +* 18277+ [stars](https://github.com/gohugoio/hugo/stargazers)
 +* 456+ [contributors](https://github.com/gohugoio/hugo/graphs/contributors)
 +* 170+ [themes](http://themes.gohugo.io/)
 +
 +## Fixes
 +
 +* Fix union when the first slice is empty [dbbc5c48](https://github.com/gohugoio/hugo/commit/dbbc5c4810a04ac06fad7500d88cf5c3bfe0c7fd) [@bep](https://github.com/bep) [#3686](https://github.com/gohugoio/hugo/issues/3686)
 +* Navigate to changed on CREATE When working with content from IntelliJ IDE, like WebStorm, every file save is followed by two events: "RENAME" and then "CREATE". [7bcc1ce6](https://github.com/gohugoio/hugo/commit/7bcc1ce659710f2220b400ce3b76e50d2e48b241) [@miltador](https://github.com/miltador) 
 +* Final (!) fix for issue with escaped JSON front matter [7f82b41a](https://github.com/gohugoio/hugo/commit/7f82b41a24af0fd04d28fbfebf9254766a3c6e6f) [@bep](https://github.com/bep) [#3682](https://github.com/gohugoio/hugo/issues/3682)
++* Fix issue with escaped JSON front matter [84db6c74](https://github.com/gohugoio/hugo/commit/84db6c74a084d2b52117b999d4ec343cd3389a68) [@bep](https://github.com/bep) [#3682](https://github.com/gohugoio/hugo/issues/3682)
index 1a7552d096d0ab6ca364ce33b6d1f3bc4656a0d8,0000000000000000000000000000000000000000..98fe5d088a290a93276b017f78a31d6dfe2aec26
mode 100644,000000..100644
--- /dev/null
@@@ -1,120 -1,0 +1,115 @@@
- {{with .Site.RegularPages.Next . }}{{.RelPermalink}}{{end}}
 +
 +---
 +date: 2019-10-21
 +title: "Hugo 0.59.0"
 +description: "Set image target format and background color, and more ..."
 +categories: ["Releases"]
 +---
 +
 +The timing of this release is motivated by getting the copies of the docs repositories in synch, now fully "Hugo Modularized". But it also comes with some very nice additions:
 +
 +It is now possible to set the target format and the background fill color when processing images, e.g.:
 +
 +```
 +{{ $image.Resize "600x jpg #b31280" }}
 +```
 +
 +See [Image Processing Options](https://gohugo.io/content-management/image-processing/#image-processing-options).
 +
 +Another useful addon is the `$pages.Next` and `$pages.Prev` methods on the core page collections in Hugo. These works the same way as the built-in static variants one `Page`, e.g. `.Next` and `.NextInSection`:
 +
 +```
- {{with .Next }}{{.RelPermalink}}{{end}}
++{{ with .Site.RegularPages.Next . }}{{ .RelPermalink }}{{ end }}
 +```
 +
 +The above is a functionally equivalent (but slightly slower) variant of:
 +
 +```
++{{ with .Next }}{{ .RelPermalink }}{{ end }}
 +```
 +
 +See [Pages Methods](https://gohugo.io/variables/pages/) for more information.
 +
 +
 +This release represents **45 contributions by 13 contributors** to the main Hugo code base. [@bep](https://github.com/bep) leads the Hugo development with a significant amount of contributions, but also a big shoutout to [@anthonyfok](https://github.com/anthonyfok), [@BaibhaVatsa](https://github.com/BaibhaVatsa), and [@XhmikosR](https://github.com/XhmikosR) for their ongoing contributions.
 +And a big thanks to [@digitalcraftsman](https://github.com/digitalcraftsman) and [@onedrawingperday](https://github.com/onedrawingperday) for their relentless work on keeping the themes site in pristine condition and to [@kaushalmodi](https://github.com/kaushalmodi) for his great work on the documentation site.
 +
 +Many have also been busy writing and fixing the documentation in [hugoDocs](https://github.com/gohugoio/hugoDocs), 
 +which has received **34 contributions by 20 contributors**. A special thanks to [@bep](https://github.com/bep), [@celtic-coder](https://github.com/celtic-coder), [@napcs](https://github.com/napcs), and [@bmackinney](https://github.com/bmackinney) for their work on the documentation site.
 +
 +
 +Hugo now has:
 +
 +* 38843+ [stars](https://github.com/gohugoio/hugo/stargazers)
 +* 441+ [contributors](https://github.com/gohugoio/hugo/graphs/contributors)
 +* 255+ [themes](http://themes.gohugo.io/)
 +
 +## Notes
 +
 +
 +* Shortcode params can now be typed (supported types are `string`, `bool` `int` and `float64`, see [#6376](https://github.com/gohugoio/hugo/pull/6376).
 +* Pages.Next/.Prev as described above has existed for a long time, but they have been undocumented. They have been reimplemented for this release and now works like their namesakes on `Page`. This may be considered a breaking change, but it should be a welcome one, as the old behaviour wasn't very useful. See [#4500](https://github.com/gohugoio/hugo/issues/4500)
 +
 +## Enhancements
 +
 +### Templates
 +
 +* Add optional "title" attribute to iframe in Vimeo shortcode [7b3edc29](https://github.com/gohugoio/hugo/commit/7b3edc293144dd450e87ca32f238221c21eb1b47) [@zbayoff](https://github.com/zbayoff) 
 +* Modify error messages of after, first, and last [65b7d422](https://github.com/gohugoio/hugo/commit/65b7d4221b90445bfc089873092411cf7e322933) [@BaibhaVatsa](https://github.com/BaibhaVatsa) [#6415](https://github.com/gohugoio/hugo/issues/6415)
 +* Last now accepts 0 as limit [0e75af74](https://github.com/gohugoio/hugo/commit/0e75af74db30259ec355a7b79a1e257d5fe00eef) [@BaibhaVatsa](https://github.com/BaibhaVatsa) [#6419](https://github.com/gohugoio/hugo/issues/6419)
 +* After now accepts 0 as index [096a4b67](https://github.com/gohugoio/hugo/commit/096a4b67b98259dabff5ebfbfd879a41999a1ed2) [@BaibhaVatsa](https://github.com/BaibhaVatsa) [#6388](https://github.com/gohugoio/hugo/issues/6388)
 +* Make getJSON/getCVS accept non-string args [0d7b05be](https://github.com/gohugoio/hugo/commit/0d7b05be4cb2391cbd280f6109c01ec2d3d7e0c6) [@bep](https://github.com/bep) [#6382](https://github.com/gohugoio/hugo/issues/6382)
 +* Add `rel="noopener"` for external links [34dc06b0](https://github.com/gohugoio/hugo/commit/34dc06b032741abac342d7a2a77510ded9b72ae8) [@XhmikosR](https://github.com/XhmikosR) 
 +* Remove unneeded space [2b1814ee](https://github.com/gohugoio/hugo/commit/2b1814ee580f3149f9fe0a4cf30b754bac9f0c90) [@XhmikosR](https://github.com/XhmikosR) 
 +* Remove eq argument limitation [5e660947](https://github.com/gohugoio/hugo/commit/5e660947757023434dd7a1ec8b8239c0577fd501) [@vazrupe](https://github.com/vazrupe) [#6237](https://github.com/gohugoio/hugo/issues/6237)
 +
 +### Output
 +
 +* Add common video media types [689f647b](https://github.com/gohugoio/hugo/commit/689f647baf96af078186f0cdc45199f7d0995d22) [@martignoni](https://github.com/martignoni) 
 +* Simplify test output to simplify diffing [339ee371](https://github.com/gohugoio/hugo/commit/339ee37143ca5a6bb22bbc1b0468d785f450cfb7) [@bep](https://github.com/bep) 
 +* Use + to create the Type string [64ec8c89](https://github.com/gohugoio/hugo/commit/64ec8c89049461c4731b23c491fb41e00a09a8b2) [@bep](https://github.com/bep) 
 +* Support output image format in image operations [e5856e61](https://github.com/gohugoio/hugo/commit/e5856e61d88ef5149582851b00e06b5b93dce9f8) [@jansorg](https://github.com/jansorg) [#6298](https://github.com/gohugoio/hugo/issues/6298)
 +
 +### Other
 +
 +* Replace /docs [39121de4](https://github.com/gohugoio/hugo/commit/39121de4d991bdcf5f202da4d8d81a8ac6c149fc) [@bep](https://github.com/bep) 
 +* Recover from file corruption [180195aa](https://github.com/gohugoio/hugo/commit/180195aa342777fece1b29a08ec89456d7996c61) [@bep](https://github.com/bep) [#6401](https://github.com/gohugoio/hugo/issues/6401)
 +* Allow to set background fill colour [4b286b9d](https://github.com/gohugoio/hugo/commit/4b286b9d2722909d0682e50eeecdfe16c1f47fd8) [@bep](https://github.com/bep) [#6298](https://github.com/gohugoio/hugo/issues/6298)
 +* Replace .RSSLink [46cafdba](https://github.com/gohugoio/hugo/commit/46cafdbaca13866f32db04c0cc28374e30ec5914) [@bep](https://github.com/bep) [#6037](https://github.com/gohugoio/hugo/issues/6037)
 +* Use binary search in Pages.Prev/Next if possible [653e6856](https://github.com/gohugoio/hugo/commit/653e6856ea1cfc60cc16733807d23b302dbe4bd5) [@bep](https://github.com/bep) [#4500](https://github.com/gohugoio/hugo/issues/4500)
 +* Make Pages.Prev/Next work like the other Prev/Next methods [f4f566ed](https://github.com/gohugoio/hugo/commit/f4f566edf4bd6a590cf9cdbd5cfc0026ecd93b14) [@bep](https://github.com/bep) [#4500](https://github.com/gohugoio/hugo/issues/4500)
 +* Update feature_request.md [5f1aafaf](https://github.com/gohugoio/hugo/commit/5f1aafafb40299bb4c8aebf71e05843431eb84c5) [@bep](https://github.com/bep) 
 +* Update to Go 1.12.10 and 1.13.1 [71b18a07](https://github.com/gohugoio/hugo/commit/71b18a0786894893eafa01263a0915149ed303ec) [@bep](https://github.com/bep) [#6406](https://github.com/gohugoio/hugo/issues/6406)
 +* Add FileMeta.String [f10db101](https://github.com/gohugoio/hugo/commit/f10db101a18f5cad332c9398136f77e35a169d52) [@bep](https://github.com/bep) 
 +* Update minify to v2.5.2 [b401858e](https://github.com/gohugoio/hugo/commit/b401858ebd346c433dd69a260eba7098bded5a30) [@anthonyfok](https://github.com/anthonyfok) 
 +* Add BaseFs to RenderingContext [020a6fbd](https://github.com/gohugoio/hugo/commit/020a6fbd7f6996ed84d80ba6c37fe0d8c2536806) [@niklasfasching](https://github.com/niklasfasching) 
 +* Update go-org [b152216d](https://github.com/gohugoio/hugo/commit/b152216d5c8adbf1bfa4c6fb7b2a50b6866c685e) [@niklasfasching](https://github.com/niklasfasching) 
 +* Upgrade to latest version of emoji dependency [c466b88c](https://github.com/gohugoio/hugo/commit/c466b88c998bc99e5d26e41cb67d87e1d4b976f5) [@jamietanna](https://github.com/jamietanna) [#6391](https://github.com/gohugoio/hugo/issues/6391)
 +* Upgrade to latest version of emoji dependency [170f18d9](https://github.com/gohugoio/hugo/commit/170f18d9352d39213170dd9d5e947eb45854c84b) [@jamietanna](https://github.com/jamietanna) 
 +* Update Architectures [15a0364d](https://github.com/gohugoio/hugo/commit/15a0364d39741da34b8661f9a8386b54016049d6) [@bep](https://github.com/bep) 
 +* Add ability to invalidate Google Cloud CDN [674e81ae](https://github.com/gohugoio/hugo/commit/674e81ae8700bdd00d3e5e47ff930d42d25bc68b) [@gkelly](https://github.com/gkelly) 
 +* Ensure same dirinfos sort order in TestImageOperationsGolden [298092d5](https://github.com/gohugoio/hugo/commit/298092d516f623cc20051f506d460fb7625cdc84) [@anthonyfok](https://github.com/anthonyfok) 
 +* Update bug_report.md [019ae384](https://github.com/gohugoio/hugo/commit/019ae384835446266b951875aa0870d245382cf2) [@bep](https://github.com/bep) 
 +* Support typed bool, int and float in shortcode params [329e88db](https://github.com/gohugoio/hugo/commit/329e88db1f6d043d32c7083570773dccfd4f11fc) [@bep](https://github.com/bep) [#6371](https://github.com/gohugoio/hugo/issues/6371)
 +* Update Chroma [e073f4ef](https://github.com/gohugoio/hugo/commit/e073f4efb1345f6408000ef3f389873f8cf7179e) [@bep](https://github.com/bep) [#6279](https://github.com/gohugoio/hugo/issues/6279)
 +* Add issue templates and action [454a033d](https://github.com/gohugoio/hugo/commit/454a033dc5bc9b3db626fe1533d7e8494d79f472) [@bmackinney](https://github.com/bmackinney) 
 +* Add some more resource transform tests [c262a95a](https://github.com/gohugoio/hugo/commit/c262a95a5c5a9304c82b9d9e39701bc471916851) [@bep](https://github.com/bep) [#6348](https://github.com/gohugoio/hugo/issues/6348)
 +* Do not compile in Azure on Solaris [c0d7188e](https://github.com/gohugoio/hugo/commit/c0d7188ec85e7a4b61489e38896108d877f6d902) [@fazalmajid](https://github.com/fazalmajid) [#6324](https://github.com/gohugoio/hugo/issues/6324)
 +* Ignore "does not exist" errors in prune [fcfa6f33](https://github.com/gohugoio/hugo/commit/fcfa6f33bbebc128a3f9bc3162173bc3780c5f50) [@bep](https://github.com/bep) [#6326](https://github.com/gohugoio/hugo/issues/6326)[#5745](https://github.com/gohugoio/hugo/issues/5745)
 +* Avoid writing the same processed image to /public twice [9442937d](https://github.com/gohugoio/hugo/commit/9442937d82005b369780edcc557e0d15d6bf0bad) [@bep](https://github.com/bep) [#6307](https://github.com/gohugoio/hugo/issues/6307)
 +* Update github.com/bep/gitmap [24ad4295](https://github.com/gohugoio/hugo/commit/24ad4295718341dcae12b72bf52fef312d1036ed) [@bep](https://github.com/bep) [#6313](https://github.com/gohugoio/hugo/issues/6313)
 +
 +## Fixes
 +
 +### Core
 +
 +* Fix broken bundle live reload logic [901077c0](https://github.com/gohugoio/hugo/commit/901077c0364eaf3fe4f997c3026aa18cfc7781ed) [@bep](https://github.com/bep) [#6315](https://github.com/gohugoio/hugo/issues/6315)[#6308](https://github.com/gohugoio/hugo/issues/6308)
 +
 +### Other
 +
 +* Fix elements are doubling when append a not assignable type [a9762b5c](https://github.com/gohugoio/hugo/commit/a9762b5c48054e036332eff541a8fd32e54ada13) [@vazrupe](https://github.com/vazrupe) [#6188](https://github.com/gohugoio/hugo/issues/6188)
 +* Fix data race in global logger init [bc70f2bf](https://github.com/gohugoio/hugo/commit/bc70f2bf123d94fc3226754ec9f1f44748e98162) [@bep](https://github.com/bep) [#6409](https://github.com/gohugoio/hugo/issues/6409)
 +* Fix image test error on s390x, ppc64* and arm64 [39ed33fc](https://github.com/gohugoio/hugo/commit/39ed33fcebcde91605e645fd28fd94020b442d97) [@anthonyfok](https://github.com/anthonyfok) [#6387](https://github.com/gohugoio/hugo/issues/6387)
 +* Fix cache key transformed resources [6dec671f](https://github.com/gohugoio/hugo/commit/6dec671fb930029e18ba9aa5135b3a27adcddb21) [@bep](https://github.com/bep) [#6348](https://github.com/gohugoio/hugo/issues/6348)
 +* Fix cache keys for bundled resoures in transform.Unmarshal [c0d75736](https://github.com/gohugoio/hugo/commit/c0d7573677e9726c14749ccd432dccb75e0d194d) [@bep](https://github.com/bep) [#6327](https://github.com/gohugoio/hugo/issues/6327)
 +* Fix concat with fingerprint regression [3be2c253](https://github.com/gohugoio/hugo/commit/3be2c25351b421a26ee1ff2a38cbab00280c0583) [@bep](https://github.com/bep) [#6309](https://github.com/gohugoio/hugo/issues/6309)
index 899dfdb39d084b8630f206de96db8a24f625a0d3,0000000000000000000000000000000000000000..2410d3dcd03e4b655471538cfac56367fa47a074
mode 100644,000000..100644
--- /dev/null
@@@ -1,126 -1,0 +1,119 @@@
- **Note:** There is already a [patch release](/news/0.63.1-relnotes/) with some fixes.
 +
 +---
 +date: 2020-01-23
 +title: "Improved base templates, and faster!"
 +description: "In Hugo 0.63 we have improved the base template lookup logic, and this simplification also made Hugo faster …"
 +categories: ["Releases"]
 +---
 +
 +Hugo `0.63` is, in general, **considerably faster and more memory effective** (see the site-building benchmarks below comparing it to `v0.62`). Not that we are particularly concerned about Hugo's build speed. We leave that to others. But we would hate if it got slower, so we have a comprehensive benchmark suite. And when we needed to simplify the template handling code to solve a concurrency issue, it also became more effective. And as a bonus, we also finally got the [base template lookup order](https://gohugo.io/templates/base/#base-template-lookup-order) that you really, really wanted!
 +
 +```bash
 +name                              old time/op    new time/op    delta
 +SiteNew/Bundle_with_image-16        13.2ms ± 2%    10.7ms ± 0%  -19.13%  (p=0.029 n=4+4)
 +SiteNew/Bundle_with_JSON_file-16    13.1ms ± 0%    10.8ms ± 0%  -17.50%  (p=0.029 n=4+4)
 +SiteNew/Tags_and_categories-16      47.7ms ± 1%    43.7ms ± 2%   -8.43%  (p=0.029 n=4+4)
 +SiteNew/Canonify_URLs-16            52.3ms ± 6%    49.5ms ± 7%     ~     (p=0.200 n=4+4)
 +SiteNew/Deep_content_tree-16        77.7ms ± 0%    71.6ms ± 1%   -7.84%  (p=0.029 n=4+4)
 +SiteNew/Many_HTML_templates-16      44.0ms ± 2%    37.5ms ± 1%  -14.79%  (p=0.029 n=4+4)
 +SiteNew/Page_collections-16         58.4ms ± 1%    52.5ms ± 1%  -10.09%  (p=0.029 n=4+4)
 +
 +name                              old alloc/op   new alloc/op   delta
 +SiteNew/Bundle_with_image-16        3.81MB ± 0%    2.22MB ± 0%  -41.57%  (p=0.029 n=4+4)
 +SiteNew/Bundle_with_JSON_file-16    3.60MB ± 0%    2.01MB ± 0%  -44.09%  (p=0.029 n=4+4)
 +SiteNew/Tags_and_categories-16      19.3MB ± 1%    14.2MB ± 0%  -26.52%  (p=0.029 n=4+4)
 +SiteNew/Canonify_URLs-16            70.7MB ± 0%    69.0MB ± 0%   -2.30%  (p=0.029 n=4+4)
 +SiteNew/Deep_content_tree-16        37.0MB ± 0%    31.2MB ± 0%  -15.78%  (p=0.029 n=4+4)
 +SiteNew/Many_HTML_templates-16      17.5MB ± 0%    10.6MB ± 0%  -39.68%  (p=0.029 n=4+4)
 +SiteNew/Page_collections-16         25.8MB ± 0%    21.2MB ± 0%  -17.80%  (p=0.029 n=4+4)
 +
 +name                              old allocs/op  new allocs/op  delta
 +SiteNew/Bundle_with_image-16         52.3k ± 0%     26.1k ± 0%  -50.08%  (p=0.029 n=4+4)
 +SiteNew/Bundle_with_JSON_file-16     52.3k ± 0%     26.1k ± 0%  -50.06%  (p=0.029 n=4+4)
 +SiteNew/Tags_and_categories-16        337k ± 1%      272k ± 0%  -19.20%  (p=0.029 n=4+4)
 +SiteNew/Canonify_URLs-16              422k ± 0%      395k ± 0%   -6.33%  (p=0.029 n=4+4)
 +SiteNew/Deep_content_tree-16          400k ± 0%      314k ± 0%  -21.41%  (p=0.029 n=4+4)
 +SiteNew/Many_HTML_templates-16        247k ± 0%      143k ± 0%  -41.84%  (p=0.029 n=4+4)
 +SiteNew/Page_collections-16           282k ± 0%      207k ± 0%  -26.31%  (p=0.029 n=4+4)
 +```
 +
 +This release represents **35 contributions by 9 contributors** to the main Hugo code base. [@bep](https://github.com/bep) leads the Hugo development with a significant amount of contributions, but also a big shoutout to [@hcwong](https://github.com/hcwong), [@flother](https://github.com/flother), and [@RemcodM](https://github.com/RemcodM) for their ongoing contributions.
 +
 +And a big thanks to [@digitalcraftsman](https://github.com/digitalcraftsman) and [@onedrawingperday](https://github.com/onedrawingperday) for their relentless work on keeping the themes site in pristine condition and to [@davidsneighbour](https://github.com/davidsneighbour) and [@kaushalmodi](https://github.com/kaushalmodi) for all the great work on the documentation site.
 +
 +Many have also been busy writing and fixing the documentation in [hugoDocs](https://github.com/gohugoio/hugoDocs), 
 +which has received **13 contributions by 10 contributors**. A special thanks to [@bep](https://github.com/bep), [@jeffscottlevine](https://github.com/jeffscottlevine), [@davidsneighbour](https://github.com/davidsneighbour), and [@nicfits](https://github.com/nicfits) for their work on the documentation site.
 +
 +
 +Hugo now has:
 +
 +* 41091+ [stars](https://github.com/gohugoio/hugo/stargazers)
 +* 440+ [contributors](https://github.com/gohugoio/hugo/graphs/contributors)
 +* 286+ [themes](http://themes.gohugo.io/)
 +
 +## Notes
 +
 +* `.Type` on-page now returns an empty string if not set in the front matter or if `.Section` returns empty. See [#6760](https://github.com/gohugoio/hugo/issues/6760).
 +* Baseof template (e.g. `baseof.html`) lookup order is completely revised/expanded. See [base template lookup order](https://gohugo.io/templates/base/#base-template-lookup-order). We now do template resolution at execution time following the same rules as the template it applies to (e.g. `_default/single.html`). This is an obvious improvement and your site should work as before.
 +* Shortcode params now supports params with raw string literals (strings surrounded with \`\`) that supports newlines.
 +* Note: In a base template (e.g. `baseof.html`), the first template block must be a `define`.
 +
 +## Enhancements
 +
 +### Templates
 +
 +* Rework template management to get rid of concurrency issues [c6d650c8](https://github.com/gohugoio/hugo/commit/c6d650c8c8b22fdc7ddedc1e42a3ca698e1390d6) [@bep](https://github.com/bep) [#6716](https://github.com/gohugoio/hugo/issues/6716)[#6760](https://github.com/gohugoio/hugo/issues/6760)[#6768](https://github.com/gohugoio/hugo/issues/6768)[#6778](https://github.com/gohugoio/hugo/issues/6778)
 +* Put Go's internal template funcs in Hugo's map [1cf23541](https://github.com/gohugoio/hugo/commit/1cf235412f98b42aefe368e99a0e9e95bae6eef7) [@bep](https://github.com/bep) [#6717](https://github.com/gohugoio/hugo/issues/6717)
 +
 +### Output
 +
 +* Add base template lookup variant to docs.json [cafb1d53](https://github.com/gohugoio/hugo/commit/cafb1d53c0927e2aef8abff1bf9095c90c6f3067) [@bep](https://github.com/bep) 
 +
 +### Core
 +
 +* Disable a test assertion on ARM [836c2426](https://github.com/gohugoio/hugo/commit/836c24261f9f175254256fb326d92a3db47e1c75) [@bep](https://github.com/bep) [#6655](https://github.com/gohugoio/hugo/issues/6655)
 +* Some more benchmark adjustments [ddd75f21](https://github.com/gohugoio/hugo/commit/ddd75f212110a3d6643a07301e377415f3d163bd) [@bep](https://github.com/bep) 
 +* Adjust site benchmarks [4ed6ebef](https://github.com/gohugoio/hugo/commit/4ed6ebef4ca71572a19bb890cb4c026a688b2b5b) [@bep](https://github.com/bep) 
 +* Add a benchmark with lots of templates [ea05c0e8](https://github.com/gohugoio/hugo/commit/ea05c0e8456e8dec71ffd796148355b0d8b36eb0) [@bep](https://github.com/bep) 
 +
 +### Other
 +
 +* Regen docs helper [4f466db6](https://github.com/gohugoio/hugo/commit/4f466db666dded1b6c6d1e6926e170f22164433a) [@bep](https://github.com/bep) 
 +* Allow multiple arguments in ne/ge/gt/le/lt functions Treat op arg1 arg2 arg3 ... as (arg1 op arg2) && (arg1 op arg3) and so on for ne/ge/gt/le/lt. [0c251be6](https://github.com/gohugoio/hugo/commit/0c251be66bf3ad4abafbc47583e394ca4e6ffcf1) [@le0tan](https://github.com/le0tan) [#6619](https://github.com/gohugoio/hugo/issues/6619)
 +* Update go-org [8585b388](https://github.com/gohugoio/hugo/commit/8585b388d27abde1ab6b6c63ad6addf4066ec8dd) [@niklasfasching](https://github.com/niklasfasching) 
 +* Add support for newline characters in raw string shortcode [21ca2e9c](https://github.com/gohugoio/hugo/commit/21ca2e9ce4255bfad2bb0576aff087a240acf70a) [@hcwong](https://github.com/hcwong) 
 +* Update github.com/alecthomas/chroma [3efa1d81](https://github.com/gohugoio/hugo/commit/3efa1d81219a6e7b41c9676e9cab446741f69055) [@ghislainbourgeois](https://github.com/ghislainbourgeois) 
 +* Update minify to v2.7.2 [65ec8fe8](https://github.com/gohugoio/hugo/commit/65ec8fe827efef5a14c4e1bc440a6df97d2f20a2) [@bep](https://github.com/bep) [#6756](https://github.com/gohugoio/hugo/issues/6756)
 +* Update Goldmark to v1.1.21 [d3e8ab2e](https://github.com/gohugoio/hugo/commit/d3e8ab2e39dcc27853b163079f4a82364286fe82) [@flother](https://github.com/flother) [#6571](https://github.com/gohugoio/hugo/issues/6571)
 +* Allow raw string literals in shortcode params [da814556](https://github.com/gohugoio/hugo/commit/da814556567eab9ba0ac5fef5314c3ad5ee50ccd) [@hcwong](https://github.com/hcwong) 
 +* Update github.com/gohugoio/testmodBuilder [0c0bb372](https://github.com/gohugoio/hugo/commit/0c0bb372858b5de58c15ccd300144e0bc205ffad) [@bep](https://github.com/bep) 
 +* Update direct dependencies [94cfdf6b](https://github.com/gohugoio/hugo/commit/94cfdf6befd657e46c9458b23f17d851cd2f7037) [@bep](https://github.com/bep) [#6719](https://github.com/gohugoio/hugo/issues/6719)
 +* Update to new CSS config [45138017](https://github.com/gohugoio/hugo/commit/451380177868e48127a33362aa8d553b90516fb5) [@bep](https://github.com/bep) [#6719](https://github.com/gohugoio/hugo/issues/6719)
 +* Update to Minify v2.7.0 [56354a63](https://github.com/gohugoio/hugo/commit/56354a63bb73271224a9300a4742dc1a2f551202) [@bep](https://github.com/bep) 
 +* Add support for freebsd/arm64 [aead8108](https://github.com/gohugoio/hugo/commit/aead8108b80d77e23c68a47fd8d86464310130be) [@dmgk](https://github.com/dmgk) [#6719](https://github.com/gohugoio/hugo/issues/6719)
 +* Update releasenotes_writer.go [df6e9efd](https://github.com/gohugoio/hugo/commit/df6e9efd8f345707932231ea23dc8713afb5b026) [@bep](https://github.com/bep) 
 +* Adjust auto ID space handling [9b6e6146](https://github.com/gohugoio/hugo/commit/9b6e61464b09ffe3423fb8d7c72bddb7a9ed5b98) [@bep](https://github.com/bep) [#6710](https://github.com/gohugoio/hugo/issues/6710)
 +* Document the new autoHeadingIDType setting [d62ede8e](https://github.com/gohugoio/hugo/commit/d62ede8e9e5883e7ebb023e49b82f07b45edc1c7) [@bep](https://github.com/bep) [#6707](https://github.com/gohugoio/hugo/issues/6707)[#6616](https://github.com/gohugoio/hugo/issues/6616)
 +* Regenerate docshelper [81b7e48a](https://github.com/gohugoio/hugo/commit/81b7e48a55092203aeee8785799e6fed3928760e) [@bep](https://github.com/bep) [#6707](https://github.com/gohugoio/hugo/issues/6707)[#6616](https://github.com/gohugoio/hugo/issues/6616)
 +* Add an optional Blackfriday auto ID strategy [16e7c112](https://github.com/gohugoio/hugo/commit/16e7c1120346bd853cf6510ffac8e94824bf2c7f) [@bep](https://github.com/bep) [#6707](https://github.com/gohugoio/hugo/issues/6707)
 +* Make the autoID type config a string [8f071fc1](https://github.com/gohugoio/hugo/commit/8f071fc159ce9a0fc0ea14a73bde8f299bedd109) [@bep](https://github.com/bep) [#6707](https://github.com/gohugoio/hugo/issues/6707)
 +* markup/goldmark: Simplify code [5ee1f087](https://github.com/gohugoio/hugo/commit/5ee1f0876f3ec8b79d6305298185dc821ead2d28) [@bep](https://github.com/bep) 
 +* Make auto IDs GitHub compatible [a82d2700](https://github.com/gohugoio/hugo/commit/a82d2700fcc772aada15d65b8f76913ca23f7404) [@bep](https://github.com/bep) [#6616](https://github.com/gohugoio/hugo/issues/6616)
 +* Support files in content mounts [ff6253bc](https://github.com/gohugoio/hugo/commit/ff6253bc7cf745e9c0127ddc9006da3c2c00c738) [@bep](https://github.com/bep) [#6684](https://github.com/gohugoio/hugo/issues/6684)[#6696](https://github.com/gohugoio/hugo/issues/6696)
 +* Update alpine base image in Dockerfile to 3.11 [aa4ccb8a](https://github.com/gohugoio/hugo/commit/aa4ccb8a1e9b8aa17397acf34049a2aa16b0b6cb) [@RemcodM](https://github.com/RemcodM) 
 +
 +## Fixes
 +
 +### Templates
 +
 +* Fix eq when > 2 args [2fefc016](https://github.com/gohugoio/hugo/commit/2fefc01606fddb119f368c89fb2dedd452ad6547) [@bep](https://github.com/bep) [#6786](https://github.com/gohugoio/hugo/issues/6786)
 +
 +### Core
 +
 +* Fix relative .Page.GetPage from bundle [196a9df5](https://github.com/gohugoio/hugo/commit/196a9df585c4744e3280f37c1c24e469fce14b8c) [@bep](https://github.com/bep) [#6705](https://github.com/gohugoio/hugo/issues/6705)
 +* Fix inline shortcode regression [5509954c](https://github.com/gohugoio/hugo/commit/5509954c7e8b0ce8d5ea903b0ab639ea14b69acb) [@bep](https://github.com/bep) [#6677](https://github.com/gohugoio/hugo/issues/6677)
 +
 +### Other
 +
 +* Fix 0.62.1 server rebuild slowdown regression [17af79a0](https://github.com/gohugoio/hugo/commit/17af79a03e249a731cf5634ffea23ca00774333d) [@bep](https://github.com/bep) [#6784](https://github.com/gohugoio/hugo/issues/6784)
 +* Fix blog not building [d61bee5e](https://github.com/gohugoio/hugo/commit/d61bee5e0916b5d2b388e66ef85c336312a21a06) [@colonelpopcorn](https://github.com/colonelpopcorn) [#6752](https://github.com/gohugoio/hugo/issues/6752)
index 1c390b6858db43a552db50174af29518d17430c8,0000000000000000000000000000000000000000..4c78db3ad54a1a7c53940d94c74cc61daf899dff
mode 100644,000000..100644
--- /dev/null
@@@ -1,79 -1,0 +1,79 @@@
- The last Hugo release of the year brings a new [images.Overlay](https://gohugo.io/functions/images/#overlay) filter to overlay an image on top of another, e.g. for watermarking, and [Dart Sass](https://gohugo.io/hugo-pipes/scss-sass/#options) support.
 +
 +---
 +date: 2020-12-31
 +title: "Hugo 0.80: Last Release of 2020!"
 +description: "This release brings Dart Sass support, a new image overlay function, and more."
 +categories: ["Releases"]
 +---
 +
++The last Hugo release of the year brings a new [images.Overlay](https://gohugo.io/functions/images/#overlay) filter to overlay an image on top of another, e.g. for watermarking, and [Dart Sass](https://gohugo.io/hugo-pipes/toCSS/#options) support.
 +
 +This release represents **29 contributions by 12 contributors** to the main Hugo code base. [@bep](https://github.com/bep) leads the Hugo development with a significant amount of contributions, but also a big shoutout to [@moorereason](https://github.com/moorereason), and [@davidsneighbour](https://github.com/davidsneighbour) for their ongoing contributions.
 +And a big thanks to [@digitalcraftsman](https://github.com/digitalcraftsman) for his relentless work on keeping the themes site in pristine condition and to [@davidsneighbour](https://github.com/davidsneighbour), [@coliff](https://github.com/coliff) and [@kaushalmodi](https://github.com/kaushalmodi) for all the great work on the documentation site.
 +
 +Many have also been busy writing and fixing the documentation in [hugoDocs](https://github.com/gohugoio/hugoDocs), 
 +which has received **22 contributions by 6 contributors**. A special thanks to [@bep](https://github.com/bep), [@D4D3VD4V3](https://github.com/D4D3VD4V3), [@chrischute](https://github.com/chrischute), and [@azenk](https://github.com/azenk) for their work on the documentation site.
 +
 +
 +Hugo now has:
 +
 +* 49096+ [stars](https://github.com/gohugoio/hugo/stargazers)
 +* 436+ [contributors](https://github.com/gohugoio/hugo/graphs/contributors)
 +* 369+ [themes](http://themes.gohugo.io/)
 +
 +## Notes
 +
 +* Resource.ResourceType now always returns MIME's main type [81975f84](https://github.com/gohugoio/hugo/commit/81975f847dc19c21c2321207645807771db97fab) [@bep](https://github.com/bep) [#8052](https://github.com/gohugoio/hugo/issues/8052)
 +
 +## Enhancements
 +
 +### Templates
 +
 +* Regenerate templates [a2d146ec](https://github.com/gohugoio/hugo/commit/a2d146ec32a26ccca9ffa68d3c840ec5b08cca96) [@bep](https://github.com/bep) 
 +* tpl/internal/go_templates: Revert formatting [718e09ed](https://github.com/gohugoio/hugo/commit/718e09ed4bc538f4fccc4337f99e9eb86aea31f3) [@bep](https://github.com/bep) 
 +* Add title parameter to YouTube shortcode [4fc918e0](https://github.com/gohugoio/hugo/commit/4fc918e02cfc7f260d6312248ff9d33e95b27943) [@azenk](https://github.com/azenk) 
 +
 +### Output
 +
 +* Add missing OutputStyle option [428b0b32](https://github.com/gohugoio/hugo/commit/428b0b32947ec16f8585b8c33548d72fd4fb025d) [@bep](https://github.com/bep) 
 +
 +### Other
 +
 +* Allow Dart Sass transformations to be cached on disk [ffbf5e45](https://github.com/gohugoio/hugo/commit/ffbf5e45fa0617a37950b34deab63736b1c6b1d3) [@bep](https://github.com/bep) 
 +* Dart Sass only supports `expanded` and `compressed` [48994ea7](https://github.com/gohugoio/hugo/commit/48994ea766f08332f57c0f8e74843b6c8617c3d1) [@bep](https://github.com/bep) 
 +* Update emoji import paths and version [1f7e9f73](https://github.com/gohugoio/hugo/commit/1f7e9f733397b891cefc725ffc94ba901e70425a) [@moorereason](https://github.com/moorereason) 
 +* Add Dart Sass support [cea15740](https://github.com/gohugoio/hugo/commit/cea157402365f34a69882110a4208999728007a6) [@bep](https://github.com/bep) [#7380](https://github.com/gohugoio/hugo/issues/7380)[#8102](https://github.com/gohugoio/hugo/issues/8102)
 +* GroupByParamDate now supports datetimes [f9f77978](https://github.com/gohugoio/hugo/commit/f9f779786edcefc4449a14cfc04dd93379f71373) [@zerok](https://github.com/zerok) 
 +* Skip para test when not on CI [a9718f44](https://github.com/gohugoio/hugo/commit/a9718f44cd6c938448fc697f0ec720ebed7d863a) [@bep](https://github.com/bep) [#6963](https://github.com/gohugoio/hugo/issues/6963)
 +* Update SECURITY.md [f802bb23](https://github.com/gohugoio/hugo/commit/f802bb236a60dcc6c64d53edac634891272e0c07) [@bep](https://github.com/bep) 
 +* Improve LookPath [10ae7c32](https://github.com/gohugoio/hugo/commit/10ae7c3210cd1add14d3750aa9512a87df0e1146) [@bep](https://github.com/bep) 
 +* create a SECURITY.md [ae2d1bd5](https://github.com/gohugoio/hugo/commit/ae2d1bd52df0099190ef9195666d0788708b0385) [@davidsneighbour](https://github.com/davidsneighbour) [#8074](https://github.com/gohugoio/hugo/issues/8074)
 +* Show more detail on failed time test [8103188b](https://github.com/gohugoio/hugo/commit/8103188b9b9e8eeb3bcb53c8b64e2b83397e82ae) [@moorereason](https://github.com/moorereason) [#6963](https://github.com/gohugoio/hugo/issues/6963)
 +* Add images.Overlay filter [3ba147e7](https://github.com/gohugoio/hugo/commit/3ba147e702a5ae0af6e8b3b0296d256c3246a546) [@bep](https://github.com/bep) [#8057](https://github.com/gohugoio/hugo/issues/8057)[#4595](https://github.com/gohugoio/hugo/issues/4595)[#6731](https://github.com/gohugoio/hugo/issues/6731)
 +* Bump github.com/spf13/cobra from 0.15.0 to 0.20.0 [c84ad8db](https://github.com/gohugoio/hugo/commit/c84ad8db821c10225c0e603c6ec920c67b6ce36f) [@anthonyfok](https://github.com/anthonyfok) 
 +* configure proper link to discourse.gohugo.io (#8020) [4e0acb89](https://github.com/gohugoio/hugo/commit/4e0acb89b793d8895dc53eb8887be27430c3ab31) [@davidsneighbour](https://github.com/davidsneighbour) 
 +* Format code with gofumpt [d90e37e0](https://github.com/gohugoio/hugo/commit/d90e37e0c6e812f9913bf256c9c81aa05b7a08aa) [@bep](https://github.com/bep) 
 +* bump github.com/evanw/esbuild from 0.8.15 to 0.8.17 [32471b57](https://github.com/gohugoio/hugo/commit/32471b57bde51c55a15dbf1db75d6e5f7232c347) [@dependabot[bot]](https://github.com/apps/dependabot) 
 +* Use --baseURL path for live-reload URL [0ad378b0](https://github.com/gohugoio/hugo/commit/0ad378b09cea90a2a70d7ff06af668abe22475a1) [@sth](https://github.com/sth) [#6595](https://github.com/gohugoio/hugo/issues/6595)
 +* bump github.com/getkin/kin-openapi from 0.31.0 to 0.32.0 [907d9e92](https://github.com/gohugoio/hugo/commit/907d9e92682ed56a57a2206ae9bd9a985b3e1870) [@dependabot[bot]](https://github.com/apps/dependabot) 
 +
 +## Fixes
 +
 +### Templates
 +
 +* Fix series detection in opengraph [d2d493ab](https://github.com/gohugoio/hugo/commit/d2d493ab5d6a054001a8448ea0de2949dac4b30e) [@Humberd](https://github.com/Humberd) 
 +* Fix substr when length parameter is zero [5862fd2a](https://github.com/gohugoio/hugo/commit/5862fd2a60b5d16f2437bd8c8b7bac700de5f047) [@moorereason](https://github.com/moorereason) [#7993](https://github.com/gohugoio/hugo/issues/7993)
 +* Refactor and fix substr logic [64789fb5](https://github.com/gohugoio/hugo/commit/64789fb5dcf8326f14f13d69a2576ae3aa2bbbaa) [@moorereason](https://github.com/moorereason) [#7993](https://github.com/gohugoio/hugo/issues/7993)
 +
 +### Other
 +
 +* Fix Resource.ResourceType so it always returns MIME's main type [81975f84](https://github.com/gohugoio/hugo/commit/81975f847dc19c21c2321207645807771db97fab) [@bep](https://github.com/bep) [#8052](https://github.com/gohugoio/hugo/issues/8052)
 +* hugolib/paths: Fix typo [ce96895d](https://github.com/gohugoio/hugo/commit/ce96895debb67df20ae24fb5f0f04b98a30cc6cc) [@mayocream](https://github.com/mayocream) 
 +* Fix minor typos [04b89857](https://github.com/gohugoio/hugo/commit/04b89857e104ac7dcbf9fc65d8d4f1a1178123e6) [@phil-davis](https://github.com/phil-davis) 
 +* Fix BenchmarkMergeByLanguage [21fa1e86](https://github.com/gohugoio/hugo/commit/21fa1e86f2aa929fb0983a0cc3dc4e271ea1cc54) [@bep](https://github.com/bep) [#7914](https://github.com/gohugoio/hugo/issues/7914)
 +* Fix RelURL and AbsURL when path starts with language [aebfe156](https://github.com/gohugoio/hugo/commit/aebfe156fb2f27057e61b2e50c7576e6b06dab58) [@ivan-meridianbanc-com](https://github.com/ivan-meridianbanc-com) 
 +
 +
 +
 +
 +
index ebcbb5ac71b0bcfd28479bc3aa3be0a815fd49cb,0000000000000000000000000000000000000000..8b4048c60147bc00294c737f2806d2319db5ac0a
mode 100644,000000..100644
--- /dev/null
@@@ -1,223 -1,0 +1,223 @@@
- * We have updated to Beta 6 of the Dart Sass Protocol which is not backwards compatible, so if you use Dart Sass you need to also update [that binary](https://gohugo.io/hugo-pipes/scss-sass/#options).
 +
 +---
 +date: 2021-02-19
 +title: "Hugo 0.81.0: The Smorgasbord Edition"
 +description: "Attribute lists (e.g. CSS classes) for Markdown blocks, newlines in template actions/blocks, native Apple M1 ARM64 binary, it's faster, and more …"
 +categories: ["Releases"]
 +toc: true
 +---
 +
 +**Hugo 0.81.0** is the first release of this decade, it is the fastest to date, and it's packed with useful new features.
 +
 +## Newlines in Template Actions and Commands
 +
 +You can now have newlines within template actions and pipelines. This means that you can now do this and similar:
 +
 +```go-html-template
 +{{ dict 
 +      "country" "Norway" 
 +      "population" "5 millions"
 +      "language" "Norwegian"
 +      "language_code" "nb"
 +      "weather" "freezing cold"
 +      "capitol" "Oslo"
 +      "largest_city" "Oslo"
 +      "currency"  "Norwegian krone"
 +      "dialing_code" "+47" 
 +}}
 +```
 +
 +Note that the above construction will fail in Hugo versions < `0.81.0`.
 +
 +## Attribute Lists after Markdown Blocks
 +
 +Hugo already supports adding attribute lists (e.g CSS classes) after titles. We now also allow adding attribute lists after Markdown blocks, e.g. tables, lists, paragraphs etc.:
 +
 +```
 +> foo
 +> bar
 +{.myclass}
 +```
 +
 +See [Configure Goldmark](https://gohugo.io/getting-started/configuration-markup#goldmark).
 +
 +## Performance
 +
 +This release is the fastest Hugo to date, see details in the benchmarks below. This is [especially true](https://gohugo.io/news/hugo-macos-intel-vs-arm/) if you use the new ARM64 MacOS binary (only works on [Apple M1](https://en.wikipedia.org/wiki/Apple_M1) devices).
 +
 +### Site Building and Rebuilding Benchmarks: v0.80.0 => v0.81.0
 +
 +```
 +name                                      old time/op    new time/op    delta
 +SiteNew/Edit_Bundle_with_image-16            771µs ± 6%     817µs ± 7%     ~     (p=0.200 n=4+4)
 +SiteNew/Edit_Bundle_with_JSON_file-16        728µs ± 2%     737µs ± 1%     ~     (p=0.343 n=4+4)
 +SiteNew/Edit_Tags_and_categories-16         16.6ms ± 5%    16.3ms ± 3%     ~     (p=0.686 n=4+4)
 +SiteNew/Edit_Canonify_URLs-16               29.4ms ± 6%    26.9ms ± 4%   -8.37%  (p=0.029 n=4+4)
 +SiteNew/Edit_Deep_content_tree-16           33.8ms ± 3%    31.2ms ± 3%   -7.53%  (p=0.029 n=4+4)
 +SiteNew/Edit_Many_HTML_templates-16         12.1ms ± 2%    11.6ms ± 1%   -3.94%  (p=0.029 n=4+4)
 +SiteNew/Edit_Page_collections-16            20.6ms ± 1%    19.8ms ± 0%   -3.57%  (p=0.029 n=4+4)
 +SiteNew/Edit_List_terms-16                  3.91ms ± 1%    3.81ms ± 2%   -2.52%  (p=0.029 n=4+4)
 +SiteNew/Regular_Bundle_with_image-16        6.15ms ± 2%    5.53ms ± 2%  -10.11%  (p=0.029 n=4+4)
 +SiteNew/Regular_Bundle_with_JSON_file-16    6.26ms ± 4%    5.76ms ± 4%   -7.98%  (p=0.029 n=4+4)
 +SiteNew/Regular_Tags_and_categories-16      26.2ms ± 2%    25.5ms ± 1%   -2.42%  (p=0.029 n=4+4)
 +SiteNew/Regular_Canonify_URLs-16            34.7ms ± 8%    33.8ms ± 9%     ~     (p=0.486 n=4+4)
 +SiteNew/Regular_Deep_content_tree-16        43.8ms ± 1%    43.4ms ± 6%     ~     (p=0.343 n=4+4)
 +SiteNew/Regular_Many_HTML_templates-16      21.5ms ± 1%    19.7ms ± 2%   -8.54%  (p=0.029 n=4+4)
 +SiteNew/Regular_Page_collections-16         30.7ms ± 2%    28.2ms ± 1%   -8.23%  (p=0.029 n=4+4)
 +SiteNew/Regular_List_terms-16               9.70ms ± 1%    8.95ms ± 0%   -7.72%  (p=0.029 n=4+4)
 +
 +name                                      old alloc/op   new alloc/op   delta
 +SiteNew/Edit_Bundle_with_image-16            437kB ± 0%     428kB ± 0%   -2.02%  (p=0.029 n=4+4)
 +SiteNew/Edit_Bundle_with_JSON_file-16        216kB ± 0%     207kB ± 0%   -4.20%  (p=0.029 n=4+4)
 +SiteNew/Edit_Tags_and_categories-16         10.4MB ± 0%     9.7MB ± 0%   -6.08%  (p=0.029 n=4+4)
 +SiteNew/Edit_Canonify_URLs-16               84.4MB ± 0%    85.2MB ± 0%   +0.87%  (p=0.029 n=4+4)
 +SiteNew/Edit_Deep_content_tree-16           26.6MB ± 0%    25.6MB ± 0%   -3.57%  (p=0.029 n=4+4)
 +SiteNew/Edit_Many_HTML_templates-16         6.03MB ± 0%    5.75MB ± 0%   -4.57%  (p=0.029 n=4+4)
 +SiteNew/Edit_Page_collections-16            14.8MB ± 0%    14.2MB ± 0%   -4.10%  (p=0.029 n=4+4)
 +SiteNew/Edit_List_terms-16                  1.83MB ± 0%    1.73MB ± 0%   -5.51%  (p=0.029 n=4+4)
 +SiteNew/Regular_Bundle_with_image-16        1.93MB ± 0%    1.90MB ± 0%   -1.43%  (p=0.029 n=4+4)
 +SiteNew/Regular_Bundle_with_JSON_file-16    1.72MB ± 0%    1.69MB ± 0%   -1.72%  (p=0.029 n=4+4)
 +SiteNew/Regular_Tags_and_categories-16      14.3MB ± 0%    13.6MB ± 0%   -4.80%  (p=0.029 n=4+4)
 +SiteNew/Regular_Canonify_URLs-16            89.7MB ± 0%    90.2MB ± 0%   +0.61%  (p=0.029 n=4+4)
 +SiteNew/Regular_Deep_content_tree-16        30.4MB ± 0%    29.2MB ± 0%   -3.95%  (p=0.029 n=4+4)
 +SiteNew/Regular_Many_HTML_templates-16      9.26MB ± 0%    8.94MB ± 0%   -3.47%  (p=0.029 n=4+4)
 +SiteNew/Regular_Page_collections-16         18.5MB ± 0%    17.7MB ± 0%   -4.25%  (p=0.029 n=4+4)
 +SiteNew/Regular_List_terms-16               4.00MB ± 0%    3.85MB ± 0%   -3.55%  (p=0.029 n=4+4)
 +
 +name                                      old allocs/op  new allocs/op  delta
 +SiteNew/Edit_Bundle_with_image-16            3.99k ± 0%     4.07k ± 0%   +1.80%  (p=0.029 n=4+4)
 +SiteNew/Edit_Bundle_with_JSON_file-16        3.99k ± 0%     4.06k ± 0%   +1.81%  (p=0.029 n=4+4)
 +SiteNew/Edit_Tags_and_categories-16           241k ± 0%      245k ± 0%   +1.67%  (p=0.029 n=4+4)
 +SiteNew/Edit_Canonify_URLs-16                 364k ± 0%      321k ± 0%  -11.78%  (p=0.029 n=4+4)
 +SiteNew/Edit_Deep_content_tree-16             264k ± 0%      268k ± 0%   +1.53%  (p=0.029 n=4+4)
 +SiteNew/Edit_Many_HTML_templates-16          90.3k ± 0%     91.0k ± 0%   +0.83%  (p=0.029 n=4+4)
 +SiteNew/Edit_Page_collections-16              153k ± 0%      156k ± 0%   +1.46%  (p=0.029 n=4+4)
 +SiteNew/Edit_List_terms-16                   30.4k ± 0%     30.9k ± 0%   +1.54%  (p=0.029 n=4+4)
 +SiteNew/Regular_Bundle_with_image-16         23.3k ± 0%     23.1k ± 0%   -0.57%  (p=0.029 n=4+4)
 +SiteNew/Regular_Bundle_with_JSON_file-16     23.3k ± 0%     23.1k ± 0%   -0.59%  (p=0.029 n=4+4)
 +SiteNew/Regular_Tags_and_categories-16        284k ± 0%      288k ± 0%   +1.58%  (p=0.029 n=4+4)
 +SiteNew/Regular_Canonify_URLs-16              387k ± 0%      343k ± 0%  -11.41%  (p=0.029 n=4+4)
 +SiteNew/Regular_Deep_content_tree-16          307k ± 0%      309k ± 0%   +0.52%  (p=0.029 n=4+4)
 +SiteNew/Regular_Many_HTML_templates-16        129k ± 0%      129k ± 0%   +0.35%  (p=0.029 n=4+4)
 +SiteNew/Regular_Page_collections-16           199k ± 0%      200k ± 0%   +0.55%  (p=0.029 n=4+4)
 +SiteNew/Regular_List_terms-16                53.5k ± 0%     53.4k ± 0%   -0.18%  (p=0.029 n=4+4)
 +```
 +
 +
 +
 +## Native Arm Binary for Apple M1
 +
 +We finally provide native Hugo binary for [Apple M1](https://en.wikipedia.org/wiki/Apple_M1) devices. Download the file named `hugo_0.81.0_macOS-ARM64.tar.gz`.
 +
 +## JavaScript Building
 +
 +* Add `inject` config option allowing you to automatically replace a global variable with an import from another file relative to `assets`. [32b86076](https://github.com/gohugoio/hugo/commit/32b86076ee1c0833b538b84e1cc9e6d79babecf2) [@bep](https://github.com/bep) [#8164](https://github.com/gohugoio/hugo/issues/8164)
 +* Add `shims` config option to swap 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 [e19a046c](https://github.com/gohugoio/hugo/commit/e19a046c4be9b0654884259b9df94f41561e4fc3) [@bep](https://github.com/bep) [#8165](https://github.com/gohugoio/hugo/issues/8165)
 +* Add external source map support to js.Build and Babel [2c8b5d91](https://github.com/gohugoio/hugo/commit/2c8b5d9165011c4b24b494e661ae60dfc7bb7d1b) [@richtera](https://github.com/richtera) [#8132](https://github.com/gohugoio/hugo/issues/8132)
 +* Fix nilpointer in js.Build error handling [a1fe552f](https://github.com/gohugoio/hugo/commit/a1fe552fc9e622a15010a94281f604eb85bebd84) [@bep](https://github.com/bep) [#8162](https://github.com/gohugoio/hugo/issues/8162)
 +
 +Also see [js.Build Options](https://gohugo.io/hugo-pipes/js#options).
 +
 +## Hugo Modules
 +
 +There are several [Hugo Modules](https://gohugo.io/hugo-modules/)-related improvements in this release:
 +
 +* Allow absolute paths for any modules resolved via project replacement [3a5ee0d2](https://github.com/gohugoio/hugo/commit/3a5ee0d2d6e344b12efc7a97354ec3480c4c578b) [@bep](https://github.com/bep) [#8240](https://github.com/gohugoio/hugo/issues/8240)
 +* Add config option modules.vendorClosest [bdfbcf6f](https://github.com/gohugoio/hugo/commit/bdfbcf6f4b4ab53a617ab76f72e8aa28da6067de) [@bep](https://github.com/bep) [#8235](https://github.com/gohugoio/hugo/issues/8235)[#8242](https://github.com/gohugoio/hugo/issues/8242)
 +* Throw an error running hugo mod vendor on mountless module [4ffaeaf1](https://github.com/gohugoio/hugo/commit/4ffaeaf15536596c94dc73b393ca7894e3bd5e2c) [@bep](https://github.com/bep) 
 +
 +## Minify - Keep Comments
 +
 +Keep comments when running `hugo --minify` with a new setting:
 +
 +{{< code-toggle file="config" >}}
 +[minify.tdewolff.html]
 +keepComments = true
 +{{< /code-toggle >}}
 +
 +The default value for this setting is `false`.
 +
 +## Statistics
 +
 +This release represents **59 contributions by 14 contributors** to the main Hugo code base.[@bep](https://github.com/bep) leads the Hugo development with a significant amount of contributions, but also a big shoutout to [@moorereason](https://github.com/moorereason) and [@benmezger](https://github.com/benmezger) for their ongoing contributions. And a big thanks to [@digitalcraftsman](https://github.com/digitalcraftsman) for his relentless work on keeping the themes site in pristine condition and to [@davidsneighbour](https://github.com/davidsneighbour), [@coliff](https://github.com/coliff) and [@kaushalmodi](https://github.com/kaushalmodi) for all the great work on the documentation site.
 +
 +Many have also been busy writing and fixing the documentation in [hugoDocs](https://github.com/gohugoio/hugoDocs), 
 +which has received **20 contributions by 13 contributors**. A special thanks to [@bep](https://github.com/bep), [@gagarine](https://github.com/gagarine), [@fridde](https://github.com/fridde), and [@NicoHood](https://github.com/NicoHood) for their work on the documentation site.
 +
 +
 +Hugo now has:
 +
 +* 50152+ [stars](https://github.com/gohugoio/hugo/stargazers)
 +* 435+ [contributors](https://github.com/gohugoio/hugo/graphs/contributors)
 +* 370+ [themes](http://themes.gohugo.io/)
 +
 +
 +## Notes
 +
++* We have updated to Beta 6 of the Dart Sass Protocol which is not backwards compatible, so if you use Dart Sass you need to also update [that binary](https://gohugo.io/hugo-pipes/toCSS/#options).
 +* `hugo gen autocomplete` now default to `stdout`; you can change this by setting `--completionfile`. As an added bonus we now also support auto completion for zsh, fish and powershell.
 +
 +## Changelog
 +
 +* Make the build green again [fe77f743](https://github.com/gohugoio/hugo/commit/fe77f7434bc0d7a9b54af69014eb28dbea2b236b) [@bep](https://github.com/bep) 
 +* Regenerate internal templates [c6080655](https://github.com/gohugoio/hugo/commit/c60806550a21062936b0d02708c9a8c240cafa9d) [@bep](https://github.com/bep) 
 +* Update date logic of opengraph and schema internal templates [ffd9dac4](https://github.com/gohugoio/hugo/commit/ffd9dac4218b8f1709de04f7131ca661715fc481) [@djatwood](https://github.com/djatwood) 
 +* Synch Go templates fork with Go 1.16dev [cf3e077d](https://github.com/gohugoio/hugo/commit/cf3e077da304e6f4d7c22f8296e1382335d055c6) [@bep](https://github.com/bep) 
 +* Exclude pages without Permalink from sitemap [4867cd1d](https://github.com/gohugoio/hugo/commit/4867cd1dea34ee53fb73cede2bcff4792e470104) [@Jaza](https://github.com/Jaza) 
 +* Add default user-agent header for getJSON requests [35def0ae](https://github.com/gohugoio/hugo/commit/35def0ae4560bb86febd12663bf5602485ad4b20) [@peacecwz](https://github.com/peacecwz) 
 +* remove 1mb limit for readFile. [ee9c1367](https://github.com/gohugoio/hugo/commit/ee9c1367635eab446fcf9baa1ab8b4066882548e) [@avdva](https://github.com/avdva) 
 +* Do not return errors in substr for out-of-bounds cases [8a26ab0b](https://github.com/gohugoio/hugo/commit/8a26ab0bc5dd9fa34e1362681fc08b0e522cd4ea) [@moorereason](https://github.com/moorereason) [#8113](https://github.com/gohugoio/hugo/issues/8113)
 +* Add missing test scenario for strings.Substr [788e50ad](https://github.com/gohugoio/hugo/commit/788e50ad3a55609ed49ce0b7ee98965c181fe9cf) [@moorereason](https://github.com/moorereason) 
 +* Regen CLI docs [9e99950c](https://github.com/gohugoio/hugo/commit/9e99950c6ebf82c85ee52a8de85e284a506a2f90) [@bep](https://github.com/bep) 
 +* Regen docs helper [1b364b00](https://github.com/gohugoio/hugo/commit/1b364b003f68df3adb1644769fe69810d85e3897) [@bep](https://github.com/bep) 
 +* Run go mod tidy [88b93a09](https://github.com/gohugoio/hugo/commit/88b93a09dc79518d7fbd14681eeeea3411dab1dd) [@bep](https://github.com/bep) 
 +* Add arm64 to Darwinextended build and add vendorInfo [29fb456c](https://github.com/gohugoio/hugo/commit/29fb456c9e63ee1a2314bf4a7227a5146e7f9b31) [@bep](https://github.com/bep) [#8003](https://github.com/gohugoio/hugo/issues/8003)
 +* Update Travis, GitHub, CircleCI and Snap to Go 1.16 (only) [718fba7d](https://github.com/gohugoio/hugo/commit/718fba7d63424017cb3b9774c33e7acc69c68af6) [@bep](https://github.com/bep) 
 +* Pull in latest Go 1.16 template source [e77b2e3a](https://github.com/gohugoio/hugo/commit/e77b2e3aa0b24c5ca960905772335b27845705eb) [@bep](https://github.com/bep) 
 +* Add breaking tests for "map read and map write in templates" [b5485aea](https://github.com/gohugoio/hugo/commit/b5485aeae7e1f73f18835fbf0b8eedc305d450d0) [@bep](https://github.com/bep) [#7293](https://github.com/gohugoio/hugo/issues/7293)
 +* Pull in latest Go template source [ccb822eb](https://github.com/gohugoio/hugo/commit/ccb822eb5afad210432eb46ec3727e3536a87f58) [@bep](https://github.com/bep) 
 +* Expand template newline testcase to commands [21e9eb18](https://github.com/gohugoio/hugo/commit/21e9eb18acc2a2f8d8b97f096615b836e65091a2) [@bep](https://github.com/bep) 
 +* Add a test case for Go 1.16 template action newlines [ae57ba6a](https://github.com/gohugoio/hugo/commit/ae57ba6a9dee87347fa2d5e8c6865f390989622e) [@bep](https://github.com/bep) 
 +* Update github.com/tdewolff/minify/v2 v2.6.2 => v2.9.13 [66beac99](https://github.com/gohugoio/hugo/commit/66beac99c64b5e5fe7bec0bda437ba5858d49a36) [@bep](https://github.com/bep) [#8258](https://github.com/gohugoio/hugo/issues/8258)
 +* bump github.com/frankban/quicktest from 1.11.2 to 1.11.3 [968dd7a7](https://github.com/gohugoio/hugo/commit/968dd7a711063934af84bd1c017c58a1e66f51bb) [@dependabot[bot]](https://github.com/apps/dependabot) 
 +* bump github.com/getkin/kin-openapi from 0.32.0 to 0.39.0 [38f29e81](https://github.com/gohugoio/hugo/commit/38f29e817f2058ed56f96fb8e628315f3ab5d7f9) [@dependabot[bot]](https://github.com/apps/dependabot) 
 +* bump github.com/aws/aws-sdk-go from 1.36.33 to 1.37.11 [cd87813a](https://github.com/gohugoio/hugo/commit/cd87813aa0327ec7a7e6f023dadcea5a3e6a9fef) [@dependabot[bot]](https://github.com/apps/dependabot) 
 +* bump github.com/sanity-io/litter from 1.3.0 to 1.5.0 [4e815b06](https://github.com/gohugoio/hugo/commit/4e815b063e4af70f21b6796688025675253bec65) [@dependabot[bot]](https://github.com/apps/dependabot) 
 +* bump github.com/olekukonko/tablewriter from 0.0.4 to 0.0.5 [652a59d3](https://github.com/gohugoio/hugo/commit/652a59d38523e23e39376cba9c554abbe87b198d) [@dependabot[bot]](https://github.com/apps/dependabot) 
 +* Update to esbuild v0.8.46 [84f0ec7f](https://github.com/gohugoio/hugo/commit/84f0ec7f80855dcc9b123418bcbf816b5efa2cdf) [@bep](https://github.com/bep) 
 +* Add config option modules.vendorClosest [bdfbcf6f](https://github.com/gohugoio/hugo/commit/bdfbcf6f4b4ab53a617ab76f72e8aa28da6067de) [@bep](https://github.com/bep) [#8235](https://github.com/gohugoio/hugo/issues/8235)[#8242](https://github.com/gohugoio/hugo/issues/8242)
 +* bump google.golang.org/api from 0.26.0 to 0.40.0 [a9b0fea6](https://github.com/gohugoio/hugo/commit/a9b0fea6a3aec658912a8db134824dee4a9b6369) [@dependabot[bot]](https://github.com/apps/dependabot) 
 +* Change version string format and add VendorInfo to help with issue triaging [e8df0977](https://github.com/gohugoio/hugo/commit/e8df09774534abe6131eb455b4f5c614fb438983) [@anthonyfok](https://github.com/anthonyfok) 
 +* Allow absolute paths for any modules resolved via project replacement [3a5ee0d2](https://github.com/gohugoio/hugo/commit/3a5ee0d2d6e344b12efc7a97354ec3480c4c578b) [@bep](https://github.com/bep) [#8240](https://github.com/gohugoio/hugo/issues/8240)
 +* Throw an error running hugo mod vendor on mountless module [4ffaeaf1](https://github.com/gohugoio/hugo/commit/4ffaeaf15536596c94dc73b393ca7894e3bd5e2c) [@bep](https://github.com/bep) 
 +* Add PowerShell completion support [5f621df2](https://github.com/gohugoio/hugo/commit/5f621df2570236a08cd21e8dd1c60502ec3db328) [@anthonyfok](https://github.com/anthonyfok) [#8122](https://github.com/gohugoio/hugo/issues/8122)
 +* Refer to mage instead of make in comment regarding commitHash [7118f89c](https://github.com/gohugoio/hugo/commit/7118f89cf35246767e26dcb5e747469ffa61f473) [@anthonyfok](https://github.com/anthonyfok) 
 +* Add attributes support for blocks (tables etc.) [2681633d](https://github.com/gohugoio/hugo/commit/2681633db8d340d2dc59cf801419874d572fc704) [@bep](https://github.com/bep) [#7548](https://github.com/gohugoio/hugo/issues/7548)
 +* Update to Goldmark v1.3.2 [1b247282](https://github.com/gohugoio/hugo/commit/1b2472825664763c0b88807b0d193e73553423ec) [@bep](https://github.com/bep) [#8143](https://github.com/gohugoio/hugo/issues/8143)
 +* Update to Dart Sass Protocol beta6 [441b11be](https://github.com/gohugoio/hugo/commit/441b11beec3cf0371ff9a2898f220a0bf00faf8c) [@bep](https://github.com/bep) 
 +* Write to stdout by default [d36fd5b3](https://github.com/gohugoio/hugo/commit/d36fd5b3ee6989203de2a29b1de67521fd1c8ea5) [@benmezger](https://github.com/benmezger) 
 +* Remove powershell support [a7c515e1](https://github.com/gohugoio/hugo/commit/a7c515e1b56e8cab34ca2647b4116904df9c8250) [@benmezger](https://github.com/benmezger) 
 +* Add zsh, fish and powershell completion support [216b00f3](https://github.com/gohugoio/hugo/commit/216b00f358dbfa36b34ff515d7f4f88387156db8) [@benmezger](https://github.com/benmezger) [#4296](https://github.com/gohugoio/hugo/issues/4296)
 +* Enable NPM tests on Windows [14494379](https://github.com/gohugoio/hugo/commit/144943798c2a199ed256ae901a14d3c918055eba) [@bep](https://github.com/bep) [#8196](https://github.com/gohugoio/hugo/issues/8196)
 +* Update to esbuild v0.8.39 [440fdb0e](https://github.com/gohugoio/hugo/commit/440fdb0eb96b3230ddefee732b0c1afe52a37228) [@bep](https://github.com/bep) [#8189](https://github.com/gohugoio/hugo/issues/8189)
 +* Trim whitespace in elements written to hugo_stats.json [b2a48dce](https://github.com/gohugoio/hugo/commit/b2a48dce58abd3a661aa198af3277ef12f44cce0) [@pmatiash](https://github.com/pmatiash) [#7958](https://github.com/gohugoio/hugo/issues/7958)
 +* bump github.com/aws/aws-sdk-go from 1.35.0 to 1.36.33 [2f9dadae](https://github.com/gohugoio/hugo/commit/2f9dadae4072960bbaec3656347e20eec238288c) [@dependabot[bot]](https://github.com/apps/dependabot) 
 +* Remove mention of a file size limit for readFile [ed3071b7](https://github.com/gohugoio/hugo/commit/ed3071b753c8dec83a2c054624e49b204553ecd3) [@avdva](https://github.com/avdva) 
 +* Add Inject config option [32b86076](https://github.com/gohugoio/hugo/commit/32b86076ee1c0833b538b84e1cc9e6d79babecf2) [@bep](https://github.com/bep) [#8164](https://github.com/gohugoio/hugo/issues/8164)
 +* Add Shims option [e19a046c](https://github.com/gohugoio/hugo/commit/e19a046c4be9b0654884259b9df94f41561e4fc3) [@bep](https://github.com/bep) [#8165](https://github.com/gohugoio/hugo/issues/8165)
 +* bump github.com/spf13/afero from 1.4.1 to 1.5.1 [07ad283f](https://github.com/gohugoio/hugo/commit/07ad283f686904e5835f621d73ed342ba2a48eb3) [@eclipseo](https://github.com/eclipseo) 
 +* Add external source map support to js.Build and Babel [2c8b5d91](https://github.com/gohugoio/hugo/commit/2c8b5d9165011c4b24b494e661ae60dfc7bb7d1b) [@richtera](https://github.com/richtera) [#8132](https://github.com/gohugoio/hugo/issues/8132)
 +* Run go mod tidy [4d2b6fc4](https://github.com/gohugoio/hugo/commit/4d2b6fc4c0e714f3f1ed345d6d75ed1662948791) [@bep](https://github.com/bep) 
 +* Update go-org to v1.4.0 [212e5e55](https://github.com/gohugoio/hugo/commit/212e5e554284bc9368e52a512ed09be5a0224d3e) [@niklasfasching](https://github.com/niklasfasching) 
 +* Adjust log level [4fdec67b](https://github.com/gohugoio/hugo/commit/4fdec67b1155ae1cdf051582d9ab387286b71a07) [@bep](https://github.com/bep) 
 +* Add temporary patch to fix template data race [9650e568](https://github.com/gohugoio/hugo/commit/9650e568418a316e71ad94d7e27caf544a4a2d0d) [@bep](https://github.com/bep) [#7293](https://github.com/gohugoio/hugo/issues/7293)
 +* Fix race condition in text template baseof [241b7483](https://github.com/gohugoio/hugo/commit/241b7483ea954653512d4895ad6bacf79ee26ddc) [@moorereason](https://github.com/moorereason) 
 +* Fix metrics hint tracking [0004a733](https://github.com/gohugoio/hugo/commit/0004a733c85cee991a8a170e93cd69c326cc8f2f) [@moorereason](https://github.com/moorereason) [#8125](https://github.com/gohugoio/hugo/issues/8125)
 +* Fix potential path issue on Windows [b60e9279](https://github.com/gohugoio/hugo/commit/b60e9279ab95030828eb4f822be96250284c4d8d) [@bep](https://github.com/bep) 
 +* Fix some humanize issues [bf55afd7](https://github.com/gohugoio/hugo/commit/bf55afd71f2fdb47272ebf1188c9cc87df47b233) [@susiwen8](https://github.com/susiwen8) [#7912](https://github.com/gohugoio/hugo/issues/7912)
 +* Fix handling of legacy attribute config [e6dd3128](https://github.com/gohugoio/hugo/commit/e6dd312812c7c711986af2d60f2999d116b82ea0) [@bep](https://github.com/bep) [#7548](https://github.com/gohugoio/hugo/issues/7548)
 +* Support translation files with suffix *.yml [92c6c404](https://github.com/gohugoio/hugo/commit/92c6c40419bdc13b8bb422a212d1d79240356651) [@bep](https://github.com/bep) [#8212](https://github.com/gohugoio/hugo/issues/8212)
 +* Fix nilpointer in js.Build error handling [a1fe552f](https://github.com/gohugoio/hugo/commit/a1fe552fc9e622a15010a94281f604eb85bebd84) [@bep](https://github.com/bep) [#8162](https://github.com/gohugoio/hugo/issues/8162)
 +
 +
 +
index 9912027b5d65e3e90a914048db1f316c76aad81a,0000000000000000000000000000000000000000..a54f01115178eb8fea853b67a4775f1ebb5a0959
mode 100644,000000..100644
--- /dev/null
@@@ -1,108 -1,0 +1,107 @@@
- author: bep
 +---
 +date: 2018-07-04
 +title: "Let’s celebrate Hugo’s 5th birthday"
 +description: "How a side project became one of the most popular frameworks for building websites."
 +categories: [blog]
- : In Hugo `0.42` we added [Theme Components](/themes/theme-components/) and Theme Inheritance. With SCSS support in Hugo `0.43`, which also follows the same project/themes precedence order (add `_variables.scss` to your project, configure SASS colour variables in `config.toml`), we have a solid foundation for creating easy to use and extensible themes. But we are missing some infrastructure around this. We have a site with 235+ [themes](https://themes.gohugo.io/)[^themes] listed, but you currently need to do some added work to get the theme up and running for your site. In the Go world, we don't have NPM to use, which is a curse and a blessing, but I have some ideas about building a simple dependency manager into Hugo, modelled after how Go is doing it (`hugo install`). You should be able to configure what theme and theme components you want to use, and Hugo should handle the installation of the correct versions. This should make it easier for the user, but it would also enable community driven and even commercial "theme stores".
 +---
 +
 +_By Bjørn Erik Pedersen ([@bepsays](https://twitter.com/bepsays) / [@bep](https://github.com/bep)), Hugo Lead_
 +
 +**Five years ago today, [Steve Francia](https://github.com/spf13/) made his [first commit](https://github.com/gohugoio/hugo/commit/50a1d6f3f155ab837310e00ffb309a9199773c73
 +) on the Hugo project: "Hugo: A Fast and Flexible Static Site Generator built with love by spf13 in GoLang".**
 +
 +Steve was writing that on a train commute to New York. I'm writing this article running Hugo `v0.43-DEV`, the preview version of the next Hugo release. The release is scheduled for Monday and adds a powerful [assets pipeline](https://github.com/gohugoio/hugo/issues/4854#issue-333062459), with SCSS/SASS support, assets minification, fingerprinting/subresource integrity, ad-hoc image processing and much more. 
 +
 +**I cannot remember the last time I was this excited about a Hugo release. "Game changer" may be too strong, but it makes for a really nice integrated website design-workflow that, with Hugo's build speed, is hard to beat.**
 +
 +{{< imgproc sunset Fill "600x300" >}}
 +Fetch and scale an image in the upcoming Hugo 0.43.
 +{{< /imgproc >}}
 +
 +But that is a release for Monday. Now is a time to look at the current status of Hugo after the first five years.
 +
 +## Hugo in Numbers
 +
 +According to [BuiltWith](https://trends.builtwith.com/cms/Hugo), more than 29 000 live websites are built with Hugo. Of those, 390 are in the top 1 million. Wappalyzer [reports](https://www.wappalyzer.com/categories/static-site-generator) that Hugo serves almost 50% of the static sites.
 +
 +Hugo is big in the [public sector](https://discourse.gohugo.io/t/hugo-in-public-administration/8792), with the US Government as a prominent user. Some examples are [vote.gov](https://vote.gov/) and [digital.gov](https://digital.gov/).
 +
 +[Smashing Magazine](https://www.smashingmagazine.com/) is a big and very popular Hugo site. It is [reported](https://discourse.gohugo.io/t/smashing-magazine-s-redesign-powered-by-hugo-jamstack/5826/7) that they build their complex site with 7500 content pages in 13 seconds.
 +
 +Some other example sites are [kubernetes.io](https://kubernetes.io/), [letsencrypt.org](https://gohugo.io/showcase/letsencrypt/), [support.1password.com](http://gohugo.io/showcase/1password-support/), [netlify.com](https://www.netlify.com), [litecoin.org](https://litecoin.org/), and [forestry.io](https://forestry.io/).
 +
 +
 +{{< imgproc graph-stars Fit "600x400" >}}
 +Number of GitHub stars in relation to the Hugo release dates.
 +{{< /imgproc >}}
 +
 +More numbers:
 +
 +* 26800+ [stars](https://github.com/gohugoio/hugo/stargazers) on GitHub. 
 +* 444+ [contributors](https://github.com/gohugoio/hugo/graphs/contributors) to the Hugo source repository, 654+ to [Hugo Docs](https://github.com/gohugoio/hugoDocs/graphs/contributors). [@bep](https://github.com/bep) is the most active with around 70% of the current code base (line count).
 +* 235+ [themes](https://themes.gohugo.io/)
 +* 50% increase in the number of user sessions on the [gohugo.io](https://gohugo.io/) web sites the last 12 months.[^2]
 +* Hugo build release binaries for [a myriad](https://github.com/gohugoio/hugo/releases/tag/v0.42.2) of platforms. And since it can also be installed from Chocolatey on Windows, Brew on MacOs, Snap on Linux and `apt-get` on Debian/Ubuntu, it is impossible to give accurate download numbers. But the number is not small.
 +
 +## Hugo Next
 +
 +We're not finished with Hugo, but Hugo `0.43` very nicely wraps up the first five years. It started out as a small and fast static site generator. It is now [even faster](https://forestry.io/blog/hugo-vs-jekyll-benchmark/), and now so loaded with features that it has grown out of being just a "static site generator". It is a _framework for building websites_.
 +
 +My interest in Hugo started on the Sunday when I moved my blog, [bepsays.com](https://bepsays.com/en/), twice. The second static generator choice of that day, Hugo, was a good match. I remember Steve being very enthusiastic about getting patches with fixes and enhancements, and I was eventually taken over by the simplicity and power of Go, the programming language, and started to implement lots of new features.
 +
 +My goal with all of this, if there is one, is to get a single binary with native and really fast implementations of the complete stack I need for web development and content editing. The single binary takes most of the pain out of installation and upgrades (if you stick with the same binary, it will continue to just work for decades).
 +
 +**With 0.43, we are almost there.** With that release, it should be possible to set up a Hugo-only project without any additional tools (Gulp, WebPack) for all aspects of website building. There will still be situations where those tools will still be needed, of course, but we will continue to fill the gaps in the feature set. 
 +
 +Hugo has stuck with the sub-zero versions to signal active development, with a new main release every 5-6 weeks. But we take stability very seriously (breaking things add lots of support work, we don't like that) and most site upgrades are [smooth](https://twitter.com/tmmx/status/1006288444459503616). But we are closing in on the first major stable version.
 +
 +
 +### The Road to 1.0
 +
 +We have some more technical tasks that needs to be done (there is ongoing work to get the page queries into a more consistent state, also a simpler `.GetPage` method), but also some cool new functionality. The following roadmap is taken from memory, and may not be complete, but should be a good indication of what's ahead.
 +
 +Pages from "other data sources"
 +: Currently, in addition to Hugo's list pages, every URL must be backed by a content file (Markdown, HTML etc.). This covers most use cases, but we need a flexible way to generate pages from other data sources. Think product catalogues and similar.
 +
 +Upgrade Blackfriday to v2
 +: [Blackfriday](https://github.com/russross/blackfriday) is the main content renderer in Hugo. It has been rewritten to a more flexible architecture, which should allow us to fix some of the current shortcomings.
 +
 +We should be able to create a better and easier-to-use data structure from the rendered content: Summary, the content after the summary, being able to range over the footnotes and the ToC. Having ToC as a proper data structure also opens up a few other potential uses; using it as an index in [Related Content](https://gohugo.io/content-management/related/) would be one example.
 +
 +This should also enable us to _do more_ with [Custom Output Formats](/templates/output-formats). It is already very powerful. GettyPubs are using it in [Quire](https://github.com/gettypubs/quire) to build [beautiful multi-platform publications](http://www.getty.edu/publications/digital/digitalpubs.html). But it can be improved. For rendering of content files, you are currently restricted to HTML. It would be great if we could configure alternative renderers per output format, such as LaTeX and EPUB.
 +
 +Related to this is also to add a configurable "Markdown URL rewriter", which should make more portable URLs in Markdown, e.g. image links that work both when viewed on GitHub and your published site. 
 +
 +### The Road to the Future
 +
 +These are the items that first come to mind if you ask me to think even further ahead:
 +
 +Dependency manager for Theme Components
++: In Hugo `0.42` we added [Theme Components](/hugo-modules/theme-components) and Theme Inheritance. With SCSS support in Hugo `0.43`, which also follows the same project/themes precedence order (add `_variables.scss` to your project, configure SASS colour variables in `config.toml`), we have a solid foundation for creating easy to use and extensible themes. But we are missing some infrastructure around this. We have a site with 235+ [themes](https://themes.gohugo.io/)[^themes] listed, but you currently need to do some added work to get the theme up and running for your site. In the Go world, we don't have NPM to use, which is a curse and a blessing, but I have some ideas about building a simple dependency manager into Hugo, modelled after how Go is doing it (`hugo install`). You should be able to configure what theme and theme components you want to use, and Hugo should handle the installation of the correct versions. This should make it easier for the user, but it would also enable community driven and even commercial "theme stores".
 +
 +
 +{{< imgproc graph-themes Fit "600x400" >}}
 +Number of Hugo themes on themes.gohugo.io in relation to the Hugo release dates.
 +{{< /imgproc >}}
 +
 +
 +The "New York Times on Hugo" Use Case
 +: There are recurring questions on the support forum from [really big sites](https://discourse.gohugo.io/t/transition-2m-posts-from-wordpress-to-hugo/12704) that want to move to Hugo. There are many [good reasons](https://www.netlify.com/blog/2016/05/18/9-reasons-your-site-should-be-static/) why they want this (security, cost-saving, EU regulations etc.). And while there have been reports about companies building 600 000 pages with Hugo on very powerful hardware, we will have to rethink the build model to make this usable. Keywords are: streaming builds, segmented builds, partial rebuilds. There are other site generators also talking about this. It should be possible, and my instinct tells me that it should be easier to do when your starting point is "really fast". But this is not a small weekend project for me, and I have already talked to several companies about sponsoring this.
 +
 +Plugins
 +: A Theme Component could also be called a plugin. But there are several potential plugin hooks into Hugo's build pipeline: resource transformations, content rendering, etc. We will eventually get there, but we should do it without giving up too much of the Hugo speed and simplicity.
 +
 +
 +## Thanks
 +
 +So, thanks to everyone who has contributed to getting Hugo where it is today. It is hard to single out individuals, but a big shout-out to all the Hugo experts and moderators helping out making [discourse.gohugo.io](https://discourse.gohugo.io/) a very active and possibly one of the best support forums out there.
 +
 +And the last shout-out goes to two maintainers who have been there more or less from the start. [@digitalcraftsman](https://github.com/digitalcraftsman/) has been doing a fantastic job keeping the fast growing theme site and [repository](https://github.com/gohugoio/hugoThemes) in pristine condition. I have it on my watch list, but that is just out of curiosity. There is lots of activity, but it runs as clock work. [Anthony Fok](https://github.com/anthonyfok) has contributed with a variety of things but is most notable as the Linux expert on the team. He manages the Debian build and is the one to thank for up-to-date binaries on Debian and Ubuntu.
 +
 +One final note: If you have not done so already, please visit [github.com/gohugoio/hugo](https://github.com/gohugoio/hugo) and push the "star button".
 +
 +Gopher artwork by [Ashley McNamara](https://github.com/ashleymcnamara/gophers/) (licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/)). Inspired by [Renee French](https://reneefrench.blogspot.com/).
 +
 +[^2]: Numbers from Google Analytics. The Hugo websites are https://discourse.gohugo.io, https://gohugo.io and https://themes.gohugo.io. It is rumoured that when [Matt Biilman](https://twitter.com/biilmann?lang=en), CEO and Co-founder of Netlify, opened the first power bill after sponsoring Hugo's hosting, said: "Du må lave fis med mig, those Hugo sites have lots of web traffic!"
 +[^sgen]: That was at the time of writing this article. _Next_, a React based static site generator, has momentum and is closing in on Hugo's 2nd place. 
 +[^themes]: We pull all the themes from GitHub and build the theme site and 235 demo sites on Netlify in 4 minutes. That is impressive.
index 5e5e454fb9d11d99842462d4c7946cfd8060ad41,0000000000000000000000000000000000000000..0a8d7b212ad256bad0ab9ec59b686b34a97ca9fa
mode 100644,000000..100644
--- /dev/null
@@@ -1,87 -1,0 +1,87 @@@
- {{.Date.Format "Jan 2nd 2006"}}
 +Go templates [format your dates][time] according to a single reference time:
 +
 +```txt
 +Mon Jan 2 15:04:05 MST 2006
 +```
 +
 +You can think of `MST` as `07`, thus making the reference format string a sequence of numbers. The following is [taken directly from the Go docs][gdex]:
 +
 +```txt
 +Jan 2 15:04:05 2006 MST
 +  1 2  3  4  5    6  -7
 +```
 +
 +### Hugo Date Templating Reference
 +
 +Each of the following examples show the reference formatting string followed by the string Hugo will output in your HTML.
 +
 +Note that the examples were rendered and tested in [CST] and pull from a single example date you might have in your content's front matter:
 +
 +```yml
 +date: 2017-03-03T14:15:59-06:00
 +```
 +
 +`.Date` (i.e. called via [page variable][pagevars])
 +: **Returns**: `2017-03-03 14:15:59 -0600 CST`
 +
 +`"Monday, January 2, 2006"`
 +: **Returns**: `Friday, March 3, 2017`
 +
 +`"Mon Jan 2 2006"`
 +: **Returns**: `Fri Mar 3 2017`
 +
 +`"January 2nd"`
 +: **Returns**: `March 3rd`
 +
 +`"January 2006"`
 +: **Returns**: `March 2017`
 +
 +`"2006-01-02"`
 +: **Returns**: `2017-03-03`
 +
 +`"Monday"`
 +: **Returns**: `Friday`
 +
 +`"02 Jan 06 15:04 MST"` (RFC822)
 +: **Returns**: `03 Mar 17 14:15 CST`
 +
 +`"02 Jan 06 15:04 -0700"` (RFC822Z)
 +: **Returns**: `03 Mar 17 14:15 -0600`
 +
 +`"Mon, 02 Jan 2006 15:04:05 MST"` (RFC1123)
 +: **Returns**: `Fri, 03 Mar 2017 14:15:59 CST`
 +
 +`"Mon, 02 Jan 2006 15:04:05 -0700"` (RFC339)
 +: **Returns**: `Fri, 03 Mar 2017 14:15:59 -0600`
 +
 +### Cardinal Numbers and Ordinal Abbreviations
 +
 +Spelled-out cardinal numbers (e.g. "one", "two", and "three") and ordinal abbreviations (e.g. "1st", "2nd", and "3rd") are not currently supported.
 +
 +To continue with the example above:
 +
 +```go-html-template
- Mar 3nd 2017
++{{ .Date.Format "Jan 2nd 2006" }}
 +```
 +
 +Hugo assumes you want to append `nd` as a string to the day of the month and outputs the following:
 +
 +```txt
++Mar 2nd 2017
 +```
 +
 +### Use `.Local` and `.UTC`
 +
 +In conjunction with the [`dateFormat` function][dateFormat], you can also convert your dates to `UTC` or to local timezones:
 +
 +`{{ dateFormat "02 Jan 06 15:04 MST" .Date.UTC }}`
 +: **Returns**: `03 Mar 17 20:15 UTC`
 +
 +`{{ dateFormat "02 Jan 06 15:04 MST" .Date.Local }}`
 +: **Returns**: `03 Mar 17 14:15 CST`
 +
 +[CST]: https://en.wikipedia.org/wiki/Central_Time_Zone
 +[dateFormat]: /functions/dateformat/
 +[gdex]: https://golang.org/pkg/time/#example_Time_Format
 +[pagevars]: /variables/page/
 +[time]: https://golang.org/pkg/time/
index f0d2ecd9a4a4f1173912c2c856b46e403bee3b53,0000000000000000000000000000000000000000..05bfb71a853e8a79b9b6226e06772bf3b562fdd9
mode 100644,000000..100644
--- /dev/null
@@@ -1,66 -1,0 +1,55 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
 +---
 +title: Custom 404 Page
 +linktitle: 404 Page
 +description: If you know how to create a single page template, you have unlimited options for creating a custom 404.
-     parent: "templates"
 +categories: [templates]
 +keywords: [404, page not found]
 +menu:
 +  docs:
- weight: 120   #rem
- draft: false
- aliases: []
- toc: false
++    parent: templates
 +    weight: 120
- {{< code file="layouts/404.html" download="404.html" >}}
- {{ define "main"}}
-     <main id="main">
-       <div>
-        <h1 id="title"><a href="{{ "" | relURL }}">Go Home</a></h1>
-       </div>
-     </main>
++weight: 120
 +---
 +
 +When using Hugo with [GitHub Pages](https://pages.github.com/), you can provide your own template for a [custom 404 error page](https://docs.github.com/en/pages/getting-started-with-github-pages/creating-a-custom-404-page-for-your-github-pages-site) by creating a 404.html template file in the root of your `layouts` folder. When Hugo generates your site, the `404.html` file will be placed in the root.
 +
 +404 pages will have all the regular [page variables][pagevars] available to use in the templates.
 +
 +In addition to the standard page variables, the 404 page has access to all site content accessible from `.Pages`.
 +
 +```txt
 +▾ layouts/
 +    404.html
 +```
 +
 +## 404.html
 +
 +This is a basic example of a 404.html template:
 +
- * [GitHub Pages](/hosting-and-deployment/hosting-on-github/) and [GitLab Pages](/hosting-and-deployment/hosting-on-gitlab/). The 404 page is automatic.
++{{< code file="layouts/404.html" >}}
++{{ define "main" }}
++  <main id="main">
++    <div>
++      <h1 id="title"><a href="{{ "" | relURL }}">Go Home</a></h1>
++    </div>
++  </main>
 +{{ end }}
 +{{< /code >}}
 +
 +## Automatic Loading
 +
 +Your 404.html file can be set to load automatically when a visitor enters a mistaken URL path, dependent upon the web serving environment you are using. For example:
 +
- {{% note %}}
- `hugo server` will not automatically load your custom `404.html` file, but you
- can test the appearance of your custom "not found" page by navigating your
- browser to `/404.html`.
- {{% /note %}}
++* [GitHub Pages](/hosting-and-deployment/hosting-on-github/), [GitLab Pages](/hosting-and-deployment/hosting-on-gitlab/) and [Cloudflare Pages](/hosting-and-deployment/hosting-on-cloudflare-pages/). The 404 page is automatic.
 +* Apache. You can specify `ErrorDocument 404 /404.html` in an `.htaccess` file in the root of your site.
 +* Nginx. You might specify `error_page 404 /404.html;` in your `nginx.conf` file. [Details here](https://nginx.org/en/docs/http/ngx_http_core_module.html#error_page).
 +* Amazon AWS S3. When setting a bucket up for static web serving, you can specify the error file from within the S3 GUI.
 +* Amazon CloudFront. You can specify the page in the Error Pages section in the CloudFront Console. [Details here](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html)
 +* Caddy Server. Use the `handle_errors` directive to specify error pages for one or more status codes. [Details here](https://caddyserver.com/docs/caddyfile/directives/handle_errors)
 +* Netlify. Add `/* /404.html 404` to `content/_redirects`. [Details Here](https://www.netlify.com/docs/redirects/#custom-404)
 +* Azure Static Web App. set `responseOverrides.404.rewrite` and `responseOverrides.404.statusCode` in configfile `staticwebapp.config.json`. [Details here](https://docs.microsoft.com/en-us/azure/static-web-apps/configuration#response-overrides)
 +* Azure Storage as Static Web Site Hosting. You can specify the `Error document path` in the Static website configuration page of the Azure portal. [Details here](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website).
 +* DigitalOcean App Platform. You can specify `error_document` in your app specification file or use control panel to set up error document. [Details here](https://docs.digitalocean.com/products/app-platform/how-to/manage-static-sites/#configure-a-static-site).
 +* [Firebase Hosting](https://firebase.google.com/docs/hosting/full-config#404): `/404.html` automatically gets used as the 404 page.
 +
 +[pagevars]: /variables/page/
index 18ae40eaca784991d56169004677996b32dc7a3c,0000000000000000000000000000000000000000..aad680a762b9ca3a80430f362cbb9a3804e2534c
mode 100644,000000..100644
--- /dev/null
@@@ -1,19 -1,0 +1,13 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: Templates
 +linktitle: Templates Overview
 +description: Go templating, template types and lookup order, shortcodes, and data.
-     parent: "templates"
 +menu:
 +  docs:
- weight: 01    #rem
++    parent: templates
 +    weight: 01
- draft: false
++weight: 01
 +categories: [templates]
 +keywords: []
- toc: false
- notesforauthors:
 +aliases: [/templates/overview/,/templates/content]
 +---
index c82cc09a1666181465b60d81d29a8b4bf98bac71,0000000000000000000000000000000000000000..acfc7824af9e0ae09c7fc1e7d218de9db5b3df0d
mode 100644,000000..100644
--- /dev/null
@@@ -1,102 -1,0 +1,97 @@@
- linktitle:
 +---
 +title: Base Templates and Blocks
- date: 2017-02-01
- publishdate: 2017-02-01
 +description: The base and block constructs allow you to define the outer shell of your master templates (i.e., the chrome of the page).
-     parent: "templates"
 +categories: [templates,fundamentals]
 +keywords: [blocks,base]
 +menu:
 +  docs:
- sections_weight: 20
- draft: false
++    parent: templates
 +    weight: 20
 +weight: 20
- {{< code file="layouts/_default/baseof.html" download="baseof.html" >}}
 +aliases: [/templates/blocks/,/templates/base-templates-and-blocks/]
 +toc: true
 +---
 +
 +The `block` keyword allows you to define the outer shell of your pages' one or more master template(s) and then fill in or override portions as necessary.
 +
 +{{< youtube QVOMCYitLEc >}}
 +
 +## Base Template Lookup Order
 +
 +The base template lookup order closely follows that of the template it applies to (e.g. `_default/list.html`).
 +
 +See [Template Lookup Order](/templates/lookup-order/) for details and examples.
 +
 +## Define the Base Template
 +
 +The following defines a simple base template at `_default/baseof.html`. As a default template, it is the shell from which all your pages will be rendered unless you specify another `*baseof.html` closer to the beginning of the lookup order.
 +
- {{< code file="layouts/_default/list.html" download="list.html" >}}
++{{< code file="layouts/_default/baseof.html" >}}
 +<!DOCTYPE html>
 +<html>
 +  <head>
 +    <meta charset="utf-8">
 +    <title>{{ block "title" . }}
 +      <!-- Blocks may include default content. -->
 +      {{ .Site.Title }}
 +    {{ end }}</title>
 +  </head>
 +  <body>
 +    <!-- Code that all your templates share, like a header -->
 +    {{ block "main" . }}
 +      <!-- The part of the page that begins to differ between templates -->
 +    {{ end }}
 +    {{ block "footer" . }}
 +    <!-- More shared code, perhaps a footer but that can be overridden if need be in  -->
 +    {{ end }}
 +  </body>
 +</html>
 +{{< /code >}}
 +
 +## Override the Base Template
 +
 +From the above base template, you can define a [default list template][hugolists]. The default list template will inherit all of the code defined above and can then implement its own `"main"` block from:
 +
- {{% warning %}}
++{{< code file="layouts/_default/list.html" >}}
 +{{ define "main" }}
 +  <h1>Posts</h1>
 +  {{ range .Pages }}
 +    <article>
 +      <h2>{{ .Title }}</h2>
 +      {{ .Content }}
 +    </article>
 +  {{ end }}
 +{{ end }}
 +{{< /code >}}
 +
 +This replaces the contents of our (basically empty) "main" block with something useful for the list template. In this case, we didn't define a `"title"` block, so the contents from our base template remain unchanged in lists.
 +
- {{% /warning %}}
++{{% note %}}
 +Code that you put outside the block definitions *can* break your layout. This even includes HTML comments. For example:
 +
 +```go-html-template
 +<!-- Seemingly harmless HTML comment..that will break your layout at build -->
 +{{ define "main" }}
 +...your code here
 +{{ end }}
 +```
 +[See this thread from the Hugo discussion forums.](https://discourse.gohugo.io/t/baseof-html-block-templates-and-list-types-results-in-empty-pages/5612/6)
- {{< code file="layouts/_default/single.html" download="single.html" >}}
++{{% /note %}}
 +
 +The following shows how you can override both the `"main"` and `"title"` block areas from the base template with code unique to your [default single page template][singletemplate]:
 +
-   <!-- This will override the default value set in baseof.html; i.e., "{{.Site.Title}}" in the original example-->
++{{< code file="layouts/_default/single.html" >}}
 +{{ define "title" }}
++  <!-- This will override the default value set in baseof.html; i.e., "{{ .Site.Title }}" in the original example-->
 +  {{ .Title }} &ndash; {{ .Site.Title }}
 +{{ end }}
 +{{ define "main" }}
 +  <h1>{{ .Title }}</h1>
 +  {{ .Content }}
 +{{ end }}
 +{{< /code >}}
 +
 +[hugolists]: /templates/lists
 +[lookup]: /templates/lookup-order/
 +[rendering the section]: /templates/section-templates/
 +[singletemplate]: /templates/single-page-templates/
index 1586d3a54e232fc828bfe487e7364bc9fdbf8583,0000000000000000000000000000000000000000..ee44fb60ebe19879d1e2b1db3c01930545a8b943
mode 100644,000000..100644
--- /dev/null
@@@ -1,273 -1,0 +1,268 @@@
- linktitle:
 +---
 +title: Data Templates
- date: 2017-02-01
- publishdate: 2017-02-01
 +description: In addition to Hugo's built-in variables, you can specify your own custom data in templates or shortcodes that pull from both local and dynamic sources.
-     parent: "templates"
 +categories: [templates]
 +keywords: [data,dynamic,csv,json,toml,yaml,xml]
 +menu:
 +  docs:
- sections_weight: 80
++    parent: templates
 +    weight: 80
 +weight: 80
- Data Files can also be used in [Hugo themes][themes].
 +aliases: [/extras/datafiles/,/extras/datadrivencontent/,/doc/datafiles/]
 +toc: true
 +---
 +
 +<!-- begin data files -->
 +
 +Hugo supports loading data from YAML, JSON, XML, and TOML files located in the `data` directory at the root of your Hugo project.
 +
 +{{< youtube FyPgSuwIMWQ >}}
 +
 +## The Data Folder
 +
 +The `data` folder should store additional data for Hugo to use when generating your site. 
 +
 +Data files are not for generating standalone pages. They should supplement content files by:
 +
 +- extending the content when the front matter fields grow out of control, or
 +- showing a larger dataset in a template (see the example below).
 +
 +In both cases, it's a good idea to outsource the data in their (own) files.
 +
 +These files must be YAML, JSON, XML, or TOML files (using the `.yml`, `.yaml`, `.json`, `.xml`, or `.toml` extension). The data will be accessible as a `map` in the `.Site.Data` variable.
 +
 +To access the data using the `site.Data.filename` notation, the filename must begin with an underscore or a Unicode letter, followed by zero or more underscores, Unicode letters, or Unicode digits. For example:
 +
 +- `123.json` - Invalid
 +- `x123.json` - Valid
 +- `_123.json` - Valid
 +
 +To access the data using the [`index`](/functions/index-function/) function, the filename is irrelevant. For example:
 +
 +Data file|Template code
 +:--|:--
 +`123.json`|`{{ index .Site.Data "123" }}`
 +`x123.json`|`{{ index .Site.Data "x123" }}`
 +`_123.json`|`{{ index .Site.Data "_123" }}`
 +`x-123.json`|`{{ index .Site.Data "x-123" }}`
 +
 +## Data Files in Themes
 +
- <div>Short Description of {{.Site.Data.User0123.Name}}: <p>{{ index .Site.Data.User0123 "Short Description" | markdownify }}</p></div>
++Data Files can also be used in themes.
 +
 +However, note that the theme data files are merged with the project directory taking precedence. That is, Given two files with the same name and relative path, the data in the file in the root project `data` directory will override the data from the file in the `themes/<THEME>/data` directory *for keys that are duplicated*).
 +
 +Therefore, theme authors should be careful not to include data files that could be easily overwritten by a user who decides to [customize a theme][customize]. For theme-specific data items that shouldn't be overridden, it can be wise to prefix the folder structure with a namespace; e.g. `mytheme/data/<THEME>/somekey/...`. To check if any such duplicate exists, run hugo with the `-v` flag.
 +
 +The keys in the map created with data templates from data files will be a dot-chained set of `path`, `filename`, and `key` in the file (if applicable).
 +
 +This is best explained with an example:
 +
 +## Example: Jaco Pastorius' Solo Discography
 +
 +[Jaco Pastorius](https://en.wikipedia.org/wiki/Jaco_Pastorius_discography) was a great bass player, but his solo discography is short enough to use as an example. [John Patitucci](https://en.wikipedia.org/wiki/John_Patitucci) is another bass giant.
 +
 +The example below is a bit contrived, but it illustrates the flexibility of data Files. This example uses TOML as its file format with the two following data files:
 +
 +* `data/jazz/bass/jacopastorius.toml`
 +* `data/jazz/bass/johnpatitucci.toml`
 +
 +`jacopastorius.toml` contains the content below. `johnpatitucci.toml` contains a similar list:
 +
 +{{< code-toggle file="jacopastorius" >}}
 +discography = [
 +"1974 - Modern American Music … Period! The Criteria Sessions",
 +"1974 - Jaco",
 +"1976 - Jaco Pastorius",
 +"1981 - Word of Mouth",
 +"1981 - The Birthday Concert (released in 1995)",
 +"1982 - Twins I & II (released in 1999)",
 +"1983 - Invitation",
 +"1986 - Broadway Blues (released in 1998)",
 +"1986 - Honestly Solo Live (released in 1990)",
 +"1986 - Live In Italy (released in 1991)",
 +"1986 - Heavy'n Jazz (released in 1992)",
 +"1991 - Live In New York City, Volumes 1-7.",
 +"1999 - Rare Collection (compilation)",
 +"2003 - Punk Jazz: The Jaco Pastorius Anthology (compilation)",
 +"2007 - The Essential Jaco Pastorius (compilation)"
 +]
 +{{< /code-toggle >}}
 +
 +The list of bass players can be accessed via `.Site.Data.jazz.bass`, a single bass player by adding the filename without the suffix, e.g. `.Site.Data.jazz.bass.jacopastorius`.
 +
 +You can now render the list of recordings for all the bass players in a template:
 +
 +```go-html-template
 +{{ range $.Site.Data.jazz.bass }}
 +   {{ partial "artist.html" . }}
 +{{ end }}
 +```
 +
 +And then in the `partials/artist.html`:
 +
 +```go-html-template
 +<ul>
 +{{ range .discography }}
 +  <li>{{ . }}</li>
 +{{ end }}
 +</ul>
 +```
 +
 +Discover a new favorite bass player? Just add another `.toml` file in the same directory.
 +
 +## Example: Accessing Named Values in a Data File
 +
 +Assume you have the following data structure in your `User0123.[yml|toml|xml|json]` data file located directly in `data/`:
 +
 +{{< code-toggle file="User0123" >}}
 +Name: User0123
 +"Short Description": "He is a **jolly good** fellow."
 +Achievements:
 +  - "Can create a Key, Value list from Data File"
 +  - "Learns Hugo"
 +  - "Reads documentation"
 +{{</ code-toggle >}}
 +
 +You can use the following code to render the `Short Description` in your layout:
 +
 +```go-html-template
- {{ $data := getJSON "https://example.org/api" (dict "Authorization" "Bearer abcd")  }}
++<div>Short Description of {{ .Site.Data.User0123.Name }}: <p>{{ index .Site.Data.User0123 "Short Description" | markdownify }}</p></div>
 +```
 +
 +Note the use of the [`markdownify` template function][markdownify]. This will send the description through the Markdown rendering engine.
 +
 +
 +## Get Remote Data
 +
 +Use `getJSON` or `getCSV` to get remote data:
 +
 +```go-html-template
 +{{ $dataJ := getJSON "url" }}
 +{{ $dataC := getCSV "separator" "url" }}
 +```
 +
 +If you use a prefix or postfix for the URL, the functions accept [variadic arguments][variadic]:
 +
 +```go-html-template
 +{{ $dataJ := getJSON "url prefix" "arg1" "arg2" "arg n" }}
 +{{ $dataC := getCSV  "separator" "url prefix" "arg1" "arg2" "arg n" }}
 +```
 +
 +The separator for `getCSV` must be put in the first position and can only be one character long.
 +
 +All passed arguments will be joined to the final URL:
 +
 +```go-html-template
 +{{ $urlPre := "https://api.github.com" }}
 +{{ $gistJ := getJSON $urlPre "/users/GITHUB_USERNAME/gists" }}
 +```
 +
 +This will resolve internally to the following:
 +
 +```go-html-template
 +{{ $gistJ := getJSON "https://api.github.com/users/GITHUB_USERNAME/gists" }}
 +```
 +
 +### Add HTTP headers
 +
 +Both `getJSON` and `getCSV` takes an optional map as the last argument, e.g.:
 +
 +```go-html-template
- {{ $data := getJSON "https://example.org/api" (dict "X-List" (slice "a" "b" "c"))  }}
++{{ $data := getJSON "https://example.org/api" (dict "Authorization" "Bearer abcd") }}
 +```
 +
 +If you need multiple values for the same header key, use a slice:
 +
 +```go-html-template
- The expression `{{index $r number}}` must be used to output the nth-column from the current row.
++{{ $data := getJSON "https://example.org/api" (dict "X-List" (slice "a" "b" "c")) }}
 +```
 +
 +### Example for CSV files
 +
 +For `getCSV`, the one-character-long separator must be placed in the first position followed by the URL. The following is an example of creating an HTML table in a [partial template][partials] from a published CSV:
 +
 +{{< code file="layouts/partials/get-csv.html" >}}
 +  <table>
 +    <thead>
 +      <tr>
 +      <th>Name</th>
 +      <th>Position</th>
 +      <th>Salary</th>
 +      </tr>
 +    </thead>
 +    <tbody>
 +    {{ $url := "https://example.com/finance/employee-salaries.csv" }}
 +    {{ $sep := "," }}
 +    {{ range $i, $r := getCSV $sep $url }}
 +      <tr>
 +        <td>{{ index $r 0 }}</td>
 +        <td>{{ index $r 1 }}</td>
 +        <td>{{ index $r 2 }}</td>
 +      </tr>
 +    {{ end }}
 +    </tbody>
 +  </table>
 +{{< /code >}}
 +
- {{% /warning %}}
++The expression `{{ index $r number }}` must be used to output the nth-column from the current row.
 +
 +### Cache URLs
 +
 +Each downloaded URL will be cached in the default folder `$TMPDIR/hugo_cache/`. The variable `$TMPDIR` will be resolved to your system-dependent temporary directory.
 +
 +With the command-line flag `--cacheDir`, you can specify any folder on your system as a caching directory.
 +
 +You can also set `cacheDir` in the [main configuration file][config].
 +
 +If you don't like caching at all, you can fully disable caching with the command-line flag `--ignoreCache`.
 +
 +### Authentication When Using REST URLs
 +
 +Currently, you can only use those authentication methods that can be put into an URL. [OAuth] and other authentication methods are not implemented.
 +
 +## Load Local files
 +
 +To load local files with `getJSON` and `getCSV`, the source files must reside within Hugo's working directory. The file extension does not matter, but the content does.
 +
 +It applies the same output logic as above in [Get Remote Data](#get-remote-data).
 +
 +{{% note %}}
 +The local CSV files to be loaded using `getCSV` must be located **outside** the `data` directory.
 +{{% /note %}}
 +
 +## LiveReload with Data Files
 +
 +There is no chance to trigger a [LiveReload] when the content of a URL changes. However, when a *local* file changes (i.e., `data/*` and `themes/<THEME>/data/*`), a LiveReload will be triggered. Symlinks are not supported. Note too that because downloading data takes a while, Hugo stops processing your Markdown files until the data download has been completed.
 +
 +{{% warning "URL Data and LiveReload" %}}
 +If you change any local file and the LiveReload is triggered, Hugo will read the data-driven (URL) content from the cache. If you have disabled the cache (i.e., by running the server with `hugo server --ignoreCache`), Hugo will re-download the content every time LiveReload triggers. This can create *huge* traffic. You may reach API limits quickly.
- [customize]: /themes/customizing/
++{{% /note %}}
 +
 +## Examples of Data-driven Content
 +
 +- Photo gallery JSON powered: [https://github.com/pcdummy/hugo-lightslider-example](https://github.com/pcdummy/hugo-lightslider-example)
 +- GitHub Starred Repositories [in a post](https://github.com/SchumacherFM/blog-cs/blob/master/content%2Fposts%2Fgithub-starred.md) using data-driven content in a [custom short code](https://github.com/SchumacherFM/blog-cs/blob/master/layouts%2Fshortcodes%2FghStarred.html).
 +
 +## Specs for Data Formats
 +
 +* [TOML Spec][toml]
 +* [YAML Spec][yaml]
 +* [JSON Spec][json]
 +* [CSV Spec][csv]
 +* [XML Spec][xml]
 +
 +[config]: /getting-started/configuration/
 +[csv]: https://tools.ietf.org/html/rfc4180
- [themes]: /themes/
++[customize]: /hugo-modules/theme-components/
 +[json]: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf "Specification for JSON, JavaScript Object Notation"
 +[LiveReload]: /getting-started/usage/#livereload
 +[lookup]: /templates/lookup-order/
 +[markdownify]: /functions/markdownify/
 +[OAuth]: https://en.wikipedia.org/wiki/OAuth
 +[partials]: /templates/partials/
 +[toml]: https://github.com/toml-lang/toml
 +[variadic]: https://en.wikipedia.org/wiki/Variadic_function
 +[vars]: /variables/
 +[yaml]: https://yaml.org/spec/
 +[xml]: https://www.w3.org/XML/
index 697863c4cd59dffe0e0218c6d9545d3565f53bd5,0000000000000000000000000000000000000000..1f40b7af8cf2e0575ec85c6e1644fdbaf545e6cb
mode 100644,000000..100644
--- /dev/null
@@@ -1,64 -1,0 +1,57 @@@
- linktitle: Local File Templates
 +---
 +title: Local File Templates
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Hugo's `readDir` and `readFile` functions make it easy to traverse your project's directory structure and write file contents to your templates.
-     parent: "templates"
 +categories: [templates]
 +keywords: [files,directories]
 +menu:
 +  docs:
- sections_weight: 110
- draft: false
++    parent: templates
 +    weight: 110
 +weight: 110
- {{% warning %}}
 +aliases: [/extras/localfiles/,/templates/local-files/]
 +toc: true
 +---
 +
 +## Traverse Local Files
 +
 +With Hugo's [`readDir`][readDir] and [`readFile`][readFile] template functions, you can traverse your website's files on your server.
 +
 +## Use `readDir`
 +
 +The [`readDir` function][readDir] returns an array of [`os.FileInfo`][osfileinfo]. It takes the file's `path` as a single string argument. This path can be to any directory of your website (i.e., as found on your server's file system).
 +
 +Whether the path is absolute or relative does not matter because---at least for `readDir`---the root of your website (typically `./public/`) in effect becomes both:
 +
 +1. The file system root
 +2. The current working directory
 +
 +## Use `readFile`
 +
 +The [`readfile` function][readFile] reads a file from disk and converts it into a string to be manipulated by other Hugo functions or added as-is. `readFile` takes the file, including path, as an argument passed to the function.
 +
 +To use the `readFile` function in your templates, make sure the path is relative to your *Hugo project's root directory*:
 +
 +```go-html-template
 +{{ readFile "/content/templates/local-file-templates" }}
 +```
 +
 +### `readFile` Example: Add a Project File to Content
 +
 +As `readFile` is a function, it is only available to you in your templates and not your content. However, we can create a simple [shortcode template][sct] that calls `readFile`, passes the first argument through the function, and then allows an optional second argument to send the file through the Markdown processor. The pattern for adding this shortcode to your content will be as follows:
 +
 +```go-html-template
 +{{</* readfile file="/path/to/local/file.txt" markdown="true" */>}}
 +```
 +
- {{% /warning %}}
++{{% note %}}
 +If you are going to create [custom shortcodes](/templates/shortcode-templates/) with `readFile` for a theme, note that usage of the shortcode will refer to the project root and *not* your `themes` directory.
- [dirindex]: https://github.com/gohugoio/hugo/blob/master/docs/layouts/shortcodes/directoryindex.html
++{{% /note %}}
 +
 +[called directly in the Hugo docs]: https://github.com/gohugoio/hugoDocs/blob/master/content/en/templates/files.md
 +[osfileinfo]: https://golang.org/pkg/os/#FileInfo
 +[readDir]: /functions/readdir/
 +[readFile]: /functions/readfile/
 +[sc]: /content-management/shortcodes/
 +[sct]: /templates/shortcode-templates/
 +[readfilesource]: https://github.com/gohugoio/hugoDocs/blob/master/layouts/shortcodes/readfile.html
 +[testfile]: https://github.com/gohugoio/hugoDocs/blob/master/content/en/readfiles/testing.txt
index ace3f259bf98d2218484690013fd796cd62e1a08,0000000000000000000000000000000000000000..0bab21ed5eb1028c263592926db10044b4471945
mode 100644,000000..100644
--- /dev/null
@@@ -1,71 -1,0 +1,66 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: Homepage Template
 +linktitle: Homepage Template
 +description: The homepage of a website is often formatted differently than the other pages. For this reason, Hugo makes it easy for you to define your new site's homepage as a unique template.
-     parent: "templates"
 +categories: [templates]
 +keywords: [homepage]
 +menu:
 +  docs:
- sections_weight: 30
- draft: false
++    parent: templates
 +    weight: 30
 +weight: 30
- {{% note "The Only Required Template" %}}
 +aliases: [/layout/homepage/,/templates/homepage-template/]
 +toc: true
 +---
 +
 +Homepage is a `Page` and therefore has all the [page variables][pagevars] and [site variables][sitevars] available for use.
 +
- The following is an example of a homepage template that uses [partial][partials], [base] templates, and a content file at `content/_index.md` to populate the `{{.Title}}` and `{{.Content}}` [page variables][pagevars].
++{{% note %}}
 +The homepage template is the *only* required template for building a site and therefore useful when bootstrapping a new site and template. It is also the only required template if you are developing a single-page website.
 +{{% /note %}}
 +
 +{{< youtube ut1xtRZ1QOA >}}
 +
 +## Homepage Template Lookup Order
 +
 +See [Template Lookup](/templates/lookup-order/).
 +
 +## Add Content and Front Matter to the Homepage
 +
 +The homepage, similar to other [list pages in Hugo][lists], accepts content and front matter from an `_index.md` file. This file should live at the root of your `content` folder (i.e., `content/_index.md`). You can then add body copy and metadata to your homepage the way you would any other content file.
 +
 +See the homepage template below or [Content Organization][contentorg] for more information on the role of `_index.md` in adding content and front matter to list pages.
 +
 +## Example Homepage Template
 +
- {{< code file="layouts/index.html" download="index.html" >}}
++The following is an example of a homepage template that uses [partial][partials], [base] templates, and a content file at `content/_index.md` to populate the `{{ .Title }}` and `{{ .Content }}` [page variables][pagevars].
 +
-     <main aria-role="main">
-       <header class="homepage-header">
-         <h1>{{.Title}}</h1>
-         {{ with .Params.subtitle }}
-         <span class="subtitle">{{.}}</span>
-         {{ end }}
-       </header>
-       <div class="homepage-content">
-         <!-- Note that the content for index.html, as a sort of list page, will pull from content/_index.md -->
-         {{.Content}}
-       </div>
-       <div>
-         {{ range first 10 .Site.RegularPages }}
-             {{ .Render "summary"}}
-         {{ end }}
-       </div>
-     </main>
++{{< code file="layouts/index.html" >}}
 +{{ define "main" }}
++  <main aria-role="main">
++    <header class="homepage-header">
++      <h1>{{ .Title }}</h1>
++      {{ with .Params.subtitle }}
++      <span class="subtitle">{{ . }}</span>
++      {{ end }}
++    </header>
++    <div class="homepage-content">
++      <!-- Note that the content for index.html, as a sort of list page, will pull from content/_index.md -->
++      {{ .Content }}
++    </div>
++    <div>
++      {{ range first 10 .Site.RegularPages }}
++          {{ .Render "summary" }}
++      {{ end }}
++    </div>
++  </main>
 +{{ end }}
 +{{< /code >}}
 +
 +[base]: /templates/base/
 +[contentorg]: /content-management/organization/
 +[lists]: /templates/lists/
 +[lookup]: /templates/lookup-order/
 +[pagevars]: /variables/page/
 +[partials]: /templates/partials/
 +[sitevars]: /variables/site/
index 05a6c862f8b46fda6e72c22588e55114ff31c69a,0000000000000000000000000000000000000000..52e40b5a11835b1bb4973e0ea659291728d2c747
mode 100644,000000..100644
--- /dev/null
@@@ -1,240 -1,0 +1,232 @@@
- linktitle: Internal Templates
 +---
 +title: Internal Templates
- date: 2017-03-06
- publishdate: 2017-03-06
- lastmod: 2017-03-06
 +description: Hugo ships with a group of boilerplate templates that cover the most common use cases for static websites.
-     parent: "templates"
 +categories: [templates]
 +keywords: [internal, analytics,]
 +menu:
 +  docs:
- sections_weight: 168
- draft: false
- aliases: []
++    parent: templates
 +    weight: 168
 +weight: 168
- wip: true
 +toc: true
- {{% warning %}}
 +---
 +<!-- reference: https://discourse.gohugo.io/t/lookup-order-for-partials/5705/6
 +code: https://github.com/gohugoio/hugo/blob/e445c35d6a0c7f5fc2f90f31226cd1d46e048bbc/tpl/template_embedded.go#L147 -->
 +
- {{% /warning %}}
++{{% note %}}
 +While the following internal templates are called similar to partials, they do *not* observe the partial template lookup order.
- {{< code file="layouts/partials/disqus.html" download="disqus.html" >}}
++{{% /note %}}
 +
 +## Google Analytics
 +
 +Hugo ships with internal templates supporting Google Analytics, both [Google Analytics 4][GA4] (GA4) and Universal Analytics.
 +
 +**Note:** Universal Analytics are deprecated. For details, see [Universal Analytics will be going away].
 +
 +[GA4]: https://support.google.com/analytics/answer/10089681
 +[Universal Analytics will be going away]: https://support.google.com/analytics/answer/11583528
 +
 +### Configure Google Analytics
 +
 +Provide your tracking ID in your configuration file:
 +
 +**Google Analytics 4 (gtag.js)**
 +{{< code-toggle file="config" >}}
 +googleAnalytics = "G-MEASUREMENT_ID"
 +{{</ code-toggle >}}
 +
 +**Google Universal Analytics (analytics.js)**
 +{{< code-toggle file="config" >}}
 +googleAnalytics = "UA-PROPERTY_ID"
 +{{</ code-toggle >}}
 +
 +### Use the Google Analytics Template
 +
 +You can then include the Google Analytics internal template:
 +
 +```go-html-template
 +{{ template "_internal/google_analytics_async.html" . }}
 +```
 +
 +**Note:** The async template is _not_ suitable for Google Analytics 4.
 +
 +```go-html-template
 +{{ template "_internal/google_analytics.html" . }}
 +```
 +
 +If you want to create your own template, you can access the configured ID with `{{ site.Config.Services.GoogleAnalytics.ID }}`.
 +
 +## Disqus
 +
 +Hugo also ships with an internal template for [Disqus comments][disqus], a popular commenting system for both static and dynamic websites. In order to effectively use Disqus, you will need to secure a Disqus "shortname" by [signing up for the free service][disqussignup].
 +
 +### Configure Disqus
 +
 +To use Hugo's Disqus template, you first need to set a single configuration value:
 +
 +{{< code-toggle file="config" >}}
 +disqusShortname = "your-disqus-shortname"
 +{{</ code-toggle >}}
 +
 +You also have the option to set the following in the front matter for a given piece of content:
 +
 +* `disqus_identifier`
 +* `disqus_title`
 +* `disqus_url`
 +
 +### Use the Disqus Template
 +
 +To add Disqus, include the following line in templates where you want your comments to appear:
 +
 +```go-html-template
 +{{ template "_internal/disqus.html" . }}
 +```
 +
 +A `.Site.DisqusShortname` variable is also exposed from the config.
 +
 +### Conditional Loading of Disqus Comments
 +
 +Users have noticed that enabling Disqus comments when running the Hugo web server on `localhost` (i.e. via `hugo server`) causes the creation of unwanted discussions on the associated Disqus account.
 +
 +You can create the following `layouts/partials/disqus.html`:
 +
++{{< code file="layouts/partials/disqus.html" >}}
 +<div id="disqus_thread"></div>
 +<script type="text/javascript">
 +
 +(function() {
 +    // Don't ever inject Disqus on localhost--it creates unwanted
 +    // discussions from 'localhost:1313' on your Disqus account...
 +    if (window.location.hostname == "localhost")
 +        return;
 +
 +    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
 +    var disqus_shortname = '{{ .Site.DisqusShortname }}';
 +    dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
 +    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
 +})();
 +</script>
 +<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
 +<a href="https://disqus.com/" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
 +{{< /code >}}
 +
 +The `if` statement skips the initialization of the Disqus comment injection when you are running on `localhost`.
 +
 +You can then render your custom Disqus partial template as follows:
 +
 +```go-html-template
 +{{ partial "disqus.html" . }}
 +```
 +
 +## Open Graph
 +
 +An internal template for the [Open Graph protocol](https://ogp.me/), metadata that enables a page to become a rich object in a social graph.
 +This format is used for Facebook and some other sites.
 +
 +### Configure Open Graph
 +
 +Hugo's Open Graph template is configured using a mix of configuration variables and [front-matter](/content-management/front-matter/) on individual pages.
 +
 +{{< code-toggle file="config" >}}
 +[params]
 +  title = "My cool site"
 +  images = ["site-feature-image.jpg"]
 +  description = "Text about my cool site"
 +[taxonomies]
 +  series = "series"
 +{{</ code-toggle >}}
 +
 +{{< code-toggle file="content/blog/my-post" >}}
 +title = "Post title"
 +description = "Text about this post"
 +date = "2006-01-02"
 +images = ["post-cover.png"]
 +audio = []
 +videos = []
 +series = []
 +tags = []
 +{{</ code-toggle >}}
 +
 +Hugo uses the page title and description for the title and description metadata.
 +The first 6 URLs from the `images` array are used for image metadata.
 +If [page bundles](/content-management/page-bundles/) are used and the `images` array is empty or undefined, images with filenames matching `*feature*` or `*cover*,*thumbnail*` are used for image metadata.
 +
 +Various optional metadata can also be set:
 +
 +- Date, published date, and last modified data are used to set the published time metadata if specified.
 +- `audio` and `videos` are URL arrays like `images` for the audio and video metadata tags, respectively.
 +- The first 6 `tags` on the page are used for the tags metadata.
 +- The `series` taxonomy is used to specify related "see also" pages by placing them in the same series.
 +
 +If using YouTube this will produce a og:video tag like `<meta property="og:video" content="url">`. Use the `https://youtu.be/<id>` format with YouTube videos (example: `https://youtu.be/qtIqKaDlqXo`).
 +
 +### Use the Open Graph Template
 +
 +To add Open Graph metadata, include the following line between the `<head>` tags in your templates:
 +
 +```go-html-template
 +{{ template "_internal/opengraph.html" . }}
 +```
 +
 +## Twitter Cards
 +
 +An internal template for [Twitter Cards](https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/abouts-cards),
 +metadata used to attach rich media to Tweets linking to your site.
 +
 +### Configure Twitter Cards
 +
 +Hugo's Twitter Card template is configured using a mix of configuration variables and [front-matter](/content-management/front-matter/) on individual pages.
 +
 +{{< code-toggle file="config" >}}
 +[params]
 +  images = ["site-feature-image.jpg"]
 +  description = "Text about my cool site"
 +{{</ code-toggle >}}
 +
 +{{< code-toggle file="content/blog/my-post" >}}
 +title = "Post title"
 +description = "Text about this post"
 +images = ["post-cover.png"]
 +{{</ code-toggle >}}
 +
 +If `images` aren't specified in the page front-matter, then hugo searches for [image page resources](/content-management/image-processing/) with `feature`, `cover`, or `thumbnail` in their name.
 +If no image resources with those names are found, the images defined in the [site config](/getting-started/configuration/) are used instead.
 +If no images are found at all, then an image-less Twitter `summary` card is used instead of `summary_large_image`.
 +
 +Hugo uses the page title and description for the card's title and description fields. The page summary is used if no description is given.
 +
 +The `.Site.Social.twitter` variable is exposed from the config as the value for `twitter:site`.
 +
 +{{< code-toggle file="config" >}}
 +[social]
 +  twitter = "GoHugoIO"
 +{{</ code-toggle >}}
 +
 +NOTE: The `@` will be added for you
 +
 +```html
 +<meta name="twitter:site" content="@GoHugoIO"/>
 +```
 +
 +### Use the Twitter Cards Template
 +
 +To add Twitter card metadata, include the following line immediately after the `<head>` element in your templates:
 +
 +```go-html-template
 +{{ template "_internal/twitter_cards.html" . }}
 +```
 +
 +## The Internal Templates
 +
 +The code for these templates is located [here](https://github.com/gohugoio/hugo/tree/master/tpl/tplimpl/embedded/templates).
 +
 +* `_internal/disqus.html`
 +* `_internal/google_analytics.html`
 +* `_internal/google_analytics_async.html`
 +* `_internal/opengraph.html`
 +* `_internal/pagination.html`
 +* `_internal/schema.html`
 +* `_internal/twitter_cards.html`
 +
 +[disqus]: https://disqus.com
 +[disqussignup]: https://disqus.com/profile/signup/
index 5145b04be47bfe8c6e1c702b23c5b44418493d09,0000000000000000000000000000000000000000..f02f1dfce0b28f19a85582810d1e3d2edc1192c9
mode 100644,000000..100644
--- /dev/null
@@@ -1,681 -1,0 +1,671 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2022-09-20
 +---
 +title: Introduction to Hugo Templating
 +linktitle: Templating
 +description: Hugo uses Go's `html/template` and `text/template` libraries as the basis for the templating.
-     parent: "templates"
 +categories: [templates,fundamentals]
 +keywords: [go]
 +menu:
 +  docs:
- sections_weight: 10
- draft: false
++    parent: templates
 +    weight: 10
 +weight: 10
- current scope (like the `.Title` example in the [Variables]({{< relref
- "#variables" >}}) section below) or a custom variable (like the
 +aliases: [/layouts/introduction/,/layout/introduction/, /templates/go-templates/]
 +toc: true
 +---
 +
 +{{% note %}}
 +The following is only a primer on Go Templates. For an in-depth look into Go Templates, check the official [Go docs](https://golang.org/pkg/text/template/).
 +{{% /note %}}
 +
 +Go Templates provide an extremely simple template language that adheres to the belief that only the most basic of logic belongs in the template or view layer.
 +
 +## Basic Syntax
 +
 +Go Templates are HTML files with the addition of [variables][variables] and [functions][functions]. Go Template variables and functions are accessible within `{{ }}`.
 +
 +### Access a Predefined Variable
 +
 +A _predefined variable_ could be a variable already existing in the
- {{% note "Additional Boolean Operators" %}}
++current scope (like the `.Title` example in the [Variables](#variables) section below) or a custom variable (like the
 +`$address` example in that same section).
 +
 +
 +```go-html-template
 +{{ .Title }}
 +{{ $address }}
 +```
 +
 +Parameters for functions are separated using spaces. The general syntax is:
 +
 +```go-html-template
 +{{ FUNCTION ARG1 ARG2 .. }}
 +```
 +
 +The following example calls the `add` function with inputs of `1` and `2`:
 +
 +```go-html-template
 +{{ add 1 2 }}
 +```
 +
 +#### Methods and Fields are Accessed via dot Notation
 +
 +Accessing the Page Parameter `bar` defined in a piece of content's [front matter].
 +
 +```go-html-template
 +{{ .Params.bar }}
 +```
 +
 +#### Parentheses Can be Used to Group Items Together
 +
 +```go-html-template
 +{{ if or (isset .Params "alt") (isset .Params "caption") }} Caption {{ end }}
 +```
 +
 +#### A Single Statement Can be Split over Multiple Lines
 +
 +```go-html-template
 +{{ if or
 +  (isset .Params "alt")
 +  (isset .Params "caption")
 +}}
 +```
 +
 +#### Raw String Literals Can Include Newlines
 +
 +```go-html-template
 +{{ $msg := `Line one.
 +Line two.` }}
 +```
 +
 +## Variables {#variables}
 +
 +Each Go Template gets a data object. In Hugo, each template is passed
 +a `Page`.  In the below example, `.Title` is one of the elements
 +accessible in that [`Page` variable][pagevars].
 +
 +With the `Page` being the default scope of a template, the `Title`
 +element in current scope (`.` -- "the **dot**") is accessible simply
 +by the dot-prefix (`.Title`):
 +
 +```go-html-template
 +<title>{{ .Title }}</title>
 +```
 +
 +Values can also be stored in custom variables and referenced later:
 +
 +{{% note %}}
 +The custom variables need to be prefixed with `$`.
 +{{% /note %}}
 +
 +```go-html-template
 +{{ $address := "123 Main St." }}
 +{{ $address }}
 +```
 +
 +Variables can be re-defined using the `=` operator. The example below
 +prints "Var is Hugo Home" on the home page, and "Var is Hugo Page" on
 +all other pages:
 +
 +```go-html-template
 +{{ $var := "Hugo Page" }}
 +{{ if .IsHome }}
 +    {{ $var = "Hugo Home" }}
 +{{ end }}
 +Var is {{ $var }}
 +```
 +
 +## Functions
 +
 +Go Templates only ship with a few basic functions but also provide a mechanism for applications to extend the original set.
 +
 +[Hugo template functions][functions] provide additional functionality specific to building websites. Functions are called by using their name followed by the required parameters separated by spaces. Template functions cannot be added without recompiling Hugo.
 +
 +### Example 1: Adding Numbers
 +
 +```go-html-template
 +{{ add 1 2 }}
 +<!-- prints 3 -->
 +```
 +
 +### Example 2: Comparing Numbers
 +
 +```go-html-template
 +{{ lt 1 2 }}
 +<!-- prints true (i.e., since 1 is less than 2) -->
 +```
 +
 +Note that both examples make use of Go Template's [math][math] functions.
 +
- {{else}}
++{{% note %}}
 +There are more boolean operators than those listed in the Hugo docs in the [Go Template documentation](https://golang.org/pkg/text/template/#hdr-Functions).
 +{{% /note %}}
 +
 +## Includes
 +
 +When including another template, you will need to pass it the data that it would
 +need to access.
 +
 +{{% note %}}
 +To pass along the current context, please remember to include a trailing **dot**.
 +{{% /note %}}
 +
 +The templates location will always be starting at the `layouts/` directory
 +within Hugo.
 +
 +### Partial
 +
 +The [`partial`][partials] function is used to include _partial_ templates using
 +the syntax `{{ partial "<PATH>/<PARTIAL>.<EXTENSION>" . }}`.
 +
 +Example of including a `layouts/partials/header.html` partial:
 +
 +```go-html-template
 +{{ partial "header.html" . }}
 +```
 +
 +### Template
 +
 +The `template` function was used to include _partial_ templates
 +in much older Hugo versions. Now it's useful only for calling
 +[_internal_ templates][internal templates]. The syntax is `{{ template
 +"_internal/<TEMPLATE>.<EXTENSION>" . }}`.
 +
 +{{% note %}}
 +The available **internal** templates can be found
 +[here](https://github.com/gohugoio/hugo/tree/master/tpl/tplimpl/embedded/templates).
 +{{% /note %}}
 +
 +Example of including the internal `opengraph.html` template:
 +
 +```go-html-template
 +{{ template "_internal/opengraph.html" . }}
 +```
 +
 +## Logic
 +
 +Go Templates provide the most basic iteration and conditional logic.
 +
 +### Iteration
 +
 +The Go Templates make heavy use of `range` to iterate over a _map_,
 +_array_, or _slice_. The following are different examples of how to
 +use `range`.
 +
 +#### Example 1: Using Context (`.`)
 +
 +```go-html-template
 +{{ range $array }}
 +    {{ . }} <!-- The . represents an element in $array -->
 +{{ end }}
 +```
 +
 +#### Example 2: Declaring a variable name for an array element's value
 +
 +```go-html-template
 +{{ range $elem_val := $array }}
 +    {{ $elem_val }}
 +{{ end }}
 +```
 +
 +#### Example 3: Declaring variable names for an array element's index _and_ value
 +
 +For an array or slice, the first declared variable will map to each
 +element's index.
 +
 +```go-html-template
 +{{ range $elem_index, $elem_val := $array }}
 +   {{ $elem_index }} -- {{ $elem_val }}
 +{{ end }}
 +```
 +
 +#### Example 4: Declaring variable names for a map element's key _and_ value
 +
 +For a map, the first declared variable will map to each map element's
 +key.
 +
 +```go-html-template
 +{{ range $elem_key, $elem_val := $map }}
 +   {{ $elem_key }} -- {{ $elem_val }}
 +{{ end }}
 +```
 +
 +#### Example 5: Conditional on empty _map_, _array_, or _slice_
 +
 +If the _map_, _array_, or _slice_ passed into the range is zero-length then the else statement is evaluated.
 +
 +```go-html-template
 +{{ range $array }}
 +    {{ . }}
- Notice how once we have entered the loop (i.e. `range`), the value of `{{ . }}` has changed. We have defined a variable outside the loop (`{{$title}}`) that we've assigned a value so that we have access to the value from within the loop as well.
++{{ else }}
 +    <!-- This is only evaluated if $array is empty -->
 +{{ end }}
 +```
 +
 +### Conditionals
 +
 +`if`, `else`, `with`, `or`, `and` and `not` provide the framework for handling conditional logic in Go Templates. Like `range`, `if` and `with` statements are closed with an `{{ end }}`.
 +
 +Go Templates treat the following values as **false**:
 +
 +- `false` (boolean)
 +- 0 (integer)
 +- any zero-length array, slice, map, or string
 +
 +#### Example 1: `with`
 +
 +It is common to write "if something exists, do this" kind of
 +statements using `with`.
 +
 +{{% note %}}
 +`with` rebinds the context `.` within its scope (just like in `range`).
 +{{% /note %}}
 +
 +It skips the block if the variable is absent, or if it evaluates to
 +"false" as explained above.
 +
 +```go-html-template
 +{{ with .Params.title }}
 +    <h4>{{ . }}</h4>
 +{{ end }}
 +```
 +
 +#### Example 2: `with` .. `else`
 +
 +Below snippet uses the "description" front-matter parameter's value if
 +set, else uses the default `.Summary` [Page variable][pagevars]:
 +
 +
 +```go-html-template
 +{{ with .Param "description" }}
 +    {{ . }}
 +{{ else }}
 +    {{ .Summary }}
 +{{ end }}
 +```
 +
 +See the [`.Param` function][param].
 +
 +#### Example 3: `if`
 +
 +An alternative (and a more verbose) way of writing `with` is using
 +`if`. Here, the `.` does not get rebound.
 +
 +Below example is "Example 1" rewritten using `if`:
 +
 +```go-html-template
 +{{ if isset .Params "title" }}
 +    <h4>{{ index .Params "title" }}</h4>
 +{{ end }}
 +```
 +
 +#### Example 4: `if` .. `else`
 +
 +Below example is "Example 2" rewritten using `if` .. `else`, and using
 +[`isset` function][isset] + `.Params` variable (different from the
 +[`.Param` **function**][param]) instead:
 +
 +```go-html-template
 +{{ if (isset .Params "description") }}
 +    {{ index .Params "description" }}
 +{{ else }}
 +    {{ .Summary }}
 +{{ end }}
 +```
 +
 +#### Example 5: `if` .. `else if` .. `else`
 +
 +Unlike `with`, `if` can contain `else if` clauses too.
 +
 +```go-html-template
 +{{ if (isset .Params "description") }}
 +    {{ index .Params "description" }}
 +{{ else if (isset .Params "summary") }}
 +    {{ index .Params "summary" }}
 +{{ else }}
 +    {{ .Summary }}
 +{{ end }}
 +```
 +
 +#### Example 6: `and` & `or`
 +
 +```go-html-template
 +{{ if (and (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr")) }}
 +```
 +
 +## Pipes
 +
 +One of the most powerful components of Go Templates is the ability to stack actions one after another. This is done by using pipes. Borrowed from Unix pipes, the concept is simple: each pipeline's output becomes the input of the following pipe.
 +
 +Because of the very simple syntax of Go Templates, the pipe is essential to being able to chain together function calls. One limitation of the pipes is that they can only work with a single value and that value becomes the last parameter of the next pipeline.
 +
 +A few simple examples should help convey how to use the pipe.
 +
 +### Example 1: `shuffle`
 +
 +The following two examples are functionally the same:
 +
 +```go-html-template
 +{{ shuffle (seq 1 5) }}
 +```
 +
 +
 +```go-html-template
 +{{ (seq 1 5) | shuffle }}
 +```
 +
 +### Example 2: `index`
 +
 +The following accesses the page parameter called "disqus_url" and escapes the HTML. This example also uses the [`index` function](/functions/index-function/), which is built into Go Templates:
 +
 +```go-html-template
 +{{ index .Params "disqus_url" | html }}
 +```
 +
 +### Example 3: `or` with `isset`
 +
 +```go-html-template
 +{{ if or (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr") }}
 +Stuff Here
 +{{ end }}
 +```
 +
 +Could be rewritten as
 +
 +```go-html-template
 +{{ if isset .Params "caption" | or isset .Params "title" | or isset .Params "attr" }}
 +Stuff Here
 +{{ end }}
 +```
 +
 +## Context (aka "the dot") {#the-dot}
 +
 +The most easily overlooked concept to understand about Go Templates is
 +that `{{ . }}` always refers to the **current context**.
 +
 +- In the top level of your template, this will be the data set made
 +  available to it.
 +- Inside an iteration, however, it will have the value of the
 +  current item in the loop; i.e., `{{ . }}` will no longer refer to
 +  the data available to the entire page.
 +
 +If you need to access page-level data (e.g., page params set in front
 +matter) from within the loop, you will likely want to do one of the
 +following:
 +
 +### 1. Define a Variable Independent of Context
 +
 +The following shows how to define a variable independent of the context.
 +
 +{{< code file="tags-range-with-page-variable.html" >}}
 +{{ $title := .Site.Title }}
 +<ul>
 +{{ range .Params.tags }}
 +    <li>
 +        <a href="/tags/{{ . | urlize }}">{{ . }}</a>
 +        - {{ $title }}
 +    </li>
 +{{ end }}
 +</ul>
 +{{< /code >}}
 +
 +{{% note %}}
- {{% /warning %}}
++Notice how once we have entered the loop (i.e. `range`), the value of `{{ . }}` has changed. We have defined a variable outside the loop (`{{ $title }}`) that we've assigned a value so that we have access to the value from within the loop as well.
 +{{% /note %}}
 +
 +### 2. Use `$.` to Access the Global Context
 +
 +`$` has special significance in your templates. `$` is set to the starting value of `.` ("the dot") by default. This is a [documented feature of Go text/template][dotdoc]. This means you have access to the global context from anywhere. Here is an equivalent example of the preceding code block but now using `$` to grab `.Site.Title` from the global context:
 +
 +{{< code file="range-through-tags-w-global.html" >}}
 +<ul>
 +{{ range .Params.tags }}
 +  <li>
 +    <a href="/tags/{{ . | urlize }}">{{ . }}</a>
 +            - {{ $.Site.Title }}
 +  </li>
 +{{ end }}
 +</ul>
 +{{< /code >}}
 +
 +{{% warning "Don't Redefine the Dot" %}}
 +The built-in magic of `$` would cease to work if someone were to mischievously redefine the special character; e.g. `{{ $ := .Site }}`. *Don't do it.* You may, of course, recover from this mischief by using `{{ $ := . }}` in a global context to reset `$` to its default value.
- Hugo provides the option of passing values to your template layer through your [site configuration][config] (i.e. for site-wide values) or through the metadata of each specific piece of content (i.e. the [front matter]). You can define any values of any type and use them however you want in your templates, as long as the values are supported by the [front matter format]({{< ref "front-matter.md#front-matter-formats" >}}).
++{{% /note %}}
 +
 +## Whitespace
 +
 +Go 1.6 includes the ability to trim the whitespace from either side of a Go tag by including a hyphen (`-`) and space immediately beside the corresponding `{{` or `}}` delimiter.
 +
 +For instance, the following Go Template will include the newlines and horizontal tab in its HTML output:
 +
 +```go-html-template
 +<div>
 +  {{ .Title }}
 +</div>
 +```
 +
 +Which will output:
 +
 +```html
 +<div>
 +  Hello, World!
 +</div>
 +```
 +
 +Leveraging the `-` in the following example will remove the extra white space surrounding the `.Title` variable and remove the newline:
 +
 +```go-html-template
 +<div>
 +  {{- .Title -}}
 +</div>
 +```
 +
 +Which then outputs:
 +
 +```html
 +<div>Hello, World!</div>
 +```
 +
 +Go considers the following characters _whitespace_:
 +
 +* <kbd>space</kbd>
 +* horizontal <kbd>tab</kbd>
 +* carriage <kbd>return</kbd>
 +* newline
 +
 +## Comments
 +
 +In order to keep your templates organized and share information throughout your team, you may want to add comments to your templates. There are two ways to do that with Hugo.
 +
 +### Go Templates comments
 +
 +Go Templates support `{{/*` and `*/}}` to open and close a comment block. Nothing within that block will be rendered.
 +
 +For example:
 +
 +```go-html-template
 +Bonsoir, {{/* {{ add 0 + 2 }} */}}Eliott.
 +```
 +
 +Will render `Bonsoir, Eliott.`, and not care about the syntax error (`add 0 + 2`) in the comment block.
 +
 +### HTML comments
 +
 +You can add html comments by piping a string HTML code comment to `safeHTML`.
 +
 +For example:
 +
 +```go-html-template
 +{{ "<!-- This is an HTML comment -->" | safeHTML }}
 +```
 +
 +If you need variables to construct such HTML comments, just pipe `printf` to `safeHTML`. 
 +
 +For example:
 +
 +```go-html-template
 +{{ printf "<!-- Our website is named: %s -->" .Site.Title | safeHTML }}
 +```
 +
 +#### HTML comments containing Go Templates
 +
 +HTML comments are by default stripped, but their content is still evaluated. That means that although the HTML comment will never render any content to the final HTML pages, code contained within the comment may fail the build process.
 +
 +{{% note %}}
 +Do **not** try to comment out Go Template code using HTML comments.
 +{{% /note %}}
 +
 +```go-html-template
 +<!-- {{ $author := "Emma Goldman" }} was a great woman. -->
 +{{ $author }}
 +```
 +
 +The templating engine will strip the content within the HTML comment, but will first evaluate any Go Template code if present within. So the above example will render `Emma Goldman`, as the `$author` variable got evaluated in the HTML comment. But the build would have failed if that code in the HTML comment had an error.
 +
 +## Hugo Parameters
 +
- Here is the example front matter (YAML):
++Hugo provides the option of passing values to your template layer through your [site configuration][config] (i.e. for site-wide values) or through the metadata of each specific piece of content (i.e. the [front matter]). You can define any values of any type and use them however you want in your templates, as long as the values are supported by the [front matter format](/content-management/front-matter#front-matter-formats).
 +
 +## Use Content (`Page`) Parameters
 +
 +You can provide variables to be used by templates in individual content's [front matter].
 +
 +An example of this is used in the Hugo docs. Most of the pages benefit from having the table of contents provided, but sometimes the table of contents doesn't make a lot of sense. We've defined a `notoc` variable in our front matter that will prevent a table of contents from rendering when specifically set to `true`.
 +
- ```yml
- ---
- title: Roadmap
- lastmod: 2017-03-05
- date: 2013-11-18
++Here is the example front matter:
 +
- ---
- ```
++{{< code-toggle file="content/example.md" fm=true copy=false >}}
++title: Example
 +notoc: true
- {{< code file="layouts/partials/toc.html" download="toc.html" >}}
++{{< /code-toggle >}}
 +
 +Here is an example of corresponding code that could be used inside a `toc.html` [partial template][partials]:
 +
-     <a href="#{{.Title | urlize}}">
-     <h3>{{.Title}}</h3>
++{{< code file="layouts/partials/toc.html" >}}
 +{{ if not .Params.notoc }}
 +<aside>
 +  <header>
-   {{.TableOfContents}}
++    <a href="#{{ .Title | urlize }}">
++    <h3>{{ .Title }}</h3>
 +    </a>
 +  </header>
-         <div class="text-center">{{.Site.Params.CopyrightHTML | safeHTML}}</div>
++  {{ .TableOfContents }}
 +</aside>
 +<a href="#" id="toc-toggle"></a>
 +{{ end }}
 +{{< /code >}}
 +
 +We want the *default* behavior to be for pages to include a TOC unless otherwise specified. This template checks to make sure that the `notoc:` field in this page's front matter is not `true`.
 +
 +## Use Site Configuration Parameters
 +
 +You can arbitrarily define as many site-level parameters as you want in your [site's configuration file][config]. These parameters are globally available in your templates.
 +
 +For instance, you might declare the following:
 +
 +{{< code-toggle file="config" >}}
 +params:
 +  copyrighthtml: "Copyright &#xA9; 2017 John Doe. All Rights Reserved."
 +  twitteruser: "spf13"
 +  sidebarrecentlimit: 5
 +{{< /code >}}
 +
 +Within a footer layout, you might then declare a `<footer>` that is only rendered if the `copyrighthtml` parameter is provided. If it *is* provided, you will then need to declare the string is safe to use via the [`safeHTML` function][safehtml] so that the HTML entity is not escaped again. This would let you easily update just your top-level config file each January 1st, instead of hunting through your templates.
 +
 +```go-html-template
 +{{ if .Site.Params.copyrighthtml }}
 +    <footer>
-         <a href="https://twitter.com/{{.}}" rel="author">
-         <img src="/images/twitter.png" width="48" height="48" title="Twitter: {{.}}" alt="Twitter"></a>
++        <div class="text-center">{{ .Site.Params.CopyrightHTML | safeHTML }}</div>
 +    </footer>
 +{{ end }}
 +```
 +
 +An alternative way of writing the "`if`" and then referencing the same value is to use [`with`][with] instead. `with` rebinds the context (`.`) within its scope and skips the block if the variable is absent:
 +
 +{{< code file="layouts/partials/twitter.html" >}}
 +{{ with .Site.Params.twitteruser }}
 +    <div>
-       <li><a href="{{.RelPermalink}}">{{.Title}}</a></li>
++        <a href="https://twitter.com/{{ . }}" rel="author">
++        <img src="/images/twitter.png" width="48" height="48" title="Twitter: {{ . }}" alt="Twitter"></a>
 +    </div>
 +{{ end }}
 +{{< /code >}}
 +
 +Finally, you can pull "magic constants" out of your layouts as well. The following uses the [`first`][first] function, as well as the [`.RelPermalink`][relpermalink] page variable and the [`.Site.Pages`][sitevars] site variable.
 +
 +```go-html-template
 +<nav>
 +  <h1>Recent Posts</h1>
 +  <ul>
 +  {{- range first .Site.Params.SidebarRecentLimit .Site.Pages -}}
- {{< code-toggle file="content/events/event-1.md" copy="false" >}}
++      <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
 +  {{- end -}}
 +  </ul>
 +</nav>
 +```
 +
 +## Example: Show Future Events
 +
 +Given the following content structure and [front matter]:
 +
 +```text
 +content/
 +└── events/
 +    ├── event-1.md
 +    ├── event-2.md
 +    └── event-3.md
 +```
 +
- [config]: {{< relref "getting-started/configuration" >}}
++{{< code-toggle file="content/events/event-1.md" copy=false >}}
 +title = 'Event 1'
 +date = 2021-12-06T10:37:16-08:00
 +draft = false
 +start_date = 2021-12-05T09:00:00-08:00
 +end_date = 2021-12-05T11:00:00-08:00
 +{{< /code-toggle >}}
 +
 +This [partial template][partials] renders future events:
 +
 +{{< code file="layouts/partials/future-events.html" >}}
 +<h2>Future Events</h2>
 +<ul>
 +  {{ range where site.RegularPages "Type" "events" }}
 +    {{ if gt (.Params.start_date | time.AsTime) now }}
 +      {{ $startDate := .Params.start_date | time.Format ":date_medium" }}
 +      <li>
 +        <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> - {{ $startDate }}
 +      </li>
 +    {{ end }}
 +  {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +If you restrict front matter to the TOML format, and omit quotation marks surrounding date fields, you can perform date comparisons without casting.
 +
 +{{< code file="layouts/partials/future-events.html" >}}
 +<h2>Future Events</h2>
 +<ul>
 +  {{ range where (where site.RegularPages "Type" "events") "Params.start_date" "gt" now }}
 +    {{ $startDate := .Params.start_date | time.Format ":date_medium" }}
 +    <li>
 +      <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> - {{ $startDate }}
 +    </li>
 +  {{ end }}
 +</ul>
 +{{< /code >}}
 +
- [first]: {{< relref "functions/first" >}}
- [front matter]: {{< relref "content-management/front-matter" >}}
- [functions]: {{< relref "functions" >}}
- [internal templates]: {{< relref "templates/internal" >}}
- [isset]: {{< relref "functions/isset" >}}
- [math]: {{< relref "functions/math" >}}
- [pagevars]: {{< relref "variables/page" >}}
- [param]: {{< relref "functions/param" >}}
- [partials]: {{< relref "templates/partials" >}}
- [relpermalink]: {{< relref "variables/page#page-variables" >}}
- [safehtml]: {{< relref "functions/safehtml" >}}
- [sitevars]: {{< relref "variables/site" >}}
- [variables]: {{< relref "variables" >}}
- [with]: {{< relref "functions/with" >}}
 +[dotdoc]: https://golang.org/pkg/text/template/#hdr-Variables
++[config]: /getting-started/configuration
++[first]: /functions/first
++[front matter]: /content-management/front-matter
++[functions]: /functions
++[internal templates]: /templates/internal
++[isset]: /functions/isset
++[math]: /functions/math
++[pagevars]: /variables/page
++[param]: /functions/param
++[partials]: /templates/partials
++[relpermalink]: /variables/page#page-variables
++[safehtml]: /functions/safehtml
++[sitevars]: /variables/site
++[variables]: /variables
++[with]: /functions/with
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..08d3d21ec7adfbef74738e9079c29e0ddfdf1e26
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,595 @@@
++---
++title: Lists of Content in Hugo
++linktitle: List Templates
++description: Lists have a specific meaning and usage in Hugo when it comes to rendering your site homepage, section page, taxonomy list, or taxonomy terms list.
++categories: [templates]
++keywords: [lists,sections,rss,taxonomies,terms]
++menu:
++  docs:
++    parent: templates
++    weight: 22
++weight: 22
++aliases: [/templates/list/,/layout/indexes/]
++toc: true
++---
++
++## What is a List Page Template?
++
++{{< youtube 8b2YTSMdMps >}}
++
++A list page template is a template used to render multiple pieces of content in a single HTML page. The exception to this rule is the homepage, which is still a list but has its own [dedicated template][homepage].
++
++Hugo uses the term *list* in its truest sense; i.e. a sequential arrangement of material, especially in alphabetical or numerical order. Hugo uses list templates on any output HTML page where content is traditionally listed:
++
++* [Taxonomy terms pages][taxterms]
++* [Taxonomy list pages][taxlists]
++* [Section list pages][sectiontemps]
++* [RSS][rss]
++
++For template lookup order, see [Template Lookup](/templates/lookup-order/).
++
++The idea of a list page comes from the [hierarchical mental model of the web][mentalmodel] and is best demonstrated visually:
++
++[![Image demonstrating a hierarchical website sitemap.](site-hierarchy.svg)](site-hierarchy.svg)
++
++## List Defaults
++
++### Default Templates
++
++Since section lists and taxonomy lists (N.B., *not* [taxonomy terms lists][taxterms]) are both *lists* with regards to their templates, both have the same terminating default of `_default/list.html` or `themes/<THEME>/layouts/_default/list.html` in their lookup order. In addition, both [section lists][sectiontemps] and [taxonomy lists][taxlists] have their own default list templates in `_default`.
++
++See [Template Lookup Order](/templates/lookup-order/) for the complete reference.
++
++## Add Content and Front Matter to List Pages
++
++Since v0.18, [everything in Hugo is a `Page`][bepsays]. This means list pages and the homepage can have associated content files (i.e. `_index.md`) that contain page metadata (i.e., front matter) and content.
++
++This new model allows you to include list-specific front matter via `.Params` and also means that list templates (e.g., `layouts/_default/list.html`) have access to all [page variables][pagevars].
++
++{{% note %}}
++It is important to note that all `_index.md` content files will render according to a *list* template and not according to a [single page template](/templates/single-page-templates/).
++{{% /note %}}
++
++### Example Project Directory
++
++The following is an example of a typical Hugo project directory's content:
++
++```txt
++.
++...
++├── content
++|   ├── posts
++|   |   ├── _index.md
++|   |   ├── post-01.md
++|   |   └── post-02.md
++|   └── quote
++|   |   ├── quote-01.md
++|   |   └── quote-02.md
++...
++```
++
++Using the above example, let's assume you have the following in `content/posts/_index.md`:
++
++{{< code file="content/posts/_index.md" >}}
++---
++title: My Go Journey
++date: 2017-03-23
++publishdate: 2017-03-24
++---
++
++I decided to start learning Go in March 2017.
++
++Follow my journey through this new blog.
++{{< /code >}}
++
++You can now access this `_index.md`'s' content in your list template:
++
++{{< code file="layouts/_default/list.html" >}}
++{{ define "main" }}
++<main>
++  <article>
++    <header>
++      <h1>{{ .Title} }</h1>
++    </header>
++    <!-- "{{ .Content} }" pulls from the markdown content of the corresponding _index.md -->
++    {{ .Content }}
++  </article>
++  <ul>
++    <!-- Ranges through content/posts/*.md -->
++    {{ range .Pages }}
++      <li>
++        <a href="{{ .Permalink }}">{{ .Date.Format "2006-01-02" }} | {{ .Title }}</a>
++      </li>
++    {{ end }}
++  </ul>
++</main>
++{{ end }}
++{{< /code >}}
++
++This above will output the following HTML:
++
++{{< code file="example.com/posts/index.html" copy=false >}}
++<!--top of your baseof code-->
++<main>
++    <article>
++        <header>
++            <h1>My Go Journey</h1>
++        </header>
++        <p>I decided to start learning Go in March 2017.</p>
++        <p>Follow my journey through this new blog.</p>
++    </article>
++    <ul>
++        <li><a href="/posts/post-01/">Post 1</a></li>
++        <li><a href="/posts/post-02/">Post 2</a></li>
++    </ul>
++</main>
++<!--bottom of your baseof-->
++{{< /code >}}
++
++### List Pages Without `_index.md`
++
++You do *not* have to create an `_index.md` file for every list page (i.e. section, taxonomy, taxonomy terms, etc) or the homepage. If Hugo does not find an `_index.md` within the respective content section when rendering a list template, the page will be created but with no `{{ .Content }}` and only the default values for `.Title` etc.
++
++Using this same `layouts/_default/list.html` template and applying it to the `quotes` section above will render the following output. Note that `quotes` does not have an `_index.md` file to pull from:
++
++{{< code file="example.com/quote/index.html" copy=false >}}
++<!--baseof-->
++<main>
++    <article>
++        <header>
++        <!-- Hugo assumes that .Title is the name of the section since there is no _index.md content file from which to pull a "title:" field -->
++            <h1>Quotes</h1>
++        </header>
++    </article>
++    <ul>
++        <li><a href="https://example.com/quote/quotes-01/">Quote 1</a></li>
++        <li><a href="https://example.com/quote/quotes-02/">Quote 2</a></li>
++    </ul>
++</main>
++<!--baseof-->
++{{< /code >}}
++
++{{% note %}}
++The default behavior of Hugo is to pluralize list titles; hence the inflection of the `quote` section to "Quotes" when called with the `.Title` [page variable](/variables/page/). You can change this via the `pluralizeListTitles` directive in your [site configuration](/getting-started/configuration/).
++{{% /note %}}
++
++## Example List Templates
++
++### Section Template
++
++This list template has been modified slightly from a template originally used in [spf13.com](https://spf13.com/). It makes use of [partial templates][partials] for the chrome of the rendered page rather than using a [base template][base]. The examples that follow also use the [content view templates][views] `li.html` or `summary.html`.
++
++{{< code file="layouts/section/posts.html" >}}
++{{ partial "header.html" . }}
++{{ partial "subheader.html" . }}
++<main>
++  <div>
++   <h1>{{ .Title }}</h1>
++        <ul>
++        <!-- Renders the li.html content view for each content/posts/*.md -->
++            {{ range .Pages }}
++                {{ .Render "li" }}
++            {{ end }}
++        </ul>
++  </div>
++</main>
++{{ partial "footer.html" . }}
++{{< /code >}}
++
++### Taxonomy Template
++
++{{< code file="layouts/_default/taxonomy.html" >}}
++{{ define "main" }}
++<main>
++  <div>
++   <h1>{{ .Title }}</h1>
++   <!-- ranges through each of the content files associated with a particular taxonomy term and renders the summary.html content view -->
++    {{ range .Pages }}
++        {{ .Render "summary" }}
++    {{ end }}
++  </div>
++</main>
++{{ end }}
++{{< /code >}}
++
++## Order Content
++
++Hugo lists render the content based on metadata you provide in [front matter]. In addition to sane defaults, Hugo also ships with multiple methods to make quick work of ordering content inside list templates:
++
++### Default: Weight > Date > LinkTitle > FilePath
++
++{{< code file="layouts/partials/default-order.html" >}}
++<ul>
++    {{ range .Pages }}
++        <li>
++            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
++            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
++        </li>
++    {{ end }}
++</ul>
++{{< /code >}}
++
++### By Weight
++
++Lower weight gets higher precedence. So content with lower weight will come first.
++
++{{< code file="layouts/partials/by-weight.html" >}}
++<ul>
++    {{ range .Pages.ByWeight }}
++        <li>
++            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
++            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
++        </li>
++    {{ end }}
++</ul>
++{{< /code >}}
++
++### By Date
++
++{{< code file="layouts/partials/by-date.html" >}}
++<ul>
++    <!-- orders content according to the "date" field in front matter -->
++    {{ range .Pages.ByDate }}
++        <li>
++            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
++            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
++        </li>
++    {{ end }}
++</ul>
++{{< /code >}}
++
++### By Publish Date
++
++{{< code file="layouts/partials/by-publish-date.html" >}}
++<ul>
++    <!-- orders content according to the "publishdate" field in front matter -->
++    {{ range .Pages.ByPublishDate }}
++        <li>
++            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
++            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
++        </li>
++    {{ end }}
++</ul>
++{{< /code >}}
++
++### By Expiration Date
++
++{{< code file="layouts/partials/by-expiry-date.html" >}}
++<ul>
++    {{ range .Pages.ByExpiryDate }}
++        <li>
++            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
++            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
++        </li>
++    {{ end }}
++</ul>
++{{< /code >}}
++
++### By Last Modified Date
++
++{{< code file="layouts/partials/by-last-mod.html" >}}
++<ul>
++    <!-- orders content according to the "lastmod" field in front matter -->
++    {{ range .Pages.ByLastmod }}
++        <li>
++            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
++            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
++        </li>
++    {{ end }}
++</ul>
++{{< /code >}}
++
++### By Length
++
++{{< code file="layouts/partials/by-length.html" >}}
++<ul>
++    <!-- orders content according to content length in ascending order (i.e., the shortest content will be listed first) -->
++    {{ range .Pages.ByLength }}
++        <li>
++            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
++            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
++        </li>
++    {{ end }}
++</ul>
++{{< /code >}}
++
++### By Title
++
++{{< code file="layouts/partials/by-title.html" >}}
++<ul>
++    <!-- ranges through content in ascending order according to the "title" field set in front matter -->
++    {{ range .Pages.ByTitle }}
++        <li>
++            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
++            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
++        </li>
++    {{ end }}
++</ul>
++{{< /code >}}
++
++### By Link Title
++
++{{< code file="layouts/partials/by-link-title.html" >}}
++<ul>
++    <!-- ranges through content in ascending order according to the "linktitle" field in front matter. If a "linktitle" field is not set, the range will start with content that only has a "title" field and use that value for .LinkTitle -->
++    {{ range .Pages.ByLinkTitle }}
++        <li>
++            <h1><a href="{{ .Permalink }}">{{ .LinkTitle }}</a></h1>
++            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
++        </li>
++    {{ end }}
++</ul>
++{{< /code >}}
++
++### By Parameter
++
++Order based on the specified front matter parameter. Content that does not have the specified front matter field  will use the site's `.Site.Params` default. If the parameter is not found at all in some entries, those entries will appear together at the end of the ordering.
++
++{{< code file="layouts/partials/by-rating.html" >}}
++<!-- Ranges through content according to the "rating" field set in front matter -->
++{{ range (.Pages.ByParam "rating") }}
++  <!-- ... -->
++{{ end }}
++{{< /code >}}
++
++If the targeted front matter field is nested beneath another field, you can access the field using dot notation.
++
++{{< code file="layouts/partials/by-nested-param.html" >}}
++{{ range (.Pages.ByParam "author.last_name") }}
++  <!-- ... -->
++{{ end }}
++{{< /code >}}
++
++### Reverse Order
++
++Reversing order can be applied to any of the above methods. The following uses `ByDate` as an example:
++
++{{< code file="layouts/partials/by-date-reverse.html" >}}
++<ul>
++    {{ range .Pages.ByDate.Reverse }}
++        <li>
++            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
++            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
++        </li>
++    {{ end }}
++</ul>
++{{< /code >}}
++
++## Group Content
++
++Hugo provides some functions for grouping pages by Section, Type, Date, etc.
++
++### By Page Field
++
++{{< code file="layouts/partials/by-page-field.html" >}}
++<!-- Groups content according to content section. The ".Key" in this instance will be the section's title. -->
++{{ range .Pages.GroupBy "Section" }}
++<h3>{{ .Key }}</h3>
++<ul>
++    {{ range .Pages }}
++    <li>
++    <a href="{{ .Permalink }}">{{ .Title }}</a>
++    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
++    </li>
++    {{ end }}
++</ul>
++{{ end }}
++{{< /code >}}
++
++In the above example, you may want `{{ .Title }}` to point the `title` field you have added to your `_index.md` file instead. You can access this value using the [`.GetPage` function][getpage]:
++
++{{< code file="layouts/partials/by-page-field.html" >}}
++<!-- Groups content according to content section.-->
++{{ range .Pages.GroupBy "Section" }}
++<!-- Checks for existence of _index.md for a section; if available, pulls from "title" in front matter -->
++{{ with $.Site.GetPage "section" .Key }}
++<h3>{{ .Title }}</h3>
++{{ else }}
++<!-- If no _index.md is available, ".Key" defaults to the section title and filters to title casing -->
++<h3>{{ .Key | title }}</h3>
++{{ end }}
++<ul>
++    {{ range .Pages }}
++    <li>
++    <a href="{{ .Permalink }}">{{ .Title }}</a>
++    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
++    </li>
++    {{ end }}
++</ul>
++{{ end }}
++{{< /code >}}
++
++### By Date
++
++{{< code file="layouts/partials/by-page-date.html" >}}
++<!-- Groups content by month according to the "date" field in front matter -->
++{{ range .Pages.GroupByDate "2006-01" }}
++<h3>{{ .Key }}</h3>
++<ul>
++    {{ range .Pages }}
++    <li>
++    <a href="{{ .Permalink }}">{{ .Title }}</a>
++    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
++    </li>
++    {{ end }}
++</ul>
++{{ end }}
++{{< /code >}}
++
++{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [time.Format](/functions/dateformat/) and The `.Key` in the result will be localized for the current language.
++
++### By Publish Date
++
++{{< code file="layouts/partials/by-page-publish-date.html" >}}
++<!-- Groups content by month according to the "publishDate" field in front matter -->
++{{ range .Pages.GroupByPublishDate "2006-01" }}
++<h3>{{ .Key }}</h3>
++<ul>
++    {{ range .Pages }}
++    <li>
++    <a href="{{ .Permalink }}">{{ .Title }}</a>
++    <div class="meta">{{ .PublishDate.Format "Mon, Jan 2, 2006" }}</div>
++    </li>
++    {{ end }}
++</ul>
++{{ end }}
++{{< /code >}}
++
++{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [time.Format](/functions/dateformat/) and The `.Key` in the result will be localized for the current language.
++
++### By Lastmod
++
++{{< code file="layouts/partials/by-page-lastmod.html" >}}
++<!-- Groups content by month according to the "lastMod" field in front matter -->
++{{ range .Pages.GroupByLastmod "2006-01" }}
++<h3>{{ .Key }}</h3>
++<ul>
++    {{ range .Pages }}
++    <li>
++    <a href="{{ .Permalink }}">{{ .Title }}</a>
++    <div class="meta">{{ .Lastmod.Format "Mon, Jan 2, 2006" }}</div>
++    </li>
++    {{ end }}
++</ul>
++{{ end }}
++{{< /code >}}
++
++{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [time.Format](/functions/dateformat/) and The `.Key` in the result will be localized for the current language.
++
++### By Expiry Date
++
++{{< code file="layouts/partials/by-page-expiry-date.html" >}}
++<!-- Groups content by month according to the "expiryDate" field in front matter -->
++{{ range .Pages.GroupByExpiryDate "2006-01" }}
++<h3>{{ .Key }}</h3>
++<ul>
++    {{ range .Pages }}
++    <li>
++    <a href="{{ .Permalink }}">{{ .Title }}</a>
++    <div class="meta">{{ .ExpiryDate.Format "Mon, Jan 2, 2006" }}</div>
++    </li>
++    {{ end }}
++</ul>
++{{ end }}
++{{< /code >}}
++
++{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [time.Format](/functions/dateformat/) and The `.Key` in the result will be localized for the current language.
++
++### By Page Parameter
++
++{{< code file="layouts/partials/by-page-param.html" >}}
++<!-- Groups content according to the "param_key" field in front matter -->
++{{ range .Pages.GroupByParam "param_key" }}
++<h3>{{ .Key }}</h3>
++<ul>
++    {{ range .Pages }}
++    <li>
++    <a href="{{ .Permalink }}">{{ .Title }}</a>
++    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
++    </li>
++    {{ end }}
++</ul>
++{{ end }}
++{{< /code >}}
++
++### By Page Parameter in Date Format
++
++The following template takes grouping by `date` a step further and uses Go's layout string. See the [`Format` function] for more examples of how to use Go's layout string to format dates in Hugo.
++
++{{< code file="layouts/partials/by-page-param-as-date.html" >}}
++<!-- Groups content by month according to the "param_key" field in front matter -->
++{{ range .Pages.GroupByParamDate "param_key" "2006-01" }}
++<h3>{{ .Key }}</h3>
++<ul>
++    {{ range .Pages }}
++    <li>
++    <a href="{{ .Permalink }}">{{ .Title }}</a>
++    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
++    </li>
++    {{ end }}
++</ul>
++{{ end }}
++{{< /code >}}
++
++### Reverse Key Order
++
++Ordering of groups is performed by keys in alphanumeric order (A–Z, 1–100) and in reverse chronological order (i.e., with the newest first) for dates.
++
++While these are logical defaults, they are not always the desired order. There are two different syntaxes to change Hugo's default ordering for groups, both of which work the same way.
++
++#### 1. Adding the Reverse Method
++
++```go-html-template
++{{ range (.Pages.GroupBy "Section").Reverse }}
++```
++
++```go-html-template
++{{ range (.Pages.GroupByDate "2006-01").Reverse }}
++```
++
++#### 2. Providing the Alternate Direction
++
++```go-html-template
++{{ range .Pages.GroupByDate "2006-01" "asc" }}
++```
++
++```go-html-template
++{{ range .Pages.GroupBy "Section" "desc" }}
++```
++
++### Order Within Groups
++
++Because Grouping returns a `{{ .Key }}` and a slice of pages, all the ordering methods listed above are available.
++
++Here is the ordering for the example that follows:
++
++1. Content is grouped by month according to the `date` field in front matter.
++2. Groups are listed in ascending order (i.e., the oldest groups first)
++3. Pages within each respective group are ordered alphabetically according to the `title`.
++
++{{< code file="layouts/partials/by-group-by-page.html" >}}
++{{ range .Pages.GroupByDate "2006-01" "asc" }}
++<h3>{{ .Key }}</h3>
++<ul>
++    {{ range .Pages.ByTitle }}
++    <li>
++    <a href="{{ .Permalink }}">{{ .Title }}</a>
++    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
++    </li>
++    {{ end }}
++</ul>
++{{ end }}
++{{< /code >}}
++
++## Filtering and Limiting Lists {#filtering-and-limiting-lists}
++
++Sometimes you only want to list a subset of the available content. A
++common is to only display posts from [**main sections**][mainsections]
++on the blog's homepage.
++
++See the documentation on [`where` function][wherefunction] and
++[`first` function][firstfunction] for further details.
++
++[base]: /templates/base/
++[bepsays]: https://bepsays.com/en/2016/12/19/hugo-018/
++[directorystructure]: /getting-started/directory-structure/
++[`Format` function]: /functions/format/
++[front matter]: /content-management/front-matter/
++[getpage]: /functions/getpage/
++[homepage]: /templates/homepage/
++[homepage]: /templates/homepage/
++[mentalmodel]: https://webstyleguide.com/wsg3/3-information-architecture/3-site-structure.html
++[pagevars]: /variables/page/
++[partials]: /templates/partials/
++[RSS 2.0]: https://cyber.harvard.edu/rss/rss.html "RSS 2.0 Specification"
++[rss]: /templates/rss/
++[sections]: /content-management/sections/
++[sectiontemps]: /templates/section-templates/
++[sitevars]: /variables/site/
++[taxlists]: /templates/taxonomy-templates/#taxonomy-list-templates
++[taxterms]: /templates/taxonomy-templates/#taxonomy-terms-templates
++[taxvars]: /variables/taxonomy/
++[views]: /templates/views/
++[wherefunction]: /functions/where/
++[firstfunction]: /functions/first/
++[mainsections]: /functions/where/#mainsections
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..3c744871b216bee5f68e415e353407771ed1b6a2
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++<svg height="446" viewBox="0 0 1730 446" width="1730" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(.538462 .461538)"><g transform="translate(2.996935 .388277)"><path d="m64.0494614 5.00059856 58.8489506 34.18916364v67.3333318l-58.8489506 33.404195-58.75248965-33.404195v-67.3333318z" fill="#ff4088"/><path d="m126.283637 35.8185172 1.230228 2.1375217v69.8133611l-1.253295 2.152899-60.9934622 34.621142h-2.4387878l-60.89490434-34.623239-1.25189712-2.1522v-69.8112641l1.22883034-2.1368227 60.89280732-35.43476985h2.4891154zm-116.37121203 6.0253228v61.994421l54.13913343 30.780872 54.2320996-30.782969v-61.990227l-54.2320996-31.5064271z" fill="#c9177e"/></g><path d="m60.4490685 78.3838073h-16.0432056v-32.93617h-27.9340521v32.93617h-16.04320555v-77.90259702h16.04320555v32.56189542h27.9340521v-32.56189542h16.0432056z" fill="#fff" fill-rule="nonzero" transform="translate(35.169824 33.865851)"/><g transform="translate(329.992265 24.431705)"><path d="m.21765.21067h263.332986v115.673517h-263.332986z" fill="#0083c0"/><path d="m263.550636 115.884187h-263.33298624v-115.6735171h263.33298624zm-260.79463916-113.13482905v110.59614105h258.25629216v-110.59614105z" fill="#000"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(352.419436 42.870159)"><path d="m22.7288949.05688029h3.6312065v31.52968501h-3.6312065v-14.4804699h-18.90904412v14.4804699h-3.58685032v-31.52968501h3.58685032v13.99359541h18.90904412z"/><path d="m37.3865286 30.4794869c-1.5939528-.9445259-2.826533-2.2879966-3.6974799-4.0296294-.8709468-1.7418937-1.3064203-3.7788866-1.3064203-6.1112394 0-2.332092.4354735-4.3693457 1.3064203-6.1109785.8709469-1.7418937 2.1035271-3.0851036 3.6974799-4.0298904 1.5942137-.94478689 3.4394312-1.41704986 5.5356526-1.41704986 2.0959605 0 3.941178.47226297 5.5353917 1.41704986 1.5942137.9447868 2.826533 2.2879967 3.6974799 4.0298904.8709468 1.7416328 1.3064203 3.7788865 1.3064203 6.1109785 0 2.3323528-.4354735 4.3693457-1.3064203 6.1112394-.8709469 1.7416328-2.1032662 3.0851035-3.6974799 4.0296294-1.5942137.9447869-3.4394312 1.4170499-5.5353917 1.4170499-2.0962214 0-3.9414389-.472263-5.5356526-1.4170499zm10.6280042-3.741836c1.1809184-1.461406 1.7713776-3.594417 1.7713776-6.3990328 0-2.7159035-.6050707-4.8194306-1.8154728-6.3103205-1.2104022-1.4908898-2.8933283-2.2363347-5.0482564-2.2363347-2.1846728 0-3.8822104.7454449-5.0926125 2.2363347-1.2104022 1.4908899-1.8157337 3.594417-1.8157337 6.3103205 0 2.8046158.5977649 4.9376268 1.7935556 6.3990328 1.1955298 1.461406 2.9006339 2.1919786 5.1147906 2.1919786s3.9116942-.7305726 5.0923516-2.1919786z"/><path d="m91.1464927 17.5929699v13.9935954h-3.5868503v-13.8164316c0-2.0959605-.3616334-3.6163341-1.0849002-4.561121-.7232669-.9447869-1.8968795-1.4170498-3.520577-1.4170498-1.8893128 0-3.3655912.6348153-4.4283133 1.9041851-1.0627222 1.2693698-1.5942137 2.9966521-1.5942137 5.181064v12.7093533h-3.5868503v-13.8164316c0-2.0664767-.3692001-3.5795446-1.1070784-4.5389429-.7381392-.9593983-1.9190575-1.4392279-3.542755-1.4392279-1.8893128 0-3.3728969.6348153-4.4504915 1.9041851-1.0775945 1.2693698-1.6163917 2.9966521-1.6163917 5.181064v12.7093533h-3.5868504v-16.0305883c0-2.3026081-.1181962-4.3839571-.3543276-6.24378613h3.4099473l.3540668 3.89682183c.619943-1.4170498 1.5425518-2.5092558 2.7678263-3.27687883 1.2252746-.76762302 2.6496301-1.15143453 4.2733276-1.15143453 1.7713775 0 3.2179112.35432769 4.3398619 1.06272215 1.1216898.70865541 1.9482805 1.80086131 2.479772 3.27713971.6789106-1.3285983 1.6753594-2.3840148 2.9890854-3.16624924 1.313726-.78249538 2.7973101-1.17361262 4.4504915-1.17361262 4.930321 0 7.3952206 2.93742346 7.3952206 8.81227056z"/><path d="m116.609555 20.3386181h-16.340559c.029483 2.8340996.686477 4.9744163 1.970458 6.4212109 1.284242 1.4465336 3.151638 2.1698005 5.601926 2.1698005 2.597968 0 4.989289-.8709469 7.173962-2.6128406l1.19553 2.6128406c-.974271.915303-2.221463 1.6385698-3.741837 2.1698004-1.520373.5314916-3.077797.7971069-4.672011.7971069-3.483526 0-6.214302-1.0259326-8.1923275-3.0775369-1.9780252-2.0518652-2.9669073-4.8637868-2.9669073-8.4360256 0-2.2731244.4427791-4.2882 1.3283374-6.0447052.8858192-1.7565051 2.1257054-3.121893 3.7199194-4.0961637 1.594213-.97427072 3.409686-1.46140606 5.44694-1.46140606 2.952035 0 5.269515.96696496 6.952441 2.90063396 1.682665 1.933669 2.524128 4.5979105 2.524128 7.9929856zm-13.971417-7.0852492c-1.166046 1.1216898-1.911491 2.701292-2.236335 4.7382848h12.974969c-.177164-2.0959604-.789801-3.6901741-1.837651-4.782641-1.048111-1.092206-2.50195-1.6385699-4.36204-1.6385699-1.859829 0-3.372897.5609754-4.538943 1.6829261z"/><path d="m138.352699 10.2421054c1.505502.9742707 2.671548 2.3396586 3.498399 4.0961637.826591 1.7565052 1.239886 3.7861923 1.239886 6.0890613 0 2.3026082-.413295 4.3174229-1.239886 6.0444443-.826851 1.7272822-1.985592 3.0631863-3.476221 4.0077122-1.49089.9447869-3.225478 1.4170499-5.203503 1.4170499-1.741632 0-3.262006-.3838115-4.561121-1.1511736-1.298853-.767623-2.287996-1.8600899-2.966907-3.2771398v13.683624h-3.587111v-25.5958704c0-2.3026081-.117936-4.3839571-.354067-6.24378613h3.409686l.354328 4.29550573c.619943-1.5352461 1.60152-2.7234701 2.944729-3.5649332 1.343471-.841463 2.930118-1.26206406 4.760463-1.26206406 1.948542 0 3.675563.48713534 5.181325 1.46140606zm-.774929 16.4733674c1.19553-1.4760175 1.793295-3.5722389 1.793295-6.2881424 0-2.7161643-.60507-4.8343029-1.815473-6.3546766-1.210402-1.5203736-2.893328-2.2806909-5.048256-2.2806909-2.214418 0-3.911694.7381392-5.092613 2.2141566-1.180918 1.4760175-1.771377 3.5868504-1.771377 6.3324986s.590459 4.8637867 1.771377 6.3546766c1.180919 1.4908898 2.878195 2.2363348 5.092613 2.2363348 2.184412 0 3.874644-.7381392 5.070434-2.2141567z"/><path d="m168.243032 9.31219087v22.27437443h-3.540668v-4.0296295c-.649688 1.387566-1.633352 2.4575939-2.945773 3.2103445-1.313987.7530116-2.841666 1.1292565-4.58356 1.1292565-1.978025 0-3.712352-.472263-5.203242-1.4170499-1.49089-.9445259-2.642325-2.28043-3.454043-4.0077122-.811979-1.7270214-1.217969-3.7418361-1.217969-6.0444443 0-2.302869.413296-4.3325561 1.239886-6.0890613.826852-1.7565051 1.985592-3.121893 3.476221-4.0961637 1.49089-.97427072 3.210606-1.46140606 5.159147-1.46140606 1.741894 0 3.262267.38381151 4.560077 1.15143453 1.299376.76762303 2.288258 1.84521753 2.969256 3.23252263v-3.85246563zm-5.312307 17.38110383c1.179353-1.4908899 1.771639-3.6090284 1.771639-6.3546766s-.592286-4.8564811-1.771639-6.3324986c-1.181962-1.4760174-2.864627-2.2141566-5.0493-2.2141566-2.184412 0-3.889516.7603173-5.114529 2.2806909-1.225275 1.5203737-1.837912 3.6385123-1.837912 6.3546766 0 2.7159035.605331 4.8121249 1.815734 6.2881424 1.210402 1.4760175 2.922551 2.2141567 5.136707 2.2141567 2.184673 0 3.867338-.745445 5.0493-2.2363348z"/><path d="m195.034171 9.31219087v22.09721053c0 3.3066236-.847986 5.8085737-2.543958 7.5061112-1.698581 1.6975375-4.200792 2.5463063-7.506633 2.5463063-3.394553 0-6.319453-.7676231-8.76948-2.3028691l.620987-2.9225511c1.416789.7971068 2.752693 1.3726936 4.007712 1.7270213s2.63528.5314915 4.140781.5314915c2.155189 0 3.778104-.568281 4.871353-1.7051041 1.090641-1.1365622 1.63857-2.826533 1.63857-5.0704345v-5.2695154c-.680998 1.4170498-1.675098 2.5165615-2.990129 3.2990569-1.315031.7822345-2.870106 1.1733517-4.670446 1.1733517-1.949063 0-3.684173-.4573906-5.205329-1.3726936-1.518548-.9150422-2.692682-2.2141567-3.519795-3.8968219-.827112-1.682926-1.239364-3.616595-1.239364-5.8012679 0-2.1846728.412252-4.1183418 1.239364-5.801007.827113-1.682926 2.001247-2.9817797 3.519795-3.8970827 1.521156-.91504214 3.256266-1.37269366 5.205329-1.37269366 1.769029 0 3.313668.38381151 4.62609 1.15143453 1.31503.76762303 2.309131 1.84521753 2.990129 3.23252263v-3.85246563zm-5.424501 16.45118933c1.226318-1.4319222 1.839477-3.4023808 1.839477-5.9118975 0-2.5092558-.613159-4.4799752-1.839477-5.9116365-1.223709-1.4319222-2.914463-2.1478833-5.069652-2.1478833-2.18389 0-3.903345.7159611-5.158364 2.1478833-1.255019 1.4316613-1.881224 3.4023807-1.881224 5.9116365 0 2.5095167.626205 4.4799753 1.881224 5.9118975s2.974474 2.1476224 5.158364 2.1476224c2.155189 0 3.845943-.7157002 5.069652-2.1476224z"/><path d="m220.585946 20.3386181h-16.338733c.028701 2.8340996.686216 4.9744163 1.969936 6.4212109 1.283721 1.4465336 3.151899 2.1698005 5.601926 2.1698005 2.598751 0 4.988767-.8709469 7.172657-2.6128406l1.195008 2.6128406c-.973227.915303-2.220419 1.6385698-3.741575 2.1698004-1.518547.5314916-3.076232.7971069-4.670446.7971069-3.483266 0-6.215085-1.0259326-8.192849-3.0775369-1.977765-2.0518652-2.966647-4.8637868-2.966647-8.4360256 0-2.2731244.443562-4.2882 1.328077-6.0447052.887124-1.7565051 2.126488-3.121893 3.720701-4.0961637 1.594214-.97427072 3.410209-1.46140606 5.445375-1.46140606 2.953601 0 5.270559.96696496 6.953485 2.90063396s2.523085 4.5979105 2.523085 7.9929856zm-13.969591-7.0852492c-1.166307 1.1216898-1.912535 2.701292-2.236074 4.7382848h12.972881c-.177424-2.0959604-.787974-3.6901741-1.836868-4.782641-1.048893-1.092206-2.502211-1.6385699-4.362562-1.6385699-1.86035 0-3.37107.5609754-4.537377 1.6829261z"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(347.017193 95.746626)"><path d="m.13103057 17.5444886 1.30960428-16.95274668h3.09535177l-1.16678937 14.42893518h7.92875255l-.1903731 2.5238115z"/><path d="m13.2028032 17.5444886.9524268-12.02408921h2.9762458l-.9524267 12.02408921zm1.1904984-17.47658839h3.3095741l-.2142224 2.92868762h-3.3095741z"/><path d="m18.7267099 16.2111754 1.0238341-2.0715176c1.3493063.936574 2.7858728 1.404861 4.3096994 1.404861 1.5396794 0 2.3095892-.4444378 2.3095892-1.3334535 0-.412592-.202438-.7261395-.6071738-.9405021-.4047358-.2142224-1.0516115-.4563624-1.940487-.7261395-.8413173-.2380716-1.5398197-.4762835-2.0953669-.7143551-.5555471-.2380716-1.0277622-.5833245-1.4166453-1.0357588-.388883-.452294-.5833245-1.04361503-.5833245-1.77382287 0-1.14279984.4602905-2.06352109 1.3808714-2.76188318.9207213-.69850237 2.1429251-1.04768342 3.6667517-1.04768342.8890158 0 1.7461858.13495869 2.5715101.40473576.8254645.26991737 1.5159704.64294766 2.0715176 1.11909088l-.999985 2.0238191c-1.1904983-.90472823-2.4206986-1.35716248-3.6906009-1.35716248-.7460606 0-1.3174605.11910595-1.71434.35717755-.3968796.23807161-.5952492.58725266-.5952492 1.04768343 0 .42858501.202438.74998869.6071738.96421105.4047358.21436265 1.0594677.45636238 1.9643363.72627978.8730227.2539243 1.5793813.4960643 2.1190758.7261394.5396944.2302154 1.0040533.5754683 1.3929363 1.0357588.388883.4604308.5833246 1.0556799.5833246 1.7857475 0 1.1587929-.4602905 2.0635211-1.3810118 2.714325-.9207212.6508038-2.1587778.9762759-3.7143099.9762759-1.9525519 0-3.7064536-.5079889-5.262126-1.5238266z"/><path d="m35.3699775 13.1396729c-.1111094 1.4127172.4841397 2.1190758 1.7857475 2.1190758.3651741 0 .7777661-.0555547 1.2381968-.1666642l-.1905134 2.3334385c-.5238417.1903731-1.1746456.2856298-1.9524116.2856298-1.2540496 0-2.2143325-.3294002-2.8809891-.9880603-.6667969-.6588004-1.0001253-1.6151552-1.0001253-2.8690645 0-.2382119.0079966-.4207288.0238493-.547691l.428585-5.54775586h-2.3095892l.1905134-2.23818175h2.28574l.2380716-2.92854732 3.0476532-1.00012522-.309479 3.92867254h3.2143174l-.1903731 2.23818175h-3.1906085z"/><path d="m39.5605709 16.2111754 1.0238342-2.0715176c1.349166.936574 2.7857324 1.404861 4.309559 1.404861 1.5398197 0 2.3095893-.4444378 2.3095893-1.3334535 0-.412592-.2022978-.7261395-.6071738-.9405021-.4047358-.2142224-1.0516116-.4563624-1.9404871-.7261395-.8413172-.2380716-1.5396793-.4762835-2.0952265-.7143551s-1.0279026-.5833245-1.4167856-1.0357588c-.388883-.452294-.5833246-1.04361503-.5833246-1.77382287 0-1.14279984.4602905-2.06352109 1.3810118-2.76188318.9207212-.69850237 2.142925-1.04768342 3.6667517-1.04768342.8888754 0 1.7460455.13495869 2.57151.40473576.8253243.26991737 1.5158301.64294766 2.0715176 1.11909088l-1.0001252 2.0238191c-1.1904983-.90472823-2.4206986-1.35716248-3.6904606-1.35716248-.7460606 0-1.3176008.11910595-1.7143401.35717755-.3968795.23807161-.5952492.58725266-.5952492 1.04768343 0 .42858501.2022978.74998869.6071738.96421105.4047358.21436265 1.0594678.45636238 1.964196.72627978.8731631.2539243 1.5795217.4960643 2.1192161.7261394.5396945.2302154 1.003913.5754683 1.3927961 1.0357588.388883.4604308.5833245 1.0556799.5833245 1.7857475 0 1.1587929-.4602905 2.0635211-1.3808714 2.714325-.9207213.6508038-2.1587778.9762759-3.7144502.9762759-1.9524117 0-3.7064537-.5079889-5.2619858-1.5238266z"/><path d="m58.3943218 15.592077.7380641-1.4999774c.8413173.7142148 1.6984873 1.2222038 2.57151 1.5238266.8730228.3016229 1.8890008.4524343 3.0476533.4524343 1.365159 0 2.4167706-.2659893 3.1548346-.7976872.7382044-.5318382 1.1071663-1.2818269 1.1071663-2.2501064 0-.5713999-.1784485-1.0357588-.5356261-1.392796-.3571775-.3571776-.8254645-.6390196-1.4048609-.8452454-.5793965-.2063662-1.3532344-.4207288-2.3215139-.6429477-1.3016077-.2857701-2.3730001-.59524916-3.2143174-.92857747s-1.5238266-.81353993-2.0476684-1.44049456c-.5238417-.62695464-.7857625-1.44849108-.7857625-2.46432874 0-.96827945.2540646-1.82152136.7619133-2.55958543.507989-.73820436 1.2262722-1.31353239 2.1548497-1.72626467.9285774-.41273227 2.0120347-.61909841 3.2500913-.61909841 1.1746456 0 2.2698872.18265718 3.2857249.54769096 1.0159779.36503378 1.8731479.896872 2.57151 1.59523409l-.7619133 1.50011768c-.7936188-.68264964-1.5991622-1.18264211-2.4166302-1.50011768-.8174681-.31747557-1.710412-.47614322-2.6786914-.47614322-1.3174605 0-2.3492912.28170171-3.0953518.8452454s-1.1190909 1.33738164-1.1190909 2.32151383c0 .85717002.3254721 1.49997739.976276 1.9285624s1.6507888.8016153 3.0000951 1.11909087c1.4602754.34918105 2.6071436.67058473 3.4404644.96435135.833461.29362633 1.527895.73806407 2.0834422 1.3333132.5555472.5952492.8333208 1.3849399.8333208 2.3690721 0 .9524267-.2539244 1.7896756-.7619133 2.5120272-.507989.7222113-1.2341285 1.2816866-2.1785587 1.6785662-.9445705.3968795-2.0517367.5952491-3.3214987.5952491-2.6509141 0-4.7619934-.7143551-6.3335185-2.142925z"/><path d="m83.9663269 11.4967403h-8.7859225c.0158527 1.5238266.3691021 2.674623 1.059608 3.4525293.6905059.7777661 1.6944189 1.1666491 3.0118794 1.1666491 1.3968645 0 2.6826195-.468287 3.8572651-1.404861l.6429477 1.404861c-.5238417.4921362-1.1945668.8810193-2.0120348 1.1666491-.817468.2857701-1.6547169.428585-2.5118869.428585-1.873148 0-3.3414199-.5516191-4.4049561-1.6547169-1.0635361-1.1032382-1.5952341-2.6151402-1.5952341-4.5358464 0-1.2222038.2380716-2.30566106.7143551-3.25009127.4761433-.94443021 1.1427999-1.67856617 1.9999699-2.20240788s1.833446-.78576257 2.9286876-.78576257c1.5872376 0 2.8334309.5199136 3.7381591 1.55960051.9047283 1.03968691 1.3571625 2.47218496 1.3571625 4.29763441zm-7.5120921-3.80956661c-.6269547.60310539-1.0277623 1.45241918-1.202423 2.54766081h6.9763258c-.0951164-1.1269471-.4245166-1.98411712-.9880603-2.57151006-.5635437-.58725265-1.3452378-.88101927-2.345363-.88101927-.999985 0-1.8135249.30162284-2.4404795.90486852z"/><path d="m88.8830598 16.9492395c-.8650263-.5078487-1.5316829-1.2261319-1.9999699-2.1548497-.468287-.9285775-.7024305-2.0118945-.7024305-3.249951 0-1.2381968.2380716-2.32951036.7143551-3.27394057.4761433-.94443021 1.1547245-1.67856617 2.0357438-2.20240788.8808789-.52384171 1.9087815-.78576257 3.0834271-.78576257.8094715 0 1.591306.1388868 2.3452228.41666039.7540571.27777359 1.3770836.66272851 1.8690796 1.15486475l-.6428074 1.42856993c-.6032457-.4762835-1.1865702-.82546455-1.7501139-1.04768342s-1.1388717-.33332831-1.7262647-.33332831c-1.2222038 0-2.1824867.40880417-2.8809891 1.2262722-.6983621.81746804-1.0475431 1.95633978-1.0475431 3.41675548 0 1.4444227.3452529 2.5674416 1.0356185 3.3690569.6905059.8016153 1.6548572 1.202423 2.8929137 1.202423.587393 0 1.162721-.1111094 1.7262647-.3333283s1.1468682-.5713999 1.7501139-1.0476834l.6428074 1.4285699c-.507989.4762835-1.1468683.8532419-1.9166378 1.1310155-.7699098.2777736-1.567597.4166604-2.3929213.4166604-1.1587928 0-2.1707024-.2539244-3.0358689-.7619133z"/><path d="m101.276251 7.09192453v6.54774077c0 .8888755.182517 1.511902.547691 1.8690796.365034.3571776.880879.5357663 1.547536.5357663.444437 0 .873023-.0714074 1.285755-.2143626v1.6429326c-.491996.1588079-1.047543.2380716-1.666642.2380716-1.14294 0-2.035743-.3214037-2.678691-.9642111-.6428075-.6429476-.9642112-1.591306-.9642112-2.8453555v-6.80966167h-2.3334385v-1.52382664h2.3334385v-3.07150253l1.9285622-.69050586v3.76200839h3.42868v1.52382664z"/><path d="m107.038229 17.5444886v-11.97639071h1.928703v11.97639071zm-.190373-17.04800338h2.357148v2.19062355h-2.357148z"/><path d="m114.681352 16.9492395c-.85717-.5078487-1.519898-1.2302003-1.988185-2.166634-.468287-.936574-.702431-2.0318157-.702431-3.2858652 0-1.2539093.234144-2.3492912.702431-3.2857249.468287-.93657398 1.131015-1.65878532 1.988185-2.1667743.85717-.50798897 1.849159-.76191332 2.976246-.76191332 1.126947 0 2.119076.25392435 2.976246.76191332.85717.50798898 1.519898 1.23020032 1.988185 2.1667743.468147.9364337.702291 2.0318156.702291 3.2857249 0 1.2540495-.234144 2.3492912-.702291 3.2858652-.468287.9364337-1.131015 1.6587853-1.988185 2.166634-.85717.5079889-1.849299.7619133-2.976246.7619133-1.127087 0-2.119076-.2539244-2.976246-.7619133zm5.71442-2.0118945c.634951-.7857626.952287-1.9326308.952287-3.4406047 0-1.4602754-.325332-2.59129092-.976136-3.39290622-.650804-.80161531-1.555532-1.20242296-2.714325-1.20242296-1.174646 0-2.08737.40080765-2.738174 1.20242296-.650804.8016153-.976276 1.93263082-.976276 3.39290622 0 1.5079739.321544 2.6548421.964351 3.4406047.642808.7857626 1.559601 1.1785737 2.750099 1.1785737s2.103223-.3928111 2.738174-1.1785737z"/><path d="m136.610315 10.0204719v7.5240167h-1.928563v-7.42876c0-1.11109441-.222219-1.92463434-.666656-2.44047953-.444438-.5158452-1.142941-.77383795-2.095367-.77383795-1.111095 0-1.99997.34132482-2.666627 1.02383418-.666656.68250935-1.000125 1.6032306-1.000125 2.7620235v6.8572198h-1.928562v-8.61925838c0-1.23805653-.063411-2.35714741-.190514-3.35713233h1.833446l.190514 2.14292505c.365033-.77790635.912724-1.37708362 1.642792-1.79767212.730208-.42072879 1.563529-.63102304 2.500102-.63102304 2.873133 0 4.30956 1.57938136 4.30956 4.73814412z"/><path d="m139.515153 16.1634769.642948-1.4285699c.650803.5079889 1.309464.8730227 1.97626 1.0952416.666517.2222189 1.412858.3333283 2.237761.3333283.904869 0 1.590885-.1547395 2.059453-.4642186s.702851-.7579852.702851-1.3452379c0-.4762835-.158527-.85717-.475582-1.1429401-.318457-.2857701-.841738-.507989-1.572647-.6666566l-2.022977-.4762835c-1.000406-.2222189-1.774104-.6189581-2.321795-1.1904983-.547691-.5713999-.821396-1.2539093-.821396-2.04766838 0-1.04754313.420588-1.90078504 1.261906-2.55958543.841317-.65866011 1.952832-.98806031 3.333283-.98806031.841738 0 1.635778.13495869 2.380716.40473577.746341.26991736 1.373436.65880039 1.881285 1.16678937l-.642527 1.40472069c-1.127929-.93657399-2.333018-1.40472069-3.619474-1.40472069-.85717 0-1.519338.16259575-1.987905.48806784-.468427.32533179-.702571.78169416-.702571 1.3690871 0 .49199596.146883.88101927.44051 1.16664909.294328.28577005.765701.50798895 1.416645.66665665l2.02438.4999924c1.111095.2540647 1.935998.6468758 2.476113 1.178714.540116.531698.809472 1.2261319.809472 2.083302 0 1.0318306-.420869 1.8571549-1.262607 2.4762533-.840336.6190984-1.983697.9285775-3.42868.9285775-2.015402 0-3.610776-.5158452-4.785422-1.5476759z"/><path d="m171.469076 17.5444886-1.857435-4.3572575h-8.857891l-1.881285 4.3572575h-2.022977l7.452188-16.95274668h1.71434l7.452189 16.95274668zm-10.025101-5.9763409h7.476038l-3.737318-8.71437478z"/><path d="m178.348883 15.0920845v1.7381893c0 .6666566-.110829 1.2777585-.332487 1.8333057-.22306.5555472-.596231 1.0952416-1.119511 1.6190833l-.904869-.6905058c.618678-.7142148.967999-1.3968645 1.047964-2.0476684h-1.143361v-2.4524041z"/><path d="m200.064324 10.2943173c.540116.7063586.809472 1.5834498.809472 2.6309929 0 1.4762685-.492417 2.6151402-1.475848 3.4167555-.984833.8016153-2.373701 1.2024229-4.166603 1.2024229h-7.048155v-16.95274668h6.809662c1.729772 0 3.07515.38495492 4.036134 1.15486475.959582.76976954 1.439373 1.86108306 1.439373 3.27380026 0 .90486851-.232881 1.68656268-.701449 2.34536307-.468567.65866011-1.12372 1.14686824-1.964055 1.46420352.967998.26991737 1.721354.75798521 2.261469 1.46434378zm-9.95215-2.1785586h4.570638c1.269622 0 2.230606-.25406463 2.88155-.76191332.650944-.50798897.976416-1.25404956.976416-2.23818175 0-1.93655891-1.286456-2.90483837-3.857966-2.90483837h-4.570638zm7.892698 7.0596579c.627095-.4999925.939941-1.2658339.939941-2.2976646 0-2.0793738-1.293471-3.11906071-3.880413-3.11906071h-4.952226v6.16671401h4.952226c1.332752 0 2.313377-.2499962 2.940472-.7499887z"/><path d="m206.064515 15.0920845v1.7381893c0 .6666566-.110829 1.2777585-.33389 1.8333057-.221658.5555472-.594828 1.0952416-1.118109 1.6190833l-.904868-.6905058c.618677-.7142148.967999-1.3968645 1.046561-2.0476684h-1.141958v-2.4524041z"/><path d="m218.957137 16.6873186c-1.182642-.6983621-2.090316-1.7024154-2.725828-3.0118794-.635513-1.3096043-.952567-2.853352-.952567-4.63110303 0-1.77789127.317054-3.31364253.952567-4.60725378.635512-1.29361125 1.543186-2.28966807 2.725828-2.98817045 1.182642-.69836209 2.575719-1.04768342 4.17923-1.04768342 1.174225 0 2.250247.17858878 3.226663.53576634.975013.35717755 1.82096.89294389 2.535035 1.60715871l-.737924 1.50011768c-.809471-.69850238-1.60772-1.19849484-2.393342-1.50011768s-1.654016-.45229397-2.606583-.45229397c-1.857435 0-3.29821.60310539-4.322325 1.80945645-1.022712 1.20635107-1.534769 2.92069111-1.534769 5.14302012 0 2.23818173.507848 3.96430613 1.523546 5.17865373 1.015697 1.2143476 2.460681 1.8215213 4.333548 1.8215213.952567 0 1.820961-.1508114 2.606583-.4524342.785622-.3016229 1.583871-.8016153 2.393342-1.4999774l.737924 1.4999774c-.714075.7143551-1.560022 1.2499811-2.535035 1.6071587-.976416.3571776-2.052438.5357663-3.226663.5357663-1.603511 0-2.996588-.349181-4.17923-1.0476834z"/></g><g transform="translate(.267895 224.553185)"><path d="m.21765.193821h263.332986v106.422426h-263.332986z" fill="#c9177e"/><path d="m263.550636 106.616248h-263.33298624v-106.42242661h263.33298624zm-260.79463916-103.88400537v101.34558437h258.25629216v-101.34558437z" fill="#000"/></g><g transform="translate(.968438 362.150954)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(97.321977 362.150954)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(193.675515 362.150954)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(329.309669 362.924954)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(425.663669 362.924954)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(523.997669 362.924954)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(660.171823 361.893877)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(756.527208 361.893877)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(852.877977 361.893877)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(26.69736 242.51167)"><path d="m.00427353 31.0947909 1.49915514-3.0461739c1.70855821 1.4504369 3.44902547 2.4820676 5.22225648 3.0946072 1.7729461.6125397 3.83592255.9188095 6.18921435.9188095 2.772098 0 4.9077245-.5401745 6.4068797-1.6199537 1.4988702-1.080064 2.2484478-2.6031509 2.2484478-4.5695456 0-1.1604065-.3626805-2.1034326-1.0880414-2.8285086-.7253608-.7253609-1.6763642-1.2977293-2.8527252-1.7165355-1.1766459-.419091-2.7481662-.8544215-4.7145609-1.3057065-2.6433221-.5803457-4.8194048-1.2088399-6.52767811-1.8857674-1.70855822-.6769275-3.0948921-1.6521476-4.15843184-2.9253753-1.06382464-1.2732277-1.59573696-2.9416147-1.59573696-5.0045912 0-1.96639471.51567289-3.69916961 1.54730359-5.19803984 1.0316307-1.49915513 2.49004483-2.66753887 4.37609709-3.505721 1.88576735-.83818214 4.08578183-1.25727321 6.60004333-1.25727321 2.3854857 0 4.6097168.37094261 6.6729782 1.11225801 2.0629765.74131541 3.8037287 1.82137947 5.2222565 3.23962239l-1.5473036 3.04645873c-1.6119764-1.38633388-3.2478846-2.40172515-4.9080094-3.04645873-1.6601249-.64473357-3.4735271-.96695791-5.4399217-.96695791-2.6755162 0-4.7706866.57208353-6.28579626 1.71653548-1.51510965 1.14445195-2.27266448 2.71597223-2.27266448 4.71456088 0 1.7407521.6606881 3.0461738 1.98234919 3.9165499 1.32166109.870376 3.35272854 1.6279309 6.09263255 2.2726645 2.9658314.7091214 5.2949065 1.3618322 6.9872253 1.9584174 1.6923188.5963002 3.1025845 1.4988702 4.230797 2.70771 1.1284974 1.2088399 1.6926037 2.8125541 1.6926037 4.8111427 0 1.9342007-.5159578 3.6344968-1.5473036 5.101458-1.0316307 1.4666763-2.5065691 2.602866-4.4245304 3.4088542s-4.1664091 1.2088399-6.7453434 1.2088399c-5.38322623 0-9.67071874-1.4507218-12.86219267-4.3518804z"/><path d="m51.9362381 22.7779272h-17.8425672c.0324789 3.0946072.7495776 5.4316596 2.151866 7.011442 1.4022884 1.5794975 3.4413331 2.3692463 6.1168493 2.3692463 2.8367707 0 5.4478989-.9510034 7.8330998-2.8530102l1.3057065 2.8530102c-1.0638246.9994368-2.4256569 1.7891855-4.0857817 2.3692463-1.6604098.5803457-3.3607058.8703761-5.101458.8703761-3.8037287 0-6.7855146-1.1202353-8.9453578-3.3604209-2.1598433-2.2404705-3.2399073-5.310861-3.2399073-9.2114564 0-2.4820676.4837638-4.6823669 1.4507217-6.6003282s2.3210979-3.4088543 4.06185-4.4726789c1.7404673-1.0638247 3.7231014-1.595737 5.9473325-1.595737 3.2236679 0 5.7541688 1.0558474 7.5915028 3.1672572 1.8376189 2.1114099 2.7561434 5.0205458 2.7561434 8.7276926zm-15.2553707-7.736518c-1.2735126 1.2247944-2.0874781 2.949592-2.4418964 5.1738231h14.1676144c-.1934486-2.288619-.8623989-4.0293711-2.0068508-5.2222565-1.1441671-1.1926004-2.7319268-1.7891855-4.7627093-1.7891855-2.0307826 0-3.6829302.6125397-4.9561579 1.8376189z"/><path d="m61.9214888 33.8509343c-1.7569916-1.0313458-3.1108466-2.4900448-4.06185-4.3760971-.9510034-1.8857673-1.4265051-4.0857818-1.4265051-6.6000433 0-2.5145464.4837639-4.7308002 1.4507218-6.6487615s2.3453145-3.4088543 4.1342152-4.4726789c1.7891855-1.0638247 3.8763787-1.595737 6.2618644-1.595737 1.6441703 0 3.2316451.2820531 4.7627093.8461594 1.5313491.5641063 2.7965995 1.3458778 3.7960363 2.3453145l-1.3057066 2.9011587c-1.2247943-.9672429-2.4097024-1.6763643-3.5538694-2.1276493-1.144452-.451285-2.3131206-.6769276-3.505721-.6769276-2.4820676 0-4.4325078.8302049-5.8507507 2.4903298-1.4185278 1.6601248-2.1276493 3.9729605-2.1276493 6.9387919 0 2.9333526.7011442 5.2139943 2.1034326 6.8419253 1.4022884 1.6279309 3.3604209 2.4418963 5.8749674 2.4418963 1.1926004 0 2.361269-.2256425 3.505721-.6769275 1.144167-.451285 2.3290751-1.1604065 3.5538694-2.1276493l1.3057066 2.9011586c-1.0316307.9672429-2.3290751 1.7327749-3.8926181 2.2968812-1.5635431.5641063-3.1832118.8461594-4.8595761.8461594-2.3532918 0-4.408291-.5156729-6.1649977-1.5473036z"/><path d="m87.0894602 13.8325694v13.2972382c0 1.80514.3709426 3.0703905 1.112258 3.7957514s1.7891855 1.0880413 3.1430406 1.0880413c.90257 0 1.7729461-.1450152 2.6111282-.4353305v3.3364892c-.9994368.3225092-2.1276493.4834789-3.3849225.4834789-2.3208129 0-4.1342151-.6527108-5.4396368-1.9581325-1.3057066-1.3057066-1.9584174-3.2316451-1.9584174-5.7783855v-13.8291505h-4.7387775v-3.0946072h4.7387775v-6.23764778l3.9165499-1.4022884v7.63993618h6.9630086v3.0946072z"/><path d="m98.7912464 35.0597742v-24.321812h3.9165496v24.321812zm-.3868972-34.62130978h4.7869258v4.44874713h-4.7869258z"/><path d="m114.312716 33.8509343c-1.740752-1.0313458-3.08663-2.498307-4.037634-4.4000289-.950718-1.9020067-1.42622-4.1262378-1.42622-6.6729782 0-2.5464555.475502-4.7709715 1.42622-6.6726933.951004-1.9020068 2.296882-3.3686831 4.037634-4.4003138s3.75558-1.5473036 6.044199-1.5473036c2.288904 0 4.303447.5156729 6.044199 1.5473036s3.08663 2.498307 4.037633 4.4003138c.951004 1.9017218 1.426505 4.1262378 1.426505 6.6726933 0 2.5467404-.475501 4.7709715-1.426505 6.6729782-.951003 1.9017219-2.296881 3.3686831-4.037633 4.4000289-1.740752 1.0316307-3.755295 1.5473036-6.044199 1.5473036-2.288619 0-4.303447-.5156729-6.044199-1.5473036zm11.604919-4.0857818c1.289467-1.5957369 1.934201-3.924812 1.934201-6.9872253 0-2.9655465-.660973-5.2624277-1.982634-6.8903586s-3.158995-2.4418964-5.512287-2.4418964c-2.385486 0-4.239059.8139655-5.56072 2.4418964s-1.98235 3.9248121-1.98235 6.8903586c0 3.0624133.652711 5.3914884 1.958133 6.9872253 1.305707 1.595737 3.167257 2.393463 5.584937 2.393463s4.271253-.797726 5.56072-2.393463z"/><path d="m158.846626 19.7799018v15.2798724h-3.916835v-15.0864238c0-2.2564251-.451285-3.9085727-1.353855-4.9561579s-2.320813-1.5715203-4.255013-1.5715203c-2.256425 0-4.06185.693167-5.415705 2.079216-1.353856 1.3860489-2.030783 3.2558618-2.030783 5.6091536v13.9257324h-3.91655v-17.5041035c0-2.5142615-.129061-4.786926-.386897-6.8177085h3.723101l.386897 4.3518804c.741316-1.5797825 1.853574-2.7965996 3.33649-3.6507362 1.482915-.8544216 3.175234-1.2814899 5.076956-1.2814899 5.834796 0 8.752194 3.2074284 8.752194 9.6222853z"/><path d="m205.653771 35.0597742-3.772105-8.848776h-17.988722l-3.817689 8.848776h-4.111138l15.134003-34.42786122h3.481504l15.134002 34.42786122zm-20.359108-12.1368318h15.185285l-7.592643-17.69726709z"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(22.788376 290.137172)"><path d="m.04658391 21.7701602 1.62834138-20.70276002h4.56506199l-1.36656882 17.01005832h9.24650314l-.2907867 3.6927017z"/><path d="m16.3006611 21.7701602 1.1629859-14.74195382h4.3906544l-1.1629859 14.74195382zm1.5119622-21.66232409h4.7104554l-.319801 4.12904304h-4.7104553z"/><path d="m23.395439 20.2000084 1.4247584-3.0530998c.8141707.5622308 1.6863698.9935752 2.6169196 1.2940334.9303887.3004581 1.8609386.4506872 2.7913273.4506872.8141707 0 1.415087-.1163792 1.8027489-.3489764.387662-.2325971.5815736-.5427267.5815736-.9303886 0-.407166-.2277615-.7269669-.6832845-.9595641-.4555229-.2325972-1.1969969-.5040411-2.224422-.8141707-1.0661106-.2907868-1.9384709-.5815735-2.6169196-.8723603-.6784487-.2907867-1.2648579-.72197-1.7590665-1.2938721-.4943697-.5719021-.741474-1.3133761-.741474-2.224422 0-.9498927.2664471-1.78340617.7995024-2.50054048.5330554-.7172955 1.2891976-1.27936503 2.2681045-1.68653097.9789069-.40700475 2.0983714-.61058772 3.3583937-.61058772 1.1047962 0 2.1855752.16473618 3.2420144.49436973 1.0564393.32947236 1.9433067.7753239 2.6606022 1.33755462l-1.3957442 2.93672062c-.7172955-.5233839-1.4732766-.9208785-2.2679433-1.1921612-.7948279-.27144401-1.5701518-.40716599-2.3262941-.40716599-.7946667 0-1.395583.11637918-1.802749.34897639-.4070047.2325971-.6105877.5523981-.6105877.959564 0 .4265088.2422686.7656525.7269669 1.0177537.4845371.25194 1.2211754.5135513 2.2097537.7849953 1.0662719.3101296 1.9336353.6105877 2.6024126.9013745.6687773.2907867 1.2503508.7221312 1.7447205 1.2938721.4942086.5719021.7413128 1.3133761.7413128 2.224422 0 1.4539338-.5765766 2.5927412-1.7300522 3.4165832-1.1533145.8238421-2.7089592 1.2356826-4.6667729 1.2356826-2.5200445 0-4.768645-.6009163-6.7458015-1.802749z"/><path d="m44.7087867 16.0421124c-.0581896.8141707.1065466 1.415087.4942086 1.8027489.3878231.387662.9208784.5815736 1.5993272.5815736.4458515 0 .94006-.0776936 1.482948-.2327584l-.2907868 3.4020761c-.6591059.271444-1.5119622.4070048-2.5587301.4070048-1.6671881 0-2.9417175-.4458516-3.8237491-1.3375546-.8818705-.8915419-1.3228864-2.1515642-1.3228864-3.7799055 0-.3296336.0096714-.5815736.0290142-.7559811l.4651944-5.8154129h-2.7913273l.2616114-3.28569692h2.7914884l.2616114-3.46010454 4.5070336-1.42475841-.3779906 4.88486295h3.7508913l-.2617725 3.28569692h-3.7508913z"/><path d="m49.3900667 20.2000084 1.4247584-3.0530998c.8141707.5622308 1.686531.9935752 2.6169197 1.2940334.9305498.3004581 1.8609385.4506872 2.7914884.4506872.8141707 0 1.415087-.1163792 1.802749-.3489764.3876619-.2325971.5815735-.5427267.5815735-.9303886 0-.407166-.2277615-.7269669-.6832844-.9595641-.4556842-.2325972-1.196997-.5040411-2.224422-.8141707-1.0661107-.2907868-1.938471-.5815735-2.6169197-.8723603-.6784487-.2907867-1.2648579-.72197-1.7592276-1.2938721-.4942086-.5719021-.741474-1.3133761-.741474-2.224422 0-.9498927.2666082-1.78340617.7996635-2.50054048.5330554-.7172955 1.2890365-1.27936503 2.2679433-1.68653097.9789069-.40700475 2.0983715-.61058772 3.3583937-.61058772 1.1049574 0 2.1857364.16473618 3.2421757.49436973 1.0564392.32947236 1.9433066.7753239 2.6604409 1.33755462l-1.395583 2.93672062c-.7172955-.5233839-1.4732766-.9208785-2.2681045-1.1921612-.7946667-.27144401-1.5701518-.40716599-2.3261329-.40716599-.7948279 0-1.3957442.11637918-1.802749.34897639-.4070047.2325971-.6105877.5523981-.6105877.959564 0 .4265088.2422686.7656525.7269669 1.0177537.4845372.25194 1.2211755.5135513 2.2097537.7849953 1.0661107.3101296 1.9336353.6105877 2.6024126.9013745.6687773.2907867 1.2503508.7221312 1.7445594 1.2938721.4943697.5719021.741474 1.3133761.741474 2.224422 0 1.4539338-.5767379 2.5927412-1.7300523 3.4165832-1.1533145.8238421-2.7089592 1.2356826-4.6667729 1.2356826-2.5200445 0-4.768645-.6009163-6.7459627-1.802749z"/><path d="m73.2145935 2.29179942h7.7695192c2.0061707 0 3.5700361.48340881 4.6917573 1.44990405 1.12156.96665643 1.68234 2.29808583 1.68234 3.9942882 0 1.69604118-.5652933 3.03198393-1.6960412 4.00782813-1.1307478.9756831-2.6900999 1.4636052-4.6780561 1.4636052h-5.526238v8.5627352h-2.2432812zm7.5778643 9.05533178c1.4408774 0 2.5260084-.3101295 3.2555544-.9302274.7295459-.62009798 1.0943189-1.51373534 1.0943189-2.68091213 0-1.16733798-.364773-2.05646202-1.0943189-2.66737212-.729546-.61107129-1.814677-.91652634-3.2555544-.91652634h-5.3345831v7.19503799z"/><path d="m102.432215 8.0095311v13.7606291h-2.188638v-2.4894183c-.4012015.8572084-1.0075983 1.5182486-1.8193511 1.9832817-.8115916.4651944-1.7553591.6976303-2.8314635.6976303-1.2218202 0-2.2934114-.2917539-3.214451-.8754229-.9210397-.5835078-1.63221-1.4088006-2.1338332-2.4758784-.5016233-1.0669166-.7522738-2.3116257-.7522738-3.7341275 0-1.4226629.255325-2.6765599.7659749-3.761691s1.2264947-1.92863838 2.1475344-2.53052184c.9210396-.60188346 1.9834429-.90282519 3.1870487-.90282519 1.0761044 0 2.0153585.23711049 2.8179235.71133147.8024039.47422098 1.4134752 1.13993568 1.8328911 1.99698296v-2.3799704zm-3.2829565 10.7376719c.729546-.9210397 1.0943185-2.2295801 1.0943185-3.9257825s-.3647725-3.0002295-1.0943185-3.9120813c-.7295459-.91185183-1.7690602-1.36785834-3.1187041-1.36785834s-2.4028593.46970764-3.1598076 1.40896184c-.756787.9392541-1.1352611 2.2477945-1.1352611 3.9257824 0 1.6778267.3737996 2.9728272 1.12156 3.884679s1.8056504 1.3678583 3.1735087 1.3678583c1.3496439 0 2.3891582-.4605198 3.1187041-1.3815594z"/><path d="m118.983366 8.0095311v13.6511811c0 2.0427609-.524351 3.5884118-1.573054 4.6371139-1.048702 1.0487022-2.594514 1.5730532-4.637113 1.5730532-2.097405 0-3.903055-.4742209-5.41679-1.4226629l.382987-1.8054892c.875423.4924355 1.700716.8480206 2.475878 1.0669166.775163.218896 1.627697.328344 2.557925.328344 1.331429 0 2.334514-.3510718 3.009256-1.0533766.674902-.7021436 1.012273-1.7461713 1.012273-3.1324053v-3.2553932c-.419417.8754229-1.035001 1.5546775-1.846593 2.0380863-.811591.4832477-1.773735.7248715-2.886268.7248715-1.203606 0-2.275197-.2825661-3.214451-.8480206-.939254-.5652933-1.664287-1.3678584-2.174937-2.4073727-.51065-1.0396755-.765974-2.2342546-.765974-3.5838984 0-1.3496439.255324-2.544223.765974-3.5837373.51065-1.0396755 1.235683-1.84207932 2.174937-2.40753384.939254-.56529333 2.010845-.84802059 3.214451-.84802059 1.094319 0 2.047274.23711049 2.858866.71133147s1.427176 1.13993568 1.846593 1.99698296v-2.3799704zm-3.351302 10.1631907c.756787-.8846107 1.135262-2.1019176 1.135262-3.652243 0-1.5501643-.378475-2.7676323-1.135262-3.6520819-.756948-.88461068-1.800976-1.32691604-3.132405-1.32691604-1.349644 0-2.412047.44230536-3.18721 1.32691604-.775001.8844496-1.162663 2.1019176-1.162663 3.6520819 0 1.5503254.387662 2.7676323 1.162663 3.652243.775163.8846107 1.837566 1.3267549 3.18721 1.3267549 1.331429 0 2.375457-.4421442 3.132405-1.3267549z"/><path d="m134.76838 14.8214205h-10.094846c.018375 1.7508458.424091 3.0730874 1.217468 3.9668859.793377.8936374 1.947014 1.340456 3.460749 1.340456 1.604969 0 3.082275-.5380522 4.431758-1.6141566l.738734 1.6141566c-.601884.5654546-1.372372 1.0122732-2.311626 1.3404561-.939415.328344-1.901397.4924354-2.886268.4924354-2.152048 0-3.839062-.633799-5.061044-1.901236-1.221981-1.2675982-1.833052-3.0047428-1.833052-5.2115951 0-1.4042873.2737-2.6491576.820779-3.7342887s1.313215-1.92863838 2.298086-2.53052184c.98471-.60188346 2.106431-.90282519 3.364841-.90282519 1.823865 0 3.255555.59737014 4.295069 1.79194923 1.039675 1.1945791 1.559352 2.8404902 1.559352 4.9378945zm-8.63108-4.3771144c-.720519.6929558-1.181039 1.6688-1.381559 2.9272104h8.015656c-.109448-1.2948393-.487922-2.2797102-1.135422-2.9546127-.647339-.67474139-1.545651-1.01227325-2.694614-1.01227325-1.148962 0-2.083703.3465585-2.804061 1.03967555z"/><path d="m137.285362 20.1834059.738572-1.6413978c.747761.583669 1.504709 1.0030854 2.270684 1.2584103.765975.255325 1.623506.3829875 2.571303.3829875 1.039675 0 1.827894-.1777926 2.366269-.5333778.538375-.3555851.807562-.8709095.807562-1.5456509 0-.54724-.182145-.9848709-.546434-1.3132149-.365901-.328344-.96714-.583669-1.80694-.7659749l-2.32436-.54724c-1.149446-.255325-2.03857-.7111703-2.667856-1.3678584-.629124-.6565268-.943767-1.4407162-.943767-2.3527292 0-1.2036057.483248-2.18396332 1.449904-2.94091156.966656-.75678705 2.243926-1.13526117 3.830036-1.13526117.96714 0 1.877863.15506478 2.735394.46503315.857531.31012956 1.57805.75694824 2.161558 1.34061723l-.73825 1.61399545c-1.295968-1.0761044-2.682202-1.61399545-4.158702-1.61399545-.984871 0-1.745688.18681921-2.284063.56078005-.538213.3737996-.807239.8981506-.807239 1.5730532 0 .5652933.168605 1.0122732.505975 1.340456.336726.328344.879936.583669 1.627858.7659749l2.325972.5744812c1.276625.291915 2.224422.743247 2.845003 1.3543183.61897.6109101.930067 1.4088006.930067 2.3936715 0 1.1855525-.48357 2.1338333-1.45071 2.8451647-.965529.7113315-2.279227 1.0669166-3.939484 1.0669166-2.315817 0-4.148708-.5926956-5.498352-1.778248z"/><path d="m166.776845 19.8826253h4.294102v1.8875349h-10.860982v-1.8875349h4.295713v-14.8003046l-3.994288 2.54422296v-2.16123552l4.979159-3.17350872h1.286296z"/><path d="m177.692632 18.9523978v1.9971441c0 .7659749-.128952 1.4681185-.383632 2.1064309s-.683446 1.2584104-1.286296 1.8602938l-1.039676-.7933771c.71246-.8206183 1.113823-1.6049689 1.20409-2.3527293h-1.313699v-2.8177624z"/><path d="m194.243621 19.8826253v1.8875349h-12.529298v-1.6960412l6.811889-7.5506231c.910724-1.0214611 1.576438-1.9425007 1.997144-2.76311902.419094-.82077948.628641-1.64139777.628641-2.46217725 0-1.07610444-.311096-1.90139724-.930066-2.4758784-.620582-.57448116-1.505515-.86172174-2.654799-.86172174-1.860133 0-3.700923.74776041-5.525594 2.24328123l-.847859-1.72344348c.765652-.72954594 1.732792-1.31321493 2.899808-1.75084578 1.167016-.43779204 2.343703-.65668806 3.530061-.65668806 1.785985 0 3.199622.46051983 4.239297 1.38155949 1.039676.92103966 1.560319 2.16574884 1.560319 3.73428873 0 1.11253338-.251456 2.18396331-.752757 3.21445098-.501301 1.0304877-1.336265 2.1841245-2.503281 3.4607493l-5.552995 6.0186734z"/><path d="m200.425258 18.9523978v1.9971441c0 .7659749-.12734 1.4681185-.38202 2.1064309-.256292.6383124-.683446 1.2584104-1.286297 1.8602938l-1.039675-.7933771c.710848-.8206183 1.112211-1.6049689 1.204089-2.3527293h-1.313698v-2.8177624z"/><path d="m215.691563 13.4535622c.601239.802565.902664 1.814677.902664 3.0366584 0 1.6962023-.575448 3.0321451-1.723121 4.0078281-1.149285.9758443-2.709604 1.4636052-4.679346 1.4636052-1.257282 0-2.466207-.2097082-3.623551-.6291245-1.158956-.4195776-2.138991-1.0122732-2.941718-1.7782481l.875262-1.7236047c1.805328 1.495682 3.684803 2.2434424 5.635202 2.2434424 1.386234 0 2.440417-.3101295 3.160936-.9302275.72052-.6200979 1.079973-1.5319497 1.079973-2.7357166 0-2.3891582-1.495843-3.5837373-4.485917-3.5837373h-2.243765v-1.8876961h1.805328c1.441038 0 2.54519-.3191562 3.310842-.9574686.765653-.63847359 1.149285-1.55032542 1.149285-2.73571668 0-1.05788997-.315932-1.86948162-.944573-2.43493614-.628641-.56529333-1.51841-.84802059-2.667695-.84802059-1.860132 0-3.702534.74776041-5.525593 2.24328123l-.847859-1.72344348c.783383-.74776041 1.745687-1.33594272 2.885301-1.76454693 1.141225-.42860421 2.330807-.64298691 3.570358-.64298691 1.752135 0 3.151265.44681868 4.200612 1.34061723 1.047735.89363736 1.571602 2.09740428 1.571602 3.61113957 0 1.11253338-.272411 2.08821645-.820457 2.9272104-.546434.838994-1.304027 1.4408774-2.269555 1.8054892 1.147673.328344 2.022934.8937985 2.625785 1.6962024z"/></g><g transform="translate(329.992265 224.553185)"><path d="m.21765.193821h263.332986v106.422426h-263.332986z" fill="#c9177e"/><path d="m263.550636 106.616248h-263.33298624v-106.42242661h263.33298624zm-260.79463916-103.88400537v101.34558437h258.25629216v-101.34558437z" fill="#000"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(359.320353 242.51167)"><path d="m.14615481 31.0947909 1.49887023-3.0461739c1.70855821 1.4504369 3.44931037 2.4820676 5.22225648 3.0946072 1.7729461.6125397 3.83620748.9188095 6.18921438.9188095 2.7723829 0 4.9080094-.5401745 6.4068796-1.6199537 1.4991552-1.080064 2.2484478-2.6031509 2.2484478-4.5695456 0-1.1604065-.3623955-2.1034326-1.0877564-2.8285086-.7253609-.7253609-1.6763643-1.2977293-2.8530102-1.7165355-1.1766458-.419091-2.7481661-.8544215-4.7145608-1.3057065-2.6433222-.5803457-4.81911993-1.2088399-6.52767814-1.8857674-1.70855822-.6769275-3.0946072-1.6521476-4.15843184-2.9253753s-1.59573696-2.9416147-1.59573696-5.0045912c0-1.96639471.5159578-3.69916961 1.54730359-5.19803984 1.0316307-1.49915513 2.49032973-2.66753887 4.37609709-3.505721 1.88576735-.83818214 4.08606666-1.25727321 6.60032816-1.25727321 2.3854858 0 4.6097169.37094261 6.6726934 1.11225801 2.0632614.74131541 3.8040135 1.82137947 5.2222565 3.23962239l-1.5473036 3.04645873c-1.6116915-1.38633388-3.2475997-2.40172515-4.9077245-3.04645873-1.6601249-.64473357-3.4735271-.96695791-5.4399218-.96695791-2.6755161 0-4.77097143.57208353-6.28608109 1.71653548-1.51510965 1.14445195-2.27266448 2.71597223-2.27266448 4.71456088 0 1.7407521.660973 3.0461738 1.98263409 3.9165499 1.32166109.870376 3.35244368 1.6279309 6.09263258 2.2726645 2.9655465.7091214 5.2946216 1.3618322 6.9869404 1.9584174 1.6926037.5963002 3.1028694 1.4988702 4.2310819 2.70771 1.1282125 1.2088399 1.6923188 2.8125541 1.6923188 4.8111427 0 1.9342007-.5156729 3.6344968-1.5473036 5.101458-1.0316307 1.4666763-2.5062843 2.602866-4.4242456 3.4088542-1.9182462.8059882-4.166694 1.2088399-6.7453434 1.2088399-5.38351106 0-9.67071867-1.4507218-12.86219259-4.3518804z"/><path d="m52.0781194 22.7779272h-17.8425672c.032194 3.0946072.7495776 5.4316596 2.151866 7.011442 1.4022884 1.5794975 3.4410482 2.3692463 6.1165643 2.3692463 2.8367708 0 5.447899-.9510034 7.8333847-2.8530102l1.3057066 2.8530102c-1.0638246.9994368-2.4259418 1.7891855-4.0860667 2.3692463-1.6601248.5803457-3.3604209.8703761-5.101173.8703761-3.8040136 0-6.7857995-1.1202353-8.9456428-3.3604209-2.1598432-2.2404705-3.2396224-5.310861-3.2396224-9.2114564 0-2.4820676.483479-4.6823669 1.4507218-6.6003282.9669579-1.9179613 2.320813-3.4088543 4.0615651-4.4726789 1.7407522-1.0638247 3.7233863-1.595737 5.9476174-1.595737 3.2233829 0 5.7541688 1.0558474 7.5915028 3.1672572 1.837334 2.1114099 2.7561434 5.0205458 2.7561434 8.7276926zm-15.2556556-7.736518c-1.2732277 1.2247944-2.0871932 2.949592-2.4418964 5.1738231h14.1676143c-.1931636-2.288619-.8621139-4.0293711-2.0065658-5.2222565-1.144452-1.1926004-2.7319268-1.7891855-4.7627094-1.7891855-2.0310674 0-3.683215.6125397-4.9564427 1.8376189z"/><path d="m62.0630852 33.8509343c-1.7567067-1.0313458-3.1105617-2.4900448-4.0615651-4.3760971-.9510034-1.8857673-1.4265051-4.0857818-1.4265051-6.6000433 0-2.5145464.483479-4.7308002 1.4507218-6.6487615.9669579-1.9179613 2.3450296-3.4088543 4.1342151-4.4726789 1.7889007-1.0638247 3.8763787-1.595737 6.2618645-1.595737 1.6438854 0 3.2316451.2820531 4.7627093.8461594 1.531349.5641063 2.7965995 1.3458778 3.7957514 2.3453145l-1.3054217 2.9011587c-1.2250793-.9672429-2.4097024-1.6763643-3.5541544-2.1276493-1.144167-.451285-2.3128357-.6769276-3.505721-.6769276-2.4820675 0-4.4322228.8302049-5.8507506 2.4903298-1.4182429 1.6601248-2.1273644 3.9729605-2.1273644 6.9387919 0 2.9333526.7011442 5.2139943 2.1031477 6.8419253 1.4022884 1.6279309 3.3607058 2.4418963 5.8749673 2.4418963 1.1928853 0 2.361554-.2256425 3.505721-.6769275 1.144452-.451285 2.3290751-1.1604065 3.5541544-2.1276493l1.3054217 2.9011586c-1.0316307.9672429-2.3290751 1.7327749-3.8923333 2.2968812-1.563543.5641063-3.1834966.8461594-4.859576.8461594-2.3532918 0-4.408291-.5156729-6.1652826-1.5473036z"/><path d="m87.2313415 13.8325694v13.2972382c0 1.80514.3706577 3.0703905 1.112258 3.7957514.7413154.7253609 1.7889006 1.0880413 3.1427556 1.0880413.9025701 0 1.7729461-.1450152 2.6111283-.4353305v3.3364892c-.9991519.3225092-2.1273644.4834789-3.3846376.4834789-2.3210979 0-4.1342152-.6527108-5.4399217-1.9581325-1.3054217-1.3057066-1.9581325-3.2316451-1.9581325-5.7783855v-13.8291505h-4.7387776v-3.0946072h4.7387776v-6.23764778l3.9165499-1.4022884v7.63993618h6.9630086v3.0946072z"/><path d="m98.9328427 35.0597742v-24.321812h3.9168353v24.321812zm-.3866122-34.62130978h4.7869255v4.44874713h-4.7869255z"/><path d="m114.454597 33.8509343c-1.740752-1.0313458-3.08663-2.498307-4.037633-4.4000289-.951004-1.9020067-1.426505-4.1262378-1.426505-6.6729782 0-2.5464555.475501-4.7709715 1.426505-6.6726933.951003-1.9020068 2.296881-3.3686831 4.037633-4.4003138s3.755295-1.5473036 6.044199-1.5473036c2.288619 0 4.303447.5156729 6.044199 1.5473036 1.740753 1.0316307 3.08663 2.498307 4.037634 4.4003138.950718 1.9017218 1.42622 4.1262378 1.42622 6.6726933 0 2.5467404-.475502 4.7709715-1.42622 6.6729782-.951004 1.9017219-2.296881 3.3686831-4.037634 4.4000289-1.740752 1.0316307-3.75558 1.5473036-6.044199 1.5473036-2.288904 0-4.303447-.5156729-6.044199-1.5473036zm11.604919-4.0857818c1.289468-1.5957369 1.933916-3.924812 1.933916-6.9872253 0-2.9655465-.660688-5.2624277-1.982349-6.8903586s-3.158995-2.4418964-5.512287-2.4418964c-2.385486 0-4.239059.8139655-5.56072 2.4418964s-1.982634 3.9248121-1.982634 6.8903586c0 3.0624133.652996 5.3914884 1.958417 6.9872253 1.305707 1.595737 3.167257 2.393463 5.584937 2.393463s4.271253-.797726 5.56072-2.393463z"/><path d="m158.988222 19.7799018v15.2798724h-3.916549v-15.0864238c0-2.2564251-.451285-3.9085727-1.353856-4.9561579-.90257-1.0475852-2.321097-1.5715203-4.255298-1.5715203-2.256425 0-4.061565.693167-5.41542 2.079216-1.353855 1.3860489-2.031068 3.2558618-2.031068 5.6091536v13.9257324h-3.91655v-17.5041035c0-2.5142615-.128775-4.786926-.386897-6.8177085h3.723387l.386897 4.3518804c.741315-1.5797825 1.853573-2.7965996 3.336204-3.6507362 1.482916-.8544216 3.175234-1.2814899 5.077241-1.2814899 5.834796 0 8.751909 3.2074284 8.751909 9.6222853z"/><path d="m203.619569 20.3360308c1.096874 1.4344824 1.643886 3.2156906 1.643886 5.343055 0 2.9980254-1.000007 5.3108611-3.00002 6.938792-1.997164 1.6279309-4.817695 2.4418964-8.461594 2.4418964h-14.310635v-34.42786122h13.82915c3.512844 0 6.245056.78177151 8.196635 2.34531453 1.948731 1.56325812 2.923097 3.77951197 2.923097 6.64847666 0 1.83761893-.475787 3.42509373-1.424511 4.76299423-.951573 1.3376156-2.282066 2.3290751-3.991479 2.9735238 1.968673.5481517 3.498598 1.5393263 4.595471 2.9738086zm-20.213807-4.4242455h9.284961c2.578364 0 4.529944-.5159578 5.85189-1.5473036 1.321946-1.0316307 1.982919-2.5467404 1.982919-4.54532897 0-3.93278933-2.612553-5.899184-7.834809-5.899184h-9.284961zm16.031444 14.3368462c1.273512-1.0153913 1.908844-2.5706722 1.908844-4.6661275 0-4.2228197-2.626798-6.3342296-7.880393-6.3342296h-10.059895v12.523444h10.059895c2.70657 0 4.698036-.5076956 5.971549-1.5230869z"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(356.809897 292.199308)"><path d="m.10689318 19.8854177 1.48742717-18.91226722h4.17039899l-1.24844346 15.53895012h8.44675212l-.2655896 3.3733171z"/><path d="m14.955185 19.8854177 1.0625151-13.46697537h4.01092l-1.0625151 13.46697537zm1.3811601-19.78885388h4.3031155l-.2921955 3.77193628h-4.3031156z"/><path d="m21.436386 18.4510458 1.3014988-2.7889259c.7437136.5134941 1.540639.9074182 2.3906198 1.1819286.8499807.2745105 1.6999614.4117657 2.5499422.4117657.7437136 0 1.2927345-.1062672 1.6469061-.3188015.3541717-.2125343.5311793-.495809.5311793-.8499807 0-.3718568-.2079956-.6640524-.6241435-.8765867-.4161478-.2123778-1.0935031-.4602823-2.0320659-.7437136-.973933-.2655896-1.7708584-.5311792-2.3906197-.7967689-.6197613-.2657461-1.1554793-.6596702-1.6069973-1.1820852-.451518-.5224149-.6773553-1.1997702-.6773553-2.0320659 0-.86766582.2435224-1.62906451.7305671-2.28435256.4868883-.65513154 1.1775465-1.16862571 2.0718183-1.5404825s1.916878-.5579417 3.0679751-.5579417c1.0093032 0 1.9965392.15055818 2.9615514.45167454.9651687.30095986 1.7752405.70834338 2.4305286 1.22183754l-1.2750494 2.68281528c-.6551315-.47812392-1.3457898-.84121642-2.0718183-1.08912095s-1.4343718-.37185679-2.1250301-.37185679c-.7260285 0-1.2748928.10626716-1.6467496.31880147-.3718568.21237781-.5577852.50457336-.5577852.87643017 0 .3896984.2212986.6995791.6640523.9297985.4425972.2302194 1.1155704.4692031 2.0186065.7171076.9740895.2832748 1.7664762.5577852 2.3773168.8233749.610997.2657461 1.1421763.6596702 1.5938508 1.1820851.451518.522415.6773553 1.1997703.6773553 2.032066 0 1.3281047-.5269536 2.3683959-1.5805479 3.1210303-1.0535942.7526344-2.4746631 1.1288734-4.2632067 1.1288734-2.3020377 0-4.3561708-.5490209-6.1623995-1.6469062z"/><path d="m40.9064384 14.6526601c-.0530553.7437136.0973463 1.2927345.451518 1.6469062s.8412165.5311793 1.4609778.5311793c.407227 0 .8589015-.0707405 1.3547106-.2123778l-.2657461 3.1077274c-.6020763.2479045-1.3811601.3718568-2.337408.3718568-1.5229539 0-2.6871974-.407227-3.4928871-1.2218376-.8056897-.8146105-1.2085346-1.9655511-1.2085346-3.4531348 0-.3009598.0087643-.5311792.0264494-.6906582l.4250686-5.31241881h-2.5499422l.2389837-3.00146026h2.5499422l.2391403-3.16093925 4.1170306-1.30149878-.3452509 4.46243803h3.4265289l-.2389837 3.00146026h-3.4265289z"/><path d="m45.182948 18.4510458 1.3014988-2.7889259c.7438701.5134941 1.540639.9074182 2.3906198 1.1819286.8499807.2745105 1.6999614.4117657 2.5499422.4117657.7438701 0 1.2927345-.1062672 1.6469062-.3188015.3541716-.2125343.5313357-.495809.5313357-.8499807 0-.3718568-.2081521-.6640524-.6242999-.8765867-.4161479-.2123778-1.0935032-.4602823-2.032066-.7437136-.973933-.2655896-1.7707019-.5311792-2.3904632-.7967689-.6199178-.2657461-1.1554793-.6596702-1.6069973-1.1820852-.4516745-.5224149-.6773553-1.1997702-.6773553-2.0320659 0-.86766582.2433659-1.62906451.7304106-2.28435256.4868883-.65513154 1.1775465-1.16862571 2.0718183-1.5404825s1.916878-.5579417 3.0679751-.5579417c1.0093032 0 1.9965392.15055818 2.9617079.45167454.9650122.30095986 1.7752405.70834338 2.4303721 1.22183754l-1.2748929 2.68281528c-.655288-.47812392-1.3459463-.84121642-2.0719748-1.08912095-.7260284-.24790453-1.4343718-.37185679-2.1248736-.37185679-.7260284 0-1.2750493.10626716-1.6469061.31880147-.3718568.21237781-.5577852.50457336-.5577852.87643017 0 .3896984.2212986.6995791.6640523.9297985.4427538.2302194 1.1155704.4692031 2.018763.7171076.973933.2832748 1.7663198.5577852 2.3773168.8233749.6108405.2657461 1.1421763.6596702 1.5936943 1.1820851.451518.522415.6773553 1.1997703.6773553 2.032066 0 1.3281047-.5267971 2.3683959-1.5805479 3.1210303-1.0535942.7526344-2.4746631 1.1288734-4.2632066 1.1288734-2.3020378 0-4.3561709-.5490209-6.1623996-1.6469062z"/><path d="m67.4951382.97315048h7.543716c1.9478661 0 3.4664378.46935965 4.5554023 1.40776594 1.0891209.93856279 1.6336032 2.23129726 1.6336032 3.87820343 0 1.64674965-.5490209 2.94386628-1.6469062 3.89134985-1.0978853.9473271-2.6119184 1.4210689-4.5420993 1.4210689h-5.3654741v8.3138791h-2.1782419zm7.3577876 8.7921595c1.3990017 0 2.4525959-.30111636 3.1609393-.90319258.7083434-.60207621 1.062515-1.46974206 1.062515-2.60299755 0-1.133412-.3541716-1.9966957-1.062515-2.58985111-.7083434-.59331191-1.7619376-.88988961-3.1609393-.88988961h-5.1795457v6.98593085z"/><path d="m95.8636172 6.52470948v13.36070822h-2.1250301v-2.4170692c-.3895419.8322956-.9783152 1.4741242-1.7663198 1.9256423-.7880046.4516745-1.7043436.6773553-2.7491736.6773553-1.1864673 0-2.2267586-.2832748-3.1210303-.8499808-.8942718-.5665495-1.5849301-1.367857-2.0718183-2.4039227-.4870448-1.0359091-.7305671-2.2444437-.7305671-3.6256037 0-1.3813166.2479045-2.5987719.7437135-3.65236619.4959656-1.05359425 1.191006-1.87258693 2.0852778-2.45697803.8941152-.58439111 1.9256422-.87658666 3.0944244-.87658666 1.04483 0 1.9567869.23021942 2.7358707.69065826.7792403.46043884 1.3723957 1.10680608 1.7796227 1.93894521v-2.31080201zm-3.1873886 10.42560622c.7083433-.8942718 1.0623585-2.1647825 1.0623585-3.8116887 0-1.6469061-.3540152-2.9130347-1.0623585-3.79838565-.7083434-.88535096-1.7178031-1.32810469-3.0280662-1.32810469-1.3104196 0-2.3331823.45605669-3.0679751 1.36801357-.7349493.91195687-1.1024239 2.18246757-1.1024239 3.81168867 0 1.6290645.3630925 2.8864288 1.089121 3.7717797.7260284.885351 1.7530168 1.3281047 3.081278 1.3281047 1.3102631 0 2.3197228-.4471359 3.0280662-1.3414076z"/><path d="m111.933747 6.52470948v13.25444102c0 1.9833927-.509112 3.4841229-1.527336 4.5023469s-2.518955 1.5273361-4.502191 1.5273361c-2.036448 0-3.789621-.4604389-5.259363-1.3813166l.371857-1.7530168c.84998.478124 1.651288.8233749 2.403922 1.0359092.752478.2125343 1.580392.3188014 2.483584.3188014 1.292578 0 2.266511-.3408687 2.921799-1.0227627.655132-.6817374.982854-1.6954228.982854-3.0413691v-3.1607827c-.407384.8499807-1.005078 1.5094944-1.793082 1.978854-.788005.4692032-1.722029.7038048-2.802229.7038048-1.168782 0-2.209074-.274354-3.12103-.8233749-.911957-.5488644-1.615919-1.3281047-2.1117276-2.3374079-.4958091-1.0094597-.7437136-2.1693211-.7437136-3.4797407s.2479045-2.470281.7437136-3.47958423c.4958086-1.00945973 1.1997706-1.78854354 2.1117276-2.33756443.911956-.54886438 1.952248-.82337482 3.12103-.82337482 1.062515 0 1.987775.23021942 2.775779.69065826.788005.46043884 1.385543 1.10680608 1.792926 1.93894521v-2.31080201zm-3.253904 9.86782102c.734949-.8589016 1.102424-2.0408302 1.102424-3.546099 0-1.5051123-.367475-2.6871975-1.102424-3.54594251-.734793-.85890155-1.748634-1.28835233-3.041369-1.28835233-1.31042 0-2.34179.42945078-3.094424 1.28835233-.752635.85874501-1.128874 2.04083021-1.128874 3.54594251 0 1.5052688.376239 2.6871974 1.128874 3.546099.752634.8589015 1.784004 1.2881958 3.094424 1.2881958 1.292735 0 2.306576-.4292943 3.041369-1.2881958z"/><path d="m127.260162 13.138627h-9.801462c.017685 1.6999615.411765 2.9837752 1.182085 3.8515976.770319.8676658 1.890272 1.3014987 3.360014 1.3014987 1.558324 0 2.992696-.5224149 4.303116-1.5672449l.717264 1.5672449c-.584391.5490209-1.332644.9828538-2.244601 1.3014988-.911956.3188015-1.845981.478124-2.802228.478124-2.08966 0-3.727646-.6153792-4.914113-1.8459811-1.186467-1.2307583-1.779623-2.9174168-1.779623-5.060132 0-1.363475.26559-2.572166.796926-3.62576029.531179-1.05359425 1.274893-1.87258693 2.23114-2.45697803.956248-.58439111 2.045369-.87658666 3.267207-.87658666 1.770702 0 3.160939.58000895 4.170242 1.73987036 1.009304 1.1598614 1.514033 2.75793792 1.514033 4.79438592zm-8.380393-4.24990368c-.699423.67281665-1.146559 1.62030028-1.341408 2.84213778h7.7827c-.106111-1.2572078-.473586-2.21345565-1.102268-2.8687437-.628682-.65513154-1.50073-.98285381-2.616457-.98285381-1.11557 0-2.023145.33648658-2.722567 1.00945973z"/><path d="m129.703837 18.3447787.717265-1.5936944c.726028.566706 1.460821.973933 2.204691 1.2218376.743714.2479045 1.576009.3718568 2.496261.3718568 1.00946 0 1.776336-.1726255 2.297499-.5178764.522728-.3452508.784092-.8455986.784092-1.5007301 0-.5313358-.176851-.9562479-.530553-1.2750494-.355268-.3188014-.939033-.566706-1.752861-.7437135l-2.258529-.5313358c-1.115727-.2479046-1.97901-.6905018-2.589851-1.3281047-.610997-.6374465-.916339-1.3988452-.916339-2.2843526 0-1.16862572.469203-2.12049147 1.407766-2.85544076.938563-.73479278 2.178085-1.10226742 3.718411-1.10226742.939033 0 1.824853.15055818 2.655897.45151803.832608.30111636 1.532187.73494929 2.098737 1.30165528l-.716795 1.56708842c-1.256738-1.04482995-2.602684-1.56708842-4.037839-1.56708842-.955934 0-1.695266.18138975-2.217681.54448224-.522415.36293598-.783622.872048-.783622 1.52733603 0 .5488644.163861.9828538.491427 1.3014988.327565.3188015.854362.566706 1.580391.7437136l2.258216.5577852c1.239523.2834312 2.159774.7216463 2.76232 1.3149582.602546.5931554.903036 1.3678571.903036 2.324105 0 1.1510971-.469516 2.0718183-1.408548 2.7624765-.937467.6906583-2.212986 1.0359092-3.824992 1.0359092-2.248356 0-4.027979-.5754703-5.338399-1.7265674z"/><path d="m163.62325 13.9621584v1.8062286h-2.868744v4.1170307h-2.17699v-4.1170307h-8.712655v-1.6469061l9.110179-13.14833042h1.779466v12.98900792zm-11.500016 0h6.454282v-9.29688939z"/><path d="m168.936607 17.149547v1.9391018c0 .7437135-.123639 1.425451-.372483 2.0452123-.247278.6197613-.663582 1.2218376-1.247347 1.8062287l-1.011025-.7703195c.691754-.796769 1.081452-1.5583242 1.169095-2.2843526h-1.273954v-2.7358707z"/><path d="m182.52284 8.76915321c.893645.50472986 1.580704 1.20853458 2.058046 2.11172719.478906.903036.718359 1.947866.718359 3.1343333s-.261364 2.2400616-.784092 3.1609393c-.522728.9207211-1.266128 1.6336032-2.231766 2.1381765-.964074.5047299-2.094043.7570166-3.386777.7570166-1.150315 0-2.283414-.2079957-3.399297-.6241435s-2.054916-.987236-2.815532-1.7132645l.823218-1.673512c1.752861 1.4522134 3.551108 2.1782419 5.391611 2.1782419 1.328731 0 2.369492-.3763954 3.122282-1.1290298.751226-.7524779 1.128404-1.7752406 1.128404-3.0678186 0-1.2573642-.372483-2.2710496-1.115883-3.0413691-.743401-.7703195-1.735645-1.15547928-2.975168-1.15547928-1.806072 0-3.249051.73479278-4.328938 2.20469138h-1.514973v-11.07651212h11.341946v1.80622865h-9.163391v6.74679062c1.045456-1.00930322 2.382012-1.51403309 4.011233-1.51403309 1.186311 0 2.227072.25228668 3.120718.75701655z"/><path d="m191.010127 17.149547v1.9391018c0 .7437135-.125205 1.425451-.372483 2.0452123-.247279.6197613-.663583 1.2218376-1.248913 1.8062287l-1.00946-.7703195c.691754-.796769 1.081452-1.5583242 1.169095-2.2843526h-1.275518v-2.7358707z"/><path d="m204.543147 8.76915321c.893646.50472986 1.58853 1.21307323 2.084652 2.12503009.496122.9119569.743401 1.9522482.743401 3.1210304s-.259799 2.2134557-.782527 3.1343333c-.522728.9208777-1.244218 1.6423675-2.166035 2.1647825-.920251.522415-1.964142.7836225-3.133238.7836225-2.284978 0-4.047229-.7969254-5.286751-2.3906198-1.239523-1.5936943-1.859284-3.8603618-1.859284-6.7998459 0-2.12503014.287969-3.94894389.863909-5.47189779.57594-1.52279739 1.406984-2.6828153 2.496261-3.47958421 1.089278-.79692542 2.396098-1.19538813 3.918895-1.19538813 1.097103 0 2.164469.20377001 3.200535.61099702s1.943797.98285382 2.721629 1.7265674l-.823219 1.67335558c-.88582-.74371359-1.735644-1.29273448-2.549472-1.64690617-.813828-.35401518-1.646437-.53117927-2.496261-.53117927-1.629221 0-2.89535.72602848-3.798386 2.17808544-.903036 1.45205695-1.355336 3.48850502-1.355336 6.10934423v.3984627c.406914-1.0094598 1.072061-1.80622867 1.992313-2.39061978s1.975098-.87658666 3.161409-.87658666c1.150314 0 2.172295.25228668 3.067505.75701655zm-.438215 8.34048499c.743401-.770163 1.115884-1.7929257 1.115884-3.0678186 0-1.2573642-.377178-2.2710496-1.129969-3.0413691s-1.73095-1.15547928-2.934476-1.15547928c-1.239523 0-2.248983.38954188-3.028379 1.16878218-.779397.7790838-1.169096 1.7883871-1.169096 3.0280662 0 1.2572078.389699 2.2754318 1.169096 3.0546721.779396.7790838 1.796681 1.1686257 3.054985 1.1686257 1.203526 0 2.178555-.3851597 2.921955-1.1554792z"/></g><g transform="translate(660.011742 224.553185)"><path d="m.21765.193821h263.332986v106.422426h-263.332986z" fill="#c9177e"/><path d="m263.550636 106.616248h-263.33298624v-106.42242661h263.33298624zm-260.79463916-103.88400537v101.34558437h258.25629216v-101.34558437z" fill="#000"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(688.758199 242.51167)"><path d="m.07350476 31.0947909 1.49915513-3.0461739c1.70855822 1.4504369 3.44902547 2.4820676 5.22225648 3.0946072 1.7729461.6125397 3.83592263.9188095 6.18921443.9188095 2.7720979 0 4.9077245-.5401745 6.4068796-1.6199537 1.4988702-1.080064 2.2484478-2.6031509 2.2484478-4.5695456 0-1.1604065-.3626804-2.1034326-1.0880413-2.8285086-.7253609-.7253609-1.6763643-1.2977293-2.8527253-1.7165355-1.1766459-.419091-2.7481662-.8544215-4.7145608-1.3057065-2.6433222-.5803457-4.81940488-1.2088399-6.52767819-1.8857674-1.70855822-.6769275-3.0948921-1.6521476-4.15843184-2.9253753-1.06382464-1.2732277-1.59573696-2.9416147-1.59573696-5.0045912 0-1.96639471.5156729-3.69916961 1.5473036-5.19803984 1.0316307-1.49915513 2.49004482-2.66753887 4.37609708-3.505721 1.88576736-.83818214 4.08578181-1.25727321 6.60004331-1.25727321 2.3854857 0 4.6097168.37094261 6.6729782 1.11225801 2.0629765.74131541 3.8037287 1.82137947 5.2222565 3.23962239l-1.5473036 3.04645873c-1.6119764-1.38633388-3.2478845-2.40172515-4.9080094-3.04645873-1.6601248-.64473357-3.473527-.96695791-5.4399217-.96695791-2.6755161 0-4.77068658.57208353-6.28579623 1.71653548-1.51510966 1.14445195-2.27266449 2.71597223-2.27266449 4.71456088 0 1.7407521.6606881 3.0461738 1.98234919 3.9165499 1.32166109.870376 3.35272853 1.6279309 6.09263253 2.2726645 2.9658315.7091214 5.2949066 1.3618322 6.9872254 1.9584174 1.6923187.5963002 3.1025844 1.4988702 4.2307969 2.70771 1.1284975 1.2088399 1.6926037 2.8125541 1.6926037 4.8111427 0 1.9342007-.5159578 3.6344968-1.5473036 5.101458-1.0316307 1.4666763-2.5065691 2.602866-4.4245304 3.4088542s-4.1664091 1.2088399-6.7453434 1.2088399c-5.3832262 0-9.67071872-1.4507218-12.86219264-4.3518804z"/><path d="m52.0054694 22.7779272h-17.8425672c.0324788 3.0946072.7495775 5.4316596 2.1518659 7.011442 1.4022884 1.5794975 3.4413332 2.3692463 6.1168493 2.3692463 2.8367707 0 5.447899-.9510034 7.8330998-2.8530102l1.3057066 2.8530102c-1.0638247.9994368-2.425657 1.7891855-4.0857818 2.3692463-1.6604098.5803457-3.3607058.8703761-5.101458.8703761-3.8037286 0-6.7855146-1.1202353-8.9453578-3.3604209-2.1598432-2.2404705-3.2399073-5.310861-3.2399073-9.2114564 0-2.4820676.4837639-4.6823669 1.4507218-6.6003282s2.3210978-3.4088543 4.06185-4.4726789c1.7407521-1.0638247 3.7231013-1.595737 5.9473324-1.595737 3.2236679 0 5.7541688 1.0558474 7.5915028 3.1672572 1.8376189 2.1114099 2.7561435 5.0205458 2.7561435 8.7276926zm-15.2553708-7.736518c-1.2735126 1.2247944-2.0874781 2.949592-2.4418963 5.1738231h14.1676143c-.1934486-2.288619-.8623988-4.0293711-2.0068508-5.2222565-1.144167-1.1926004-2.7319268-1.7891855-4.7627093-1.7891855-2.0307826 0-3.6829301.6125397-4.9561579 1.8376189z"/><path d="m61.99072 33.8509343c-1.7569915-1.0313458-3.1108466-2.4900448-4.06185-4.3760971-.9510034-1.8857673-1.426505-4.0857818-1.426505-6.6000433 0-2.5145464.4837638-4.7308002 1.4507217-6.6487615s2.3453146-3.4088543 4.1342152-4.4726789c1.7891855-1.0638247 3.8763787-1.595737 6.2618644-1.595737 1.6441703 0 3.2316451.2820531 4.7629942.8461594 1.5310642.5641063 2.7963147 1.3458778 3.7957514 2.3453145l-1.3057066 2.9011587c-1.2247943-.9672429-2.4097024-1.6763643-3.5538694-2.1276493-1.144452-.451285-2.3131206-.6769276-3.505721-.6769276-2.4820676 0-4.4325077.8302049-5.8507507 2.4903298-1.4185278 1.6601248-2.1276492 3.9729605-2.1276492 6.9387919 0 2.9333526.7011442 5.2139943 2.1034326 6.8419253 1.4022884 1.6279309 3.3604209 2.4418963 5.8749673 2.4418963 1.1926004 0 2.361269-.2256425 3.505721-.6769275 1.144167-.451285 2.3290751-1.1604065 3.5538694-2.1276493l1.3057066 2.9011586c-1.0316307.9672429-2.3290751 1.7327749-3.8926181 2.2968812s-3.1832118.8461594-4.859576.8461594c-2.3532918 0-4.4082911-.5156729-6.1649978-1.5473036z"/><path d="m87.1586914 13.8325694v13.2972382c0 1.80514.3709426 3.0703905 1.112258 3.7957514s1.7891856 1.0880413 3.1430406 1.0880413c.90257 0 1.7729461-.1450152 2.6111282-.4353305v3.3364892c-.9994367.3225092-2.1276493.4834789-3.3849225.4834789-2.3208129 0-4.1342151-.6527108-5.4396368-1.9581325-1.3057066-1.3057066-1.9584174-3.2316451-1.9584174-5.7783855v-13.8291505h-4.7387775v-3.0946072h4.7387775v-6.23764778l3.9165499-1.4022884v7.63993618h6.9630087v3.0946072z"/><path d="m98.8604776 35.0597742v-24.321812h3.9165494v24.321812zm-.3868971-34.62130978h4.7869255v4.44874713h-4.7869255z"/><path d="m114.381947 33.8509343c-1.740752-1.0313458-3.08663-2.498307-4.037633-4.4000289-.950719-1.9020067-1.426221-4.1262378-1.426221-6.6729782 0-2.5464555.475502-4.7709715 1.426221-6.6726933.951003-1.9020068 2.296881-3.3686831 4.037633-4.4003138s3.75558-1.5473036 6.044199-1.5473036c2.288904 0 4.303447.5156729 6.044199 1.5473036s3.08663 2.498307 4.037634 4.4003138c.951003 1.9017218 1.426505 4.1262378 1.426505 6.6726933 0 2.5467404-.475502 4.7709715-1.426505 6.6729782-.951004 1.9017219-2.296882 3.3686831-4.037634 4.4000289-1.740752 1.0316307-3.755295 1.5473036-6.044199 1.5473036-2.288619 0-4.303447-.5156729-6.044199-1.5473036zm11.604919-4.0857818c1.289468-1.5957369 1.934201-3.924812 1.934201-6.9872253 0-2.9655465-.660973-5.2624277-1.982634-6.8903586s-3.158995-2.4418964-5.512287-2.4418964c-2.385486 0-4.239059.8139655-5.56072 2.4418964s-1.982349 3.9248121-1.982349 6.8903586c0 3.0624133.652711 5.3914884 1.958132 6.9872253 1.305707 1.595737 3.167257 2.393463 5.584937 2.393463s4.271253-.797726 5.56072-2.393463z"/><path d="m158.915857 19.7799018v15.2798724h-3.916835v-15.0864238c0-2.2564251-.451285-3.9085727-1.353855-4.9561579s-2.320812-1.5715203-4.255013-1.5715203c-2.256425 0-4.06185.693167-5.415705 2.079216-1.353855 1.3860489-2.030783 3.2558618-2.030783 5.6091536v13.9257324h-3.91655v-17.5041035c0-2.5142615-.12906-4.786926-.386897-6.8177085h3.723101l.386898 4.3518804c.741315-1.5797825 1.853573-2.7965996 3.336489-3.6507362 1.482915-.8544216 3.175234-1.2814899 5.076956-1.2814899 5.834796 0 8.752194 3.2074284 8.752194 9.6222853z"/><path d="m185.630847 33.319022c-2.401725-1.4182429-4.247891-3.4572876-5.535648-6.1165644-1.290607-2.6595616-1.934486-5.7946249-1.934486-9.404905 0-3.6105649.643879-6.7293888 1.934486-9.35647159 1.287757-2.62708276 3.133923-4.64988805 5.535648-6.06841587 2.401726-1.41824292 5.230804-2.12764929 8.487236-2.12764929 2.384631 0 4.56983.36268044 6.552749 1.08804133 1.98007.72536088 3.69803 1.81340221 5.148182 3.26383907l-1.498585 3.04645873c-1.643886-1.41852782-3.264979-2.4339191-4.860431-3.04645873s-3.358996-.91852454-5.293482-.91852454c-3.772105 0-6.69805 1.22479436-8.777835 3.67466798-2.079786 2.44987362-3.11683 5.93137791-3.11683 10.44451291 0 4.545329 1.031346 8.0507651 3.094037 10.5168782 2.062692 2.466113 4.997184 3.6991695 8.800628 3.6991695 1.934486 0 3.69803-.3062698 5.293482-.9188094 1.595452-.6125397 3.216545-1.6279309 4.860431-3.0461739l1.498585 3.0461739c-1.450152 1.4507217-3.168112 2.5384782-5.148182 3.263839-1.982919.7253609-4.168118 1.0880414-6.552749 1.0880414-3.256432 0-6.08551-.7091215-8.487236-2.1276493z"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(683.970025 292.181215)"><path d="m.10947429 20.3655834 1.52334352-19.36893462h4.27110005l-1.27858915 15.91416332h8.65071269l-.2720028 3.4547713z"/><path d="m15.3163023 20.3655834 1.0881712-13.79215735h4.1077702l-1.0881712 13.79215735zm1.4145104-20.26668789h4.4070212l-.2992511 3.86301581h-4.4070212z"/><path d="m21.9540024 18.8965763 1.3329256-2.8562691c.7616718.5258933 1.5778402.9293293 2.4483451 1.2104683.870505.2811389 1.7410099.4217084 2.6115148.4217084.7616717 0 1.3239496-.1088332 1.6866734-.3264995.3627237-.2176663.5440054-.5077811.5440054-.8705049 0-.3808359-.213018-.680087-.6392144-.8977533-.4261964-.217506-1.1199075-.4713966-2.0811335-.7616717-.9974502-.2720027-1.8136186-.5440055-2.4483451-.8160082-.6347265-.272163-1.1833802-.675599-1.6458009-1.2106285-.4624206-.5350296-.6937111-1.2287407-.6937111-2.0811335 0-.88861705.2494026-1.66840095.7482079-2.33951199.4986449-.67095076 1.2059803-1.19684408 2.1218457-1.57767996s1.963164-.5714141 3.1420563-.5714141c1.0336745 0 2.0447488.15419365 3.0330628.46258095.9884743.30822702 1.8181067.72544747 2.4892177 1.25134079l-1.3058375 2.74759621c-.6709507-.489669-1.3782861-.86152895-2.1218457-1.11541954-.7435596-.25389058-1.4690071-.38083588-2.1763424-.38083588-.7435596 0-1.3056772.10883315-1.6865131.32649945-.3808359.21750602-.5712538.51675707-.5712538.89759297 0 .3991083.2266422.7164716.6800869.95225.4532845.2357784 1.1425077.4805328 2.067349.7344234.9976105.2901149 1.8091307.5712538 2.434721.8432566.6257505.272163 1.169756.675599 1.6323369 1.2106285.4624207.5350295.6937112 1.2287407.6937112 2.0811334 0 1.360174-.5396778 2.4255848-1.6187128 3.1963928s-2.5344179 1.1561318-4.3661487 1.1561318c-2.3576242 0-4.4613577-.5622779-6.3112007-1.6866734z"/><path d="m41.8941909 15.0064724c-.0543365.7616718.0996969 1.3239497.4624206 1.6866734.3627238.3627238.861529.5440055 1.4962555.5440055.4170601 0 .8796411-.0724486 1.3874223-.217506l-.272163 3.1827685c-.6166144.2538906-1.4145104.3808359-2.3938485.3808359-1.5597281 0-2.7520842-.4170602-3.5772286-1.2513408s-1.2377166-2.0130125-1.2377166-3.5365164c0-.308227.0089759-.5440054.0270881-.7073353l.4353326-5.44069574h-2.6115148l.2447544-3.07393541h2.6115147l.2449147-3.23726527 4.216443-1.33292558-.3535875 4.57019085h3.509268l-.2447544 3.07393541h-3.509268z"/><path d="m46.2739638 18.8965763 1.3329255-2.8562691c.7618321.5258933 1.5778403.9293293 2.4483452 1.2104683.8705049.2811389 1.7410098.4217084 2.6115147.4217084.7618321 0 1.3239497-.1088332 1.6866734-.3264995.3627238-.2176663.5441658-.5077811.5441658-.8705049 0-.3808359-.2131784-.680087-.6393748-.8977533-.4261963-.217506-1.1199075-.4713966-2.0811334-.7616717-.9974502-.2720027-1.8134584-.5440055-2.4481849-.8160082-.6348867-.272163-1.1833801-.675599-1.6458008-1.2106285-.462581-.5350296-.6937112-1.2287407-.6937112-2.0811335 0-.88861705.2492424-1.66840095.7480476-2.33951199.498645-.67095076 1.2059803-1.19684408 2.1218457-1.57767996s1.9631641-.5714141 3.1420563-.5714141c1.0336745 0 2.0447489.15419365 3.0332232.46258095.988314.30822702 1.8181066.72544747 2.4890574 1.25134079l-1.3056773 2.74759621c-.671111-.489669-1.3784463-.86152895-2.1220059-1.11541954-.7435597-.25389058-1.4690071-.38083588-2.1761822-.38083588-.7435596 0-1.3058375.10883315-1.6866734.32649945-.3808358.21750602-.5712538.51675707-.5712538.89759297 0 .3991083.2266422.7164716.680087.95225.4534447.2357784 1.1425076.4805328 2.0675093.7344234.9974502.2901149 1.8089704.5712538 2.4347209.8432566.6255903.272163 1.169756.675599 1.6321767 1.2106285s.6937111 1.2287407.6937111 2.0811334c0 1.360174-.5395175 2.4255848-1.6187127 3.1963928-1.079035.770808-2.5344179 1.1561318-4.3661488 1.1561318-2.3576241 0-4.4613577-.5622779-6.3112006-1.6866734z"/><path d="m69.124918.99664878h7.7258714c1.9949004 0 3.5501405.4806931 4.6653998 1.44175873 1.1154195.96122592 1.6730492 2.28517557 1.6730492 3.97184896 0 1.6865131-.5622779 3.01495072-1.6866734 3.98531283-1.1243955.9702019-2.6749874 1.4553829-4.6517756 1.4553829h-5.4950322v8.5146312h-2.2308392zm7.5354534 9.00446052c1.4327828 0 2.5118178-.30838734 3.2372653-.92500167.7254475-.61661432 1.0881712-1.50523137 1.0881712-2.66585116 0-1.16078007-.3627237-2.04490916-1.0881712-2.65238727-.7254475-.60763839-1.8044825-.91137745-3.2372653-.91137745h-5.3046142v7.15461755z"/><path d="m98.1784001 6.6822592v13.6833242h-2.1763424v-2.4754332c-.3989481.8523927-1.0019382 1.5097193-1.8089705 1.97214-.8070322.4625809-1.7454977.6937111-2.8155568.6937111-1.2151165 0-2.2805273-.2901148-3.1963927-.8705049-.9158655-.5802297-1.6232008-1.4008862-2.1218457-2.4619693-.4988053-1.0609229-.7482079-2.2986395-.7482079-3.7131498 0-1.4146707.2538906-2.6615235.7616717-3.74055852.5079415-1.07903499 1.2197648-1.91780358 2.1356302-2.51630576.9157051-.59850218 1.97214-.89775327 3.1691444-.89775327 1.0700591 0 2.0040366.23577845 2.8019327.70733533.7980563.47155689 1.4055344 1.13353171 1.8225946 1.9857642v-2.36660008zm-3.2643534 10.6773494c.7254475-.9158654 1.088011-2.2170547 1.088011-3.9037281 0-1.6866733-.3625635-2.9833746-1.088011-3.89010384-.7254474-.90672919-1.7592822-1.36017394-3.1011837-1.36017394-1.3420618 0-2.3895208.46706892-3.1420563 1.40104648-.7526958.9339776-1.1290438 2.2351668-1.1290438 3.9037281 0 1.6684009.37186 2.9561263 1.1154196 3.8628555s1.7953463 1.3601739 3.1556805 1.3601739c1.3419015 0 2.3757363-.4579327 3.1011837-1.3737981z"/><path d="m114.636569 6.6822592v13.574491c0 2.031285-.521405 3.5682527-1.564216 4.6110634s-2.579779 1.5642161-4.610903 1.5642161c-2.085622 0-3.881128-.4715569-5.38636-1.4146707l.380836-1.7953462c.870505.489669 1.691162.8432565 2.46197 1.0609228.770647.2176663 1.618552.3264995 2.543554.3264995 1.323789 0 2.321239-.3490996 2.99235-1.047459.670951-.6981991 1.006587-1.7363615 1.006587-3.1148079v-3.237105c-.417221.8705049-1.029347 1.5459436-1.836379 2.0266367-.807033.4805329-1.76361.7207993-2.869894.7207993-1.197004 0-2.262415-.2809787-3.196392-.8432566-.933978-.5621176-1.654937-1.3601739-2.162719-2.3938484-.507781-1.0338348-.761671-2.2217029-.761671-3.5637647s.25389-2.52993.761671-3.56360448c.507782-1.03383477 1.228741-1.83173082 2.162719-2.39400871.933977-.56211761 1.999388-.84325656 3.196392-.84325656 1.088172 0 2.035773.23577845 2.842806.70733533.807032.47155689 1.418998 1.13353171 1.836218 1.9857642v-2.36660008zm-3.332474 10.1060956c.752695-.8796411 1.129043-2.0901094 1.129043-3.6317253 0-1.5414557-.376348-2.7520842-1.129043-3.63156509-.752536-.87964112-1.790859-1.31946169-3.114808-1.31946169-1.342062 0-2.398337.43982057-3.169145 1.31946169-.770808.87948089-1.156131 2.09010939-1.156131 3.63156509 0 1.5416159.385323 2.7520842 1.156131 3.6317253s1.827083 1.3193014 3.169145 1.3193014c1.323949 0 2.362272-.4396603 3.114808-1.3193014z"/><path d="m130.333066 13.4558805h-10.038135c.018112 1.7410099.421708 3.0558233 1.210628 3.9446006.788921.8886171 1.935916 1.3329256 3.441148 1.3329256 1.595952 0 3.064959-.5350295 4.407021-1.6050886l.734584 1.6050886c-.598503.5622779-1.364823 1.0065864-2.2988 1.3329256-.933978.3264995-1.890555.489669-2.869893.489669-2.140119 0-3.817656-.6302385-5.032772-1.8905552-1.215117-1.260477-1.822595-2.9878626-1.822595-5.1823172 0-1.3963982.272003-2.6342751.816169-3.71331012.544005-1.07903499 1.305677-1.91780358 2.285015-2.51630576s2.094757-.89775327 3.346098-.89775327c1.813459 0 3.237266.59401422 4.27094 1.78188236 1.033675 1.18786815 1.550592 2.82453279 1.550592 4.91015419zm-8.582752-4.35252451c-.716311.6890629-1.174244 1.65942501-1.373798 2.91076581h7.970625c-.108672-1.2875651-.48502-2.26690312-1.128883-2.93801417-.643863-.67095075-1.536968-1.00658641-2.679636-1.00658641-1.142507 0-2.071997.34461159-2.788308 1.03383477z"/><path d="m132.835747 18.7877432.734584-1.6321767c.74356.58039 1.496095.9974502 2.257927 1.2513408.761672.2538906 1.614065.3808359 2.556538.3808359 1.033834 0 1.819228-.1767938 2.352975-.5303813.535351-.3535875.803026-.866017.803026-1.5369677 0-.5441658-.181122-.9793381-.543365-1.3058375-.363845-.3264995-.961706-.5803901-1.795186-.7616718l-2.313065-.5441657c-1.142668-.2538906-2.026797-.7071751-2.652387-1.360174-.625751-.6528386-.938466-1.4326225-.938466-2.339512 0-1.19684406.480533-2.17169415 1.441759-2.92438998.961226-.75253555 2.230679-1.12888347 3.808199-1.12888347.961706 0 1.868917.15419366 2.720027.46242067.852713.30838731 1.569185.75269584 2.149415 1.33308587l-.734103 1.60492831c-1.287084-1.07005906-2.665531-1.60492831-4.135339-1.60492831-.979018 0-1.736202.18576969-2.271231.55762964-.53503.37169967-.802544.89310502-.802544 1.56421607 0 .5621176.167817 1.0065864.503293 1.3329256.335475.3264994.874993.58039 1.618552.7616717l2.312745.5712539c1.269453.2902751 2.211925.7390716 2.829021 1.34671.617095.6074781.924841 1.4008862.924841 2.3802243 0 1.1788922-.480854 2.1218457-1.44256 2.829181-.960104.7073353-2.266423 1.0609228-3.917353 1.0609228-2.302646 0-4.125241-.5893659-5.467303-1.7682581z"/><path d="m153.917963.99664878h12.785891v1.65942503l-9.084923 17.70950959h-2.39465l9.032029-17.49184329h-10.338347z"/><path d="m173.015856 17.5636507v1.9859245c0 .7616718-.126624 1.4598709-.381477 2.0945973-.253249.6347265-.679606 1.2513408-1.277467 1.849843l-1.035437-.7889201c.708457-.8160082 1.107565-1.5959524 1.197324-2.339512h-1.304715v-2.8019327z"/><path d="m188.807081 12.1909156c.698841.8434168 1.048261 1.8543309 1.048261 3.0332231 0 1.6502888-.626712 2.9516384-1.878534 3.9037281-1.250219.9520897-2.938014 1.4281345-5.058578 1.4281345-2.122166 0-3.809961-.4760448-5.06018-1.4281345-1.251822-.9520897-1.876931-2.2534393-1.876931-3.9037281 0-1.1788922.357434-2.1944545 1.073906-3.0468473.716471-.8523928 1.700618-1.4417587 2.95244-1.7682582-1.16046-.3444513-2.050039-.91121715-2.667134-1.70013727-.615492-.78892012-.924841-1.71840971-.924841-2.78830849 0-1.03383478.272483-1.93607601.815848-2.70688399.544967-.77064769 1.311127-1.36914987 2.300082-1.79534625.987352-.42619638 2.117357-.63937472 3.38681-.63937472s2.397856.21317834 3.386811.63937472c.987352.42619638 1.753512 1.02469856 2.298479 1.79534625.543365.77080798.815848 1.67304921.815848 2.70688399 0 1.06989878-.312555 1.99938837-.939267 2.78830849-.625109.78892012-1.500262 1.35568597-2.623856 1.70013727 1.269452.3446116 2.251996.9386258 2.950836 1.7818824zm-9.004781-3.59085282c.770969.64386269 1.809612 1.03832275 3.11593 1.18338018 1.304716-.14505743 2.343359-.53951749 3.114327-1.18338018.770969-.64386268 1.155651-1.48263127 1.155651-2.51630576 0-1.07005906-.376668-1.91331562-1.128402-2.52992994-.753337-.61661432-1.799995-.92500163-3.141576-.92500163-1.343183 0-2.389841.30838731-3.143178.92500163-.751734.61661432-1.128403 1.45987088-1.128403 2.52992994 0 1.03367449.384683 1.87244308 1.155651 2.51630576zm6.624557 9.18125422c.815848-.6166143 1.224574-1.5143676 1.224574-2.6932598 0-1.0698988-.431166-1.9267795-1.291893-2.5706422-.862331-.6438627-2.009967-1.0383227-3.441308-1.1833802-1.432943.1450575-2.580579.5395175-3.441307 1.1833802-.86233.6438627-1.293496 1.5007434-1.293496 2.5706422 0 1.1788922.408726 2.0766455 1.224574 2.6932598s1.985924.9248414 3.510229.9248414c1.522703 0 2.692779-.3082271 3.508627-.9248414z"/><path d="m195.622377 17.5636507v1.9859245c0 .7616718-.128228 1.4598709-.381477 2.0945973-.25325.6347265-.679606 1.2513408-1.27907 1.849843l-1.033835-.7889201c.708457-.8160082 1.107566-1.5959524 1.197325-2.339512h-1.306318v-2.8019327z"/><path d="m210.339696 3.22732763c1.26785 1.63217667 1.902577 3.95357653 1.902577 6.96419957 0 3.2824655-.657167 5.8351558-1.971499 7.6577504-1.314333 1.8225946-3.151193 2.7339721-5.508977 2.7339721-1.105963 0-2.189486-.2085301-3.250569-.6257505-1.061083-.4170602-1.998747-1.0064262-2.816198-1.7680979l.871947-1.7139218c.924842.7799442 1.803201 1.3465498 2.638283 1.7002976.833479.3535875 1.676575.5303813 2.529288.5303813 1.668562 0 2.960454-.7435596 3.877282-2.2306789.915224-1.4871192 1.373637-3.5727406 1.373637-6.2568642v-.35358755c-.416739 1.01556235-1.097948 1.81810665-2.040421 2.40747265-.944075.5895262-2.02279.8841291-3.237746.8841291-1.178091 0-2.221543-.2583786-3.128753-.775296-.905607-.5167571-1.614064-1.2422046-2.120563-2.1761821-.508102-.93413786-.762954-1.99954868-.762954-3.19655303 0-1.19684408.267675-2.26690314.803025-3.21001692.53535-.94295348 1.274262-1.68202514 2.216734-2.21705467.944076-.53502953 2.013173-.8025443 3.210498-.8025443 2.340153 0 4.143353.81616848 5.414409 2.44834515zm-2.176663 6.85536647c.796614-.79805638 1.195722-1.83173087 1.195722-3.10118381 0-1.28772536-.399108-2.33053607-1.195722-3.12843212-.798217-.79805633-1.841668-1.19700436-3.128753-1.19700436-1.232587 0-2.231159.39446006-2.992511 1.18338018-.761351.78892012-1.142828 1.83621879-1.142828 3.1420563 0 1.28756508.381477 2.32588782 1.142828 3.11480791.761352.7889202 1.767938 1.1833802 3.01976 1.1833802 1.269453 0 2.303287-.3991083 3.101504-1.1970043z"/></g><path d="m17.8381448 46.9715784h11.4351924v5.0258027h-28.91585333v-5.0258027h11.43519243v-39.40433576l-10.63396507 6.77374006v-5.75407418l13.25608567-8.44915063h3.4233479z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(21.524072 376.769072)"/><path d="m35.1591611 47.829883v5.0258027h-33.35886717v-4.5159698l18.13640567-20.1027815c2.4277146-2.719109 4.2001136-5.1712853 5.3167679-7.3565289 1.1170835-2.1848144 1.6754107-4.3700579 1.6754107-6.5553015 0-2.8645916-.8256891-5.06185144-2.476638-6.59135026-1.6509489-1.52992798-4.0057077-2.29467739-7.0651345-2.29467739-4.9528467 0-9.85677016 1.99083755-14.71262852 5.97294185l-2.25819944-4.58892566c2.03976092-1.94234334 4.61295815-3.4958747 7.72087917-4.66145237 3.10749189-1.16557766 6.23944539-1.74793734 9.39586059-1.74793734 4.7584408 0 8.5216774 1.22608814 11.2897098 3.67826442 2.7676032 2.45217629 4.1516194 5.76609041 4.1516194 9.94174235 0 2.9620092-.667761 5.8150138-2.003283 8.5585845-1.3350928 2.7431415-3.5568143 5.8145846-6.6643061 9.2134709l-14.7855845 16.024118z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(113.15712 375.910768)"/><path d="m32.1649655 30.7131432c1.6024547 2.1367493 2.403682 4.8318258 2.403682 8.0848003 0 4.5159698-1.5294988 8.0727841-4.5884964 10.6708722-3.0594268 2.5976589-7.2110463 3.8967029-12.4548583 3.8967029-3.3508212 0-6.5677469-.5587563-9.65077711-1.6754106-3.08345933-1.1166543-5.69356366-2.6950765-7.82988385-4.7344083l2.33072618-4.5884964c4.806935 3.9816751 9.80827598 5.9725126 15.00402298 5.9725126 3.6902807 0 6.494791-.825689 8.4126727-2.4766379 1.9178817-1.650949 2.8770371-4.0786636 2.8770371-7.283573 0-6.3608955-3.9816751-9.5413433-11.9450254-9.5413433h-5.9729418v-5.0258026h4.8073642c3.8361924 0 6.77374-.8497216 8.8130718-2.5491647 2.0393317-1.6994432 3.0594268-4.1275869 3.0594268-7.283573 0-2.8165266-.8377053-4.97730847-2.513116-6.48234561-1.6749814-1.50546629-4.0421855-2.25819944-7.1016123-2.25819944-4.9528468 0-9.85677025 1.99083755-14.71262861 5.97294185l-2.25819944-4.58892566c2.08825513-1.99083756 4.6494361-3.55681433 7.68440122-4.69793031 3.03496513-1.14111599 6.20339663-1.7114594 9.50529443-1.7114594 4.6614524 0 8.388211 1.18961019 11.180276 3.56883059 2.7920649 2.37922039 4.1880973 5.58412982 4.1880973 9.61429918 0 2.9620092-.7287006 5.5596681-2.1852435 7.7934059-1.456543 2.2337377-3.4718422 3.8361925-6.0454686 4.8073641 3.0589977.8737541 5.390153 2.3792204 6.9921786 4.5155406z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(210.490122 375.910768)"/><path d="m37.9113149 35.7548245v4.9528468h-7.8663618v11.2897098h-5.9725127v-11.2897098h-23.89005067v-4.5159697l24.98267247-36.05394371h4.8798909v35.61706661zm-31.53797398 0h17.69909948v-25.4925054z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(344.333123 377.543534)"/><path d="m27.0614862 21.5151218c2.4521763 1.3840162 4.3340092 3.3143433 5.6450695 5.7905521 1.3110603 2.4766379 1.9663758 5.3412296 1.9663758 8.5946332 0 3.2534037-.7162552 6.142457-2.1487656 8.6675892-1.4320812 2.5251322-3.4718421 4.4794918-6.1179953 5.863508-2.6465822 1.383587-5.7420578 2.0758097-9.2868559 2.0758097-3.1559861 0-6.2634779-.5707726-9.32290473-1.7118886-3.05899765-1.1411159-5.63262403-2.7070927-7.72045001-4.6979303l2.25777029-4.5884964c4.80736415 3.9816751 9.73574925 5.9725126 14.78558445 5.9725126 3.6422156 0 6.494791-1.0316821 8.5585845-3.0954756 2.0633643-2.0637934 3.0954756-4.8678746 3.0954756-8.4126727 0-3.4473804-1.0196659-6.2274291-3.0589977-8.3397168-2.0397609-2.1122876-4.7588699-3.1684314-8.1577562-3.1684314-4.9528468 0-8.91048936 2.0152992-11.87249858 6.0454685h-4.15161943v-30.37282541h31.10109691v4.95284678h-25.12858424v18.50075603c2.86502084-2.7680324 6.53126894-4.1520486 10.99831534-4.1520486 3.2534036 0 6.105979.6922227 8.5581553 2.0758097z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(442.786269 377.543534)"/><path d="m28.6326128 22.3734264c2.4521763 1.3840162 4.3580417 3.3263595 5.7175962 5.82703s2.0393318 5.3536751 2.0393318 8.5581554c0 3.2049094-.7162552 6.0699302-2.1487656 8.5946332-1.4320813 2.5251322-3.4109026 4.5039535-5.9360347 5.9364639-2.5247031 1.4320813-5.3897239 2.1483365-8.5946333 2.1483365-6.2639071 0-11.09530378-2.1848144-14.49419005-6.5553015-3.39931543-4.370058-5.09875857-10.5854709-5.09875857-18.6458095 0-5.82703.78921109-10.828371 2.36720413-15.004023 1.57799303-4.1760811 3.86022501-7.35652885 6.84669592-9.5417724 2.98604177-2.18524355 6.56731777-3.27743617 10.74339887-3.27743617 3.0105034 0 5.9360347.55832715 8.7765938 1.67498145 2.8405592 1.11708346 5.3292134 2.69507649 7.4655336 4.73440826l-2.2577703 4.58892566c-2.4277146-2.03976095-4.7584408-3.5447981-6.9921786-4.51596977-2.2337377-.97117167-4.5159697-1.45697208-6.8466959-1.45697208-4.4670463 0-7.9388885 1.99083755-10.41552648 5.97294185-2.47620881 3.9816751-3.71474237 9.5653758-3.71474237 16.7519603v1.0926218c1.11708345-2.7676033 2.93797669-4.9528468 5.46267975-6.5553015 2.5251321-1.6024547 5.4141855-2.4036821 8.6675891-2.4036821 3.1564153 0 5.9604964.6922227 8.4126727 2.0758097zm-1.2016264 22.8708139c2.0393317-2.1122876 3.0589976-4.9163688 3.0589976-8.4126726 0-3.4473805-1.0321113-6.2274292-3.0954756-8.3397168-2.0637934-2.1122877-4.7464245-3.1684315-8.0483224-3.1684315-3.3993154 0-6.1669186 1.0681601-8.303668 3.2049094-2.13632016 2.1363202-3.20448025 4.9043526-3.20448025 8.3032389 0 3.4473804 1.06816009 6.2394454 3.20448025 8.3761947 2.1367494 2.1363202 4.9288143 3.2049094 8.3761948 3.2049094 3.3018978 0 5.9725126-1.0561438 8.0122736-3.1684315z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(539.405045 376.685229)"/><path d="m.06008132.13775789h34.23305048v4.44301384l-24.32735691 47.41660937h-6.40938972l24.18144513-46.83382053h-27.67774898z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(678.757195 376.512457)"/><path d="m34.6622027 30.9684888c1.8693875 2.2577703 2.8040812 4.9648631 2.8040812 8.1208491 0 4.4189814-1.6749814 7.9028398-5.0253735 10.4520045-3.3508212 2.5495939-7.8663618 3.8241762-13.5474801 3.8241762-5.6815474 0-10.19708794-1.2745823-13.54748-3.8241762-3.35082122-2.5491647-5.02580268-6.0330231-5.02580268-10.4520045 0-3.155986.95872626-5.875095 2.87703707-8.157327 1.91788167-2.282232 4.55201853-3.8606542 7.90241061-4.7344083-3.10749187-.9226774-5.48671227-2.44016-7.1376612-4.5524477-1.65094892-2.1122876-2.47663796-4.6005127-2.47663796-7.4655335 0-2.7676032.72870062-5.18373073 2.18524355-7.24709502 1.45654293-2.06379345 3.50832011-3.66624817 6.15447324-4.80736415 2.64658227-1.14111599 5.66910197-1.7114594 9.06841737-1.7114594 3.3988863 0 6.421406.57034341 9.0679883 1.7114594 2.6461531 1.14111598 4.6979303 2.7435707 6.1544733 4.80736415 1.456972 2.06336429 2.1852435 4.47949182 2.1852435 7.24709502 0 2.8650208-.8377053 5.3532459-2.5131159 7.4655335-1.6749815 2.1122877-4.0177239 3.6297703-7.0286565 4.5524477 3.3993154.9226775 6.0334523 2.5126868 7.9028397 4.7708862zm-24.1084891-9.6147283c2.0633642 1.7239048 4.8434129 2.7800487 8.3397167 3.1684315 3.4958747-.3883828 6.2759234-1.4445267 8.3397168-3.1684315 2.0633643-1.7234756 3.0954756-3.9692297 3.0954756-6.7372621 0-2.8645916-1.0076496-5.12279105-3.0229488-6.77373998-2.0148701-1.65094892-4.8193804-2.47620881-8.4122436-2.47620881-3.5932922 0-6.3978026.82525989-8.4126726 2.47620881-2.01529928 1.65094893-3.0229489 3.90914838-3.0229489 6.77373998 0 2.7680324 1.0321113 5.0137865 3.0959048 6.7372621zm17.7355774 24.5822734c2.1848144-1.650949 3.2774361-4.054631 3.2774361-7.2106171 0-2.8650208-1.1531322-5.1592691-3.4598259-6.8831739-2.3062645-1.7239048-5.3777075-2.7800486-9.2134709-3.1684315-3.8361924.3883829-6.9076355 1.4445267-9.2139 3.1684315-2.30669365 1.7239048-3.4598259 4.0181531-3.4598259 6.8831739 0 3.1559861 1.09262177 5.5596681 3.27786532 7.2106171 2.18481438 1.6509489 5.31676798 2.4766379 9.39586058 2.4766379 4.0786636 0 7.2106171-.825689 9.3958607-2.4766379z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(773.608278 376.236614)"/><path d="m31.3560134 6.96900432c3.3988862 4.37005798 5.0987585 10.58547078 5.0987585 18.64580948 0 8.7890393-1.7603827 15.6232898-5.2807191 20.5031806-3.5203364 4.8803201-8.4367052 7.320051-14.7495357 7.320051-2.9620092 0-5.8630788-.5583272-8.70363793-1.6749815-2.84055913-1.1170835-5.35367504-2.6950765-7.53848944-4.7344083l2.33072618-4.5884964c2.47620882 2.0878259 4.83139668 3.6053085 7.06513445 4.5520185 2.23330864.94671 4.49150804 1.4204941 6.77374004 1.4204941 4.4670464 0 7.9268723-1.9908375 10.3790485-5.9725126 2.4521763-3.9821043 3.6782645-9.565805 3.6782645-16.7523895v-.9471392c-1.1170835 2.7195382-2.9379767 4.8678747-5.4626798 6.4462969-2.5251321 1.577993-5.4141855 2.3672041-8.6675891 2.3672041-3.1564152 0-5.9484801-.6922227-8.37619475-2.0758097-2.42771461-1.3840162-4.32156374-3.3263596-5.68111825-5.8270301s-2.03933177-5.353675-2.03933177-8.5581553c0-3.2049094.7162552-6.0699302 2.14833645-8.59463325 1.43251041-2.52513218 3.4113317-4.50395347 5.93646388-5.93646387 2.52470304-1.43208125 5.38972384-2.14833645 8.59463324-2.14833645 6.2639071 0 11.0953038 2.18481439 14.4941901 6.55530149zm-5.8270301 18.35441508c2.1367494-2.1363202 3.2049095-4.9043526 3.2049095-8.3032389 0-3.4473805-1.0681601-6.2394454-3.2049095-8.37619472-2.1363202-2.13632019-4.9283851-3.20490943-8.3757656-3.20490943-3.3018978 0-5.9729418 1.05614383-8.01227355 3.16843149-2.03933176 2.11228766-3.05899765 4.91636886-3.05899765 8.41267266 0 3.4473805 1.01966589 6.2274292 3.05899765 8.3397168 2.03933175 2.1122877 4.73440825 3.1684315 8.08480035 3.1684315 3.3993154 0 6.1669186-1.0681601 8.3032388-3.2049094z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(867.854354 375.654152)"/><path d="m330.093135.33214542v84.43190468-42.5518783h-329.66215607v42.5518783" stroke="#000" stroke-width="2.538347" transform="translate(131.785126 139.982935)"/><path d="m.10801477.42233775h329.31542823v42.21595235" stroke="#000" stroke-width="2.538347" transform="translate(461.770246 182.108695)"/><path d="m36.186655 346.60579v15.692843" stroke="#000" stroke-width="2.540394"/><path d="m132.152376 331.426017v30.871702" stroke="#000" stroke-width="2.538347"/><path d="m228.893645 346.60579v15.692843" stroke="#000" stroke-width="2.540394"/><g transform="translate(1221.45577 24.489117)"><path d="m.197608.154988h239.084215v85.099871h-239.084215z" fill="#0083c0"/><path d="m239.281823 85.2548586h-239.08421531v-85.09987082h239.08421531zm-236.54571658-82.56147761v80.02308441h234.00574658v-80.02308441z" fill="#000"/></g><g transform="translate(956.909366 124.770501)"><path d="m.184449.095195h223.163411v52.269131h-223.163411z" fill="#c9177e"/><path d="m223.347859 52.3643259h-223.16341016v-52.26913097h223.16341016zm-220.62506465-49.73066919v47.19220749h218.08488865v-47.19220749z" fill="#000"/></g><g transform="translate(1231.923745 124.770501)"><path d="m.183618.095195h222.158079v52.269131h-222.158079z" fill="#c9177e"/><path d="m222.341696 52.3643259h-222.15807809v-52.26913097h222.15807809zm-219.61932129-49.73066919v47.19220749h217.08147629v-47.19220749z" fill="#000"/></g><path d="m91.4241325.12672749v8.67595862h-91.3476086v8.67108449" stroke="#000" stroke-width="2.539424" transform="translate(1252.516016 177.005152)"/><g transform="translate(1504.487683 124.770501)"><path d="m.182671.095195h221.012609v52.269131h-221.012609z" fill="#c9177e"/><path d="m221.19528 52.3643259h-221.01260884v-52.26913097h221.01260884zm-218.47425033-49.73066919v47.19220749h215.93589233v-47.19220749z" fill="#000"/></g><g transform="translate(1018.734446 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37825665-46.72872807v44.19032577h37.83980095v-44.19032577z" fill="#000"/></g><path d="m19.5454361 18.6632185c.9737513 1.298422 1.4606269 2.9361183 1.4606269 4.9128281 0 2.7441845-.9294187 4.9055264-2.7882562 6.4842865-1.8590982 1.5784993-4.3818807 2.3678794-7.5683475 2.3678794-2.03616765 0-3.99097204-.3395352-5.86441318-1.0180839-1.87370191-.6785486-3.45976385-1.6376963-4.75792503-2.8769212l1.41629437-2.7882563c2.92099306 2.4195138 5.96011931 3.6292707 9.11737874 3.6292707 2.2424444 0 3.9466395-.5017401 5.1120638-1.5049595 1.1654244-1.0032194 1.7482669-2.4784499 1.7482669-4.4259525 0-3.8652762-2.4195137-5.7979144-7.2585412-5.7979144h-3.62953146v-3.0539906h2.92125384c2.33110942 0 4.11614632-.5163438 5.35537122-1.5490313 1.239225-1.0326875 1.8590983-2.5081788 1.8590983-4.4259525 0-1.71149696-.5090419-3.02452258-1.5271257-3.93907688-1.0178231-.91481507-2.4562837-1.37222261-4.315382-1.37222261-3.00965814 0-5.9895874 1.20975688-8.94030934 3.62953142l-1.37222261-2.78851699c1.26895386-1.20975688 2.82528692-2.16134189 4.66952073-2.85475502 1.84423381-.69341314 3.7695701-1.03998932 5.77600882-1.03998932 2.8325888 0 5.0971994.72288124 6.7938319 2.16864372 1.6966326 1.44576248 2.5449488 3.39326503 2.5449488 5.8422469 0 1.79990128-.4428039 3.37840058-1.32789 4.73575878-.8850862 1.3573582-2.1097076 2.3311094-3.6736032 2.9212538 1.8588374.5309474 3.2753926 1.4457625 4.2488831 2.7439237z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1028.654902 202.599599)"/><g transform="translate(1078.488158 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37825665-46.72872807v44.19032577h37.83980095v-44.19032577z" fill="#000"/></g><path d="m22.936251 22.0604515v3.0096581h-4.7800913v6.8603307h-3.6292707v-6.8603307h-14.51708251v-2.7441844l15.18102761-21.9086215h2.9653256v21.6431478zm-19.16443702 0h10.75507502v-15.49083387z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1089.451732 203.121158)"/><g transform="translate(1138.52553 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37825665-46.72872807v44.19032577h37.83980095v-44.19032577z" fill="#000"/></g><path d="m16.4136394 13.9290806c1.4900951.8410145 2.6336139 2.0140014 3.4302958 3.5187001.7966819 1.5049595 1.1948924 3.2456637 1.1948924 5.2226344s-.4352412 3.7325394-1.3057238 5.2669669c-.8702217 1.5344276-2.1097075 2.7220182-3.7176749 3.5630326-1.6082282.8407537-3.489232 1.2613913-5.643272 1.2613913-1.9177737 0-3.80607928-.346837-5.66517753-1.0402501-1.85883747-.6934131-3.42273314-1.6449981-4.69142622-2.854755l1.37196183-2.7882562c2.92125384 2.4195137 5.91604755 3.6292706 8.98464192 3.6292706 2.213237 0 3.9466395-.6269143 5.2007289-1.8810037 1.2538286-1.2540895 1.8810037-2.9580238 1.8810037-5.1120639 0-2.094843-.6196125-3.7841737-1.8588374-5.0677312-1.2394858-1.2835576-2.8917858-1.9253363-4.9571607-1.9253363-3.00965819 0-5.41456828 1.2246213-7.21446955 3.6736031h-2.52278251v-18.45642016h18.89896326v3.00965815h-15.26969262v11.24221151c1.74096506-1.6820289 3.96880576-2.5230433 6.68326132-2.5230433 1.9769707 0 3.7103731.4206376 5.2004681 1.2613912z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1148.445985 201.599599)"/><g transform="translate(957.360703 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37816863-46.72872807v44.19032577h37.83971293v-44.19032577z" fill="#000"/></g><path d="m10.8395677 28.5428562h6.948735v3.0539907h-17.57107324v-3.0539907h6.94873503v-23.94452832l-6.46185939 4.11614628v-3.49653379l8.05522316-5.1342301h2.08023944z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(970.410431 203.121158)"/><g transform="translate(1231.099754 194.213333)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37816863-46.72872807v44.19032577h37.83971293v-44.19032577z" fill="#000"/></g><path d="m21.3648958 29.0644155v3.0539907h-20.27092509v-2.7441844l11.02080949-12.215702c1.4752306-1.6523 2.5522507-3.142395 3.2307994-4.4702851.6788094-1.3276293 1.0180838-2.6555193 1.0180838-3.98340939 0-1.74070428-.5017401-3.07589618-1.5049595-4.00531492-1.0032194-.92967951-2.4341174-1.39438888-4.2932157-1.39438888-3.0096581 0-5.98958737 1.20975688-8.94030931 3.62953142l-1.37222261-2.78851699c1.23948576-1.18028878 2.80312065-2.12431118 4.691687-2.83258875 1.88830558-.70827758 3.79147559-1.06215559 5.70951002-1.06215559 2.891525 0 5.1783019.74504751 6.8603307 2.23514253 1.6817681 1.49009502 2.5227826 3.50383562 2.5227826 6.04122179 0 1.79990128-.4057732 3.53356448-1.2173195 5.20072888-.8112856 1.6669037-2.1613419 3.5333038-4.0496475 5.5986787l-8.98464189 9.737252z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1241.784164 202.570441)"/><g transform="translate(1292.473373 194.213333)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37825665-46.72872807v44.19032577h37.83980095v-44.19032577z" fill="#000"/></g><path d="m23.0372759 21.726858v3.0096582h-4.7800914v6.8603307h-3.6292706v-6.8603307h-14.51708254v-2.7441845l15.18102754-21.90862143h2.9653256v21.64314773zm-19.16443705 0h10.75507505v-15.4908338z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1301.574474 203.100332)"/><g fill="#fff" fill-rule="nonzero" transform="translate(974.127869 141.527307)"><path d="m5.47365255 15.5387394v-13.14066544h-5.07689804v-1.43299542h11.85291919v1.43299542h-5.07689802v13.14066544z"/><path d="m21.1342453 10.3380383h-7.553933c.0136476 1.3111421.3173061 2.3005913.9109757 2.9683477.5936695.6677563 1.4568786 1.0040716 2.5896274 1.0040716 1.2009866 0 2.3064402-.4045531 3.3163608-1.2087853l.5527268 1.2087853c-.45037.4240497-1.02698.7554908-1.7298302 1.0040716-.7028501.2437067-1.4227597.3655601-2.1597288.3655601-1.6104139 0-2.8728146-.472791-3.7872021-1.418373-.9143876-.9504562-1.3715814-2.25185-1.3715814-3.9041814 0-1.04793885.2047137-1.97889846.6141409-2.79287884.4094273-.80910626.9826255-1.44274368 1.7195945-1.89116402.7369691-.45329446 1.576295-.67750463 2.5179777-.67750463 1.3647575 0 2.4360922.44842033 3.214004 1.34038686.7779118.89684067 1.1668677 2.12512245 1.1668677 3.69459363zm-6.4587151-3.27541805c-.5390792.52153234-.8836805 1.24777832-1.0338038 2.19336032h5.9981094c-.0818855-.96995267-.3650727-1.70594692-.8495616-2.21285686s-1.156632-.75549078-2.0164293-.75549078c-.8597972 0-1.5592354.25832911-2.0983147.77498732z"/><path d="m29.3842046 5.11784076-.0409427 1.51585569c-.3138943-.10723095-.675555-.16572056-1.0849823-.16572056-.996273 0-1.736654.31194458-2.2211429.93095961-.4844889.62388916-.7267334 1.37937994-.7267334 2.26647234v5.87333156h-1.6581804v-7.40868379c0-1.06743536-.0545903-2.02763977-.1637709-2.8903615h1.576295l.1637709 1.90578642c.2593039-.69700117.675555-1.22828178 1.2487531-1.59871597.5731982-.36556006 1.2282818-.55077715 1.9652509-.55077715.3411894 0 .6550836.03899307.9416827.12185335z"/><path d="m45.9045945 9.07076348v6.46797592h-1.6581804v-6.38511564c0-.96995268-.1671828-1.67182798-.5015484-2.11050005-.3343655-.43867206-.8768567-.65313396-1.6274733-.65313396-.8734448 0-1.5558236.29244804-2.0471363.87734413-.4913127.58977022-.7369691 1.38425407-.7369691 2.39807396v5.87333156h-1.6581804v-6.38511564c0-.95533028-.1705947-1.65720558-.5117841-2.10075178s-.8870924-.66288223-1.637709-.66288223c-.8734448 0-1.5592355.29244804-2.057372.87734413-.4981365.58977022-.7472047 1.38425407-.7472047 2.39807396v5.87333156h-1.6581805v-7.40868379c0-1.06743536-.0545903-2.02763977-.1637709-2.8903615h1.576295l.1637709 1.8034296c.2865991-.65313396.7130858-1.1600439 1.2794602-1.51585569s1.2248699-.53128061 1.9754865-.53128061c.8188545 0 1.4875857.16572056 2.0061936.49228754s.90074.83347692 1.1463963 1.51585569c.3138943-.61414089.7744999-1.1015543 1.381817-1.46711435.6073171-.36068592 1.2931078-.54102888 2.057372-.54102888 2.2791451 0 3.4187176 1.3598834 3.4187176 4.07477607z"/><path d="m60.3369055 14.1252405h3.214004v1.4134989h-8.1271311v-1.4134989h3.214004v-11.07403258l-2.988819 1.90578642v-1.61821251l3.725788-2.37370329h.9621541z"/><path d="m66.396429 5.46877841h2.1085503v2.12512245h-2.1085503zm0 7.95946089h2.1085503v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.1910661.4776651-.5117841.945582-.9621541 1.3940023l-.7779118-.5946443c.5322554-.6141409.8325021-1.199037.90074-1.7595624h-.9826254z"/><path d="m76.2226832 15.5387394 1.1463963-14.57366086h3.214004l-.962154 11.97574736h6.5098934l-.2047136 2.5979135z"/><path d="m87.6661752 15.5387394.8188545-10.37703143h3.0911758l-.8188545 10.37703143zm1.0645108-15.25116549h3.3163608l-.225185 2.9049839h-3.3163608z"/><path d="m92.6611877 14.4323109 1.0030968-2.1494931c.5731982.3948049 1.1873391.7018753 1.8424227.9114631.6550836.2144619 1.3101672.3168187 1.9652508.3168187.5731982 0 .996273-.0828603 1.2692246-.2437067.2729515-.1657206.4094272-.3850566.4094272-.6580081 0-.2826998-.160359-.5117841-.481077-.6726305-.320718-.1657206-.8427378-.3558118-1.5660593-.5751478-.7506166-.2047136-1.3647575-.4094273-1.8424227-.6141409-.4776651-.2047136-.8905043-.5069099-1.2385174-.91146307-.3480132-.399679-.5220198-.92121134-.5220198-1.56459704 0-.66775636.1876542-1.25752658.5629625-1.75956239.3753083-.50690994.9075638-.9017148 1.5967663-1.18928871.6892026-.28757391 1.4773501-.4289238 2.3644424-.4289238.7779118 0 1.5387642.11697922 2.2825572.34606352.743793.23395844 1.368169.54590302 1.87313.94558201l-.982626 2.06663284c-.50496-.37043419-1.037216-.64825983-1.5967662-.83835106-.5595506-.19496536-1.1054536-.28757391-1.637709-.28757391-.5595506 0-.9826255.08286028-1.2692245.2437067-.2865991.16572056-.4298987.38993073-.4298987.67750464 0 .29732218.1705947.53615474.5117841.7164977.3411894.17546883.8597973.36068592 1.5558236.55077715.7506166.21933604 1.3613456.4289238 1.8321867.63363743.470842.20471359.880269.51178409 1.228282.91146309.348013.4045531.52202.9260855.52202 1.5694711 0 1.0235682-.406016 1.8229262-1.218046 2.4029481-.812031.580022-1.9072489.87247-3.285654.87247-1.7741848 0-3.3573036-.4240496-4.7493563-1.272149z"/><path d="m107.666697 11.5078305c-.040943.5702737.075062.9943234.348013 1.2672749.272952.2729515.64826.4094272 1.125925.4094272.313894 0 .661907-.0536155 1.044039-.1657205l-.204713 2.3980739c-.464018.1900913-1.064511.2875739-1.80148.2875739-1.173692 0-2.07102-.3168187-2.691984-.945582-.620965-.6238891-.931447-1.5109815-.931447-2.6612772 0-.2290843.006823-.4094272.020471-.5312806l.327542-4.09427259h-1.965251l.184242-2.31033954h1.965251l.184242-2.43706703 3.173062-1.00407162-.266128 3.44113865h2.640806l-.184243 2.31033954h-2.640805z"/><path d="m110.962586 14.4323109 1.003097-2.1494931c.573198.3948049 1.187339.7018753 1.842423.9114631.655083.2144619 1.310167.3168187 1.965251.3168187.573198 0 .996273-.0828603 1.269224-.2437067.272952-.1657206.409427-.3850566.409427-.6580081 0-.2826998-.160359-.5117841-.481077-.6726305-.320718-.1657206-.842737-.3558118-1.566059-.5751478-.750617-.2047136-1.364757-.4094273-1.842423-.6141409-.477665-.2047136-.890504-.5069099-1.238517-.91146307-.348013-.399679-.52202-.92121134-.52202-1.56459704 0-.66775636.187654-1.25752658.562963-1.75956239.375308-.50690994.907563-.9017148 1.596766-1.18928871s1.47735-.4289238 2.364442-.4289238c.777912 0 1.538765.11697922 2.282557.34606352.743793.23395844 1.36817.54590302 1.87313.94558201l-.982625 2.06663284c-.504961-.37043419-1.037216-.64825983-1.596767-.83835106-.55955-.19496536-1.105453-.28757391-1.637709-.28757391-.55955 0-.982625.08286028-1.269224.2437067-.286599.16572056-.429899.38993073-.429899.67750464 0 .29732218.170595.53615474.511784.7164977.34119.17546883.859798.36068592 1.555824.55077715.750616.21933604 1.361345.4289238 1.832187.63363743.470841.20471359.880268.51178409 1.228282.91146309.348013.4045531.522019.9260855.522019 1.5694711 0 1.0235682-.406015 1.8229262-1.218046 2.4029481-.81203.580022-1.907248.87247-3.285653.87247-1.774185 0-3.357304-.4240496-4.749357-1.272149z"/><path d="m133.890513 14.1252405h3.214004v1.4134989h-8.127131v-1.4134989h3.214004v-11.07403258l-2.988819 1.90578642v-1.61821251l3.725788-2.37370329h.962154z"/><path d="m142.058587 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532255-.6141409.832502-1.199037.90074-1.7595624h-.982626v-2.1105001z"/><path d="m153.481607 9.31447018c.45037.59951849.675555 1.35988342.675555 2.27134652 0 1.2721489-.429898 2.2713464-1.289696 3.0024665-.859797.726246-2.026665 1.0918061-3.500603 1.0918061-.941682 0-1.845834-.1559723-2.712455-.4679169-.866621-.3168187-1.600178-.7603649-2.200672-1.3306386l.655084-1.2916455c1.35111 1.1210508 2.75681 1.6815762 4.217101 1.6815762 1.037215 0 1.825363-.2339584 2.364442-.6970012.539079-.4630427.808619-1.1454215.808619-2.0471363 0-1.78880715-1.119101-2.68077369-3.357304-2.68077369h-1.678651v-1.41349887h1.35111c1.078158 0 1.903836-.23883257 2.477034-.71649771.573199-.47766514.859798-1.1600439.859798-2.0471363 0-.79448385-.235421-1.39887648-.706262-1.82292614-.470842-.42404966-1.136161-.63363743-1.995958-.63363743-1.392053 0-2.770458.56052542-4.135216 1.67670212l-.634612-1.28677139c.586846-.56052542 1.306756-.99919749 2.159729-1.32089033.852973-.32169285 1.743478-.48253927 2.671513-.48253927 1.310167 0 2.357619.33631525 3.142354 1.00407161.784736.66775637 1.177103 1.56947117 1.177103 2.70027027 0 .83347692-.204713 1.56459703-.61414 2.19336032-.409428.62388916-.975802 1.07718363-1.699124 1.35013514.859798.2437067 1.514881.66775636 1.965251 1.26727485z"/><path d="m159.070289 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532256-.6141409.832503-1.199037.90074-1.7595624h-.982625v-2.1105001z"/><path d="m171.98772 10.9716758v1.3940023h-2.210908v3.1730613h-1.678651v-3.1730613h-6.714608v-1.2672749l7.021678-10.13332466h1.371581v10.00659726zm-8.864101 0h4.974542v-7.1649771z"/><path d="m176.081992 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532256-.6141409.832502-1.199037.90074-1.7595624h-.982625v-2.1105001z"/><path d="m186.553094 6.9700117c.689203.38993073 1.218046.93095961 1.586531 1.62796078.368484.69700117.552727 1.50123332.552727 2.41757052 0 .911463-.201302 1.7254434-.603905 2.437067-.402604.7067494-.975802 1.2575266-1.719595 1.6474573s-1.613826.580022-2.610099.580022c-.887092 0-1.760537-.1559723-2.620334-.4776652-.859797-.3216928-1.583119-.7603649-2.169965-1.3208903l.634613-1.2916455c1.35111 1.1210508 2.736338 1.6815762 4.155686 1.6815762 1.023568 0 1.825363-.292448 2.405385-.87247.580022-.5800219.870033-1.3696316.870033-2.363955 0-.9699527-.286599-1.74981412-.859797-2.34445848-.573198-.59464435-1.337462-.89196653-2.292793-.89196653-1.392052 0-2.50433.57027369-3.336832 1.70107279h-1.166867v-8.53460874h8.741272v1.38912821h-7.062621v5.20070104c.805207-.77986145 1.835599-1.16491804 3.091176-1.16491804.914388 0 1.716183.19496536 2.405385.58002195z"/></g><g fill="#fff" fill-rule="nonzero" transform="translate(1248.643217 141.651852)"><path d="m5.47365255 15.5387394v-13.14066544h-5.07689804v-1.43299542h11.85291919v1.43299542h-5.07689802v13.14066544z"/><path d="m21.1342453 10.3380383h-7.553933c.0136476 1.3111421.3173061 2.3005913.9109757 2.9683477.5936695.6677563 1.4568786 1.0040716 2.5896274 1.0040716 1.2009866 0 2.3064402-.4045531 3.3163608-1.2087853l.5527268 1.2087853c-.45037.4240497-1.02698.7554908-1.7298302 1.0040716-.7028501.2437067-1.4227597.3655601-2.1597288.3655601-1.6104139 0-2.8728146-.472791-3.7872021-1.418373-.9143876-.9504562-1.3715814-2.25185-1.3715814-3.9041814 0-1.04793885.2047137-1.97889846.6141409-2.79287884.4094273-.80910626.9826255-1.44274368 1.7195945-1.89116402.7369691-.45329446 1.576295-.67750463 2.5179777-.67750463 1.3647575 0 2.4360922.44842033 3.214004 1.34038686.7779118.89684067 1.1668677 2.12512245 1.1668677 3.69459363zm-6.4587151-3.27541805c-.5390792.52153234-.8836805 1.24777832-1.0338038 2.19336032h5.9981094c-.0818855-.96995267-.3650727-1.70594692-.8495616-2.21285686s-1.156632-.75549078-2.0164293-.75549078c-.8597972 0-1.5592354.25832911-2.0983147.77498732z"/><path d="m29.3842046 5.11784076-.0409427 1.51585569c-.3138943-.10723095-.675555-.16572056-1.0849823-.16572056-.996273 0-1.736654.31194458-2.2211429.93095961-.4844889.62388916-.7267334 1.37937994-.7267334 2.26647234v5.87333156h-1.6581804v-7.40868379c0-1.06743536-.0545903-2.02763977-.1637709-2.8903615h1.576295l.1637709 1.90578642c.2593039-.69700117.675555-1.22828178 1.2487531-1.59871597.5731982-.36556006 1.2282818-.55077715 1.9652509-.55077715.3411894 0 .6550836.03899307.9416827.12185335z"/><path d="m45.9045945 9.07076348v6.46797592h-1.6581804v-6.38511564c0-.96995268-.1671828-1.67182798-.5015484-2.11050005-.3343655-.43867206-.8768567-.65313396-1.6274733-.65313396-.8734448 0-1.5558236.29244804-2.0471363.87734413-.4913127.58977022-.7369691 1.38425407-.7369691 2.39807396v5.87333156h-1.6581804v-6.38511564c0-.95533028-.1705947-1.65720558-.5117841-2.10075178s-.8870924-.66288223-1.637709-.66288223c-.8734448 0-1.5592355.29244804-2.057372.87734413-.4981365.58977022-.7472047 1.38425407-.7472047 2.39807396v5.87333156h-1.6581805v-7.40868379c0-1.06743536-.0545903-2.02763977-.1637709-2.8903615h1.576295l.1637709 1.8034296c.2865991-.65313396.7130858-1.1600439 1.2794602-1.51585569s1.2248699-.53128061 1.9754865-.53128061c.8188545 0 1.4875857.16572056 2.0061936.49228754s.90074.83347692 1.1463963 1.51585569c.3138943-.61414089.7744999-1.1015543 1.381817-1.46711435.6073171-.36068592 1.2931078-.54102888 2.057372-.54102888 2.2791451 0 3.4187176 1.3598834 3.4187176 4.07477607z"/><path d="m63.8784513 14.1252405v1.4134989h-9.3758843v-1.2672749l5.0973694-5.65399549c.6823788-.76036491 1.1805153-1.45249195 1.4944095-2.06663284.3138943-.61414089.4708414-1.22828178.4708414-1.84242267 0-.80423212-.2320088-1.42324715-.6960264-1.85217094-.4640175-.4289238-1.1259249-.6433857-1.9857222-.6433857-1.3920527 0-2.7704578.56052542-4.1352153 1.67670212l-.6346123-1.28677139c.5731982-.54590302 1.2965197-.98457508 2.1699645-1.31114206.8734448-.32656699 1.7537134-.49228754 2.6408058-.49228754 1.3374624 0 2.3951495.34606351 3.1730613 1.03331642.7779118.6872529 1.1668677 1.62308664 1.1668677 2.79287881 0 .83347692-.1876542 1.63770904-.5629625 2.40782222-.3753083.77011319-.9996849 1.63283491-1.8731297 2.58816519l-4.1556867 4.50369987z"/><path d="m66.396429 5.46877841h2.1085503v2.12512245h-2.1085503zm0 7.95946089h2.1085503v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.1910661.4776651-.5117841.945582-.9621541 1.3940023l-.7779118-.5946443c.5322554-.6141409.8325021-1.199037.90074-1.7595624h-.9826254z"/><path d="m76.2226832 15.5387394 1.1463963-14.57366086h3.214004l-.962154 11.97574736h6.5098934l-.2047136 2.5979135z"/><path d="m87.6661752 15.5387394.8188545-10.37703143h3.0911758l-.8188545 10.37703143zm1.0645108-15.25116549h3.3163608l-.225185 2.9049839h-3.3163608z"/><path d="m92.6611877 14.4323109 1.0030968-2.1494931c.5731982.3948049 1.1873391.7018753 1.8424227.9114631.6550836.2144619 1.3101672.3168187 1.9652508.3168187.5731982 0 .996273-.0828603 1.2692246-.2437067.2729515-.1657206.4094272-.3850566.4094272-.6580081 0-.2826998-.160359-.5117841-.481077-.6726305-.320718-.1657206-.8427378-.3558118-1.5660593-.5751478-.7506166-.2047136-1.3647575-.4094273-1.8424227-.6141409-.4776651-.2047136-.8905043-.5069099-1.2385174-.91146307-.3480132-.399679-.5220198-.92121134-.5220198-1.56459704 0-.66775636.1876542-1.25752658.5629625-1.75956239.3753083-.50690994.9075638-.9017148 1.5967663-1.18928871.6892026-.28757391 1.4773501-.4289238 2.3644424-.4289238.7779118 0 1.5387642.11697922 2.2825572.34606352.743793.23395844 1.368169.54590302 1.87313.94558201l-.982626 2.06663284c-.50496-.37043419-1.037216-.64825983-1.5967662-.83835106-.5595506-.19496536-1.1054536-.28757391-1.637709-.28757391-.5595506 0-.9826255.08286028-1.2692245.2437067-.2865991.16572056-.4298987.38993073-.4298987.67750464 0 .29732218.1705947.53615474.5117841.7164977.3411894.17546883.8597973.36068592 1.5558236.55077715.7506166.21933604 1.3613456.4289238 1.8321867.63363743.470842.20471359.880269.51178409 1.228282.91146309.348013.4045531.52202.9260855.52202 1.5694711 0 1.0235682-.406016 1.8229262-1.218046 2.4029481-.812031.580022-1.9072489.87247-3.285654.87247-1.7741848 0-3.3573036-.4240496-4.7493563-1.272149z"/><path d="m107.666697 11.5078305c-.040943.5702737.075062.9943234.348013 1.2672749.272952.2729515.64826.4094272 1.125925.4094272.313894 0 .661907-.0536155 1.044039-.1657205l-.204713 2.3980739c-.464018.1900913-1.064511.2875739-1.80148.2875739-1.173692 0-2.07102-.3168187-2.691984-.945582-.620965-.6238891-.931447-1.5109815-.931447-2.6612772 0-.2290843.006823-.4094272.020471-.5312806l.327542-4.09427259h-1.965251l.184242-2.31033954h1.965251l.184242-2.43706703 3.173062-1.00407162-.266128 3.44113865h2.640806l-.184243 2.31033954h-2.640805z"/><path d="m110.962586 14.4323109 1.003097-2.1494931c.573198.3948049 1.187339.7018753 1.842423.9114631.655083.2144619 1.310167.3168187 1.965251.3168187.573198 0 .996273-.0828603 1.269224-.2437067.272952-.1657206.409427-.3850566.409427-.6580081 0-.2826998-.160359-.5117841-.481077-.6726305-.320718-.1657206-.842737-.3558118-1.566059-.5751478-.750617-.2047136-1.364757-.4094273-1.842423-.6141409-.477665-.2047136-.890504-.5069099-1.238517-.91146307-.348013-.399679-.52202-.92121134-.52202-1.56459704 0-.66775636.187654-1.25752658.562963-1.75956239.375308-.50690994.907563-.9017148 1.596766-1.18928871s1.47735-.4289238 2.364442-.4289238c.777912 0 1.538765.11697922 2.282557.34606352.743793.23395844 1.36817.54590302 1.87313.94558201l-.982625 2.06663284c-.504961-.37043419-1.037216-.64825983-1.596767-.83835106-.55955-.19496536-1.105453-.28757391-1.637709-.28757391-.55955 0-.982625.08286028-1.269224.2437067-.286599.16572056-.429899.38993073-.429899.67750464 0 .29732218.170595.53615474.511784.7164977.34119.17546883.859798.36068592 1.555824.55077715.750616.21933604 1.361345.4289238 1.832187.63363743.470841.20471359.880268.51178409 1.228282.91146309.348013.4045531.522019.9260855.522019 1.5694711 0 1.0235682-.406015 1.8229262-1.218046 2.4029481-.81203.580022-1.907248.87247-3.285653.87247-1.774185 0-3.357304-.4240496-4.749357-1.272149z"/><path d="m137.432059 14.1252405v1.4134989h-9.375885v-1.2672749l5.09737-5.65399549c.682379-.76036491 1.180515-1.45249195 1.494409-2.06663284.313895-.61414089.470842-1.22828178.470842-1.84242267 0-.80423212-.232009-1.42324715-.696027-1.85217094-.464017-.4289238-1.125925-.6433857-1.985722-.6433857-1.392053 0-2.770458.56052542-4.135215 1.67670212l-.634612-1.28677139c.573198-.54590302 1.296519-.98457508 2.169964-1.31114206.873445-.32656699 1.753713-.49228754 2.640806-.49228754 1.337462 0 2.395149.34606351 3.173061 1.03331642.777912.6872529 1.166868 1.62308664 1.166868 2.79287881 0 .83347692-.187654 1.63770904-.562963 2.40782222-.375308.77011319-.999685 1.63283491-1.873129 2.58816519l-4.155687 4.50369987z"/><path d="m142.058587 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532255-.6141409.832502-1.199037.90074-1.7595624h-.982626v-2.1105001z"/><path d="m154.976017 10.9716758v1.3940023h-2.210907v3.1730613h-1.678652v-3.1730613h-6.714607v-1.2672749l7.021677-10.13332466h1.371582v10.00659726zm-8.8641 0h4.974541v-7.1649771z"/><path d="m159.070289 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532256-.6141409.832503-1.199037.90074-1.7595624h-.982625v-2.1105001z"/><path d="m169.541392 6.9700117c.689202.38993073 1.218046.93095961 1.58653 1.62796078.368485.69700117.552727 1.50123332.552727 2.41757052 0 .911463-.201302 1.7254434-.603905 2.437067-.402604.7067494-.975802 1.2575266-1.719595 1.6474573-.743792.3899307-1.613825.580022-2.610098.580022-.887093 0-1.760538-.1559723-2.620335-.4776652-.859797-.3216928-1.583119-.7603649-2.169964-1.3208903l.634612-1.2916455c1.35111 1.1210508 2.736339 1.6815762 4.155687 1.6815762 1.023568 0 1.825363-.292448 2.405385-.87247.580022-.5800219.870033-1.3696316.870033-2.363955 0-.9699527-.286599-1.74981412-.859798-2.34445848-.573198-.59464435-1.337462-.89196653-2.292792-.89196653-1.392053 0-2.50433.57027369-3.336832 1.70107279h-1.166868v-8.53460874h8.741272v1.38912821h-7.06262v5.20070104c.805207-.77986145 1.835599-1.16491804 3.091175-1.16491804.914388 0 1.716183.19496536 2.405386.58002195z"/><path d="m176.081992 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532256-.6141409.832502-1.199037.90074-1.7595624h-.982625v-2.1105001z"/><path d="m187.965618 9.38758219c.525432.63363741.788148 1.39400231.788148 2.28109471 0 1.2429042-.470842 2.2226052-1.412524 2.9391029-.941683.7164977-2.210907 1.0723095-3.807674 1.0723095-1.596766 0-2.865991-.3558118-3.807673-1.0723095-.941683-.7164977-1.412524-1.6961987-1.412524-2.9391029 0-.8870924.269539-1.6523314.808619-2.29084297.539079-.6433857 1.27946-1.0869319 2.221142-1.3306386-.873444-.25832911-1.542176-.6872529-2.006193-1.28189726-.464018-.59464435-.696026-1.29164552-.696026-2.09587764 0-.77986145.204713-1.45736609.61414-2.03738804.409428-.58002195.986038-1.02844229 1.729831-1.35013513.743792-.32169285 1.593354-.48253927 2.548684-.48253927.955331 0 1.804892.16084642 2.548685.48253927.743793.32169284 1.320403.77011318 1.72983 1.35013513s.614141 1.25752659.614141 2.03738804c0 .80423212-.235421 1.50123329-.706262 2.09587764-.470841.59464436-1.129337 1.02356815-1.975487 1.28189726.955331.2583291 1.695712.70674944 2.221143 1.34038686zm-6.776021-2.7051444c.580022.48741341 1.361346.78473559 2.343971.89196653.982626-.10723094 1.763949-.40455312 2.343971-.89196653.580022-.48253927.870033-1.11130256.870033-1.89116401 0-.80423212-.283187-1.43786955-.849561-1.90578642-.566375-.46304273-1.354522-.69212703-2.364443-.69212703-1.00992 0-1.798068.2290843-2.364442.69212703-.566375.46791687-.849562 1.1015543-.849562 1.90578642 0 .77986145.290011 1.40862474.870033 1.89116401zm4.984777 6.91152211c.614141-.4630428.921211-1.1405474.921211-2.0276398 0-.8042321-.324129-1.4476178-.972389-1.9350312-.64826-.48253927-1.511469-.77986145-2.589628-.8870924-1.078158.10723095-1.941367.40455313-2.589627.8870924-.64826.4874134-.97239 1.1307991-.97239 1.9350312 0 .8870924.307071 1.564597.921211 2.0276398.614141.4630427 1.49441.6970012 2.640806.6970012 1.146397 0 2.026665-.2339585 2.640806-.6970012z"/></g><g fill="#fff" fill-rule="nonzero" transform="translate(1520.629778 141.651852)"><path d="m5.47365255 15.5387394v-13.14066544h-5.07689804v-1.43299542h11.85291919v1.43299542h-5.07689802v13.14066544z"/><path d="m21.1342453 10.3380383h-7.553933c.0136476 1.3111421.3173061 2.3005913.9109757 2.9683477.5936695.6677563 1.4568786 1.0040716 2.5896274 1.0040716 1.2009866 0 2.3064402-.4045531 3.3163608-1.2087853l.5527268 1.2087853c-.45037.4240497-1.02698.7554908-1.7298302 1.0040716-.7028501.2437067-1.4227597.3655601-2.1597288.3655601-1.6104139 0-2.8728146-.472791-3.7872021-1.418373-.9143876-.9504562-1.3715814-2.25185-1.3715814-3.9041814 0-1.04793885.2047137-1.97889846.6141409-2.79287884.4094273-.80910626.9826255-1.44274368 1.7195945-1.89116402.7369691-.45329446 1.576295-.67750463 2.5179777-.67750463 1.3647575 0 2.4360922.44842033 3.214004 1.34038686.7779118.89684067 1.1668677 2.12512245 1.1668677 3.69459363zm-6.4587151-3.27541805c-.5390792.52153234-.8836805 1.24777832-1.0338038 2.19336032h5.9981094c-.0818855-.96995267-.3650727-1.70594692-.8495616-2.21285686s-1.156632-.75549078-2.0164293-.75549078c-.8597972 0-1.5592354.25832911-2.0983147.77498732z"/><path d="m29.3842046 5.11784076-.0409427 1.51585569c-.3138943-.10723095-.675555-.16572056-1.0849823-.16572056-.996273 0-1.736654.31194458-2.2211429.93095961-.4844889.62388916-.7267334 1.37937994-.7267334 2.26647234v5.87333156h-1.6581804v-7.40868379c0-1.06743536-.0545903-2.02763977-.1637709-2.8903615h1.576295l.1637709 1.90578642c.2593039-.69700117.675555-1.22828178 1.2487531-1.59871597.5731982-.36556006 1.2282818-.55077715 1.9652509-.55077715.3411894 0 .6550836.03899307.9416827.12185335z"/><path d="m45.9045945 9.07076348v6.46797592h-1.6581804v-6.38511564c0-.96995268-.1671828-1.67182798-.5015484-2.11050005-.3343655-.43867206-.8768567-.65313396-1.6274733-.65313396-.8734448 0-1.5558236.29244804-2.0471363.87734413-.4913127.58977022-.7369691 1.38425407-.7369691 2.39807396v5.87333156h-1.6581804v-6.38511564c0-.95533028-.1705947-1.65720558-.5117841-2.10075178s-.8870924-.66288223-1.637709-.66288223c-.8734448 0-1.5592355.29244804-2.057372.87734413-.4981365.58977022-.7472047 1.38425407-.7472047 2.39807396v5.87333156h-1.6581805v-7.40868379c0-1.06743536-.0545903-2.02763977-.1637709-2.8903615h1.576295l.1637709 1.8034296c.2865991-.65313396.7130858-1.1600439 1.2794602-1.51585569s1.2248699-.53128061 1.9754865-.53128061c.8188545 0 1.4875857.16572056 2.0061936.49228754s.90074.83347692 1.1463963 1.51585569c.3138943-.61414089.7744999-1.1015543 1.381817-1.46711435.6073171-.36068592 1.2931078-.54102888 2.057372-.54102888 2.2791451 0 3.4187176 1.3598834 3.4187176 4.07477607z"/><path d="m62.9162972 9.31447018c.45037.59951849.675555 1.35988342.675555 2.27134652 0 1.2721489-.4298986 2.2713464-1.2896959 3.0024665-.8597972.726246-2.0266649 1.0918061-3.500603 1.0918061-.9416827 0-1.8458346-.1559723-2.7124556-.4679169-.8666211-.3168187-1.6001782-.7603649-2.2006716-1.3306386l.6550837-1.2916455c1.3511099 1.1210508 2.7568102 1.6815762 4.2171007 1.6815762 1.0372158 0 1.8253632-.2339584 2.3644425-.6970012.5390792-.4630427.8086188-1.1454215.8086188-2.0471363 0-1.78880715-1.1191012-2.68077369-3.3573035-2.68077369h-1.6786518v-1.41349887h1.35111c1.0781584 0 1.9038367-.23883257 2.4770349-.71649771s.8597972-1.1600439.8597972-2.0471363c0-.79448385-.2354206-1.39887648-.706262-1.82292614-.4708413-.42404966-1.1361606-.63363743-1.9959579-.63363743-1.3920527 0-2.7704578.56052542-4.1352153 1.67670212l-.6346123-1.28677139c.5868458-.56052542 1.3067554-.99919749 2.1597288-1.32089033.8529735-.32169285 1.7434778-.48253927 2.6715129-.48253927 1.3101672 0 2.3576186.33631525 3.1423542 1.00407161.7847356.66775637 1.1771034 1.56947117 1.1771034 2.70027027 0 .83347692-.2047136 1.56459703-.6141409 2.19336032-.4094272.62388916-.9758016 1.07718363-1.6991231 1.35013514.8597972.2437067 1.5148808.66775636 1.9652508 1.26727485z"/><path d="m66.396429 5.46877841h2.1085503v2.12512245h-2.1085503zm0 7.95946089h2.1085503v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.1910661.4776651-.5117841.945582-.9621541 1.3940023l-.7779118-.5946443c.5322554-.6141409.8325021-1.199037.90074-1.7595624h-.9826254z"/><path d="m76.2226832 15.5387394 1.1463963-14.57366086h3.214004l-.962154 11.97574736h6.5098934l-.2047136 2.5979135z"/><path d="m87.6661752 15.5387394.8188545-10.37703143h3.0911758l-.8188545 10.37703143zm1.0645108-15.25116549h3.3163608l-.225185 2.9049839h-3.3163608z"/><path d="m92.6611877 14.4323109 1.0030968-2.1494931c.5731982.3948049 1.1873391.7018753 1.8424227.9114631.6550836.2144619 1.3101672.3168187 1.9652508.3168187.5731982 0 .996273-.0828603 1.2692246-.2437067.2729515-.1657206.4094272-.3850566.4094272-.6580081 0-.2826998-.160359-.5117841-.481077-.6726305-.320718-.1657206-.8427378-.3558118-1.5660593-.5751478-.7506166-.2047136-1.3647575-.4094273-1.8424227-.6141409-.4776651-.2047136-.8905043-.5069099-1.2385174-.91146307-.3480132-.399679-.5220198-.92121134-.5220198-1.56459704 0-.66775636.1876542-1.25752658.5629625-1.75956239.3753083-.50690994.9075638-.9017148 1.5967663-1.18928871.6892026-.28757391 1.4773501-.4289238 2.3644424-.4289238.7779118 0 1.5387642.11697922 2.2825572.34606352.743793.23395844 1.368169.54590302 1.87313.94558201l-.982626 2.06663284c-.50496-.37043419-1.037216-.64825983-1.5967662-.83835106-.5595506-.19496536-1.1054536-.28757391-1.637709-.28757391-.5595506 0-.9826255.08286028-1.2692245.2437067-.2865991.16572056-.4298987.38993073-.4298987.67750464 0 .29732218.1705947.53615474.5117841.7164977.3411894.17546883.8597973.36068592 1.5558236.55077715.7506166.21933604 1.3613456.4289238 1.8321867.63363743.470842.20471359.880269.51178409 1.228282.91146309.348013.4045531.52202.9260855.52202 1.5694711 0 1.0235682-.406016 1.8229262-1.218046 2.4029481-.812031.580022-1.9072489.87247-3.285654.87247-1.7741848 0-3.3573036-.4240496-4.7493563-1.272149z"/><path d="m107.666697 11.5078305c-.040943.5702737.075062.9943234.348013 1.2672749.272952.2729515.64826.4094272 1.125925.4094272.313894 0 .661907-.0536155 1.044039-.1657205l-.204713 2.3980739c-.464018.1900913-1.064511.2875739-1.80148.2875739-1.173692 0-2.07102-.3168187-2.691984-.945582-.620965-.6238891-.931447-1.5109815-.931447-2.6612772 0-.2290843.006823-.4094272.020471-.5312806l.327542-4.09427259h-1.965251l.184242-2.31033954h1.965251l.184242-2.43706703 3.173062-1.00407162-.266128 3.44113865h2.640806l-.184243 2.31033954h-2.640805z"/><path d="m110.962586 14.4323109 1.003097-2.1494931c.573198.3948049 1.187339.7018753 1.842423.9114631.655083.2144619 1.310167.3168187 1.965251.3168187.573198 0 .996273-.0828603 1.269224-.2437067.272952-.1657206.409427-.3850566.409427-.6580081 0-.2826998-.160359-.5117841-.481077-.6726305-.320718-.1657206-.842737-.3558118-1.566059-.5751478-.750617-.2047136-1.364757-.4094273-1.842423-.6141409-.477665-.2047136-.890504-.5069099-1.238517-.91146307-.348013-.399679-.52202-.92121134-.52202-1.56459704 0-.66775636.187654-1.25752658.562963-1.75956239.375308-.50690994.907563-.9017148 1.596766-1.18928871s1.47735-.4289238 2.364442-.4289238c.777912 0 1.538765.11697922 2.282557.34606352.743793.23395844 1.36817.54590302 1.87313.94558201l-.982625 2.06663284c-.504961-.37043419-1.037216-.64825983-1.596767-.83835106-.55955-.19496536-1.105453-.28757391-1.637709-.28757391-.55955 0-.982625.08286028-1.269224.2437067-.286599.16572056-.429899.38993073-.429899.67750464 0 .29732218.170595.53615474.511784.7164977.34119.17546883.859798.36068592 1.555824.55077715.750616.21933604 1.361345.4289238 1.832187.63363743.470841.20471359.880268.51178409 1.228282.91146309.348013.4045531.522019.9260855.522019 1.5694711 0 1.0235682-.406015 1.8229262-1.218046 2.4029481-.81203.580022-1.907248.87247-3.285653.87247-1.774185 0-3.357304-.4240496-4.749357-1.272149z"/><path d="m137.964314 10.9716758v1.3940023h-2.210907v3.1730613h-1.678652v-3.1730613h-6.714607v-1.2672749l7.021678-10.13332466h1.371581v10.00659726zm-8.8641 0h4.974541v-7.1649771z"/><path d="m142.058587 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532255-.6141409.832502-1.199037.90074-1.7595624h-.982626v-2.1105001z"/><path d="m152.488746 6.9700117c.689203.38993073 1.22487.93583374 1.607002 1.63770904.382132.70674944.573198 1.50610746.573198 2.40782226s-.201301 1.7059469-.603905 2.4126963c-.402603.7116236-.958742 1.2672749-1.668416 1.671828-.709674.399679-1.514881.6043926-2.415621.6043926-1.760537 0-3.118471-.6141409-4.073801-1.8424226-.95533-1.2282818-1.432995-2.978096-1.432995-5.24456829 0-1.63770904.221773-3.04145965.665319-4.21612596.443546-1.1746663 1.084982-2.06663284 1.924308-2.68077373s1.845835-.92121133 3.019526-.92121133c.84615 0 1.668416.15597229 2.466799.472791.798383.31194458 1.497822.75549078 2.098315 1.3306386l-.634612 1.28677139c-.682379-.57027369-1.337463-.99432335-1.965251-1.26727486-.627789-.2729515-1.269225-.40942726-1.924308-.40942726-1.255577 0-2.231379.56052542-2.927405 1.67670212-.696026 1.12105083-1.04404 2.690522-1.04404 4.7084135v.30707044c.313895-.77498731.825679-1.3891282 1.535353-1.84242267.709674-.44842033 1.521704-.6726305 2.436092-.6726305.887092 0 1.67524.19496536 2.364442.58002195zm-.337777 6.4289828c.573198-.5946443.859797-1.3793799.859797-2.363955 0-.9699527-.290011-1.74981412-.870033-2.34445848-.580022-.59464435-1.33405-.89196653-2.262086-.89196653-.95533 0-1.733242.30219631-2.333735.9017148s-.90074 1.37937991-.90074 2.33471021c0 .9699527.300247 1.7546883.90074 2.3542068.600493.5995184 1.385229.9017148 2.354207.9017148.928035 0 1.678652-.2973222 2.25185-.8919666z"/><path d="m159.070289 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532256-.6141409.832503-1.199037.90074-1.7595624h-.982625v-2.1105001z"/><path d="m161.711095.96507854h9.621541v1.24777832l-6.837435 13.32588254h-1.80148l6.796492-13.16503611h-7.779118z"/><path d="m176.081992 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532256-.6141409.832502-1.199037.90074-1.7595624h-.982625v-2.1105001z"/><path d="m187.157 2.64178066c.95533 1.22828178 1.432995 2.97322177 1.432995 5.23969411 0 2.47118593-.494725 4.39159483-1.484174 5.76610063-.989449 1.3696316-2.371266 2.0568845-4.145451 2.0568845-.832502 0-1.647945-.1608464-2.446328-.472791s-1.504645-.7554908-2.118786-1.3306386l.655084-1.2916455c.696026.5897702 1.357934 1.0138199 1.985722 1.2818973.627788.2680773 1.262401.399679 1.903837.399679 1.255577 0 2.227966-.5605255 2.917169-1.6815763.689203-1.1161767 1.033804-2.68564786 1.033804-4.70841349v-.26320324c-.313894.76523904-.825679 1.36963167-1.535352 1.80830373-.709674.44842034-1.521705.6677564-2.436093.6677564-.887092 0-1.671828-.19496539-2.354206-.58489612-.682379-.38505659-1.214635-.93583374-1.596767-1.63770904-.382132-.70187531-.573198-1.50123329-.573198-2.40294809s.201302-1.70594692.603905-2.41757049c.402604-.70674944.958743-1.26727486 1.668416-1.66695385.709674-.40455313 1.514881-.60439262 2.415621-.60439262 1.760538 0 3.118471.61414089 4.073802 1.84242267zm-1.63771 5.15683383c.600494-.59951849.90074-1.3745058.90074-2.32983608 0-.96995268-.300246-1.75468826-.90074-2.35420675-.600493-.60439262-1.385228-.9017148-2.354206-.9017148-.928035 0-1.678652.29732218-2.25185.89196653-.573198.58977023-.859797 1.37937994-.859797 2.36395502 0 .96507855.286599 1.74981413.859797 2.34445848.573198.58977022 1.330638.8870924 2.272321.8870924.95533 0 1.733242-.29732218 2.333735-.9017148z"/></g><g transform="translate(1352.227084 194.213333)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37825665-46.72872807v44.19032577h37.83980095v-44.19032577z" fill="#000"/></g><path d="m16.4442443 13.0739279c1.490095.8410144 2.6336139 2.0140013 3.4302957 3.5187.7966819 1.5049595 1.1948925 3.2456638 1.1948925 5.2226344 0 1.9769707-.4352413 3.7325394-1.3057238 5.266967-.8702218 1.5344275-2.1097075 2.7220182-3.717675 3.5630326-1.6082282.8407536-3.4892319 1.2613912-5.643272 1.2613912-1.91777365 0-3.80607922-.3468369-5.66517747-1.0402501-1.85883748-.6934131-3.42273314-1.6449981-4.69142623-2.854755l1.37196183-2.7882562c2.92125384 2.4195138 5.91604755 3.6292706 8.98464187 3.6292706 2.2132371 0 3.9466395-.6269143 5.2007289-1.8810037 1.2538287-1.2540894 1.8810038-2.9580238 1.8810038-5.1120638 0-2.0948431-.6196125-3.7841738-1.8588375-5.0677313-1.2394857-1.2835575-2.8917857-1.9253363-4.9571607-1.9253363-3.00965814 0-5.41456823 1.2246213-7.2144695 3.6736032h-2.52278251v-18.45642023h18.89896331v3.00965815h-15.26969267v11.24221148c1.74096506-1.6820289 3.96880577-2.5230433 6.68326137-2.5230433 1.9769706 0 3.7103731.4206376 5.2004681 1.2613913z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1362.630417 203.100332)"/><g transform="translate(1412.266122 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37825665-46.72872807v44.19032577h37.83980095v-44.19032577z" fill="#000"/></g><path d="m21.062913 18.8183824c1.1359562 1.3719618 1.7039343 3.01696 1.7039343 4.9347336 0 2.6852483-1.017823 4.8022576-3.0537299 6.3512889-2.0361676 1.549292-4.7800913 2.3238076-8.2322925 2.3238076-3.45246205 0-6.19638571-.7745156-8.23229258-2.3238076-2.03616764-1.5490313-3.05399069-3.6660406-3.05399069-6.3512889 0-1.9177736.58258178-3.5700736 1.7482669-4.9568999 1.16542433-1.3868263 2.76608993-2.3459739 4.8019968-2.8769213-1.88830558-.5606763-3.33406805-1.4827932-4.33728744-2.7663507-1.00321938-1.2835575-1.50495946-2.795558-1.50495946-4.5365231 0-1.68176807.44280388-3.1499576 1.32789007-4.40378625.88508619-1.25408942 2.13187378-2.2278407 3.73984121-2.92125383 1.60822822-.69341314 3.44489942-1.03998932 5.51053519-1.03998932 2.0653749 0 3.9020461.34657618 5.5102744 1.03998932 1.6079674.69341313 2.854755 1.66716441 3.7398412 2.92125383.8853469 1.25382865 1.32789 2.72201818 1.32789 4.40378625 0 1.7409651-.5090419 3.2529656-1.5271257 4.5365231-1.017823 1.2835575-2.4414192 2.2056744-4.2710494 2.7663507 2.0656358.5606763 3.6663014 1.526865 4.8022576 2.8990876zm-14.64981941-5.8425077c1.25382864 1.0475519 2.94315933 1.6893307 5.06773131 1.9253363 2.1243111-.2360056 3.8136418-.8777844 5.0677313-1.9253363 1.2538286-1.0472911 1.8810037-2.4119511 1.8810037-4.09397999 0-1.74070429-.6123107-3.1129269-1.836932-4.11614628-1.2243605-1.00321938-2.9285556-1.50469868-5.111803-1.50469868-2.18350818 0-3.88770331.5014793-5.11206385 1.50469868-1.22462132 1.00321938-1.83693198 2.37544199-1.83693198 4.11614628 0 1.68202889.6271751 3.04668889 1.88126452 4.09397999zm10.77724131 14.9377202c1.3276293-1.0032194 1.9915743-2.4638463 1.9915743-4.38162 0-1.7409651-.7007149-3.1350932-2.1024056-4.1826451-1.40143-1.0475519-3.2678301-1.6893307-5.5986787-1.9253363-2.33110948.2360056-4.19750956.8777844-5.59893949 1.9253363-1.40169072 1.0475519-2.10240568 2.44168-2.10240568 4.1826451 0 1.9177737.66394503 3.3784006 1.9918351 4.38162 1.32762929 1.0032193 3.2307993 1.5049594 5.70951007 1.5049594 2.4784499 0 4.38162-.5017401 5.70951-1.5049594z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1421.105194 202.753717)"/><g transform="translate(1503.787344 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37816863-46.72872807v44.19032577h37.83971293v-44.19032577z" fill="#000"/></g><path d="m23.0372759 21.726858v3.0096582h-4.7800914v6.8603307h-3.6292706v-6.8603307h-14.51708254v-2.7441845l15.18102754-21.90862143h2.9653256v21.64314773zm-19.16443705 0h10.75507505v-15.4908338z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1512.887196 203.275277)"/><g transform="translate(1565.163879 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37816863-46.72872807v44.19032577h37.83971293v-44.19032577z" fill="#000"/></g><path d="m17.3989587 13.5954872c1.490095.8410144 2.6482175 2.0213032 3.4743675 3.5408663.82615 1.5195632 1.239225 3.2532264 1.239225 5.2004682 0 1.9475025-.4352413 3.6884676-1.3057238 5.2226344-.8702218 1.5344275-2.0726768 2.7368826-3.6071044 3.6073651-1.5341668.8702218-3.2751319 1.305463-5.2226344 1.305463-3.80634005 0-6.74219755-1.3276293-8.80757252-3.9834094-2.06563575-2.6555193-3.09832323-6.4323913-3.09832323-11.330355 0-3.5408663.47957381-6.5799926 1.43846065-9.11737874.95888684-2.53764695 2.34571311-4.47028507 4.16047882-5.79817514 1.81450493-1.32789007 3.99071125-1.99157432 6.52835818-1.99157432 1.8293694 0 3.6071044.33927435 5.333205 1.01782304 1.7261006.67880948 3.2383619 1.63769632 4.5365231 2.8769213l-1.3719618 2.78851699c-1.4752306-1.23948576-2.891525-2.15404006-4.2488832-2.74418445-1.3573581-.59014439-2.7441844-.88534697-4.1604788-.88534697-2.71445553 0-4.82416305 1.20975688-6.32912251 3.62953142-1.50469868 2.41951375-2.2573088 5.81251797-2.2573088 10.17953437v.663945c.67880947-1.6817681 1.7852976-3.0096582 3.31946439-3.9834094 1.53442756-.9737513 3.28999632-1.460627 5.26696692-1.460627 1.9180345 0 3.6219688.4206377 5.1120639 1.2613913zm-.7301831 13.8977308c1.239225-1.2835575 1.8588375-2.9874918 1.8588375-5.1120638 0-2.0948431-.6271751-3.7841737-1.8810038-5.0677313-1.2540894-1.2835575-2.8842231-1.9253363-4.8906619-1.9253363-2.06563572 0-3.7474038.6490806-5.04582577 1.9475026-1.29816118 1.2981612-1.94724178 2.98019-1.94724178 5.045565 0 2.0948431.6490806 3.7914756 1.94724178 5.0898976 1.29842197 1.2981612 2.99505449 1.9475025 5.08989757 1.9475025 2.0064388 0 3.6292706-.6417787 4.8687564-1.9253363z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1574.52451 202.753717)"/><g transform="translate(1624.915924 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37816863-46.72872807v44.19032577h37.83971293v-44.19032577z" fill="#000"/></g><path d="m.03650915.08371027h20.80213335v2.6998519l-14.78281705 28.81328473h-3.89474434l14.69415189-28.45914594h-16.81872385z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1635.972745 203.629332)"/><g transform="translate(1684.951213 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37825665-46.72872807v44.19032577h37.83980095v-44.19032577z" fill="#000"/></g><path d="m19.0538664 4.23480103c2.065375 2.65551935 3.0983233 6.43239127 3.0983233 11.33035497 0 5.3407676-1.0697182 9.4936838-3.2088939 12.4590094-2.1391756 2.9655864-5.1266674 4.4481188-8.96273635 4.4481188-1.79990127 0-3.56277183-.3392743-5.28887245-1.017823-1.72610062-.6788095-3.25322635-1.6376963-4.58085564-2.8769213l1.41629437-2.7882562c1.50469869 1.2686931 2.9358575 2.19081 4.29321568 2.7660899 1.35709739.57528 2.72932.8631807 4.11614627.8631807 2.71445552 0 4.81686122-1.2097569 6.30695622-3.6292706 1.4900951-2.4197745 2.2351426-5.8127788 2.2351426-10.1797951v-.5755408c-.6788095 1.6525608-1.7852976 2.9580238-3.3194644 3.9171714-1.5344276.9588869-3.2899963 1.4384607-5.26696696 1.4384607-1.91803446 0-3.61466698-.4206376-5.08989756-1.2613913-1.47523058-.8410144-2.62605125-2.0213032-3.45220124-3.5408663s-1.23922498-3.2532264-1.23922498-5.2004681c0-1.94750259.43524126-3.68846765 1.30546302-5.22263444.87048253-1.53442756 2.07293758-2.73688261 3.60736514-3.60736514 1.53416679-.87022175 3.27513185-1.30546302 5.22263438-1.30546302 3.8063401 0 6.7421976 1.32762929 8.8075725 3.98340943zm-3.5408663 11.15328557c1.298422-1.2981611 1.9475026-2.98019 1.9475026-5.045565 0-2.09484305-.6490806-3.79147556-1.9475026-5.08989753-1.2981612-1.29816119-2.9947937-1.94750256-5.0896368-1.94750256-2.00643874 0-3.62953139.64177876-4.86875638 1.92533629-1.23922498 1.28355752-1.85883747 2.98749187-1.85883747 5.1120638 0 2.0948431.61961249 3.7841738 1.85883747 5.0677313 1.23922499 1.2835575 2.8769213 1.9253363 4.91282818 1.9253363 2.0656357 0 3.7474038-.6490806 5.045565-1.9475026z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1694.05523 202.753717)"/><path d="m274.413747 0v15.1195638-7.54515948h-274.07401986v7.54515948" stroke="#000" stroke-width="2.539424" transform="translate(1068.761162 109.742102)"/><path d="m0 .24858084h272.688304v7.55978192" stroke="#000" stroke-width="2.539424" transform="translate(1343.17491 117.053303)"/><path d="m90.8465476.12672749v8.60284661h-90.40348881v8.7441965" stroke="#000" stroke-width="2.539424" transform="translate(978.589682 177.005152)"/><path d="m1040.343498 185.807838v8.671084" stroke="#000" stroke-width="2.539424"/><path d="m.18765416.0292448h90.06863584v8.67108449" stroke="#000" stroke-width="2.539424" transform="translate(1069.248576 185.778593)"/><path d="m1100.026783 185.807838v8.671084" stroke="#000" stroke-width="2.539424"/><path d="m1314.628568 185.807838v8.671084" stroke="#000" stroke-width="2.539424"/><path d="m.27782564.0292448h88.64587606v8.67108449" stroke="#000" stroke-width="2.539424" transform="translate(1343.662323 185.778593)"/><path d="m1373.584633 185.807838v8.671084" stroke="#000" stroke-width="2.539424"/><path d="m90.3956902.12672749v8.67595862h-90.07887149v8.67108449" stroke="#000" stroke-width="2.539424" transform="translate(1525.467524 177.005152)"/><path d="m1586.145618 185.807838v8.671084" stroke="#000" stroke-width="2.539424"/><path d="m.22421017.0292448h90.27871103v8.67108449" stroke="#000" stroke-width="2.539424" transform="translate(1615.639004 185.778593)"/><path d="m1645.921998 185.807838v8.671084" stroke="#000" stroke-width="2.539424"/><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(1263.581889 37.572233)"><path d="m7.95815261 22.540308v-20.02691984h-7.73636299v-2.18343345h18.06186388v2.18343345h-7.736363v20.02691984z"/><path d="m32.5082157 6.84954575v15.69076225h-2.495645v-2.8385659c-.4572278.9772392-1.1488702 1.7313239-2.0742447 2.2615717s-2.001566.7953717-3.2285744.7953717c-1.3935212 0-2.6154113-.3326845-3.6653293-.9980533-1.0502591-.6657101-1.8613267-1.6067805-2.4332026-2.8232112-.571876-1.2164307-.857814-2.6358843-.857814-4.2580194s.2910562-3.0518251.8731686-4.2894112c.5824537-1.2372448 1.3986395-2.1991293 2.4488986-2.88531225s2.2615716-1.02944503 3.6342787-1.02944503c1.2270084 0 2.2977405.27024212 3.2128785.81106756.9151381.54082545 1.6118987 1.29968715 2.0899406 2.27726753v-2.71402246zm-3.7431262 12.24381045c.8315404-1.0502592 1.2474812-2.5423915 1.2474812-4.4763969 0-1.9340055-.4159408-3.4210195-1.2474812-4.460701-.8318817-1.04002268-2.0172619-1.55969281-3.5564818-1.55969281-1.5388787 0-2.7396136.53536601-3.602887 1.60643921-.8629322 1.0710733-1.294569 2.5632056-1.294569 4.4763969s.4265185 3.3896277 1.2788731 4.4296504c.8526958 1.0396815 2.0588901 1.5596929 3.6185829 1.5596929 1.5392199 0 2.7246001-.5251296 3.5564818-1.5753887z"/><path d="m44.8301643 14.4610241 6.4571488 8.0792839h-3.0258928l-4.9598983-6.176329-4.8974559 6.176329h-3.0883351l6.5195911-8.0792839-6.1452784-7.61147835h3.0572845l4.5541938 5.77096575 4.5545351-5.77096575h3.0879939z"/><path d="m56.3720959 21.7606322c-1.1229379-.6657101-1.9913295-1.6118987-2.6048337-2.8389071s-.9202563-2.6618166-.9202563-4.3047658.3067521-3.0777574.9202563-4.3047658c.6135042-1.22700843 1.4818958-2.17319705 2.6048337-2.83890711 1.1229379-.66536885 2.422625-.99805327 3.8994026-.99805327 1.4764365 0 2.7761236.33268442 3.8990615.99805327 1.1232791.66571006 1.9913295 1.61189868 2.6048337 2.83890711.6135042 1.2270084.9202563 2.6618166.9202563 4.3047658s-.3067521 3.0777574-.9202563 4.3047658-1.4815546 2.173197-2.6048337 2.8389071c-1.1229379.6653688-2.422625.9980533-3.8990615.9980533-1.4767776 0-2.7764647-.3326845-3.8994026-.9980533zm7.4865938-2.6358843c.8318816-1.029445 1.2478225-2.532155 1.2478225-4.5077886 0-1.9131914-.4261773-3.3950872-1.2788731-4.4453463-.8526957-1.04991795-2.0380759-1.57504751-3.5561406-1.57504751-1.5388787 0-2.7348365.52512956-3.5875323 1.57504751-.8526957 1.0502591-1.278873 2.5321549-1.278873 4.4453463 0 1.9756336.421059 3.4783436 1.2631771 4.5077886.8424594 1.0291038 2.0435354 1.543997 3.6032282 1.543997 1.5596929 0 2.7553095-.5148932 3.5871912-1.543997z"/><path d="m85.1023814 12.6829538v9.8573542h-2.5270367v-9.7324695c0-1.4559636-.2910562-2.5215774-.8731687-3.19752386-.5824536-.67594651-1.4975917-1.01374915-2.7454142-1.01374915-1.4556223 0-2.6201884.44699138-3.4936983 1.34131535-.8735098.89432396-1.3102648 2.10051826-1.3102648 3.61858286v8.9838443h-2.5266955v-11.2925036c0-1.62179388-.0832564-3.08799385-.249428-4.39825865h2.4018109l.2497692 2.80751531c.4783832-1.01886737 1.1956167-1.80400261 2.152383-2.3550645.956425-.55106189 2.0483124-.82676344 3.2753208-.82676344 3.7642815 0 5.6464223 2.0691265 5.6464223 6.20772068z"/><path d="m92.4640906 21.7606322c-1.1229379-.6657101-1.9913295-1.6118987-2.6048337-2.8389071s-.9202563-2.6618166-.9202563-4.3047658.3067521-3.0777574.9202563-4.3047658c.6135042-1.22700843 1.4818958-2.17319705 2.6048337-2.83890711 1.1229379-.66536885 2.4229662-.99805327 3.8994026-.99805327 1.4764365 0 2.7761236.33268442 3.8994028.99805327 1.122938.66571006 1.990988 1.61189868 2.604492 2.83890711.613505 1.2270084.920257 2.6618166.920257 4.3047658s-.306752 3.0777574-.920257 4.3047658c-.613504 1.2270084-1.481554 2.173197-2.604492 2.8389071-1.1232792.6653688-2.4229663.9980533-3.8994028.9980533-1.4764364 0-2.7764647-.3326845-3.8994026-.9980533zm7.4865938-2.6358843c.8318816-1.029445 1.2478226-2.532155 1.2478226-4.5077886 0-1.9131914-.426177-3.3950872-1.2788732-4.4453463-.8526958-1.04991795-2.0380759-1.57504751-3.5561406-1.57504751-1.5388787 0-2.7348365.52512956-3.5875323 1.57504751-.8526958 1.0502591-1.278873 2.5321549-1.278873 4.4453463 0 1.9756336.421059 3.4783436 1.2635183 4.5077886.8421182 1.0291038 2.0431942 1.543997 3.602887 1.543997 1.5596929 0 2.7553095-.5148932 3.5871912-1.543997z"/><path d="m130.334156 12.6829538v9.8573542h-2.526696v-9.7324695c0-1.4767777-.254546-2.5478509-.764321-3.21321974-.509434-.66536885-1.336197-.99805327-2.479949-.99805327-1.330738 0-2.370761.44699138-3.119386 1.34131535-.748625.89432396-1.122938 2.11075466-1.122938 3.64963346v8.9527937h-2.526695v-9.7324695c0-1.4559636-.260006-2.5215774-.780017-3.19752386-.520012-.67594651-1.351552-1.01374915-2.495645-1.01374915-1.330738 0-2.375879.44699138-3.135082 1.34131535-.758861.89432396-1.138292 2.11075466-1.138292 3.64963346v8.9527937h-2.527037v-11.2925036c0-1.62179388-.082915-3.08799385-.249428-4.39825865h2.402152l.249428 2.74507301c.436755-.99805327 1.086428-1.76749263 1.949701-2.30831808.862933-.54082544 1.866445-.81106756 3.010197-.81106756 1.247823 0 2.26669.24942801 3.056944.74862526.790253.49919724 1.372707 1.26863659 1.747019 2.30831807.478383-.93561096 1.180262-1.679118 2.105637-2.23017989.925374-.55106189 1.970515-.82676344 3.135081-.82676344 3.472884 0 5.209327 2.0691265 5.209327 6.20772068z"/><path d="m148.926608 6.84954575-7.330999 17.12591165c-.76944 1.7883067-1.736784 3.0985715-2.90135 3.9304532s-2.599374 1.4037577-4.304766 1.715628l-.530247-1.9653972c1.476436-.3326844 2.594256-.7745576 3.353459-1.3256195.758861-.5510619 1.388061-1.3986394 1.887259-2.5423914l.62374-1.4037577-6.644475-15.53482705h2.65158l5.30316 12.94568925 5.364238-12.94568925z"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(1242.021555 73.436333)"><path d="m.1061178 18.7869453 1.3955685-17.74521654h3.91271003l-1.17104917 14.58010814h7.92539604l-.2490868 3.1651084z"/><path d="m14.0379178 18.7869453.9970296-12.63586623h3.763258l-.9970297 12.63586623zm1.2959338-18.56754419h4.0375946l-.2739955 3.53907983h-4.0375946z"/><path d="m20.1190478 17.4411941 1.2212078-2.6167762c.6981254.4817953 1.445727.8513309 2.243146 1.1089481.7977602.2576171 1.5951792.3862551 2.3925981.3862551.6977843 0 1.2130186-.0996347 1.5453618-.2989042.3323432-.1996106.4985148-.4654169.4985148-.7977601 0-.3487216-.1951748-.6230583-.5858658-.8223277-.3903497-.1996106-1.0260328-.4319779-1.906367-.6977842-.9141144-.2494281-1.661716-.4985149-2.243146-.7479429-.5817713-.2490868-1.0843807-.6189636-1.5078282-1.108948-.4237888-.4903257-.6356832-1.1256676-.6356832-1.9067083 0-.8141385.2286139-1.52864228.6855005-2.14317012.4568867-.61486905 1.1048535-1.09666434 1.9439007-1.44572707.8390472-.34872152 1.7985432-.5234235 2.878488-.5234235.9472123 0 1.8736104.14126293 2.7791945.42378878.9052428.28252585 1.6654694.66468641 2.2803385 1.1464817l-1.1962991 2.51714153c-.6148691-.44869746-1.262836-.78922982-1.9439007-1.02193831-.6814059-.23236727-1.3460923-.34872152-1.9940592-.34872152-.6810648 0-1.1962991.09963472-1.5450206.29890416-.3490627.19961066-.5234235.47360613-.5234235.82266887 0 .36544108.2074586.65615608.6230582.87214498.4152584.215989 1.046847.4405083 1.8940833.6728756.9137732.2661475 1.6572803.5234235 2.2305211.7728515.5732409.2490868 1.0717557.6189636 1.4955445 1.1089481.4237887.4903256.6353419 1.1256676.6353419 1.9067082 0 1.2461165-.494079 2.222332-1.4829195 2.9283054-.9884992.7063146-2.3219667 1.0594719-4.000061 1.0594719-2.1598896 0-4.087412-.5152343-5.7822259-1.5453618z"/><path d="m38.3876878 13.8772056c-.0498173.6977843.0914456 1.2130186.4237888 1.5453618.3323432.332002.7892298.4981736 1.3706598.4981736.3821606 0 .8059494-.0661957 1.2710251-.1992694l-.2490868 2.9160216c-.5650517.2327085-1.2959338.3490627-2.1933287.3490627-1.4286663 0-2.5212361-.3821605-3.2773681-1.1464817-.7557907-.7643211-1.1338567-1.8442659-1.1338567-3.2401757 0-.2825258.0081891-.4985148.0249087-.6479668l.3988801-4.98446573h-2.3925982l.2241782-2.8163869h2.3925981l.2241781-2.96583898 3.8632339-1.22120774-.3241541 4.18704672h3.215267l-.2245193 2.8163869h-3.2149258z"/><path d="m42.4003738 17.4411941 1.2212077-2.6167762c.6977843.4817953 1.4457271.8513309 2.2431461 1.1089481.7974189.2576171 1.5951791.3862551 2.3925981.3862551.6977842 0 1.2130186-.0996347 1.5453618-.2989042.332002-.1996106.4981736-.4654169.4981736-.7977601 0-.3487216-.1951749-.6230583-.5855246-.8223277-.3903497-.1996106-1.0260329-.4319779-1.9067083-.6977842-.9137732-.2494281-1.6613748-.4985149-2.243146-.7479429-.58143-.2490868-1.0840394-.6189636-1.5078282-1.108948-.4234475-.4903257-.6353419-1.1256676-.6353419-1.9067083 0-.8141385.2282727-1.52864228.6851593-2.14317012.4572278-.61486905 1.1051947-1.09666434 1.9442419-1.44572707.8390472-.34872152 1.7985432-.5234235 2.878488-.5234235.9472122 0 1.8732692.14126293 2.7788532.42378878.9055841.28252585 1.6658107.66468641 2.2806797 1.1464817l-1.196299 2.51714153c-.6148691-.44869746-1.262836-.78922982-1.9442419-1.02193831-.6810648-.23236727-1.3457512-.34872152-1.9937181-.34872152-.6814059 0-1.196299.09963472-1.5453618.29890416-.3487215.19961066-.5234235.47360613-.5234235.82266887 0 .36544108.2077999.65615608.6233995.87214498.4152584.215989 1.0465057.4405083 1.8940833.6728756.9137732.2661475 1.6572802.5234235 2.2305211.7728515.5732408.2490868 1.0717556.6189636 1.4955444 1.1089481.4234476.4903256.635342 1.1256676.635342 1.9067082 0 1.2461165-.4944203 2.222332-1.4829195 2.9283054-.9884993.7063146-2.3219667 1.0594719-4.000061 1.0594719-2.1598897 0-4.087412-.5152343-5.7822259-1.5453618z"/><path d="m67.62263 18.7869453v-16.0005853h-6.1811059v-1.74463124h14.430656v1.74463124h-6.181106v16.0005853z"/><path d="m86.688689 12.4567284h-9.1967623c.0167195 1.594838.3865964 2.7996674 1.1092893 3.6138059s1.7736345 1.2212077 3.1528247 1.2212077c1.4621054 0 2.8078565-.4903256 4.0372534-1.4706357l.6732168 1.4706357c-.5483322.5148932-1.2505522.9219624-2.1059777 1.2212078-.8557667.2989041-1.7323475.4486974-2.6294012.4486974-1.9606202 0-3.4977928-.5776766-4.6108355-1.7323475-1.1133839-1.1546708-1.6699052-2.737225-1.6699052-4.7476626 0-1.2795555.2490868-2.4134122.7476016-3.40225268.4985148-.98849926 1.1962991-1.75691497 2.093694-2.30524714.8970537-.54833217 1.918992-.82232765 3.0654737-.82232765 1.6613748 0 2.965839.54389638 3.9130512 1.63237157.9468711 1.08813397 1.4204772 2.587773 1.4204772 4.4985758zm-7.8632949-3.98777725c-.656156.63124737-1.0758502 1.52011191-1.2584001 2.66659365h7.3023377c-.0996347-1.17957958-.4446028-2.07697448-1.034222-2.69150233-.5899604-.61486905-1.4081934-.92230358-2.4550404-.92230358s-1.8981779.31562368-2.5546752.94721226z"/><path d="m96.7326876 6.10126171-.0498173 1.84426595c-.3821606-.13307377-.8226689-.19926944-1.3208425-.19926944-1.2130186 0-2.114508.37772478-2.7041272 1.13385676-.5899604.75613198-.88477 1.67399982-.88477 2.75394462v7.1528857h-2.0189679v-9.02206036c0-1.29593379-.0665369-2.46732417-.1992694-3.51417115h1.918992l.1992694 2.31787208c.3159649-.84723633.8226689-1.49554443 1.5204531-1.94390067.6977843-.44869745 1.4955445-.67287557 2.3925981-.67287557.4152584 0 .797419.04981736 1.1464817.14945208z"/><path d="m116.845594 10.9113666v7.8755787h-2.018627v-7.7759439c0-1.17957958-.203705-2.03534628-.610775-2.56695893-.407069-.53161264-1.067661-.79776018-1.981434-.79776018-1.063225 0-1.894083.35725189-2.492233 1.07175566-.598149.71450378-.897395 1.68662475-.897395 2.91602165v7.1528857h-2.018626v-7.7759439c0-1.16320127-.2078-2.01453218-.623059-2.55467519-.415258-.53980181-1.079944-.81004392-1.993718-.81004392-1.063566 0-1.898519.35725189-2.504857 1.07175566-.606339.71450378-.909679 1.68662475-.909679 2.91602165v7.1528857h-2.018968v-9.02206036c0-1.29593379-.0661956-2.46732417-.1992694-3.51417115h1.9189924l.19961 2.19332868c.348722-.79776018.868051-1.41228802 1.557646-1.84426595s1.491108-.64796689 2.404882-.64796689c.997029 0 1.811168.19926944 2.442415.59814953.631589.39853888 1.096664 1.01340793 1.39591 1.84426595.38216-.74794282.942776-1.34165656 1.682189-1.78216486.739412-.44016708 1.574365-.66025062 2.504858-.66025062 2.774758 0 4.162138 1.65318567 4.162138 4.95955697z"/><path d="m119.911067 17.3415594.672876-1.4955444c.681406.5316126 1.371001.9137732 2.068785 1.1464817s1.478825.3490627 2.342781.3490627c.946871 0 1.665469-.162077 2.155795-.4862311.489984-.3238128.735318-.7933244.735318-1.4078522 0-.4985148-.166172-.8973949-.498515-1.1962991-.332343-.2992453-.880675-.5319538-1.644996-.6981254l-2.118603-.4981736c-1.046506-.2327085-1.85655-.6483081-2.429791-1.2464577-.573241-.5981495-.859861-1.3123121-.859861-2.14317008 0-1.09666435.440167-1.98962346 1.320843-2.67921855.880675-.6895951 2.043876-1.03422204 3.489262-1.03422204.880675 0 1.711533.14092171 2.492233.42344756.781041.28252584 1.437197.68959509 1.96915 1.22120774l-.673216 1.47063576c-1.17958-.9803101-2.442416-1.47063576-3.788167-1.47063576-.897054 0-1.591085.17026618-2.081069.51113976-.489984.34053236-.735318.81823307-.735318 1.43310213 0 .51489308.153888.92196238.461323 1.22120778.307093.2989041.801513.5316126 1.482919.6977842l2.118261.5234235c1.163202.2658063 2.027158.6769702 2.592209 1.2334915.564711.5568625.847237 1.28365.847237 2.1807037 0 1.0802861-.440168 1.9442419-1.320843 2.5922088s-2.076974.9721209-3.588897.9721209c-2.110414 0-3.779978-.540143-5.009716-1.6200878z"/><path d="m146.77832 17.0672227h3.91271v1.7197226h-9.894546v-1.7197226h3.913051v-13.48310252l-3.638715 2.31753087v-1.96880935l4.53611-2.89111294h1.17139z"/><path d="m156.722343 16.2199864v1.8193573c0 .6977842-.116013 1.3375619-.348722 1.918992-.232708.5817712-.623058 1.1464817-1.17139 1.6948138l-.947212-.7226929c.647967-.7476016 1.013749-1.4621054 1.096664-2.1435113h-1.196299v-2.5669589z"/><path d="m171.801648 17.0672227v1.7197226h-11.415341v-1.5450206l6.204991-6.8788902c.832564-.93049277 1.436515-1.76953995 1.818675-2.51714156.382161-.74794282.573241-1.49554443.573241-2.24314604 0-.9803101-.279796-1.73200629-.846213-2.25542978-.563004-.5234235-1.371683-.78513524-2.4158-.78513524-1.696179 0-3.374274.68106472-5.03599 2.04353539l-.77251-1.56992926c.697784-.66468642 1.57846-1.19629906 2.641685-1.59517916 1.063567-.39888009 2.136346-.59814953 3.214585-.59814953 1.627594 0 2.917386.41935298 3.862551 1.25874137.948577.83904718 1.422866 1.97290393 1.422866 3.40191149 0 1.01340793-.228614 1.98962345-.685842 2.92830535-.457228.93868189-1.218137 1.98962347-2.279315 3.15282467l-5.061239 5.4829805z"/><path d="m177.435104 16.2199864v1.8193573c0 .6977842-.119425 1.3375619-.351451 1.918992-.232026.5817712-.621011 1.1464817-1.170367 1.6948138l-.948577-.7226929c.648308-.7476016 1.01682-1.4621054 1.098712-2.1435113h-1.197664v-2.5669589z"/><path d="m191.339607 11.2102708c.549356.7312233.822328 1.6535269.822328 2.7665695 0 1.5453618-.522059 2.762475-1.569588 3.6513395-1.04753.8888646-2.466983 1.3334674-4.261773 1.3334674-1.146482 0-2.245193-.1910802-3.302959-.5732408-1.054354-.3821606-1.948337-.9223036-2.678536-1.6200878l.798442-1.5702705c1.644656 1.3624706 3.354142 2.0438766 5.131871 2.0438766 1.265907 0 2.22472-.2825259 2.879853-.8475776.658544-.5647104.98611-1.3955685.98611-2.4922328 0-2.1766092-1.364859-3.2650844-4.087753-3.2650844h-2.043876v-1.71938129h1.644655c1.313677 0 2.316848-.29105622 3.016339-.87248623.696078-.58143001 1.047529-1.41228803 1.047529-2.49223284 0-.96359058-.290033-1.70300303-.859861-2.21823737-.573241-.51489312-1.385332-.77251029-2.432862-.77251029-1.692425 0-3.371202.68106472-5.032918 2.04353539l-.771145-1.56992926c.713139-.68140594 1.590061-1.21711317 2.627354-1.6078041 1.037293-.39034973 2.122356-.58552459 3.251777-.58552459 1.596885 0 2.873028.40706925 3.82843 1.22120775.955401.81413849 1.433102 1.91080284 1.433102 3.28999303 0 1.01340793-.252499 1.90227247-.750673 2.6665936-.498174.76432114-1.187427 1.31265331-2.067762 1.64499652 1.04753.29890416 1.845972.81413848 2.391916 1.54502058z"/></g><g transform="translate(1238.737766 301.42884)"><path d="m.162355.124952h196.432387v68.608179h-196.432387z" fill="#0083c0"/><path d="m196.594742 68.7331309h-196.43238687v-68.60817855h196.43238687zm-193.8939261-66.06958614v63.53099374h191.3558681v-63.53099374z" fill="#000"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(1249.006069 345.842567)"><path d="m.56874621 14.4291604 1.02879531-13.08192845h2.88430112l-.8634532 10.74723665h5.84208763l-.18371345 2.3346918z"/><path d="m10.8383279 14.4291604.7348538-9.31580278h2.7740731l-.7348538 9.31580278zm.95531-13.68665188h2.9761578l-.2020848 2.6102619h-2.9761578z"/><path d="m15.320936 13.4340458.9001959-1.9289912c.5143977.3597722 1.065538.6276877 1.6534211.8190558.587883.1913682 1.175766.2832249 1.7636491.2832249.5143976 0 .8940721-.0688925 1.1390233-.2143323.2449513-.1530946.3674269-.3444627.3674269-.589414 0-.2602607-.1439088-.4592836-.4317266-.6047234-.2878177-.1530946-.756287-.3214986-1.4054078-.5205215-.673616-.1837134-1.2247564-.3674269-1.6534211-.5511403-.4286647-.18371346-.7991535-.4516289-1.1114663-.81140107-.3123129-.36742689-.4684693-.83436524-.4684693-1.40846976 0-.59706871.168404-1.12524487.505212-1.57687376.3368079-.45928362.8144629-.81140106 1.4329648-1.07166178.618502-.25260599 1.3257988-.38273635 2.1218904-.38273635.6981111 0 1.3809127.10716618 2.0484049.31384381s1.2278182.48990253 1.6809781.84201997l-.8818246 1.86009865c-.4531598-.33680798-.9308148-.58175925-1.4329649-.75781797-.5021501-.16840399-.9920526-.25260599-1.4697076-.25260599-.5021501 0-.8818245.06889254-1.1390233.21433236-.2571989.15309454-.3857983.35211744-.3857983.61237816 0 .26791544.1530946.4822478.4592836.64299706.3061891.15309454.7715965.32149853 1.3962222.48990253.673616.1990229 1.2216945.39039107 1.6442354.57410452s.7899678.45162889 1.1022807.81905582c.3123128.3597721.4684693.8267105.4684693 1.400815 0 .9185672-.364365 1.6381116-1.093095 2.158633-.7287301.5205214-1.711597.7807822-2.9486009.7807822-1.5921832 0-3.0129005-.3750817-4.262152-1.1405544z"/><path d="m28.7871317 10.8084745c-.0367426.5128667.0673616.895603.3123129 1.1405543s.5817593.3674269 1.010424.3674269c.2816939 0 .5940068-.0459284.9369385-.1454398l-.1837134 2.1509783c-.4164171.168404-.9553099.252606-1.6166783.252606-1.0532905 0-1.8585677-.2832249-2.4158319-.84202-.5572641-.5664498-.8358962-1.3625414-.8358962-2.3882748 0-.2066776.0061238-.3674269.0183714-.4822478l.2939415-3.67426897h-1.7636491l.1653421-2.07443101h1.7636491l.1653421-2.18159719 2.8475584-.90325778-.2388274 3.08485497h2.3699034l-.1653421 2.07443101h-2.3699034z"/><path d="m31.7449182 13.4340458.9001959-1.9289912c.5143977.3597722 1.065538.6276877 1.6534211.8190558.587883.1913682 1.175766.2832249 1.7636491.2832249.5143976 0 .8940721-.0688925 1.1390233-.2143323.2449513-.1530946.3674269-.3444627.3674269-.589414 0-.2602607-.1439088-.4592836-.4317266-.6047234-.2878177-.1530946-.756287-.3214986-1.4054078-.5205215-.673616-.1837134-1.2247564-.3674269-1.6534211-.5511403-.4286647-.18371346-.7991535-.4516289-1.1114663-.81140107-.3123129-.36742689-.4684693-.83436524-.4684693-1.40846976 0-.59706871.168404-1.12524487.505212-1.57687376.3368079-.45928362.8144629-.81140106 1.4329649-1.07166178.6185019-.25260599 1.3257987-.38273635 2.1218903-.38273635.6981111 0 1.3809127.10716618 2.0484049.31384381s1.2278182.48990253 1.6809781.84201997l-.8818246 1.86009865c-.4531598-.33680798-.9308148-.58175925-1.4329649-.75781797-.5021501-.16840399-.9920526-.25260599-1.4697076-.25260599-.5021501 0-.8818245.06889254-1.1390233.21433236-.2571989.15309454-.3857983.35211744-.3857983.61237816 0 .26791544.1530946.4822478.4592836.64299706.3061891.15309454.7715965.32149853 1.3962222.48990253.673616.1990229 1.2216945.39039107 1.6442354.57410452s.7899678.45162889 1.1022807.81905582c.3123128.3597721.4684693.8267105.4684693 1.400815 0 .9185672-.364365 1.6381116-1.093095 2.158633-.7287301.5205214-1.711597.7807822-2.9486009.7807822-1.5921832 0-3.0129005-.3750817-4.262152-1.1405544z"/><path d="m52.3208244 13.1584757h2.8843011v1.2706847h-7.2934239v-1.2706847h2.8843011v-9.93583564l-2.6822163 1.70700411v-1.4467434l3.3435848-2.13566882h.8634532z"/><path d="m59.6509909 12.5384428v1.3395772c0 .5128667-.0857329.9874598-.2571988 1.4161245s-.4592836.84202-.8634532 1.2477205l-.6981111-.5358309c.4776549-.5511403.7471013-1.0716618.8083392-1.5768737h-.8818246v-1.8907176z"/><path d="m70.7656545 13.1584757v1.2706847h-8.4140759v-1.1405544l4.5744648-5.06742923c.6123782-.68892542 1.0594142-1.30895831 1.3411082-1.86009865.2816939-.55114034.4225409-1.10228069.4225409-1.65342103 0-.71954434-.2082085-1.27068468-.6246257-1.66107575-.4164171-.38273635-1.010424-.57410453-1.7820204-.57410453-1.2492515 0-2.4862554.49755726-3.7110117 1.50032649l-.5695117-1.15586377c.5143977-.48990253 1.1635185-.8802936 1.9473626-1.17117323.783844-.29853435 1.5738118-.44397416 2.3699035-.44397416 1.2002611 0 2.1494473.30618907 2.8475584.92622196.6981111.62003288 1.0471666 1.45439813 1.0471666 2.51075045 0 .74250851-.168404 1.46205285-.5052119 2.15863301-.336808.68892542-.897134 1.46205285-1.6809781 2.31938227l-3.729383 4.04169587z"/><path d="m74.9175784 12.5384428v1.3395772c0 .5128667-.0857329.9874598-.2571988 1.4161245s-.4592837.84202-.8634532 1.2477205l-.6981111-.5358309c.4776549-.5511403.7471013-1.0716618.8083391-1.5768737h-.8818245v-1.8907176z"/><path d="m85.1687888 8.84120966c.4041695.54348561.6062543 1.22475634.6062543 2.04381214 0 1.1405543-.3857982 2.0361573-1.1573947 2.6868091-.7715965.6583065-1.8187631.9874598-3.1414999.9874598-.8450819 0-1.6564829-.1454398-2.4342032-.42101-.7777203-.2832249-1.4360268-.6812707-1.9749196-1.1941374l.5878831-1.1635185c1.2125087 1.010424 2.4740077 1.5079812 3.784497 1.5079812.9308148 0 1.6381116-.2066776 2.1218903-.6200329.4837787-.4210099.7256681-1.0333881.7256681-1.8371344 0-1.60749269-1.0043002-2.41123903-3.0129005-2.41123903h-1.5064503v-1.26302995h1.2125088c.9675574 0 1.708535-.21433235 2.2229327-.64299706.5143976-.42866471.7715965-1.04104287.7715965-1.83713448 0-.71188961-.2112705-1.25537522-.6338114-1.63811157-.422541-.38273635-1.0196097-.5664498-1.7912062-.5664498-1.2492514 0-2.4862553.49755726-3.7110116 1.50032649l-.5695117-1.15586377c.5266452-.49755726 1.1727042-.89560306 1.9381769-1.18648268.7654727-.2832249 1.5646262-.42866471 2.3974605-.42866471 1.175766 0 2.1157665.29853435 2.8200014.90325778.7042349.5970687 1.0563523 1.40846976 1.0563523 2.41889372 0 .75016325-.1837134 1.40846977-.5511403 1.96726484-.3674269.56644979-.8757008.97215032-1.5248216 1.21710159.7715964.21433235 1.3594795.5970687 1.7636491 1.13289959z"/><path d="m90.1841659 12.5384428v1.3395772c0 .5128667-.085733.9874598-.2571988 1.4161245-.1714659.4286647-.4592837.84202-.8634533 1.2477205l-.6981111-.5358309c.477655-.5511403.7471014-1.0716618.8083392-1.5768737h-.8818245v-1.8907176z"/><path d="m101.776484 10.3338814v1.2477205h-1.9841048v2.8475585h-1.5064503v-2.8475585h-6.0258011v-1.1405543l6.3013713-9.09381565h1.2308801v8.98664945zm-7.9547919 0h4.4642368v-6.42997064z"/><path d="m105.450753 12.5384428v1.3395772c0 .5128667-.085733.9874598-.257198 1.4161245-.171466.4286647-.459284.84202-.863454 1.2477205l-.698111-.5358309c.477655-.5511403.747102-1.0716618.808339-1.5768737h-.881824v-1.8907176z"/><path d="m114.847696 6.74381447c.618502.34446271 1.093095.83436524 1.423779 1.45439812.330685.62768761.496027 1.34723195.496027 2.17394251 0 .8190557-.180652 1.5462548-.541955 2.1815971-.361303.6353424-.875701 1.1328996-1.543193 1.4773623-.667492.3521175-1.448274.5281762-2.342346.5281762-.796092 0-1.579936-.1454398-2.351532-.4363194-.771597-.2832249-1.420718-.6812707-1.947363-1.178828l.569512-1.1635185c1.212508 1.010424 2.455636 1.5079812 3.729383 1.5079812.918567 0 1.638111-.2602607 2.158633-.7807821.520521-.5205215.780782-1.2247563.780782-2.1203594 0-.87263887-.257199-1.56921902-.771597-2.10504991-.514397-.52817616-1.200261-.79609161-2.05759-.79609161-1.249252 0-2.247428.50521198-2.994529 1.52329067h-1.047167v-7.6623817h7.844564v1.2477205h-6.338114v4.66938345c.722606-.69658015 1.647297-1.04869759 2.774073-1.04869759.820587 0 1.540131.17605872 2.158633.52817616z"/><path d="m120.717341 12.5384428v1.3395772c0 .5128667-.085733.9874598-.257199 1.4161245s-.459284.84202-.863453 1.2477205l-.698111-.5358309c.477655-.5511403.747101-1.0716618.808339-1.5768737h-.881825v-1.8907176z"/><path d="m130.077541 6.74381447c.618502.34446271 1.099219.83436524 1.442151 1.46970758.342931.62768761.514397 1.34723194.514397 2.15863305 0 .8037463-.180651 1.5309453-.541954 2.1662877-.361304.6353423-.860392 1.1328996-1.497265 1.4926717-.636873.3674269-1.35948.5434857-2.167819.5434857-1.579935 0-2.798568-.5511404-3.655897-1.6534211-.85733-1.1022806-1.285994-2.6714997-1.285994-4.70000233 0-1.46970758.199022-2.73273753.597068-3.78908985.398046-1.0486976.973681-1.85244393 1.726907-2.40358427.753225-.55114034 1.656483-.82671051 2.709773-.82671051.759349 0 1.497265.13778508 2.213747.42100998s1.34417.6812707 1.883063 1.19413741l-.569512 1.15586377c-.612378-.51286671-1.200261-.88794833-1.763649-1.13289959s-1.139023-.3674269-1.726906-.3674269c-1.126776 0-2.002477.49755726-2.627103 1.50032649-.624625 1.01042396-.936938 2.41889373-.936938 4.22540929v.27557017c.281694-.69658015.740977-1.24772049 1.377851-1.65342102.636873-.39804581 1.365603-.60472343 2.18619-.60472343.796091 0 1.503388.17605872 2.12189.52817616zm-.303127 5.76400943c.514397-.5281762.771596-1.2400658.771596-2.1203594 0-.87263887-.26026-1.56921902-.780782-2.10504991-.520521-.52817616-1.197199-.79609161-2.030033-.79609161-.85733 0-1.555441.26791545-2.094334.80374634-.538893.54348561-.808339 1.24006577-.808339 2.09739518 0 .8726389.269446 1.5768738.808339 2.1127047.538893.5358308 1.243128.811401 2.112705.811401.832834 0 1.50645-.2679154 2.020848-.8037463z"/><path d="m135.983928 12.5384428v1.3395772c0 .5128667-.085733.9874598-.257199 1.4161245-.171465.4286647-.459283.84202-.863453 1.2477205l-.698111-.5358309c.477655-.5511403.747102-1.0716618.808339-1.5768737h-.881824v-1.8907176z"/><path d="m138.353832 1.34723195h8.634532v1.12524486l-6.136029 11.95668359h-1.616679l6.099287-11.81124377h-6.981111z"/><path d="m151.250516 12.5384428v1.3395772c0 .5128667-.085733.9874598-.257199 1.4161245s-.459284.84202-.863453 1.2477205l-.698111-.5358309c.477655-.5511403.747101-1.0716618.808339-1.5768737h-.881825v-1.8907176z"/><path d="m161.915081 8.9101022c.471532.5664498.707297 1.2477205.707297 2.0438121 0 1.1175901-.422541 1.9978837-1.267623 2.6408808-.845081.6429971-1.984105.9644956-3.41707.9644956s-2.571988-.3214985-3.41707-.9644956-1.267623-1.5232907-1.267623-2.6408808c0-.7960916.24189-1.4773623.725669-2.05146683.483778-.58175925 1.148209-.97980505 1.99329-1.1941374-.783844-.23729654-1.383974-.62003289-1.800391-1.14820905-.416418-.53583089-.624626-1.1635185-.624626-1.88306284 0-.70423488.183713-1.30895831.55114-1.82947974.367427-.52052144.884887-.92622197 1.552379-1.21710159.667492-.2832249 1.429903-.42866471 2.287232-.42866471.85733 0 1.619741.14543981 2.287233.42866471.667492.29087962 1.184951.69658015 1.552378 1.21710159.367427.52052143.551141 1.12524486.551141 1.82947974 0 .71954434-.211271 1.34723195-.633812 1.88306284-.422541.52817616-1.013486.91091251-1.772834 1.14820905.857329.2296418 1.521759.62768761 1.99329 1.20179213zm-6.080915-2.42654845c.520522.43631944 1.221695.70423488 2.103519.7960916.881825-.09185672 1.582998-.35977216 2.103519-.7960916.520522-.43631944.780782-1.00276923.780782-1.69934939 0-.71954434-.254137-1.29364886-.76241-1.70700412-.508274-.42100998-1.215571-.62768761-2.121891-.62768761-.906319 0-1.613616.20667763-2.12189.62768761-.508274.41335526-.762411.98745978-.762411 1.70700412 0 .69658016.260261 1.26302995.780782 1.69934939zm4.473423 6.20032885c.55114-.4133553.82671-1.0257334.82671-1.821825 0-.7195444-.290879-1.30130361-.872639-1.72996832-.581759-.43631943-1.356417-.70423488-2.323975-.80374633-.967557.09951145-1.742216.3674269-2.323975.80374633-.581759.42866471-.872639 1.01042392-.872639 1.72996832 0 .7960916.27557 1.4084697.826711 1.821825.55114.4133553 1.341108.6276876 2.369903.6276876 1.028796 0 1.818763-.2143323 2.369904-.6276876z"/><path d="m166.517103 12.5384428v1.3395772c0 .5128667-.085733.9874598-.257199 1.4161245-.171465.4286647-.459283.84202-.863453 1.2477205l-.698111-.5358309c.477655-.5511403.747102-1.0716618.808339-1.5768737h-.881824v-1.8907176z"/><path d="m176.456001 2.85521316c.857329 1.10228069 1.285994 2.67149972 1.285994 4.70000237 0 2.21987082-.443974 3.94218437-1.331923 5.17459547-.887948 1.232411-2.128014 1.8447892-3.720197 1.8447892-.747101 0-1.478893-.1377851-2.195376-.42101-.716482-.2832249-1.350293-.6812707-1.901434-1.1941374l.587883-1.1558638c.624626.5281762 1.218633.9109125 1.782021 1.148209.563388.2372966 1.132899.3597722 1.708535.3597722 1.126776 0 1.999414-.505212 2.617916-1.5079812s.927753-2.411239.927753-4.22540929v-.23729654c-.281694.6812707-.740977 1.22475632-1.377851 1.62280212-.636873.3980458-1.365603.5970687-2.18619.5970687-.796091 0-1.500326-.17605872-2.112704-.52052143-.612378-.35211744-1.090033-.84201997-1.432965-1.46970758-.342932-.63534234-.514398-1.35488667-.514398-2.15863301 0-.81140106.180652-1.53094539.541955-2.17394246.361303-.63534234.860391-1.13289959 1.497265-1.49267176.636873-.35977217 1.359479-.54348561 2.167818-.54348561 1.579936 0 2.798568.55114034 3.655898 1.65342102zm-1.469708 4.63110982c.538893-.54348561.808339-1.24006577.808339-2.09739519 0-.86498415-.269446-1.56921903-.808339-2.11270464-.538893-.53583089-1.243127-.80374634-2.112704-.80374634-.832835 0-1.506451.26026072-2.020848.79609161-.514398.53583089-.771597 1.24006577-.771597 2.12035937 0 .87263888.257199 1.56921903.771597 2.10504992.514397.53583089 1.194137.79609161 2.039219.79609161.857329 0 1.55544-.26791545 2.094333-.80374634z"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(1307.966463 315.478416)"><path d="m15.7309762 20.418335h-2.3788531l-2.4066219-6.4812177c-.2915715-.8025158-.6979203-1.3403033-1.21719525-1.6133623-.51927495-.2739846-1.2532946-.4100513-2.20205898-.4100513h-4.86785547v8.5046313h-2.21501771v-19.47142187h7.74006606c2.09653785 0 3.70527205.46466314 4.82620245 1.39491504 1.121856.92932627 1.6818584 2.26962951 1.6818584 4.01998408 0 1.2764352-.332299 2.34738191-.9978225 3.21284015-.6655235.8663839-1.6272466 1.4819237-2.8851693 1.8466194.5655561.0907112 1.0487317.332299 1.4495268.7247635.4007951.3915388.7386478.9524668 1.0117068 1.6818584zm-7.73914047-10.3651351c2.98976477 0 4.48464727-1.22089777 4.48464727-3.66454456 0-1.20331091-.3646958-2.10116598-1.0940874-2.6935652-.7284659-.59239922-1.85957813-.88859883-3.39055987-.88859883h-5.33344423v7.24670859z"/><path d="m18.2745903 18.1755486.8478714-1.7225859c.9663512.8201027 1.9502893 1.4041713 2.9536655 1.7503546 1.0024506.3461833 2.1696621.5192749 3.5007091.5192749 1.5680067 0 2.7759458-.3054558 3.6228915-.9154419.8478714-.6109117 1.2718071-1.4726674 1.2718071-2.5843416 0-.6571929-.2045629-1.1903522-.6146142-1.6004035-.410977-.4100513-.9487644-.7340197-1.6142879-.9709794-.6655235-.2369596-1.5541223-.4831756-2.6657965-.7377221-1.495808-.3285964-2.725962-.684036-3.6923132-1.0672442-.9663513-.3822826-1.7503546-.93395442-2.3520101-1.65408972-.6016554-.72013531-.9024831-1.66427156-.9024831-2.83055753 0-1.11259978.2915714-2.09190974.8747144-2.93978113.5840686-.84787138 1.4087994-1.50876676 2.475118-1.98268614 1.0672442-.474845 2.3112826-.71180469 3.7330407-.71180469 1.3495595 0 2.6074822.2101166 3.7746938.62942417 1.166286.41930758 2.1511497 1.03021927 2.9536655 1.83180947l-.8756401 1.72351148c-.9117394-.78400334-1.8364376-1.35881571-2.7759457-1.72351148-.9385825-.36377015-1.9641737-.54611803-3.0767735-.54611803-1.5133948 0-2.6981933.3230427-3.5553209.97005372-.856202.64793665-1.2847658 1.53653548-1.2847658 2.66672212 0 .9848637.373952 1.72258585 1.1209304 2.21501771.747904.49243185 1.8966031.92099566 3.4460973 1.28569143 1.6772303.40079512 2.994393.77011902 3.9514879 1.10797162.957095.3369271 1.7549827.8469458 2.3927375 1.5309818.6386804.684036.9580206 1.5911473.9580206 2.7213339 0 1.0940873-.2924971 2.0558104-.8756401 2.8851693-.5831429.8293589-1.41713 1.4726675-2.501961 1.9280744-1.0848311.4554069-2.3566382.6840359-3.8154213.6840359-3.0443766 0-5.4695109-.8210283-7.2744773-2.4621592z"/><path d="m35.3125473 18.1755486.8478714-1.7225859c.9663512.8201027 1.9502893 1.4041713 2.9536654 1.7503546 1.0024506.3461833 2.1696622.5192749 3.5007092.5192749 1.5680067 0 2.7750201-.3054558 3.6228915-.9154419.8478714-.6109117 1.271807-1.4726674 1.271807-2.5843416 0-.6571929-.2045628-1.1903522-.6155398-1.6004035-.4100513-.4100513-.9478387-.7340197-1.6133622-.9709794-.6655235-.2369596-1.5541223-.4831756-2.6657965-.7377221-1.495808-.3285964-2.725962-.684036-3.6923133-1.0672442-.9663512-.3822826-1.7503545-.93395442-2.35201-1.65408972-.6016555-.72013531-.9024832-1.66427156-.9024832-2.83055753 0-1.11259978.2915715-2.09190974.8747145-2.93978113.5840686-.84787138 1.4087994-1.50876676 2.475118-1.98268614 1.0672442-.474845 2.3112826-.71180469 3.7330407-.71180469 1.3495595 0 2.6074822.2101166 3.7746938.62942417 1.1662859.41930758 2.1511496 1.03021927 2.9536655 1.83180947l-.8756401 1.72351148c-.9117395-.78400334-1.8364376-1.35881571-2.7759458-1.72351148-.9385825-.36377015-1.9641736-.54611803-3.0767734-.54611803-1.5133949 0-2.6981933.3230427-3.555321.97005372-.856202.64793665-1.2847658 1.53653548-1.2847658 2.66672212 0 .9848637.373952 1.72258585 1.1209304 2.21501771.747904.49243185 1.8966032.92099566 3.4460974 1.28569143 1.6772303.40079512 2.9943929.77011902 3.9514879 1.10797162.957095.3369271 1.7549827.8469458 2.3927375 1.5309818.6386804.684036.9580206 1.5911473.9580206 2.7213339 0 1.0940873-.2924971 2.0558104-.8756401 2.8851693s-1.41713 1.4726675-2.5019611 1.9280744-2.3566381.6840359-3.8154212.6840359c-3.0443766 0-5.469511-.8210283-7.2744773-2.4621592z"/></g><g transform="translate(1132.952069 387.954528)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.01519163-52.05176699v49.51333329h42.47652283v-49.51333329z" fill="#000"/></g><path d="m23.6732656 32.2046798v3.383959h-22.46109685v-3.0406798l12.21155275-13.5355472c1.6346218-1.8308227 2.8280084-3.4819151 3.5798709-4.953277.7521514-1.4710729 1.1280827-2.9424349 1.1280827-4.4137968 0-1.92877865-.5559506-3.40823133-1.6675628-4.43806909-1.1116122-1.03012673-2.6971116-1.54504561-4.7570761-1.54504561-3.33483658 0-6.63673225 1.34046504-9.90626489 4.02168407l-1.52048438-3.08980225c1.37340598-1.30781306 3.10598377-2.35383234 5.19860024-3.13863575 2.09232752-.78480342 4.2011255-1.17691617 6.32639393-1.17691617 3.2039397 0 5.7377914.82554616 7.6015551 2.47663847 1.8634746 1.65109231 2.7953564 3.88240747 2.7953564 6.69394548 0 1.99437155-.4496149 3.91534845-1.3488447 5.76264155-.8989409 1.8470042-2.394864 3.9150595-4.4871916 6.2035878l-9.95538731 10.7893133z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1144.791113 397.615433)"/><g transform="translate(1191.307406 387.954528)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.0150941-52.05176699v49.51333329h42.4764253v-49.51333329z" fill="#000"/></g><path d="m21.6572224 20.6796856c1.0789602 1.4387099 1.6184403 3.2533511 1.6184403 5.4436346 0 3.0406798-1.0298378 5.4355438-3.0895133 7.184881-2.0599645 1.7490483-4.855321 2.6237169-8.3860695 2.6237169-2.25616532 0-4.42217651-.3762202-6.49803356-1.1280827-2.076146-.7518625-3.83357397-1.8146412-5.27199496-3.1877582l1.56931788-3.0895133c3.2365917 2.6809301 6.60408028 4.0213951 10.10246574 4.0213951 2.4847292 0 4.3730541-.5559506 5.6643967-1.6675628s1.9371583-2.746234 1.9371583-4.9041544c0-4.2829-2.68093-6.4243499-8.0427902-6.4243499h-4.02168406v-3.3839591h3.23688066c2.5829741 0 4.5608752-.5721321 5.9339922-1.7163963 1.3731171-1.1442642 2.0599645-2.779175 2.0599645-4.90415445 0-1.89641562-.5640413-3.35130707-1.692124-4.36467437-1.1277937-1.01365625-2.7216728-1.52048438-4.7816373-1.52048438-3.33483658 0-6.63673225 1.34046504-9.90626489 4.02168407l-1.52048437-3.08980225c1.40605796-1.34046504 3.13054499-2.39486403 5.17403901-3.16319698 2.04349402-.76833294 4.17685323-1.15235494 6.40007765-1.15235494 3.1386357 0 5.6479262.80098493 7.5278713 2.40295479 1.8799452 1.60196986 2.8199177 3.75989029 2.8199177 6.47347235 0 1.99437156-.4906466 3.74341986-1.4713619 5.24743376s-2.3376508 2.5829741-4.0705175 3.2368806c2.0596755.5883136 3.6292823 1.6019699 4.7079536 3.0403909z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1203.470522 396.880376)"/><g transform="translate(1249.976943 388.127483)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.01519163-52.05176699v49.51333329h42.47652283v-49.51333329z" fill="#000"/></g><path d="m25.5263379 24.074336v3.3348366h-5.2965562v7.601555h-4.0213951v-7.601555h-16.08558047v-3.0406798l16.82126147-24.27573805h3.2857141v23.98158125zm-21.23505825 0h11.91710695v-17.16454069z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1260.680298 397.799392)"/><g transform="translate(1072.3219 388.127483)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.0150941-52.05176699v49.51333329h42.4764253v-49.51333329z" fill="#000"/></g><path d="m12.0107286 31.6267686h7.6995109v3.383959h-19.46953948v-3.383959h7.69951097v-26.53161447l-7.16003086 4.56087523v-3.87431672l8.92554959-5.68895789h2.30499888z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1086.781678 397.799392)"/><g transform="translate(1310.293872 388.430153)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.01519163-52.05176699v49.51333329h42.47652283v-49.51333329z" fill="#000"/></g><path d="m18.2209624 14.4865002c1.6510923.9318818 2.9181626 2.2316041 3.8009219 3.8988779.8827594 1.6675628 1.3239946 3.5963414 1.3239946 5.7869138 0 2.1905725-.4822669 4.1358216-1.4468007 5.8360363-.9642448 1.7002148-2.3376508 3.0161186-4.119351 3.9480004-1.7819892.9315929-3.866226 1.3976783-6.2529993 1.3976783-2.12497947 0-4.21730699-.384311-6.27727148-1.1526439-2.05967553-.768333-3.79254227-1.822732-5.19831128-3.163197l1.52019542-3.0895133c3.23688066 2.6809301 6.55524679 4.0213951 9.95538734 4.0213951 2.4523662 0 4.3730541-.6946492 5.7626416-2.0842367 1.3892985-1.3895875 2.0842368-3.2776234 2.0842368-5.6643967 0-2.3211804-.6865586-4.1930347-2.0596756-5.6152742-1.373406-1.4222395-3.2042286-2.1333592-5.492757-2.1333592-3.33483662 0-5.99958518 1.3569355-7.99395675 4.0705175h-2.79535649v-20.45054375h20.94090144v3.3348366h-16.91950633v12.45687605c1.9290676-1.8637637 4.39761531-2.7956455 7.40535413-2.7956455 2.1905725 0 4.1112603.4660854 5.7623527 1.3976783z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1322.999783 398.270213)"/><g transform="translate(1374.317793 388.430153)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.01519163-52.05176699v49.51333329h42.47652283v-49.51333329z" fill="#000"/></g><path d="m19.2788288 15.0644114c1.6510923.9318818 2.9343442 2.2396948 3.8497555 3.9234391.9154114 1.6837443 1.373117 3.6047212 1.373117 5.7623526 0 2.1579205-.4822669 4.0869881-1.4468007 5.7869139-.9642448 1.7002148-2.2966191 3.032589-3.9968339 3.9971228-1.6999258.9642449-3.6289934 1.4465118-5.7869138 1.4465118-4.21759597 0-7.47065814-1.471073-9.75918651-4.4137968-2.28881733-2.9424349-3.43308151-7.1273789-3.43308151-12.554543 0-3.9234392.53138935-7.2909278 1.5938791-10.10246581 1.06248975-2.81182696 2.59915564-4.95327693 4.60999768-6.42463886 2.01055308-1.47136192 4.42188754-2.20675393 7.23371454-2.20675393 2.0270235 0 3.9968339.37593124 5.909431 1.12779372 1.9125972.75215143 3.5882507 1.81464118 5.0266717 3.1877582l-1.5201954 3.08980225c-1.6346219-1.37340597-3.2039398-2.38677327-4.7079537-3.0406798s-3.0406798-.98100427-4.6099976-.98100427c-3.0077389 0-5.34538973 1.34046504-7.01295251 4.02168407-1.66727383 2.68093003-2.5011997 6.44053143-2.5011997 11.27938193v.735681c.75215144-1.8634747 1.97819006-3.3348366 3.67811586-4.4137969 1.70021477-1.0789602 3.64546385-1.6184403 5.83603635-1.6184403 2.1252684 0 4.0133043.4660854 5.6643966 1.3976783zm-.8090757 15.3993109c1.3731171-1.4222395 2.0596756-3.3102754 2.0596756-5.6643967 0-2.3211804-.6949383-4.1930347-2.0842368-5.6152742-1.3895875-1.4222395-3.195849-2.1333592-5.4190734-2.1333592-2.2888173 0-4.15229196.7192105-5.5910019 2.1579204-1.43842099 1.438421-2.15763148 3.3021846-2.15763148 5.590713 0 2.3211803.71921049 4.2011255 2.15763148 5.6398354 1.43870994 1.438421 3.3186551 2.1579205 5.6398354 2.1579205 2.2232244 0 4.0213952-.7111198 5.3948011-2.1333592z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1384.69083 397.697106)"/><g transform="translate(1436.988825 388.430153)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.01528916-52.05176699v49.51333329h42.47662036v-49.51333329z" fill="#000"/></g><path d="m.04045378.09275475h23.04969942v2.99155735l-16.38002621 31.9264155h-4.31555192l16.28178133-31.5340138h-18.63590262z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1447.938813 398.275017)"/><g transform="translate(1499.78573 388.430153)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.01519163-52.05176699v49.51333329h42.47652283v-49.51333329z" fill="#000"/></g><path d="m23.338655 20.8516142c1.2586906 1.5201954 1.8880359 3.3429273 1.8880359 5.4679068 0 2.9753759-1.1277937 5.3211174-3.3836701 7.0375137-2.2561653 1.7166852-5.2965562 2.5748834-9.1217504 2.5748834-3.82548323 0-6.86587408-.8581982-9.12175046-2.5748834-2.25616535-1.7163963-3.38395906-4.0621378-3.38395906-7.0375137 0-2.1249795.64552681-3.9558022 1.93715836-5.4924681 1.29134258-1.5366659 3.06495207-2.5994446 5.32082845-3.1877582-2.09232751-.6212545-3.69429737-1.6430015-4.80590957-3.065241s-1.66756278-3.0976041-1.66756278-5.02667165c0-1.86347468.49064661-3.49029472 1.47136193-4.87959325.98071531-1.38958749 2.36221204-2.46854771 4.14391229-3.23688066 1.78198919-.76833294 3.81710354-1.15235494 6.10592084-1.15235494 2.2885284 0 4.3236427.384022 6.1056319 1.15235494 1.7817002.76833295 3.1631969 1.84729317 4.1439122 3.23688066.9810043 1.38929853 1.471362 3.01611857 1.471362 4.87959325 0 1.92906755-.5640414 3.60443215-1.692124 5.02667165-1.1277937 1.4222395-2.7052024 2.4439865-4.7325149 3.065241 2.2888173.6212546 4.0624268 1.6918351 5.3211174 3.2123195zm-16.23265883-6.4737613c1.38929853 1.1607346 3.26115293 1.8718543 5.61527423 2.1333592 2.3538323-.2615049 4.2256867-.9726246 5.6152742-2.1333592 1.3892985-1.1604457 2.0842368-2.6725504 2.0842368-4.53631405 0-1.92877864-.6784678-3.44926302-2.0354033-4.56087522-1.3566466-1.1116122-3.2449714-1.66727383-5.6641077-1.66727383-2.4194253 0-4.30775013.55566163-5.66439668 1.66727383-1.35693551 1.1116122-2.03540327 2.63209658-2.03540327 4.56087522 0 1.86376365.69493823 3.37586835 2.08452572 4.53631405zm11.94166813 16.5516658c1.471073-1.1116122 2.206754-2.7300525 2.206754-4.855032 0-1.9290676-.7764237-3.4738243-2.3295601-4.6345589-1.5528474-1.1607347-3.6209026-1.8718544-6.2035878-2.1333592-2.5829741.2615048-4.65102939.9726245-6.20387679 2.1333592-1.55313637 1.1607346-2.32956007 2.7054913-2.32956007 4.6345589 0 2.1249795.73568096 3.7434198 2.20704289 4.855032 1.47107297 1.1116122 3.57987096 1.6675628 6.32639397 1.6675628 2.746234 0 4.855032-.5559506 6.3263939-1.6675628z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1509.579895 397.697106)"/><g transform="translate(1565.056846 388.430153)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.01519163-52.05176699v49.51333329h42.47652283v-49.51333329z" fill="#000"/></g><path d="m21.1125411 4.69235002c2.2885283 2.9424349 3.4330815 7.12737888 3.4330815 12.55454298 0 5.9178108-1.1852959 10.5194287-3.5555987 13.8051429-2.3703028 3.2860031-5.6805782 4.9287157-9.9311151 4.9287157-1.99437156 0-3.94771143-.3759313-5.86030856-1.1277937-1.91259713-.7521515-3.60472114-1.8146412-5.07579411-3.1877582l1.56931788-3.0895133c1.66727382 1.405769 3.25306216 2.427516 4.75707607 3.064952 1.50372496.6374361 3.02420934.9564431 4.56087522.9564431 3.0077389 0 5.3372989-1.3404651 6.9883912-4.0213951 1.6510924-2.6812191 2.4766385-6.4408204 2.4766385-11.2796709v-.637725c-.7521514 1.8311116-1.97819 3.2776234-3.6781158 4.3404021-1.7002148 1.0624897-3.6454639 1.5938791-5.8360363 1.5938791-2.1252685 0-4.00521365-.4660854-5.63983549-1.3976783-1.63462184-.9318818-2.90978291-2.2396949-3.82519426-3.9234391-.91541134-1.6837443-1.37311702-3.6047212-1.37311702-5.7623527 0-2.1579204.4822669-4.086988 1.44651175-5.78691381.9645338-1.70021476 2.29690808-3.03258905 3.99712284-3.99712285 1.69992581-.96424484 3.62899341-1.44651174 5.78691388-1.44651174 4.2175959 0 7.4706581 1.47107297 9.7591865 4.41379682zm-3.9234392 12.35834218c1.4387099-1.438421 2.1579204-3.3021847 2.1579204-5.590713 0-2.32118037-.7192105-4.20112552-2.1579204-5.63983546-1.438421-1.43842099-3.3183661-2.15792044-5.6395465-2.15792044-2.22322439 0-4.02168405.71111974-5.39480107 2.13335921-1.37311703 1.42223948-2.05967554 3.31027538-2.05967554 5.66439669 0 2.3211803.68655851 4.1930347 2.05967554 5.6152742 1.37311702 1.4222395 3.1877582 2.1333592 5.44363457 2.1333592 2.2888173 0 4.152292-.7192105 5.590713-2.1579204z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1575.139966 397.697106)"/><g stroke="#000"><path d="m1096.073546 379.827207v8.703347" stroke-width="2.540471"/><path d="m1334.698583 379.827107h-238.625356" stroke-width="2.536666"/><path d="m1157.047962 379.827207v8.703347" stroke-width="2.540471"/><path d="m1214.724654 379.827207v8.703347" stroke-width="2.540471"/><path d="m1273.792589 379.827207v8.703347" stroke-width="2.540471"/><path d="m.25679382.11881745v8.70067791h253.66824618v8.70607874" stroke-width="2.537062" transform="translate(1333.854479 371.007868)"/><path d="m1522.192353 379.827363v8.706079" stroke-width="2.538373"/><path d="m1460.272258 379.827363v8.706079" stroke-width="2.538373"/><path d="m1398.172318 379.827363v8.706079" stroke-width="2.538373"/><path d="m461.035492 332.200017v30.871702" stroke-width="2.538347"/><path d="m555.359389 347.854087v15.218407" stroke-width="2.537588"/><path d="m695.541211 347.854373v14.187222" stroke-width="2.538524"/><path d="m790.885848 362.040642v-30.871702" stroke-width="2.538347"/><path d="m887.942518 362.041595v-14.187222" stroke-width="2.538524"/><path d="m.019213 15.299472.406607-15.172668" stroke-width="2.539569" transform="matrix(-1 0 0 1 367.859321 347.727644)"/></g><g transform="translate(728.528993 23.597628)"><path d="m.027562.06972h33.346975v38.281514h-33.346975z" fill="#00a88a"/><path d="m33.3745364 38.3512337h-33.34697449v-38.28151366h33.34697449zm-30.80847438-35.74309116v33.20466866h28.26976908v-33.20466866z" fill="#000"/></g><g fill="#000" transform="translate(771.880716 31.029736)"><path d="m12.5751769 7.68008917v1.60645421h-12.54602874v-1.60645421zm0 5.15096053v1.6066044h-12.54602874v-1.6066044z"/><path d="m26.1286201 17.4720676c-1.3345049-.7649138-2.3587471-1.8486543-3.0727268-3.2512217-.7141299-1.4025673-1.0711197-3.0473348-1.0711197-4.93430252 0-1.86998963.3569898-3.50634324 1.0711197-4.90876034.7139797-1.40256734 1.7382219-2.48210096 3.0727268-3.23860086 1.3345049-.75649991 2.8942319-1.13467473 4.6793313-1.13467473 1.2239222 0 2.3757252.19126601 3.4552588.57364779 1.0795337.38253202 1.9762152.91380981 2.6901948 1.59383335l-1.0709695 2.39706047c-.8159982-.6630455-1.6277894-1.14338913-2.4352235-1.44088065-.8075843-.29749152-1.6703097-.44623728-2.5883264-.44623728-1.7509931 0-3.1068332.56959109-4.06722 1.70862301-.960537 1.13888168-1.4408806 2.77102834-1.4408806 4.89598924 0 2.14193892.4761367 3.78670642 1.4281095 4.93430252.9519729 1.1474458 2.31202 1.7212439 4.0799911 1.7212439.9180167 0 1.7807421-.1487458 2.5883264-.4462373.8074341-.2974915 1.6192253-.7778352 2.4352235-1.4407304l1.0709695 2.3969102c-.7139796.6800236-1.6106611 1.2113013-2.6901948 1.5938334-1.0795336.382532-2.2313366.573798-3.4552588.573798-1.7850994 0-3.3448264-.382532-4.6793313-1.1475961z"/><path d="m41.938792 17.7781233c-.9944932-.5440489-1.7595572-1.3217338-2.295042-2.333205-.5354847-1.0116214-.8032271-2.1973805-.8032271-3.5574276 0-1.3598968.2677424-2.54565597.8032271-3.55727739.5354848-1.01147117 1.3005488-1.78915607 2.295042-2.33320496.9944931-.54404888 2.1462961-.8159982 3.4552588-.8159982 1.2919846 0 2.4310166.27194932 3.4169455.8159982.9860792.54404889 1.7467861 1.32173379 2.2822708 2.33320496.535635 1.01162142.8033774 2.19738059.8033774 3.55727739 0 1.3600471-.2677424 2.5458062-.8033774 3.5574276-.5354847 1.0114712-1.2961916 1.7891561-2.2822708 2.333205-.9859289.5440489-2.1249609.8159982-3.4169455.8159982-1.3089627 0-2.4607657-.2719493-3.4552588-.8159982zm5.9160245-2.7412792c.5694408-.7055657.8543115-1.7552.8543115-3.1493534 0-1.3768749-.2890776-2.42665936-.8670826-3.14920316s-1.3940032-1.08374057-2.4479946-1.08374057c-1.0709695 0-1.8955318.36119677-2.4735368 1.08374057s-.8670826 1.77232826-.8670826 3.14920316c0 1.3941534.2848706 2.4437877.8543115 3.1493534.5695911.7055658 1.3897962 1.0581984 2.4607657 1.0581984 1.0880978 0 1.9167168-.3526326 2.4863079-1.0581984z"/><path d="m66.6356966 10.4850736v7.9050108h-3.1875165v-7.7520581c0-1.0200353-.1954729-1.7637641-.5864189-2.23118638-.3910962-.46757253-.9946433-.7013588-1.8106415-.7013588-.968951 0-1.7509931.31026262-2.3459761.93078786-.594983.62052525-.8924746 1.44073042-.8924746 2.46076572v7.2930497h-3.1621245v-9.23110178c0-1.35989684-.0679122-2.57540513-.2038868-3.64652485h2.9834793l.2295793 2.116547c.4418801-.78204211 1.0412203-1.38543905 1.7977202-1.81049133s1.6108115-.63750329 2.5627843-.63750329c3.0769338 0 4.6154758 1.76797107 4.6154758 5.30406345z"/><path d="m74.0818492 7.90951823v5.76307187c0 1.5129998.7054155 2.2694997 2.1163968 2.2694997.3910962 0 .8161484-.0680625 1.2751568-.2040371v2.5246212c-.5610269.2038869-1.2410505.3059054-2.0400706.3059054-1.4620657 0-2.5841195-.407924-3.3660114-1.2239222-.7820421-.8159982-1.172988-1.9891365-1.172988-3.5191143v-5.91602457h-2.4735368v-2.39706046h2.4735368v-3.13643206l3.1875164-1.07111972v4.20755178h3.4169456v2.39706046z"/><path d="m90.9629905 12.11707h-8.8741119c.0680624 1.3770252.4122812 2.3927033 1.0328064 3.0473349.6205252.6544813 1.542749.981722 2.7666711.981722 1.4111315 0 2.7200942-.4590084 3.9270384-1.3770251l.9180167 2.1930233c-.6119611.4929645-1.364254.8882676-2.2567286 1.1857591-.8924745.2974915-1.7977202.4462373-2.715737.4462373-2.1081331 0-3.7655214-.594983-4.9726158-1.7849491-1.2069441-1.1901163-1.8104913-2.8221128-1.8104913-4.8961395 0-1.3089627.2635354-2.47353681.790456-3.49357213.5270708-1.01988507 1.2665927-1.81469827 2.2185655-2.38413911.9519729-.56959109 2.0315065-.85431151 3.2386009-.85431151 1.7679711 0 3.1661812.57379804 4.1947807 1.72124387 1.0284492 1.14759607 1.5427489 2.72430113 1.5427489 4.73026538zm-7.7392869-3.88872499c-.535635.50137838-.8798538 1.22812913-1.0328065 2.18025229h5.9925009c-.1020185-.96910121-.3951528-1.70005891-.8797034-2.1930234-.4845506-.49311473-1.151803-.73952185-2.0017574-.73952185-.8501045 0-1.5427489.25076432-2.0782336.75229296z"/><path d="m105.651108 10.4850736v7.9050108h-3.187516v-7.7520581c0-1.0200353-.195473-1.7637641-.586569-2.23118638-.390946-.46757253-.994493-.7013588-1.810491-.7013588-.9689514 0-1.7509935.31026262-2.3459765.93078786-.594983.62052525-.8924746 1.44073042-.8924746 2.46076572v7.2930497h-3.1621245v-9.23110178c0-1.35989684-.0679122-2.57540513-.2040371-3.64652485h2.9836296l.2294291 2.116547c.4420303-.78204211 1.0412203-1.38543905 1.7977202-1.81049133.7566501-.42505228 1.6108118-.63750329 2.5627838-.63750329 3.077084 0 4.615626 1.76797107 4.615626 5.30406345z"/><path d="m113.097111 7.90951823v5.76307187c0 1.5129998.705566 2.2694997 2.116547 2.2694997.391096 0 .815998-.0680625 1.275006-.2040371v2.5246212c-.561026.2038869-1.24105.3059054-2.03992.3059054-1.462066 0-2.584119-.407924-3.366162-1.2239222-.781891-.8159982-1.172988-1.9891365-1.172988-3.5191143v-5.91602457h-2.473536v-2.39706046h2.473536v-3.13643206l3.187517-1.07111972v4.20755178h3.417096v2.39706046z"/><path d="m125.923803.23393651h7.879619c1.95488 0 3.476444.47177949 4.564542 1.41533845 1.087947.94340871 1.631996 2.2311864 1.631996 3.86318281s-.548256 2.9241313-1.644767 3.87610416c-1.096512.95197287-2.613869 1.42795927-4.551771 1.42795927h-4.590084v7.5735632h-3.289535zm7.497087 8.03257155c1.139032 0 2.001758-.23378627 2.588176-.70120855.58657-.46757253.879854-1.14323888.879854-2.02729954 0-.90103871-.289078-1.5852692-.867083-2.05269149-.578004-.46757253-1.444937-.70135879-2.600947-.70135879h-4.207552v5.48255837z"/><path d="m154.509583 5.51245777v12.87762663h-3.136582v-2.0654626c-.390946.7139797-.951973 1.2707996-1.683081 1.6703097-.730958.3995101-1.563934.59919-2.498929.59919-1.122054 0-2.116547-.2719493-2.983479-.8159982-.867083-.5440489-1.538542-1.3175268-2.014528-2.3205841-.476137-1.002907-.71413-2.1674811-.71413-3.4934219 0-1.326091.24235-2.50328596.72675-3.53188543.484551-1.02844922 1.160368-1.82746937 2.0273-2.39691021.867083-.56959109 1.853012-.85431151 2.958087-.85431151.934995 0 1.767971.19967991 2.498929.59918999.731108.39951008 1.292135.95633006 1.683081 1.67030971v-1.93805208zm-4.003514 9.48607303c.578005-.7309577.866932-1.7594069.866932-3.0854979 0-1.3600471-.288927-2.40547436-.866932-3.13643206-.578005-.73110795-1.402568-1.09651167-2.473537-1.09651167-1.053992 0-1.874347.37817482-2.460766 1.13467473-.586569.7564999-.879854 1.8062844-.879854 3.1493534 0 1.3259408.293285 2.3459761.879854 3.0599557.586419.7139797 1.415188 1.0709695 2.486158 1.0709695 1.053991 0 1.87014-.3654037 2.448145-1.0965117z"/><path d="m170.421623 5.51245777v12.46970263c0 2.0059643-.552462 3.5275283-1.657388 4.5645416-1.105076 1.0370134-2.728658 1.5555201-4.870597 1.5555201-1.988987 0-3.73998-.4164881-5.25313-1.2496147l.510093-2.4224524c1.563934.8159982 3.119454 1.2239222 4.66656 1.2239222 2.295042 0 3.442488-1.1388817 3.442488-3.4169455v-2.5500132c-.390946.6970016-.960537 1.2622355-1.708473 1.6957017-.748086.4336164-1.589626.6502744-2.524621.6502744-1.121904 0-2.120754-.2677424-2.99625-.8032271-.875497-.5354848-1.55552-1.2919847-2.039921-2.2694997-.48455-.9775151-.72675-2.095362-.72675-3.3532403 0-1.2580286.2422-2.37587548.72675-3.35339054.484401-.97751507 1.164424-1.73401497 2.039921-2.26949971.875496-.53548473 1.874346-.8032271 2.99625-.8032271.952123 0 1.797871.19967991 2.537392.59918999.739522.39951008 1.304756.95633006 1.695702 1.67030971v-1.93805208zm-4.06722 8.97613053c.603548-.6970016.905246-1.6575386.905246-2.8814608 0-1.2240724-.297491-2.18460946-.892474-2.88161106s-1.42811-1.04542727-2.499079-1.04542727c-1.053992 0-1.882761.34842567-2.486308 1.04542727-.603397.6970016-.905246 1.65753866-.905246 2.88161106 0 1.2239222.301849 2.1844592.905246 2.8814608.603547.6970016 1.432316 1.0455775 2.486308 1.0455775 1.053991 0 1.88276-.3485759 2.486307-1.0455775z"/><path d="m185.135284 12.11707h-8.874112c.068062 1.3770252.412281 2.3927033 1.032806 3.0473349.620525.6544813 1.542749.981722 2.766821.981722 1.410982 0 2.719944-.4590084 3.927039-1.3770251l.918016 2.1930233c-.612111.4929645-1.364254.8882676-2.256878 1.1857591-.892475.2974915-1.797721.4462373-2.715737.4462373-2.107983 0-3.765522-.594983-4.972466-1.7849491-1.207094-1.1901163-1.810491-2.8221128-1.810491-4.8961395 0-1.3089627.263385-2.47353681.790456-3.49357213.52692-1.01988507 1.266442-1.81469827 2.218565-2.38413911.951973-.56959109 2.031507-.85431151 3.238451-.85431151 1.767971 0 3.166331.57379804 4.194781 1.72124387 1.028599 1.14759607 1.542749 2.72430113 1.542749 4.73026538zm-7.739287-3.88872499c-.535485.50137838-.879704 1.22812913-1.032807 2.18025229h5.992651c-.102018-.96910121-.395303-1.70005891-.879853-2.1930234-.484401-.49311473-1.151653-.73952185-2.001758-.73952185-.849954 0-1.542749.25076432-2.078233.75229296z"/></g><path d="m367.838539 347.854154h94.040308" stroke="#000" stroke-width="2.538462"/><path d="m461.878846 347.854154h93.484616" stroke="#000" stroke-width="2.538462"/><path d="m.33230769 1.70030769 96.35538461-1.24846154 96.0461537 1.24846154" stroke="#000" stroke-width="2.538462" transform="translate(695.209615 346.153846)"/><path d="m.05446154.45184615h95.96584616l96.7416923 1.24846154" stroke="#000" stroke-width="2.538462" transform="translate(36.132692 346.153846)"/></g></svg>
index edb03839e32d88c5bdb5a5b400c0d75bd82259fa,0000000000000000000000000000000000000000..431c32c523cd74a34d06a1bc88c8e357c07ba5c6
mode 100644,000000..100644
--- /dev/null
@@@ -1,82 -1,0 +1,75 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-07-05
 +---
 +title: Hugo's Lookup Order
 +linktitle: Template Lookup Order
 +description: Hugo searches for the layout to use for a given page in a well defined order, starting from the most specific.
-     parent: "templates"
 +categories: [templates,fundamentals]
 +keywords: [templates]
 +menu:
 +  docs:
- sections_weight: 15
- draft: false
- aliases: [/templates/lookup/]
- toc: true
++    parent: templates
 +    weight: 15
 +  quicklinks:
 +weight: 15
 +---
 +
 +## Hugo Layouts Lookup Rules
 +
 +Hugo takes the parameters listed below into consideration when choosing a layout for a given page. They are listed in a priority order. This should feel natural, but look at the table below for concrete examples of the different parameter variations.
 +
 +
 +Kind
 +: The page `Kind` (the home page is one). See the example tables below per kind. This also determines if it is a **single page** (i.e. a regular content page. We then look for a template in `_default/single.html` for HTML) or a **list page** (section listings, home page, taxonomy lists, taxonomy terms. We then look for a template in `_default/list.html` for HTML).
 +
 +Layout
 +: Can be set in page front matter.
 +
 +Output Format
 +: See [Custom Output Formats](/templates/output-formats). An output format has both a `name` (e.g. `rss`, `amp`, `html`) and a `suffix` (e.g. `xml`, `html`). We prefer matches with both (e.g. `index.amp.html`, but look for less specific templates.
 +
 +Note that if the output format's Media Type has more than one suffix defined, only the first is considered.
 +
 +Language
 +: We will consider a language code in the template name. If the site language is `fr`, `index.fr.amp.html` will win over `index.amp.html`, but `index.amp.html` will be chosen before `index.fr.html`.
 +
 +Type
 +: Is value of `type` if set in front matter, else it is the name of the root section (e.g. "blog"). It will always have a value, so if not set, the value is "page".
 +
 +Section
 +: Is relevant for `section`, `taxonomy` and `term` types.
 +
 +{{% note %}}
 +**Tip:** The examples below look long and complex. That is the flexibility talking. Most Hugo sites contain just a handful of templates:
 +
 +```bash
 +├── _default
 +│   ├── baseof.html
 +│   ├── list.html
 +│   └── single.html
 +└── index.html
 +```
 +{{% /note %}}
 +
 +
 +## Hugo Layouts Lookup Rules With Theme
 +
 +In Hugo, layouts can live in either the project's or the themes' layout folders, and the most specific layout will be chosen. Hugo will interleave the lookups listed below, finding the most specific one either in the project or themes.
 +
 +## Examples: Layout Lookup for Regular Pages
 +
 +{{< datatable-filtered "output" "layouts" "Kind == page" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}}
 +
 +## Examples: Layout Lookup for Home Page
 +
 +{{< datatable-filtered "output" "layouts" "Kind == home" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}}
 +
 +## Examples: Layout Lookup for Section Pages
 +
 +{{< datatable-filtered "output" "layouts" "Kind == section" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}}
 +
 +## Examples: Layout Lookup for Taxonomy Pages
 +
 +{{< datatable-filtered "output" "layouts" "Kind == taxonomy" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}}
 +
 +## Examples: Layout Lookup for Term Pages
 +
 +{{< datatable-filtered "output" "layouts" "Kind == term" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}}
index bdf89c2e5c5d8e87b06e809d90820f2f98d84a7b,0000000000000000000000000000000000000000..b858ebd21d50a89cee7a0f564004ff494c07de8e
mode 100644,000000..100644
--- /dev/null
@@@ -1,183 -1,0 +1,126 @@@
- linktitle: Menu Templates
- description: Menus are a powerful but simple feature for content management but can be easily manipulated in your templates to meet your design needs.
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: Menu Templates
-     title: "how to use menus in templates"
-     parent: "templates"
++description: Use menu variables and methods in your templates to render a menu.
 +categories: [templates]
 +keywords: [lists,sections,menus]
 +menu:
 +  docs:
- sections_weight: 130
- draft: false
++    parent: templates
 +    weight: 130
++toc: true
 +weight: 130
- toc: false
 +aliases: [/templates/menus/]
- Hugo makes no assumptions about how your rendered HTML will be
- structured. Instead, it provides all the functions you will need to
- build your menu however you want.
 +---
 +
- The following is an example:
++## Overview
 +
- {{< code file="layouts/partials/sidebar.html" download="sidebar.html" >}}
- <!-- sidebar start -->
- <aside>
-     <ul>
-         {{ $currentPage := . }}
-         {{ range .Site.Menus.main }}
-             {{ if .HasChildren }}
-                 <li class="{{ if $currentPage.HasMenuCurrent "main" . }}active{{ end }}">
-                     <a href="#">
-                         {{ .Pre }}
-                         <span>{{ .Name }}</span>
-                     </a>
-                 </li>
-                 <ul class="sub-menu">
-                     {{ range .Children }}
-                         <li class="{{ if $currentPage.IsMenuCurrent "main" . }}active{{ end }}">
-                             <a href="{{ .URL }}">{{ .Name }}</a>
-                         </li>
-                     {{ end }}
-                 </ul>
-             {{ else }}
-                 <li>
-                     <a href="{{ .URL }}">
-                         {{ .Pre }}
-                         <span>{{ .Name }}</span>
-                     </a>
-                 </li>
-             {{ end }}
-         {{ end }}
-         <li>
-             <a href="#" target="_blank">Hardcoded Link 1</a>
-         </li>
-         <li>
-             <a href="#" target="_blank">Hardcoded Link 2</a>
-         </li>
-     </ul>
- </aside>
- {{< /code >}}
++After [defining menu entries], use [menu variables and methods] to render a menu.
 +
- {{% note "`absLangURL` and `relLangURL`" %}}
- Use the [`absLangURL`](/functions/abslangurl) or [`relLangURL`](/functions/rellangurl) functions if your theme makes use of the [multilingual feature](/content-management/multilingual/). In contrast to `absURL` and `relURL`, these two functions add the correct language prefix to the url.
- {{% /note %}}
++Three factors determine how to render a menu:
 +
- ## Section Menu for Lazy Bloggers
++1. The method used to define the menu entries: [automatic], [in front matter], or [in site configuration]
++1. The menu structure: flat or nested
++1. The method used to [localize the menu entries]: site configuration or translation tables
 +
- To enable this menu, configure `sectionPagesMenu` in your site `config`:
++The example below handles every combination.
 +
- ```yml
- sectionPagesMenu = "main"
- ```
++## Example
 +
- The menu name can be anything, but take a note of what it is.
++This partial template recursively "walks" a menu structure, rendering a localized, accessible nested list.
 +
- This will create a menu with all the sections as menu items and all the sections' pages as "shadow-members". Ensure that all first level directories that you would like to show up on this menu are [Branch Bundles](https://gohugo.io/content-management/sections/). Leaf Bundles do not form sections.
++{{< code file="layouts/partials/menu.html" >}}
++{{- $page := .page }}
++{{- $menuID := .menuID }}
 +
- The _shadow_ implies that the pages isn't represented by a menu-item themselves, but this enables you to create a top-level menu like this:
++{{- with index site.Menus $menuID }}
++  <nav>
++    <ul>
++      {{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }}
++    </ul>
++  </nav>
++{{- end }}
++
++{{- define "partials/inline/menu/walk.html" }}
++  {{- $page := .page }}
++  {{- range .menuEntries }}
++    {{- $attrs := dict "href" .URL }}
++    {{- if $page.IsMenuCurrent .Menu . }}
++      {{- $attrs = merge $attrs (dict "class" "active" "aria-current" "page") }}
++    {{- else if $page.HasMenuCurrent .Menu .}}
++      {{- $attrs = merge $attrs (dict "class" "ancestor" "aria-current" "true") }}
++    {{- end }}
++    <li>
++      <a
++        {{- range $k, $v := $attrs }}
++          {{- with $v }}
++            {{- printf " %s=%q" $k $v | safeHTMLAttr }}
++          {{- end }}
++        {{- end -}}
++      >{{ or (T .Identifier) .Name | safeHTML }}</a>
++      {{- with .Children }}
++        <ul>
++          {{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }}
++        </ul>
++      {{- end }}
++    </li>
++  {{- end }}
++{{- end }}
++{{< /code >}}
 +
- ```go-html-template
- <nav class="sidebar-nav">
-     {{ $currentPage := . }}
-     {{ range .Site.Menus.main }}
-     <a class="sidebar-nav-item{{if or ($currentPage.IsMenuCurrent "main" .) ($currentPage.HasMenuCurrent "main" .) }} active{{end}}" href="{{ .URL }}" title="{{ .Title }}">{{ .Name }}</a>
-     {{ end }}
- </nav>
- ```
++Call the partial above, passing a menu ID and the current page in context.
 +
- In the above, the menu item is marked as active if on the current section's list page or on a page in that section.
++{{< code file="layouts/_default/single.html" >}}
++{{ partial "menu.html" (dict "menuID" "main" "page" .) }}
++{{ partial "menu.html" (dict "menuID" "footer" "page" .) }}
++{{< /code >}}
 +
- ## Site Config menus
++## Page references
 +
- The above is all that's needed. But if you want custom menu items, e.g. changing weight, name, or link title attribute, you can define them manually in the site config file:
++Regardless of how you [define menu entries], an entry associated with a page has access to page variables and methods.
 +
- {{< code-toggle file="config" >}}
- [[menu.main]]
-     name = "This is the blog section"
-     title = "blog section"
-     weight = -110
-     identifier = "blog"
-     url = "/blog/"
- {{</ code-toggle >}}
++This simplistic example renders a page parameter named `version` next to each entry's `name`. Code defensively using `with` or `if` to handle entries where (a) the entry points to an external resource, or (b) the `version` parameter is not defined.
 +
- {{% note %}}
- The `identifier` *must* match the section name.
- {{% /note %}}
++{{< code file="layouts/_default/single.html" >}}
++{{- range site.Menus.main }}
++  <a href="{{ .URL }}">
++    {{ .Name }}
++    {{- with .Page }}
++      {{- with .Params.version -}}
++        ({{ . }})
++      {{- end }}
++    {{- end }}
++  </a>
++{{- end }}
++{{< /code >}}
 +
- ## Menu Entries from the Page's front matter
++## Menu entry parameters
 +
- It's also possible to create menu entries from the page (i.e. the `.md`-file).
++When you define menu entries [in site configuration] or [in front matter], you can include a `params` key as shown in these examples:
 +
- Here is a `yaml` example:
++- [Menu entry defined in site configuration]
++- [Menu entry defined in front matter]
 +
- ```yml
- ---
- title: Menu Templates
- linktitle: Menu Templates
- menu:
-   docs:
-     title: "how to use menus in templates"
-     parent: "templates"
-     weight: 130
- ---
- ...
- ```
- {{% note %}}
- You can define more than one menu. It also doesn't have to be a complex value,
- `menu` can also be a string, an array of strings, or an array of complex values
- like in the example above.
- {{% /note %}}
- ### Using .Page in Menus
- If you use the front matter method of defining menu entries, you'll get access to the `.Page` variable.
- This allows to use every variable that's reachable from the [page variable](/variables/page/).
- This variable is only set when the menu entry is defined in the page's front matter.
- Menu entries from the site config don't know anything about `.Page`.
- That's why you have to use the go template's `with` keyword or something similar in your templating language.
- Here's an example:
- ```go-html-template
- <nav class="sidebar-nav">
-   {{ range .Site.Menus.main }}
-     <a href="{{ .URL }}" title="{{ .Title }}">
-       {{- .Name -}}
-       {{- with .Page -}}
-         <span class="date">
-         {{- dateFormat " (2006-01-02)" .Date -}}
-         </span>
-       {{- end -}}
-     </a>
-   {{ end }}
- </nav>
- ```
- ## Using .Params in Menus
- User-defined content on menu items are accessible via `.Params`.
- Here's an example:
- ```go-html-template
- <nav class="sidebar-nav">
-   {{ range .Site.Menus.main }}
-     <a href="{{ .URL }}" title="{{ .Title }}" class="{{ with .Params.class }}{{ . }}{{ end }}">
-       {{- .Name -}}
-     </a>
-   {{ end }}
- </nav>
- ```
- {{% note %}}
- With Menu-level .Params they can easily exist on one menu item but not another. It's recommended to access them gracefully using the [with function](/functions/with).
- {{% /note %}}
++This simplistic example renders a `class` attribute for each anchor element. Code defensively using `with` or `if` to handle entries where `params.class` is not defined.
 +
++{{< code file="layouts/partials/menu.html" >}}
++{{- range site.Menus.main }}
++  <a {{ with .Params.class -}} class="{{ . }}" {{ end -}} href="{{ .URL }}">
++    {{ .Name }}
++  </a>
++{{- end }}
++{{< /code >}}
++
++## Localize
++
++Hugo provides two methods to localize your menu entries. See [multilingual].
++
++[automatic]: /content-management/menus/#define-automatically
++[define menu entries]: /content-management/menus/
++[defining menu entries]: /content-management/menus/
++[in front matter]: /content-management/menus/#define-in-front-matter
++[in site configuration]: /content-management/menus/#define-in-site-configuration
++[localize the menu entries]: /content-management/multilingual/#menus
++[menu entry defined in front matter]: /content-management/menus/#example-front-matter
++[menu entry defined in site configuration]: /content-management/menus/#example-site-configuration
++[menu variables and methods]: /variables/menus/
++[multilingual]: /content-management/multilingual/#menus
index 0498c7e64fff137640c89ffeb51cf9f811a15a6c,0000000000000000000000000000000000000000..f8448b0973843420c135ebc59d76f1028b7098a5
mode 100644,000000..100644
--- /dev/null
@@@ -1,257 -1,0 +1,249 @@@
- linktitle: Custom Output Formats
 +---
 +title: Custom Output Formats
- date: 2017-03-22
- publishdate: 2017-03-22
- lastmod: 2019-12-11
 +description: Hugo can output content in multiple formats, including calendar events, e-book formats, Google AMP, and JSON search indexes, or any custom text format.
-     parent: "templates"
 +categories: [templates]
 +keywords: ["amp", "outputs", "rss"]
 +menu:
 +  docs:
- sections_weight: 18
- draft: false
++    parent: templates
 +    weight: 18
 +weight: 18
- ```toml
 +aliases: [/templates/outputs/,/extras/output-formats/,/content-management/custom-outputs/]
 +toc: true
 +---
 +
 +This page describes how to properly configure your site with the media types and output formats, as well as where to create your templates for your custom outputs.
 +
 +## Media Types
 +
 +A [media type] (also known as _MIME type_ and _content type_) is a two-part identifier for file formats and format contents transmitted on the internet.
 +
 +This is the full set of built-in media types in Hugo:
 +
 +{{< datatable "media" "types" "type" "suffixes" >}}
 +
 +**Note:**
 +
 +- It is possible to add custom media types or change the defaults; e.g., if you want to change the suffix for `text/html` to `asp`.
 +- `Suffixes` are the values that will be used for URLs and filenames for that media type in Hugo.
 +- The `Type` is the identifier that must be used when defining new/custom `Output Formats` (see below).
 +- The full set of media types will be registered in Hugo's built-in development server to make sure they are recognized by the browser.
 +
 +To add or modify a media type, define it in a `mediaTypes` section in your [site configuration][config], either for all sites or for a given language.
 +
 +{{< code-toggle file="config" >}}
 +[mediaTypes]
 +  [mediaTypes."text/enriched"]
 +  suffixes = ["enr"]
 +  [mediaTypes."text/html"]
 +  suffixes = ["asp"]
 +{{</ code-toggle >}}
 +
 +The above example adds one new media type, `text/enriched`, and changes the suffix for the built-in `text/html` media type.
 +
 +**Note:** these media types are configured for **your output formats**. If you want to redefine one of Hugo's default output formats (e.g. `HTML`), you also need to redefine the media type. So, if you want to change the suffix of the `HTML` output format from `html` (default) to `htm`:
 +
- [mediaTypes."text/html"]
- suffixes = ["htm"]
++{{< code-toggle file="config" >}}
 +[mediaTypes]
- [outputFormats.HTML]
- mediaType = "text/html"
- ```
++  [mediaTypes."text/html"]
++    suffixes = ["htm"]
 +
 +# Redefine HTML to update its media type.
 +[outputFormats]
- The following is an example of `YAML` front matter in a content file that defines output formats for the rendered `Page`:
++  [outputFormats.HTML]
++    mediaType = "text/html"
++{{</ code-toggle >}}
 +
 +**Note** that for the above to work, you also need to add an `outputs` definition in your site config.
 +
 +## Output Format Definitions
 +
 +Given a media type and some additional configuration, you get an **Output Format**.
 +
 +This is the full set of Hugo's built-in output formats:
 +
 +{{< datatable "output" "formats" "name" "mediaType" "path" "baseName" "rel" "protocol" "isPlainText" "isHTML" "noUgly" "permalinkable" >}}
 +
 +- A page can be output in as many output formats as you want, and you can have an infinite amount of output formats defined **as long as they resolve to a unique path on the file system**. In the above table, the best example of this is `AMP` vs. `HTML`. `AMP` has the value `amp` for `Path` so it doesn't overwrite the `HTML` version; e.g. we can now have both `/index.html` and `/amp/index.html`.
 +- The `MediaType` must match the `Type` of an already defined media type.
 +- You can define new output formats or redefine built-in output formats; e.g., if you want to put `AMP` pages in a different path.
 +
 +To add or modify an output format, define it in an `outputFormats` section in your site's [configuration file](/getting-started/configuration/), either for all sites or for a given language.
 +
 +{{< code-toggle file="config" >}}
 +[outputFormats.MyEnrichedFormat]
 +mediaType = "text/enriched"
 +baseName = "myindex"
 +isPlainText = true
 +protocol = "bep://"
 +{{</ code-toggle >}}
 +
 +The above example is fictional, but if used for the homepage on a site with `baseURL` `https://example.org`, it will produce a plain text homepage with the URL `bep://example.org/myindex.enr`.
 +
 +### Configure Output Formats
 +
 +The following is the full list of configuration options for output formats and their default values:
 +
 +`name`
 +: the output format identifier. This is used to define what output format(s) you want for your pages.
 +
 +`mediaType`
 +: this must match the `Type` of a defined media type.
 +
 +`path`
 +: sub path to save the output files.
 +
 +`baseName`
 +: the base filename for the list filenames (homepage, etc.). **Default:** `index`.
 +
 +`rel`
 +: can be used to create `rel` values in `link` tags. **Default:** `alternate`.
 +
 +`protocol`
 +: will replace the "http://" or "https://" in your `baseURL` for this output format.
 +
 +`isPlainText`
 +: use Go's plain text templates parser for the templates. **Default:** `false`.
 +
 +`isHTML`
 +: used in situations only relevant for `HTML`-type formats; e.g., page aliases. **Default:** `false`.
 +
 +`noUgly`
 +: used to turn off ugly URLs If `uglyURLs` is set to `true` in your site. **Default:** `false`.
 +
 +`notAlternative`
 +: enable if it doesn't make sense to include this format in an `AlternativeOutputFormats` format listing on `Page` (e.g., with `CSS`). Note that we use the term _alternative_ and not _alternate_ here, as it does not necessarily replace the other format. **Default:** `false`.
 +
 +`permalinkable`
 +: make `.Permalink` and `.RelPermalink` return the rendering Output Format rather than main ([see below](#link-to-output-formats)). This is enabled by default for `HTML` and `AMP`. **Default:** `false`.
 +
 +`weight`
 +: Setting this to a non-zero value will be used as the first sort criteria.
 +
 +## Output Formats for Pages
 +
 +A `Page` in Hugo can be rendered to multiple _output formats_ on the file
 +system.
 +
 +### Default Output Formats
 +
 +Every `Page` has a [`Kind`][page_kinds] attribute, and the default Output
 +Formats are set based on that.
 +
 +| Kind       | Default Output Formats |
 +| ---------- | ---------------------- |
 +| `page`     | HTML                   |
 +| `home`     | HTML, RSS              |
 +| `section`  | HTML, RSS              |
 +| `taxonomy` | HTML, RSS              |
 +| `term`     | HTML, RSS              |
 +
 +### Customizing Output Formats
 +
 +This can be changed by defining an `outputs` list of output formats in either
 +the `Page` front matter or in the site configuration (either for all sites or
 +per language).
 +
 +Example from site config file:
 +
 +{{< code-toggle file="config" >}}
 +[outputs]
 +  home = ["HTML", "AMP", "RSS"]
 +  page = ["HTML"]
 +{{</ code-toggle >}}
 +
 +Note that in the above examples, the _output formats_ for `section`,
 +`taxonomy` and `term` will stay at their default value `["HTML", "RSS"]`.
 +
 +{{% page-kinds %}}
 +
 +* The `outputs` definition is per [`Page` `Kind`][page_kinds] (`page`, `home`, `section`, `taxonomy`, or `term`).
 +* The names (e.g. `HTML`, `AMP`) used must match the `Name` of a defined *Output Format*.
 +  * These names are case insensitive.
 +* These can be overridden per `Page` in the front matter of content files.
 +
- ```yaml
- ---
- date: "2016-03-19"
++The following is an example of front matter in a content file that defines output formats for the rendered `Page`:
 +
- ---
- ```
++{{< code-toggle file="content/example.md" fm=true copy=false >}}
++title: Example
 +outputs:
 +- html
 +- amp
 +- json
- [lookup order]: /templates/lookup/
++{{< /code-toggle >}}
 +
 +## List Output formats
 +
 +Each `Page` has both an `.OutputFormats` (all formats, including the current) and an `.AlternativeOutputFormats` variable, the latter of which is useful for creating a `link rel` list in your site's `<head>`:
 +
 +```go-html-template
 +{{ range .AlternativeOutputFormats -}}
 +<link rel="{{ .Rel }}" type="{{ .MediaType.Type }}" href="{{ .Permalink | safeURL }}">
 +{{ end -}}
 +```
 +
 +## Link to Output Formats
 +
 +`.Permalink` and `.RelPermalink` on `Page` will return the first output format defined for that page (usually `HTML` if nothing else is defined). This is regardless of the template file they are being called from.
 +
 +__from `single.json.json`:__
 +```go-html-template
 +{{ .RelPermalink }} > /that-page/
 +{{ with  .OutputFormats.Get "json" -}}
 +{{ .RelPermalink }} > /that-page/index.json
 +{{- end }}
 +```
 +
 +In order for them to return the output format of the current template file instead, the given output format should have its `permalinkable` setting set to true.
 +
 +**Same template file as above with json output format's `permalinkable` set to true:**
 +
 +```go-html-template
 +{{ .RelPermalink }} > /that-page/index.json
 +{{ with  .OutputFormats.Get "html" -}}
 +{{ .RelPermalink }} > /that-page/
 +{{- end }}
 +```
 +
 +From content files, you can use the [`ref` or `relref` shortcodes](/content-management/shortcodes/#ref-and-relref):
 +
 +```go-html-template
 +[Neat]({{</* ref "blog/neat.md" "amp" */>}})
 +[Who]({{</* relref "about.md#who" "amp" */>}})
 +```
 +
 +## Templates for Your Output Formats
 +
 +A new output format needs a corresponding template in order to render anything useful.
 +
 +{{% note %}}
 +The key distinction for Hugo versions 0.20 and newer is that Hugo looks at an output format's `Name` and MediaType's `Suffixes` when choosing the template used to render a given `Page`.
 +{{% /note %}}
 +
 +The following table shows examples of different output formats, the suffix used, and Hugo's respective template [lookup order]. All the examples in the table can:
 +
 +* Use a [base template][base].
 +* Include [partial templates][partials]
 +
 +{{< datatable "output" "layouts" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}}
 +
 +Hugo will now also detect the media type and output format of partials, if possible, and use that information to decide if the partial should be parsed as a plain text template or not.
 +
 +Hugo will look for the name given, so you can name it whatever you want. But if you want it treated as plain text, you should use the file suffix and, if needed, the name of the Output Format. The pattern is as follows:
 +
 +```go-html-template
 +[partial name].[OutputFormat].[suffix]
 +```
 +
 +The partial below is a plain text template (Output Format is `CSV`, and since this is the only output format with the suffix `csv`, we don't need to include the Output Format's `Name`):
 +
 +```go-html-template
 +{{ partial "mytextpartial.csv" . }}
 +```
 +
 +[base]: /templates/base/
 +[config]: /getting-started/configuration/
++[lookup order]: /templates/lookup-order/
 +[media type]: https://en.wikipedia.org/wiki/Media_type
 +[partials]: /templates/partials/
 +[page_kinds]: /templates/section-templates/#page-kinds
index bdb10d5bba2f407603f8b73088b0a5c7befbb8e7,0000000000000000000000000000000000000000..5de1f661d01bcc57b9ecda3278e11ff997088102
mode 100644,000000..100644
--- /dev/null
@@@ -1,158 -1,0 +1,155 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
 +---
 +title: Pagination
 +linktitle: Pagination
 +description: Hugo supports pagination for your homepage, section pages, and taxonomies.
-     parent: "templates"
 +categories: [templates]
 +keywords: [lists,sections,pagination]
 +menu:
 +  docs:
- sections_weight: 140
++    parent: templates
 +    weight: 140
 +weight: 140
- {{% warning %}}
 +aliases: [/extras/pagination,/doc/pagination/]
 +toc: true
 +---
 +
 +The real power of Hugo pagination shines when combined with the [`where` function][where] and its SQL-like operators: [`first`], [`last`], and [`after`]. You can even [order the content][lists] the way you've become used to with Hugo.
 +
 +## Configure Pagination
 +
 +Pagination can be configured in your [site configuration][configuration]:
 +
 +`paginate`
 +: default = `10`. This setting can be overridden within the template.
 +
 +`paginatePath`
 +: default = `page`. Allows you to set a different path for your pagination pages.
 +
 +Setting `paginate` to a positive value will split the list pages for the homepage, sections and taxonomies into chunks of that size. But note that the generation of the pagination pages for sections, taxonomies and homepage is *lazy* --- the pages will not be created if not referenced by a `.Paginator` (see below).
 +
 +`paginatePath` is used to adapt the `URL` to the pages in the paginator (the default setting will produce URLs on the form `/page/1/`.
 +
 +## List Paginator Pages
 +
- {{% /warning %}}
++{{% note %}}
 +`.Paginator` is provided to help you build a pager menu. This feature is currently only supported on homepage and list pages (i.e., taxonomies and section lists).
- {{ range (.Paginate (.Pages.GroupByDate "2006")).PageGroups  }}
++{{% /note %}}
 +
 +There are two ways to configure and use a `.Paginator`:
 +
 +1. The simplest way is just to call `.Paginator.Pages` from a template. It will contain the pages for *that page*.
 +2. Select another set of pages with the available template functions and ordering options, and pass the slice to `.Paginate`, e.g.
 +  * `{{ range (.Paginate ( first 50 .Pages.ByTitle )).Pages }}` or
 +  * `{{ range (.Paginate .RegularPagesRecursive).Pages }}`.
 +
 +For a given **Page**, it's one of the options above. The `.Paginator` is static and cannot change once created.
 +
 +If you call `.Paginator` or `.Paginate` multiple times on the same page, you should ensure all the calls are identical. Once *either* `.Paginator` or `.Paginate` is called while generating a page, its result is cached, and any subsequent similar call will reuse the cached result. This means that any such calls which do not match the first one will not behave as written.
 +
 +(Remember that function arguments are eagerly evaluated, so a call like `$paginator := cond x .Paginator (.Paginate .RegularPagesRecursive)` is an example of what you should *not* do. Use `if`/`else` instead to ensure exactly one evaluation.)
 +
 +The global page size setting (`Paginate`) can be overridden by providing a positive integer as the last argument. The examples below will give five items per page:
 +
 +* `{{ range (.Paginator 5).Pages }}`
 +* `{{ $paginator := .Paginate (where .Pages "Type" "posts") 5 }}`
 +
 +It is also possible to use the `GroupBy` functions in combination with pagination:
 +
 +```go-html-template
- {{% note "When to Create `.Paginator`" %}}
++{{ range (.Paginate (.Pages.GroupByDate "2006")).PageGroups }}
 +```
 +
 +## Build the navigation
 +
 +The `.Paginator` contains enough information to build a paginator interface.
 +
 +The easiest way to add this to your pages is to include the built-in template (with `Bootstrap`-compatible styles):
 +
 +```go-html-template
 +{{ template "_internal/pagination.html" . }}
 +```
 +
++{{% note %}}
 +If you use any filters or ordering functions to create your `.Paginator` *and* you want the navigation buttons to be shown before the page listing, you must create the `.Paginator` before it's used.
 +{{% /note %}}
 +
 +The following example shows how to create `.Paginator` before its used:
 +
 +```go-html-template
 +{{ $paginator := .Paginate (where .Pages "Type" "posts") }}
 +{{ template "_internal/pagination.html" . }}
 +{{ range $paginator.Pages }}
 +   {{ .Title }}
 +{{ end }}
 +```
 +
 +Without the `where` filter, the above example is even simpler:
 +
 +```go-html-template
 +{{ template "_internal/pagination.html" . }}
 +{{ range .Paginator.Pages }}
 +   {{ .Title }}
 +{{ end }}
 +```
 +
 +If you want to build custom navigation, you can do so using the `.Paginator` object, which includes the following properties:
 +
 +`PageNumber`
 +: The current page's number in the pager sequence
 +
 +`URL`
 +: The relative URL to the current pager
 +
 +`Pages`
 +: The pages in the current pager
 +
 +`NumberOfElements`
 +: The number of elements on this page
 +
 +`HasPrev`
 +: Whether there are page(s) before the current
 +
 +`Prev`
 +: The pager for the previous page
 +
 +`HasNext`
 +: Whether there are page(s) after the current
 +
 +`Next`
 +: The pager for the next page
 +
 +`First`
 +: The pager for the first page
 +
 +`Last`
 +: The pager for the last page
 +
 +`Pagers`
 +: A list of pagers that can be used to build a pagination menu
 +
 +`PageSize`
 +: Size of each pager
 +
 +`TotalPages`
 +: The number of pages in the paginator
 +
 +`TotalNumberOfElements`
 +: The number of elements on all pages in this paginator
 +
 +## Additional information
 +
 +The pages are built on the following form (`BLANK` means no value):
 +
 +```txt
 +[SECTION/TAXONOMY/BLANK]/index.html
 +[SECTION/TAXONOMY/BLANK]/page/1/index.html => redirect to  [SECTION/TAXONOMY/BLANK]/index.html
 +[SECTION/TAXONOMY/BLANK]/page/2/index.html
 +....
 +```
 +
 +[`first`]: /functions/first/
 +[`last`]: /functions/last/
 +[`after`]: /functions/after/
 +[configuration]: /getting-started/configuration/
 +[lists]: /templates/lists/
 +[where]: /functions/where/
index 1899f87d5e1cc78dc421b1f0e944a3b19a2ed903,0000000000000000000000000000000000000000..57a7acf05a1d44e5a1c8dfc2eabbcdbecb4fe06e
mode 100644,000000..100644
--- /dev/null
@@@ -1,206 -1,0 +1,200 @@@
- linktitle: Partial Templates
 +---
 +title: Partial Templates
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Partials are smaller, context-aware components in your list and page templates that can be used economically to keep your templating DRY.
-     parent: "templates"
 +categories: [templates]
 +keywords: [lists,sections,partials]
 +menu:
 +  docs:
- sections_weight: 90
- draft: false
++    parent: templates
 +    weight: 90
 +weight: 90
- {{< code file="layouts/partials/header.html" download="header.html" >}}
 +aliases: [/templates/partial/,/layout/chrome/,/extras/analytics/]
 +toc: true
 +---
 +
 +{{< youtube pjS4pOLyB7c >}}
 +
 +## Partial Template Lookup Order
 +
 +Partial templates---like [single page templates][singletemps] and [list page templates][listtemps]---have a specific [lookup order]. However, partials are simpler in that Hugo will only check in two places:
 +
 +1. `layouts/partials/*<PARTIALNAME>.html`
 +2. `themes/<THEME>/layouts/partials/*<PARTIALNAME>.html`
 +
 +This allows a theme's end user to copy a partial's contents into a file of the same name for [further customization][customize].
 +
 +## Use Partials in your Templates
 +
 +All partials for your Hugo project are located in a single `layouts/partials` directory. For better organization, you can create multiple subdirectories within `partials` as well:
 +
 +```txt
 +layouts/
 +└── partials/
 +    ├── footer/
 +    │   ├── scripts.html
 +    │   └── site-footer.html
 +    ├── head/
 +    │   ├── favicons.html
 +    │   ├── metadata.html
 +    │   ├── prerender.html
 +    │   └── twitter.html
 +    └── header/
 +        ├── site-header.html
 +        └── site-nav.html
 +```
 +
 +All partials are called within your templates using the following pattern:
 +
 +```go-html-template
 +{{ partial "<PATH>/<PARTIAL>.html" . }}
 +```
 +
 +{{% note %}}
 +One of the most common mistakes with new Hugo users is failing to pass a context to the partial call. In the pattern above, note how "the dot" (`.`) is required as the second argument to give the partial context. You can read more about "the dot" in the [Hugo templating introduction](/templates/introduction/).
 +{{% /note %}}
 +
 +{{% note %}}
 +`<PARTIAL>` including `baseof` is reserved. ([#5373](https://github.com/gohugoio/hugo/issues/5373))
 +{{% /note %}}
 +
 +As shown in the above example directory structure, you can nest your directories within `partials` for better source organization. You only need to call the nested partial's path relative to the `partials` directory:
 +
 +```go-html-template
 +{{ partial "header/site-header.html" . }}
 +{{ partial "footer/scripts.html" . }}
 +```
 +
 +### Variable Scoping
 +
 +The second argument in a partial call is the variable being passed down. The above examples are passing the `.`, which tells the template receiving the partial to apply the current [context][context].
 +
 +This means the partial will *only* be able to access those variables. The partial is isolated and *has no access to the outer scope*. From within the partial, `$.Var` is equivalent to `.Var`.
 +
 +## Returning a value from a Partial
 +
 +In addition to outputting markup, partials can be used to return a value of any type. In order to return a value, a partial must include a lone `return` statement *at the end of the partial*.
 +
 +### Example GetFeatured
 +
 +```go-html-template
 +{{/* layouts/partials/GetFeatured.html */}}
 +{{ return first . (where site.RegularPages "Params.featured" true) }}
 +```
 +
 +```go-html-template
 +{{/* layouts/index.html */}}
 +{{ range partial "GetFeatured.html" 5 }}
 +  [...]
 +{{ end }}
 +```
 +
 +### Example GetImage
 +
 +```go-html-template
 +{{/* layouts/partials/GetImage.html */}}
 +{{ $image := false }}
 +{{ with .Params.gallery }}
 +  {{ $image = index . 0 }}
 +{{ end }}
 +{{ with .Params.image }}
 +  {{ $image = . }}
 +{{ end }}
 +{{ return $image }}
 +```
 +
 +```go-html-template
 +{{/* layouts/_default/single.html */}}
 +{{ with partial "GetImage.html" . }}
 +  [...]
 +{{ end }}
 +```
 +
 +{{% note %}}
 +Only one `return` statement is allowed per partial file.
 +{{% /note %}}
 +
 +## Inline Partials
 +
 +You can also define partials inline in the template. But remember that template namespace is global, so you need to make sure that the names are unique to avoid conflicts.
 +
 +```go-html-template
 +Value: {{ partial "my-inline-partial.html" . }}
 +
 +{{ define "partials/my-inline-partial.html" }}
 +{{ $value := 32 }}
 +{{ return $value }}
 +{{ end }}
 +```
 +
 +## Cached Partials
 +
 +The [`partialCached` template function][partialcached] can offer significant performance gains for complex templates that don't need to be re-rendered on every invocation. The simplest usage is as follows:
 +
 +```go-html-template
 +{{ partialCached "footer.html" . }}
 +```
 +
 +You can also pass additional parameters to `partialCached` to create *variants* of the cached partial.
 +
 +For example, you can tell Hugo to only render the partial `footer.html` once per section:
 +
 +```go-html-template
 +{{ partialCached "footer.html" . .Section }}
 +```
 +
 +If you need to pass additional parameters to create unique variants, you can pass as many variant parameters as you need:
 +
 +```go-html-template
 +{{ partialCached "footer.html" . .Params.country .Params.province }}
 +```
 +
 +Note that the variant parameters are not made available to the underlying partial template. They are only use to create a unique cache key.
 +
 +### Example `header.html`
 +
 +The following `header.html` partial template is used for [spf13.com](https://spf13.com/):
 +
- {{< code file="layouts/partials/footer.html" download="footer.html" >}}
++{{< code file="layouts/partials/header.html" >}}
 +<!DOCTYPE html>
 +<html class="no-js" lang="en-US" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#">
 +<head>
 +    <meta charset="utf-8">
 +
 +    {{ partial "meta.html" . }}
 +
 +    <base href="{{ .Site.BaseURL }}">
 +    <title> {{ .Title }} : spf13.com </title>
 +    <link rel="canonical" href="{{ .Permalink }}">
 +    {{ if .RSSLink }}<link href="{{ .RSSLink }}" rel="alternate" type="application/rss+xml" title="{{ .Title }}" />{{ end }}
 +
 +    {{ partial "head_includes.html" . }}
 +</head>
 +{{< /code >}}
 +
 +{{% note %}}
 +The `header.html` example partial was built before the introduction of block templates to Hugo. Read more on [base templates and blocks](/templates/base/) for defining the outer chrome or shell of your master templates (i.e., your site's head, header, and footer). You can even combine blocks and partials for added flexibility.
 +{{% /note %}}
 +
 +### Example `footer.html`
 +
 +The following `footer.html` partial template is used for [spf13.com](https://spf13.com/):
 +
- [context]: /templates/introduction/ "The most easily overlooked concept to understand about Go templating is how the dot always refers to the current context."
- [customize]: /themes/customizing/ "Hugo provides easy means to customize themes as long as users are familiar with Hugo's template lookup order."
- [listtemps]: /templates/lists/ "To effectively leverage Hugo's system, see how Hugo handles list pages, where content for sections, taxonomies, and the homepage are listed and ordered."
- [lookup order]: /templates/lookup-order/ "To keep your templating dry, read the documentation on Hugo's lookup order."
- [partialcached]: /functions/partialcached/ "Use the partial cached function to improve build times in cases where Hugo can cache partials that don't need to be rendered with every page."
- [singletemps]: /templates/single-page-templates/ "The most common form of template in Hugo is the single content template. Read the docs on how to create templates for individual pages."
++{{< code file="layouts/partials/footer.html" >}}
 +<footer>
 +  <div>
 +    <p>
 +    &copy; 2013-14 Steve Francia.
 +    <a href="https://creativecommons.org/licenses/by/3.0/" title="Creative Commons Attribution">Some rights reserved</a>;
 +    please attribute properly and link back.
 +    </p>
 +  </div>
 +</footer>
 +{{< /code >}}
 +
++[context]: /templates/introduction/
++[customize]: /hugo-modules/theme-components/
++[listtemps]: /templates/lists/
++[lookup order]: /templates/lookup-order/
++[partialcached]: /functions/partialcached/
++[singletemps]: /templates/single-page-templates/
 +[themes]: /themes/
index 69b34cc9b97e45e93bb1103bdd96a486a306c002,0000000000000000000000000000000000000000..395cb92407ec73c806de869b1e3ab66fd44fdb54
mode 100644,000000..100644
--- /dev/null
@@@ -1,181 -1,0 +1,183 @@@
- date: 2017-03-11
 +---
 +title: "Markdown Render Hooks"
 +linkTitle: "Render Hooks"
 +description: "Render Hooks allow custom templates to override markdown rendering functionality."
-     title: "Markdown Render Hooks"
-     parent: "templates"
 +categories: [templates]
 +keywords: [markdown]
 +toc: true
 +menu:
 +  docs:
- <a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="noopener"{{ end }}>{{ .Text | safeHTML }}</a>
++    parent: templates
 +    weight: 20
 +---
 +
 +Note that this is only supported with the [Goldmark](/getting-started/configuration-markup#goldmark) renderer.
 +
 +You can override certain parts of the default Markdown rendering to HTML by creating templates with base names `render-{kind}` in `layouts/_default/_markup`.
 +
 +You can also create type/section specific hooks in `layouts/[type/section]/_markup`, e.g.: `layouts/blog/_markup`.
 +
 +The hook kinds currently supported are:
 +
 +* `image`
 +* `link`
 +* `heading`
 +* `codeblock`{{< new-in "0.93.0" >}}
 +
 +You can define [Output-Format-](/templates/output-formats) and [language-](/content-management/multilingual/)specific templates if needed. Your `layouts` folder may look like this:
 +
 +```text
 +layouts/
 +└── _default/
 +    └── _markup/
 +        ├── render-codeblock-bash.html
 +        ├── render-codeblock.html
 +        ├── render-heading.html
 +        ├── render-image.html
 +        ├── render-image.rss.xml
 +        └── render-link.html
 +```
 +
 +Some use cases for the above:
 +
 +* Resolve link references using `.GetPage`. This would make links portable as you could translate `./my-post.md` (and similar constructs that would work on GitHub) into `/blog/2019/01/01/my-post/` etc.
 +* Add `target=_blank` to external links.
 +* Resolve and [process](/content-management/image-processing/) images.
 +* Add [header links](https://remysharp.com/2014/08/08/automatic-permalinks-for-blog-posts).
 +
 +## Render Hooks for Headings, Links and Images
 +
++### Context passed to `render-link` and `render-image`
++
 +The `render-link` and `render-image` templates will receive this context:
 +
 +Page
 +: The [Page](/variables/page/) being rendered.
 +
 +Destination
 +: The URL.
 +
 +Title
 +: The title attribute.
 +
 +Text
 +: The rendered (HTML) link text.
 +
 +PlainText
 +: The plain variant of the above.
 +
++### Context passed to `render-heading`
++
 +The `render-heading` template will receive this context:
 +
 +Page
 +: The [Page](/variables/page/) being rendered.
 +
 +Level
 +: The header level (1--6)
 +
 +Anchor
 +: An auto-generated html id unique to the header within the page
 +
 +Text
 +: The rendered (HTML) text.
 +
 +PlainText
 +: The plain variant of the above.
 +
 +Attributes (map)
 +: A map of attributes (e.g. `id`, `class`). Note that this will currently always be empty for links.
 +
 +The `render-image` templates will also receive:
 +
 +IsBlock {{< new-in "0.108.0" >}}
 +: Returns true if this is a standalone image and the config option [markup.goldmark.parser.wrapStandAloneImageWithinParagraph](/getting-started/configuration-markup/#goldmark) is disabled.
 +
 +Ordinal  {{< new-in "0.108.0" >}}
 +: Zero-based ordinal for all the images in the current document.
 +
 +
 +### Link with title Markdown example
 +
 +```md
 +[Text](https://www.gohugo.io "Title")
 +```
 +
 +Here is a code example for how the render-link.html template could look:
 +
 +{{< code file="layouts/_default/_markup/render-link.html" >}}
-   <img src="{{ .Destination | safeURL }}" alt="{{ .Text }}" {{ with .Title}} title="{{ . }}"{{ end }} />
++<a href="{{ .Destination | safeURL }}"{{ with .Title }} title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="noopener"{{ end }}>{{ .Text | safeHTML }}</a>
 +{{< /code >}}
 +
 +### Image Markdown example
 +
 +```md
 +![Text](https://gohugo.io/images/hugo-logo-wide.svg "Title")
 +```
 +
 +Here is a code example for how the render-image.html template could look:
 +
 +{{< code file="layouts/_default/_markup/render-image.html" >}}
 +<p class="md__image">
++  <img src="{{ .Destination | safeURL }}" alt="{{ .Text }}" {{ with .Title }} title="{{ . }}"{{ end }} />
 +</p>
 +{{< /code >}}
 +
 +### Heading link example
 +
 +Given this template file
 +
 +{{< code file="layouts/_default/_markup/render-heading.html" >}}
 +<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }} <a href="#{{ .Anchor | safeURL }}">¶</a></h{{ .Level }}>
 +{{< /code >}}
 +
 +And this markdown
 +
 +```md
 +### Section A
 +```
 +
 +The rendered html will be
 +
 +```html
 +<h3 id="section-a">Section A <a href="#section-a">¶</a></h3>
 +```
 +
 +## Render Hooks for Code Blocks
 +
 +{{< new-in "0.93.0" >}}
 +
 +You can add a hook template for either all code blocks or for a specific type/language (`bash` in the example below):
 +
 +```goat { class="black f7" }
 +layouts
 +└── _default
 +    └── _markup
 +        └── render-codeblock.html
 +        └── render-codeblock-bash.html
 +```
 +
 +The default behavior for these code blocks is to do [Code Highlighting](/content-management/syntax-highlighting/#highlighting-in-code-fences), but since you can pass attributes to these code blocks, they can be used for almost anything. One example would be the built-in [GoAT Diagrams](/content-management/diagrams/#goat-diagrams-ascii) or this [Mermaid Diagram Code Block Hook](/content-management/diagrams/#mermaid-diagrams) example.
 +
 +The context (the ".") you receive in a code block template contains:
 +
 +Type (string)
 +: The type of code block. This will be the programming language, e.g. `bash`, when doing code highlighting.
 +
 +Attributes (map)
 +: Attributes passed in from Markdown (e.g. `{ attrName1=attrValue1 attrName2="attr Value 2" }`).
 +
 +Options (map)
 +: Chroma highlighting processing options. This will only be filled if `Type` is a known [Chroma Lexer](/content-management/syntax-highlighting/#list-of-chroma-highlighting-languages).
 +
 +Inner (string)
 +: The text between the code fences.
 +
 +Ordinal (integer)
 +: Zero-based ordinal for all code blocks in the current document.
 +
 +Page
 +: The owning `Page`.
 +
 +Position
 +: Useful in error logging as it prints the filename and position (linenumber, column), e.g. `{{ errorf "error in code block: %s" .Position }}`.
index 52a77314b7cf5b9d6ba2287dfc3e6aa6f2608c40,0000000000000000000000000000000000000000..6554d40477b25e89f4c759eb5420ea7bc17d72e0
mode 100644,000000..100644
--- /dev/null
@@@ -1,66 -1,0 +1,60 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: Robots.txt File
 +linktitle: Robots.txt
 +description: Hugo can generate a customized robots.txt in the same way as any other template.
-     parent: "templates"
 +categories: [templates]
 +keywords: [robots,search engines]
 +menu:
 +  docs:
- sections_weight: 165
- draft: false
++    parent: templates
 +    weight: 165
 +weight: 165
- toc: false
 +aliases: [/extras/robots-txt/]
- {{< code file="layouts/robots.txt" download="robots.txt" >}}
 +---
 +
 +To generate a robots.txt file from a template, change the [site configuration][config]:
 +
 +{{< code-toggle file="config">}}
 +enableRobotsTXT = true
 +{{< /code-toggle >}}
 +
 +By default, Hugo generates robots.txt using an [internal template][internal].
 +
 +```text
 +User-agent: *
 +```
 +
 +Search engines that honor the Robots Exclusion Protocol will interpret this as permission to crawl everything on the site.
 +
 +## Robots.txt Template Lookup Order
 +
 +You may overwrite the internal template with a custom template. Hugo selects the template using this lookup order:
 +
 +1. `/layouts/robots.txt`
 +2. `/themes/<THEME>/layouts/robots.txt`
 +
 +## Robots.txt Template Example
 +
++{{< code file="layouts/robots.txt" >}}
 +User-agent: *
 +{{ range .Pages }}
 +Disallow: {{ .RelPermalink }}
 +{{ end }}
 +{{< /code >}}
 +
 +This template creates a robots.txt file with a `Disallow` directive for each page on the site. Search engines that honor the Robots Exclusion Protocol will not crawl any page on the site.
 +
 +{{% note %}}
 +To create a robots.txt file without using a template:
 +
 +1. Set `enableRobotsTXT` to `false` in the [site configuration][config].
 +2. Create a robots.txt file in the `static` directory.
 +
 +Remember that Hugo copies everything in the [static directory][static] to the root of `publishDir` (typically `public`) when you build your site.
 +
 +[config]: /getting-started/configuration/
 +[static]: /getting-started/directory-structure/
 +{{% /note %}}
 +
 +[config]: /getting-started/configuration/
 +[internal]: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/robots.txt
index 28ccafa56e2ad050e6d0458b350226fca82a334e,0000000000000000000000000000000000000000..af2ee2c12a7e828fdbf5cbabe95ed070b2042ae5
mode 100644,000000..100644
--- /dev/null
@@@ -1,92 -1,0 +1,86 @@@
- linktitle: RSS Templates
 +---
 +title: RSS Templates
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Hugo ships with its own RSS 2.0 template that requires almost no configuration, or you can create your own RSS templates.
-     parent: "templates"
 +keywords: [rss, xml, templates]
 +categories: [templates]
 +menu:
 +  docs:
- sections_weight: 150
- draft: false
++    parent: templates
 +    weight: 150
 +weight: 150
- {{% note "Hugo Ships with an RSS Template" %}}
 +toc: true
 +---
 +
 +## RSS Template Lookup Order
 +
 +See [Template Lookup Order](/templates/lookup-order/) for the complete reference.
 +
++{{% note %}}
 +Hugo ships with its own [RSS 2.0 template](#the-embedded-rssxml). The embedded template will be sufficient for most use cases.
 +{{% /note %}}
 +
 +RSS pages are of the type `Page` and have all the [page variables](/variables/page/) available to use in the templates.
 +
 +### Section RSS
 +
 +A [section’s][section] RSS will be rendered at `/<SECTION>/index.xml` (e.g., [https://spf13.com/project/index.xml](https://spf13.com/project/index.xml)).
 +
 +Hugo provides the ability for you to define any RSS type you wish and can have different RSS files for each section and taxonomy.
 +
 +## Lookup Order for RSS Templates
 +
 +The table below shows the RSS template lookup order for the different page kinds. The first listing shows the lookup order when running with a theme (`demoTheme`).
 +
 +{{< datatable-filtered "output" "layouts" "OutputFormat == RSS" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}}
 +
 +## Configure RSS
 +
 +By default, Hugo will create an unlimited number of RSS entries. You can limit the number of articles included in the built-in RSS templates by assigning a numeric value to `rssLimit:` field in your project's [`config` file][config].
 +
 +The following values will also be included in the RSS output if specified:
 +
 +{{< code-toggle file="config" >}}
 +languageCode = "en-us"
 +copyright = "This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License."
 +
 +[author]
 +    name = "My Name Here"
 +{{< /code-toggle >}}
 +
 +## The Embedded rss.xml
 +
 +This is the default RSS template that ships with Hugo:
 +
 +<https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/rss.xml>
 +
 +## Reference your RSS Feed in `<head>`
 +
 +In your `header.html` template, you can specify your RSS feed in your `<head></head>` tag using Hugo's [Output Formats][Output Formats] like this:
 +
 +```go-html-template
 +{{ range .AlternativeOutputFormats -}}
 +    {{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
 +{{ end -}}
 +```
 +
 +If you only want the RSS link, you can query the formats:
 +
 +```go-html-template
 +{{ with .OutputFormats.Get "rss" -}}
 +    {{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
 +{{ end -}}
 +```
 +
 +Either of the two snippets above will generate the below `link` tag on the site homepage for RSS output:
 +
 +```html
 +<link rel="alternate" type="application/rss+xml" href="https://example.com/index.xml" title="Site Title">
 +```
 +
 +_We are assuming `BaseURL` to be `https://example.com/` and `$.Site.Title` to be `"Site Title"` in this example._
 +
 +[config]: /getting-started/configuration/
 +[embedded]: #the-embedded-rss-xml
 +[RSS 2.0]: https://cyber.harvard.edu/rss/rss.html "RSS 2.0 Specification"
 +[section]: /content-management/sections/
 +[Output Formats]: /templates/output-formats/#link-to-output-formats
index 3cb37b111c63085dc58761f04cfd11ff61a1e502,0000000000000000000000000000000000000000..fa27bf4e85bd7cd4870d5548cb912434dd69317f
mode 100644,000000..100644
--- /dev/null
@@@ -1,115 -1,0 +1,110 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: Section Page Templates
 +linktitle: Section Templates
 +description: Templates used for section pages are **lists** and therefore have all the variables and methods available to list pages.
-     parent: "templates"
 +categories: [templates]
 +keywords: [lists,sections,templates]
 +menu:
 +  docs:
- sections_weight: 40
- draft: false
++    parent: templates
 +    weight: 40
 +weight: 40
- {{< code file="layouts/_default/section.html" download="section.html" >}}
 +aliases: [/templates/sections/]
 +toc: true
 +---
 +
 +## Add Content and Front Matter to Section Templates
 +
 +To effectively leverage section page templates, you should first understand Hugo's [content organization](/content-management/organization/) and, specifically, the purpose of `_index.md` for adding content and front matter to section and other list pages.
 +
 +## Section Template Lookup Order
 +
 +See [Template Lookup](/templates/lookup-order/).
 +
 +## Page Kinds
 +
 +Every `Page` in Hugo has a `.Kind` attribute.
 +
 +{{% page-kinds %}}
 +
 +## `.Site.GetPage` with Sections
 +
 +`Kind` can easily be combined with the [`where` function][where] in your templates to create kind-specific lists of content. This method is ideal for creating lists, but there are times where you may want to fetch just the index page of a single section via the section's path.
 +
 +The [`.GetPage` function][getpage] looks up an index page of a given `Kind` and `path`.
 +
 +You can call `.Site.GetPage` with two arguments: `kind` (one of the valid values
 +of `Kind` from above) and `kind value`.
 +
 +Examples:
 +
 +- `{{ .Site.GetPage "section" "posts" }}`
 +- `{{ .Site.GetPage "page" "search" }}`
 +
 +## Example: Creating a Default Section Template
 +
-               <li>{{.Title}}
++{{< code file="layouts/_default/section.html" >}}
 +{{ define "main" }}
 +  <main>
 +      {{ .Content }}
 +          <ul class="contents">
 +          {{ range .Paginator.Pages }}
++              <li>{{ .Title }}
 +                  <div>
 +                    {{ partial "summary.html" . }}
 +                  </div>
 +              </li>
 +          {{ end }}
 +          </ul>
 +      {{ partial "pagination.html" . }}
 +  </main>
 +{{ end }}
 +{{< /code >}}
 +
 +### Example: Using `.Site.GetPage`
 +
 +The `.Site.GetPage` example that follows assumes the following project directory structure:
 +
 +```txt
 +.
 +└── content
 +    ├── blog
 +    │   ├── _index.md # "title: My Hugo Blog" in the front matter
 +    │   ├── post-1.md
 +    │   ├── post-2.md
 +    │   └── post-3.md
 +    └── events #Note there is no _index.md file in "events"
 +        ├── event-1.md
 +        └── event-2.md
 +```
 +
 +`.Site.GetPage` will return `nil` if no `_index.md` page is found. Therefore, if `content/blog/_index.md` does not exist, the template will output the section name:
 +
 +```go-html-template
 +<h1>{{ with .Site.GetPage "section" "blog" }}{{ .Title }}{{ end }}</h1>
 +```
 +
 +Since `blog` has a section index page with front matter at `content/blog/_index.md`, the above code will return the following result:
 +
 +```html
 +<h1>My Hugo Blog</h1>
 +```
 +
 +If we try the same code with the `events` section, however, Hugo will default to the section title because there is no `content/events/_index.md` from which to pull content and front matter:
 +
 +```go-html-template
 +<h1>{{ with .Site.GetPage "section" "events" }}{{ .Title }}{{ end }}</h1>
 +```
 +
 +Which then returns the following:
 +
 +```html
 +<h1>Events</h1>
 +```
 +
 +[contentorg]: /content-management/organization/
 +[getpage]: /functions/getpage/
 +[lists]: /templates/lists/
 +[lookup]: /templates/lookup-order/
 +[where]: /functions/where/
 +[sections]: /content-management/sections/
index 1c9314bb9f34b31f4f0c03d692d06e36b79317fe,0000000000000000000000000000000000000000..80ef9f365790fa2f3e7fdfa56195e40425978b82
mode 100644,000000..100644
--- /dev/null
@@@ -1,416 -1,0 +1,410 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: Create Your Own Shortcodes
 +linktitle: Shortcode Templates
 +description: You can extend Hugo's built-in shortcodes by creating your own using the same templating syntax as that for single and list pages.
-     parent: "templates"
 +categories: [templates]
 +keywords: [shortcodes,templates]
 +menu:
 +  docs:
- sections_weight: 100
- draft: false
- aliases: []
++    parent: templates
 +    weight: 100
 +weight: 100
- To create a shortcode, place an HTML template in the `layouts/shortcodes` directory of your [source organization]. Consider the file name carefully since the shortcode name will mirror that of the file but without the `.html` extension. For example, `layouts/shortcodes/myshortcode.html` will be called with either `{{</* myshortcode /*/>}}` or `{{%/* myshortcode /*/%}}` depending on the type of parameters you choose.
 +toc: true
 +---
 +
 +Shortcodes are a means to consolidate templating into small, reusable snippets that you can embed directly inside your content. In this sense, you can think of shortcodes as the intermediary between [page and list templates][templates] and [basic content files].
 +
 +{{% note %}}
 +Hugo also ships with built-in shortcodes for common use cases. (See [Content Management: Shortcodes](/content-management/shortcodes/).)
 +{{% /note %}}
 +
 +## Create Custom Shortcodes
 +
 +Hugo's built-in shortcodes cover many common, but not all, use cases. Luckily, Hugo provides the ability to easily create custom shortcodes to meet your website's needs.
 +
 +{{< youtube Eu4zSaKOY4A >}}
 +
 +### File Location
 +
- A shortcode with content declared via the `.Inner` variable can also be declared without the content and without the closing by using the self-closing syntax:
++To create a shortcode, place an HTML template in the `layouts/shortcodes` directory of your [source organization]. Consider the file name carefully since the shortcode name will mirror that of the file but without the `.html` extension. For example, `layouts/shortcodes/myshortcode.html` will be called with either `{{</* myshortcode /*/>}}` or `{{%/* myshortcode /*/%}}`.
 +
 +You can organize your shortcodes in subfolders, e.g. in `layouts/shortcodes/boxes`. These shortcodes would then be accessible with their relative path, e.g:
 +
 +```go-html-template
 +{{</* boxes/square */>}}
 +```
 +
 +Note the forward slash.
 +
 +### Shortcode Template Lookup Order
 +
 +Shortcode templates have a simple [lookup order]:
 +
 +1. `/layouts/shortcodes/<SHORTCODE>.html`
 +2. `/themes/<THEME>/layouts/shortcodes/<SHORTCODE>.html`
 +
 +### Positional vs Named Parameters
 +
 +You can create shortcodes using the following types of parameters:
 +
 +* Positional parameters
 +* Named parameters
 +* Positional *or* named parameters (i.e, "flexible")
 +
 +In shortcodes with positional parameters, the order of the parameters is important. If a shortcode has a single required value (e.g., the `youtube` shortcode below), positional parameters work very well and require less typing from content authors.
 +
 +For more complex layouts with multiple or optional parameters, named parameters work best. While less terse, named parameters require less memorization from a content author and can be added in a shortcode declaration in any order.
 +
 +Allowing both types of parameters (i.e., a "flexible" shortcode) is useful for complex layouts where you want to set default values that can be easily overridden by users.
 +
 +### Access Parameters
 +
 +All shortcode parameters can be accessed via the `.Get` method. Whether you pass a key (i.e., string) or a number to the `.Get` method depends on whether you are accessing a named or positional parameter, respectively.
 +
 +To access a parameter by name, use the `.Get` method followed by the named parameter as a quoted string:
 +
 +```go-html-template
 +{{ .Get "class" }}
 +```
 +
 +To access a parameter by position, use the `.Get` followed by a numeric position, keeping in mind that positional parameters are zero-indexed:
 +
 +```go-html-template
 +{{ .Get 0 }}
 +```
 +
 +For the second position, you would just use:
 +
 +```go-html-template
 +{{ .Get 1 }}
 +```
 +
 +`with` is great when the output depends on a parameter being set:
 +
 +```go-html-template
 +{{ with .Get "class" }} class="{{ . }}"{{ end }}
 +```
 +
 +`.Get` can also be used to check if a parameter has been provided. This is
 +most helpful when the condition depends on either of the values, or both:
 +
 +```go-html-template
 +{{ if or (.Get "title") (.Get "alt") }} alt="{{ with .Get "alt" }}{{ . }}{{ else }}{{ .Get "title" }}{{ end }}"{{ end }}
 +```
 +
 +#### `.Inner`
 +
 +If a closing shortcode is used, the `.Inner` variable will be populated with the content between the opening and closing shortcodes. If a closing shortcode is required, you can check the length of `.Inner` as an indicator of its existence.
 +
- {{% warning %}}
++A shortcode with content declared via the `.Inner` variable can also be declared without the content and without the closing tag by using the self-closing syntax:
 +
 +```go-html-template
 +{{</* innershortcode /*/>}}
 +```
 +
- {{% /warning %}}
++{{% note %}}
 +Any shortcode that refers to `.Inner` must be closed or self-closed.
 +
- {{% warning %}}
++{{% /note %}}
 +
 +#### `.Params`
 +
 +The `.Params` variable in shortcodes contains the list parameters passed to shortcode for more complicated use cases. You can also access higher-scoped parameters with the following logic:
 +
 +`$.Params`
 +: these are the parameters passed directly into the shortcode declaration (e.g., a YouTube video ID)
 +
 +`$.Page.Params`
 +: refers to the page's params; the "page" in this case refers to the content file in which the shortcode is declared (e.g., a `shortcode_color` field in a content's front matter could be accessed via `$.Page.Params.shortcode_color`).
 +
 +`$.Page.Site.Params`
 +: refers to global variables as defined in your [site's configuration file][config].
 +
 +#### `.IsNamedParams`
 +
 +The `.IsNamedParams` variable checks whether the shortcode declaration uses named parameters and returns a boolean value.
 +
 +For example, you could create an `image` shortcode that can take either a `src` named parameter or the first positional parameter, depending on the preference of the content's author. Let's assume the `image` shortcode is called as follows:
 +
 +```go-html-template
 +{{</* image src="images/my-image.jpg" */>}}
 +```
 +
 +You could then include the following as part of your shortcode templating:
 +
 +```go-html-template
 +{{ if .IsNamedParams }}
 +<img src="{{ .Get "src" }}" alt="">
 +{{ else }}
 +<img src="{{ .Get 0 }}" alt="">
 +{{ end }}
 +```
 +
 +See the [example Vimeo shortcode][vimeoexample] below for `.IsNamedParams` in action.
 +
- {{% /warning %}}
++{{% note %}}
 +While you can create shortcode templates that accept both positional and named parameters, you *cannot* declare shortcodes in content with a mix of parameter types. Therefore, a shortcode declared like `{{</* image src="images/my-image.jpg" "This is my alt text" */>}}` will return an error.
- {{< code file="youtube-embed.html" copy="false" >}}
++{{% /note %}}
 +
 +You can also use the variable `.Page` to access all the normal [page variables][pagevars].
 +
 +A shortcodes can also be nested. In a nested shortcode, you can access the parent shortcode context with [`.Parent` variable][shortcodesvars]. This can be very useful for inheritance of common shortcode parameters from the root.
 +
 +### Checking for Existence
 +
 +You can check if a specific shortcode is used on a page by calling `.HasShortcode` in that page template, providing the name of the shortcode. This is sometimes useful when you want to include specific scripts or styles in the header that are only used by that shortcode.
 +
 +## Custom Shortcode Examples
 +
 +The following are examples of the different types of shortcodes you can create via shortcode template files in `/layouts/shortcodes`.
 +
 +### Single-word Example: `year`
 +
 +Let's assume you would like to keep mentions of your copyright year current in your content files without having to continually review your Markdown. Your goal is to be able to call the shortcode as follows:
 +
 +```go-html-template
 +{{</* year */>}}
 +```
 +
 +{{< code file="/layouts/shortcodes/year.html" >}}
 +{{ now.Format "2006" }}
 +{{< /code >}}
 +
 +### Single Positional Example: `youtube`
 +
 +Embedded videos are a common addition to Markdown content that can quickly become unsightly. The following is the code used by [Hugo's built-in YouTube shortcode][youtubeshortcode]:
 +
 +```go-html-template
 +{{</* youtube 09jf3ow9jfw */>}}
 +```
 +
 +Would load the template at `/layouts/shortcodes/youtube.html`:
 +
 +{{< code file="/layouts/shortcodes/youtube.html" >}}
 +<div class="embed video-player">
 +<iframe class="youtube-player" type="text/html" width="640" height="385" src="https://www.youtube.com/embed/{{ index .Params 0 }}" allowfullscreen frameborder="0">
 +</iframe>
 +</div>
 +{{< /code >}}
 +
- <figure {{ with .Get "class" }}class="{{.}}"{{ end }}>
-     {{ with .Get "link" }}<a href="{{ . }}">{{ end }}
-         <img src="{{ .Get "src" }}" {{ if or (.Get "alt") (.Get "caption") }}alt="{{ with .Get "alt" }}{{ . }}{{ else }}{{ .Get "caption" }}{{ end }}"{{ end }} />
++{{< code file="youtube-embed.html" copy=false >}}
 +<div class="embed video-player">
 +    <iframe class="youtube-player" type="text/html"
 +        width="640" height="385"
 +        src="https://www.youtube.com/embed/09jf3ow9jfw"
 +        allowfullscreen frameborder="0">
 +    </iframe>
 +</div>
 +{{< /code >}}
 +
 +### Single Named Example: `image`
 +
 +Let's say you want to create your own `img` shortcode rather than use Hugo's built-in [`figure` shortcode][figure]. Your goal is to be able to call the shortcode as follows in your content files:
 +
 +{{< code file="content-image.md" >}}
 +{{</* img src="/media/spf13.jpg" title="Steve Francia" */>}}
 +{{< /code >}}
 +
 +You have created the shortcode at `/layouts/shortcodes/img.html`, which loads the following shortcode template:
 +
 +{{< code file="/layouts/shortcodes/img.html" >}}
 +<!-- image -->
-     <figcaption>{{ if isset .Params "title" }}
++<figure {{ with .Get "class" }}class="{{ . }}"{{ end }}>
++  {{ with .Get "link" }}<a href="{{ . }}">{{ end }}
++    <img src="{{ .Get "src" }}" {{ if or (.Get "alt") (.Get "caption") }}alt="{{ with .Get "alt" }}{{ . }}{{ else }}{{ .Get "caption" }}{{ end }}"{{ end }} />
 +    {{ if .Get "link" }}</a>{{ end }}
 +    {{ if or (or (.Get "title") (.Get "caption")) (.Get "attr") }}
-             {{ .Get "attr" }}
++      <figcaption>{{ if isset .Params "title" }}
 +        <h4>{{ .Get "title" }}</h4>{{ end }}
 +        {{ if or (.Get "caption") (.Get "attr") }}<p>
 +        {{ .Get "caption" }}
 +        {{ with .Get "attrlink" }}<a href="{{ . }}"> {{ end }}
-     </figcaption>
-     {{ end }}
++          {{ .Get "attr" }}
 +        {{ if .Get "attrlink" }}</a> {{ end }}
 +        </p> {{ end }}
- {{< code file="img-output.html" copy="false" >}}
++      </figcaption>
++  {{ end }}
 +</figure>
 +<!-- image -->
 +{{< /code >}}
 +
 +Would be rendered as:
 +
-     <img src="/media/spf13.jpg"  />
-     <figcaption>
-         <h4>Steve Francia</h4>
-     </figcaption>
++{{< code file="img-output.html" copy=false >}}
 +<figure>
- {{< code file="vimeo-iframes.html" copy="false" >}}
++  <img src="/media/spf13.jpg"  />
++  <figcaption>
++      <h4>Steve Francia</h4>
++  </figcaption>
 +</figure>
 +{{< /code >}}
 +
 +### Single Flexible Example: `vimeo`
 +
 +```go-html-template
 +{{</* vimeo 49718712 */>}}
 +{{</* vimeo id="49718712" class="flex-video" */>}}
 +```
 +
 +Would load the template found at `/layouts/shortcodes/vimeo.html`:
 +
 +{{< code file="/layouts/shortcodes/vimeo.html" >}}
 +{{ if .IsNamedParams }}
 +  <div class="{{ if .Get "class" }}{{ .Get "class" }}{{ else }}vimeo-container{{ end }}">
 +    <iframe src="https://player.vimeo.com/video/{{ .Get "id" }}" allowfullscreen></iframe>
 +  </div>
 +{{ else }}
 +  <div class="{{ if len .Params | eq 2 }}{{ .Get 1 }}{{ else }}vimeo-container{{ end }}">
 +    <iframe src="https://player.vimeo.com/video/{{ .Get 0 }}" allowfullscreen></iframe>
 +  </div>
 +{{ end }}
 +{{< /code >}}
 +
 +Would be rendered as:
 +
- {{< code file="syntax-highlighted.html" copy="false" >}}
++{{< code file="vimeo-iframes.html" copy=false >}}
 +<div class="vimeo-container">
 +  <iframe src="https://player.vimeo.com/video/49718712" allowfullscreen></iframe>
 +</div>
 +<div class="flex-video">
 +  <iframe src="https://player.vimeo.com/video/49718712" allowfullscreen></iframe>
 +</div>
 +{{< /code >}}
 +
 +### Paired Example: `highlight`
 +
 +The following is taken from `highlight`, which is a [built-in shortcode] that ships with Hugo.
 +
 +{{< code file="highlight-example.md" >}}
 +{{</* highlight html */>}}
 +  <html>
 +    <body> This HTML </body>
 +  </html>
 +{{</* /highlight */>}}
 +{{< /code >}}
 +
 +The template for the `highlight` shortcode uses the following code, which is already included in Hugo:
 +
 +```go-html-template
 +{{ .Get 0 | highlight .Inner }}
 +```
 +
 +The rendered output of the HTML example code block will be as follows:
 +
-   <img src="{{$src}}" class="{{ .Get "class" }}-image">
++{{< code file="syntax-highlighted.html" copy=false >}}
 +<div class="highlight" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">&lt;html&gt;</span>
 +    <span style="color: #f92672">&lt;body&gt;</span> This HTML <span style="color: #f92672">&lt;/body&gt;</span>
 +<span style="color: #f92672">&lt;/html&gt;</span>
 +</pre></div>
 +{{< /code >}}
 +
 +### Nested Shortcode: Image Gallery
 +
 +Hugo's [`.Parent` shortcode variable][parent] provides access to the parent shortcode context when the shortcode in question is called within the context of a *parent* shortcode. This provides an inheritance model for common shortcode parameters.
 +
 +The following example is contrived but demonstrates the concept. Assume you have a `gallery` shortcode that expects one named `class` parameter:
 +
 +{{< code file="layouts/shortcodes/gallery.html" >}}
 +<div class="{{ .Get "class" }}">
 +  {{ .Inner }}
 +</div>
 +{{< /code >}}
 +
 +You also have an `img` shortcode with a single named `src` parameter that you want to call inside of `gallery` and other shortcodes, so that the parent defines the context of each `img`:
 +
 +{{< code file="layouts/shortcodes/img.html" >}}
 +{{- $src := .Get "src" -}}
 +{{- with .Parent -}}
-   <img src="{{$src}}">
++  <img src="{{ $src }}" class="{{ .Get "class" }}-image">
 +{{- else -}}
++  <img src="{{ $src }}">
 +{{- end -}}
 +{{< /code >}}
 +
 +You can then call your shortcode in your content as follows:
 +
 +```go-html-template
 +{{</* gallery class="content-gallery" */>}}
 +  {{</* img src="/images/one.jpg" */>}}
 +  {{</* img src="/images/two.jpg" */>}}
 +{{</* /gallery */>}}
 +{{</* img src="/images/three.jpg" */>}}
 +```
 +
 +This will output the following HTML. Note how the first two `img` shortcodes inherit the `class` value of `content-gallery` set with the call to the parent `gallery`, whereas the third `img` only uses `src`:
 +
 +```html
 +<div class="content-gallery">
 +    <img src="/images/one.jpg" class="content-gallery-image">
 +    <img src="/images/two.jpg" class="content-gallery-image">
 +</div>
 +<img src="/images/three.jpg">
 +```
 +
 +## Error Handling in Shortcodes
 +
 +Use the [errorf](/functions/errorf) template func and [.Position](/variables/shortcodes/) variable to get useful error messages in shortcodes:
 +
 +```bash
 +{{ with .Get "name" }}
 +{{ else }}
 +{{ errorf "missing value for param 'name': %s" .Position }}
 +{{ end }}
 +```
 +
 +When the above fails, you will see an `ERROR` log similar to the below:
 +
 +```bash
 +ERROR 2018/11/07 10:05:55 missing value for param name: "/Users/bep/dev/go/gohugoio/hugo/docs/content/en/variables/shortcodes.md:32:1"
 +```
 +
 +## More Shortcode Examples
 +
 +More shortcode examples can be found in the [shortcodes directory for spf13.com][spfscs] and the [shortcodes directory for the Hugo docs][docsshortcodes].
 +
 +## Inline Shortcodes
 +
 +You can also implement your shortcodes inline -- e.g. where you use them in the content file. This can be useful for scripting that you only need in one place.
 +
 +This feature is disabled by default, but can be enabled in your site config:
 +
 +{{< code-toggle file="config">}}
 +enableInlineShortcodes = true
 +{{< /code-toggle >}}
 +
 +It is disabled by default for security reasons. The security model used by Hugo's template handling assumes that template authors are trusted, but that the content files are not, so the templates are injection-safe from malformed input data. But in most situations you have full control over the content, too, and then `enableInlineShortcodes = true` would be considered safe. But it's something to be aware of: It allows ad-hoc [Go Text templates](https://golang.org/pkg/text/template/) to be executed from the content files.
 +
 +And once enabled, you can do this in your content files:
 +
 + ```go-text-template
 + {{</* time.inline */>}}{{ now }}{{</* /time.inline */>}}
 + ```
 +
 +The above will print the current date and time.
 +
 + Note that an inline shortcode's inner content is parsed and executed as a Go text template with the same context as a regular shortcode template.
 +
 +This means that the current page can be accessed via `.Page.Title` etc. This also means that there are no concept of "nested inline shortcodes".
 +
 +The same inline shortcode can be reused later in the same content file, with different params if needed, using the self-closing syntax:
 +
 + ```go-text-template
 +{{</* time.inline /*/>}}
 +```
 +
 +[basic content files]: /content-management/formats/ "See how Hugo leverages markdown--and other supported formats--to create content for your website."
 +[built-in shortcode]: /content-management/shortcodes/
 +[config]: /getting-started/configuration/ "Learn more about Hugo's built-in configuration variables as well as how to us your site's configuration file to include global key-values that can be used throughout your rendered website."
 +[Content Management: Shortcodes]: /content-management/shortcodes/#using-hugo-s-built-in-shortcodes "Check this section if you are not familiar with the definition of what a shortcode is or if you are unfamiliar with how to use Hugo's built-in shortcodes in your content files."
 +[source organization]: /getting-started/directory-structure/#directory-structure-explained "Learn how Hugo scaffolds new sites and what it expects to find in each of your directories."
 +[docsshortcodes]: https://github.com/gohugoio/hugo/tree/master/docs/layouts/shortcodes "See the shortcode source directory for the documentation site you're currently reading."
 +[figure]: /content-management/shortcodes/#figure
 +[hugosc]: /content-management/shortcodes/#using-hugo-s-built-in-shortcodes
 +[lookup order]: /templates/lookup-order/ "See the order in which Hugo traverses your template files to decide where and how to render your content at build time"
 +[pagevars]: /variables/page/ "See which variables you can leverage in your templating for page vs list templates."
 +[parent]: /variables/shortcodes/
 +[shortcodesvars]: /variables/shortcodes/ "Certain variables are specific to shortcodes, although most .Page variables can be accessed within your shortcode template."
 +[spfscs]: https://github.com/spf13/spf13.com/tree/master/layouts/shortcodes "See more examples of shortcodes by visiting the shortcode directory of the source for spf13.com, the blog of Hugo's creator, Steve Francia."
 +[templates]: /templates/ "The templates section of the Hugo docs."
 +[vimeoexample]: #single-flexible-example-vimeo
 +[youtubeshortcode]: /content-management/shortcodes/#youtube "See how to use Hugo's built-in YouTube shortcode."
index 925f97b03f3b320abe97a7d870ee393d63c84023,0000000000000000000000000000000000000000..559f2fb17089b06c93679e0e3ccb03c6d33bf837
mode 100644,000000..100644
--- /dev/null
@@@ -1,93 -1,0 +1,87 @@@
- linktitle:
 +---
 +title: Single Page Templates
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-04-06
 +description: The primary view of content in Hugo is the single view. Hugo will render every Markdown file provided with a corresponding single template.
-     parent: "templates"
 +categories: [templates]
 +keywords: [page, templates]
 +menu:
 +  docs:
- sections_weight: 60
- draft: false
++    parent: templates
 +    weight: 60
 +weight: 60
- {{< code file="layouts/posts/single.html" download="single.html" >}}
 +aliases: [/layout/content/]
 +toc: true
 +---
 +
 +## Single Page Template Lookup Order
 +
 +See [Template Lookup](/templates/lookup-order/).
 +
 +## Example Single Page Templates
 +
 +Content pages are of the type `page` and will therefore have all the [page variables][pagevars] and [site variables] available to use in their templates.
 +
 +### `posts/single.html`
 +
 +This single page template makes use of Hugo [base templates], the [`.Format` function] for dates, the [`.WordCount` page variable][pagevars], and ranges through the single content's specific [taxonomies][pagetaxonomy]. [`with`] is also used to check whether the taxonomies are set in the front matter.
 +
-         <article id="content">
-            {{ .Content }}
-         </article>
++{{< code file="layouts/posts/single.html" >}}
 +{{ define "main" }}
 +
 +<section id="main">
 +  <h1 id="title">{{ .Title }}</h1>
 +  <div>
-     <div>
-     <section>
-       <h4 id="date"> {{ .Date.Format "Mon Jan 2, 2006" }} </h4>
-       <h5 id="wordcount"> {{ .WordCount }} Words </h5>
-     </section>
-       {{ with .GetTerms "topics" }}
-         <ul id="topics">
-           {{ range . }}
-             <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
-           {{ end }}
-         </ul>
-       {{ end }}
-       {{ with .GetTerms "tags" }}
-         <ul id="tags">
-           {{ range . }}
-             <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
-           {{ end }}
-         </ul>
-       {{ end }}
-     </div>
-     <div>
-         {{ with .PrevInSection }}
-           <a class="previous" href="{{.Permalink}}"> {{.Title}}</a>
++    <article id="content">
++      {{ .Content }}
++    </article>
 +  </div>
 +</section>
 +<aside id="meta">
-         {{ with .NextInSection }}
-           <a class="next" href="{{.Permalink}}"> {{.Title}}</a>
++  <div>
++  <section>
++    <h4 id="date"> {{ .Date.Format "Mon Jan 2, 2006" }} </h4>
++    <h5 id="wordcount"> {{ .WordCount }} Words </h5>
++  </section>
++    {{ with .GetTerms "topics" }}
++      <ul id="topics">
++        {{ range . }}
++          <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
 +        {{ end }}
-     </div>
++      </ul>
++    {{ end }}
++    {{ with .GetTerms "tags" }}
++      <ul id="tags">
++        {{ range . }}
++          <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
 +        {{ end }}
++      </ul>
++    {{ end }}
++  </div>
++  <div>
++    {{ with .PrevInSection }}
++      <a class="previous" href="{{ .Permalink }}"> {{ .Title }}</a>
++    {{ end }}
++    {{ with .NextInSection }}
++      <a class="next" href="{{ .Permalink }}"> {{ .Title }}</a>
++    {{ end }}
++  </div>
 +</aside>
 +{{ end }}
 +{{< /code >}}
 +
 +To easily generate new instances of a content type (e.g., new `.md` files in a section like `project/`) with preconfigured front matter, use [content archetypes][archetypes].
 +
 +[archetypes]: /content-management/archetypes/
 +[base templates]: /templates/base/
 +[config]: /getting-started/configuration/
 +[content type]: /content-management/types/
 +[directory structure]: /getting-started/directory-structure/
 +[dry]: https://en.wikipedia.org/wiki/Don%27t_repeat_yourself
 +[`.format` function]: /functions/format/
 +[front matter]: /content-management/front-matter/
 +[pagetaxonomy]: /templates/taxonomy-templates/#display-a-single-piece-of-contents-taxonomies
 +[pagevars]: /variables/page/
 +[partials]: /templates/partials/
 +[section]: /content-management/sections/
 +[site variables]: /variables/site/
 +[spf13]: https://spf13.com/
 +[`with`]: /functions/with/
index 9fc817020dd4d53d578c1ef959f3ff093b7960e9,0000000000000000000000000000000000000000..d0738a36286aece46796dd70fbfa95bc5061f527
mode 100644,000000..100644
--- /dev/null
@@@ -1,87 -1,0 +1,84 @@@
- date: 2017-02-01
 +---
 +title: Sitemap Templates
 +description: Hugo provides built-in sitemap templates.
-     parent: "templates"
 +categories: [templates]
 +keywords: [sitemap, xml, templates]
 +menu:
 +  docs:
- sections_weight: 160
- draft: false
++    parent: templates
 +    weight: 160
 +weight: 160
- [`publishDir`]: {{< relref "getting-started/configuration#publishdir" >}}
 +aliases: [/layout/sitemap/,/templates/sitemap/]
 +toc: true
 +---
 +
 +## Overview
 +
 +Hugo's built-in sitemap templates conform to v0.9 of the [sitemap protocol].
 +
 +With a monolingual project, Hugo generates a sitemap.xml file in the root of the [`publishDir`] using the built-in [sitemap.xml] template.
 +
 +With a multilingual project, Hugo generates:
 +
 +- A sitemap.xml file in the root of each site (language) using the built-in [sitemap.xml] template
 +- A sitemap.xml file in the root of the [`publishDir`] using the built-in [sitemapindex.xml] template
 +
 +## Configuration
 +
 +Set the default values for [change frequency] and [priority], and the name of the generated file, in your site configuration.
 +
 +{{< code-toggle file="config" >}}
 +[sitemap]
 +  changefreq = 'monthly'
 +  filename = 'sitemap.xml'
 +  priority = 0.5
 +{{</ code-toggle >}}
 +
 +changefreq
 +: How frequently a page is likely to change. Valid values are `always`, `hourly`, `daily`, `weekly`, `monthly`, `yearly`, and `never`. Default is `""` (change frequency omitted from rendered sitemap).
 +
 +filename
 +: The name of the generated file. Default is `sitemap.xml`.
 +
 +priority
 +: The priority of a page relative to any other page on the site. Valid values range from 0.0 to 1.0. Default is `-1` (priority omitted from rendered sitemap).
 +
 +## Override Default Values
 +
 +Override the default values for a given page in front matter.
 +
 +{{< code-toggle file="news.md" fm=true >}}
 +title = 'News'
 +[sitemap]
 +  changefreq = 'weekly'
 +  priority = 0.8
 +{{</ code-toggle >}}
 +
 +## Override Built-in Templates
 +
 +To override the built-in sitemap.xml template, create a new file in either of these locations:
 +
 +- layouts/sitemap.xml
 +- layouts/_default/sitemap.xml
 +
 +When ranging through the page collection, access the _change frequency_ and _priority_ with `.Sitemap.ChangeFreq` and `.Sitemap.Priority` respectively.
 +
 +To override the built-in sitemapindex.xml template, create a new file in either of these locations:
 +
 +- layouts/sitemapindex.xml
 +- layouts/_default/sitemapindex.xml
 +
 +## Disable Sitemap Generation
 +
 +You may disable sitemap generation in your site configuration:
 +
 +{{< code-toggle file="config" >}}
 +disableKinds = ['sitemap']
 +{{</ code-toggle >}}
 +
++[`publishDir`]: /getting-started/configuration#publishdir
 +[change frequency]: <https://www.sitemaps.org/protocol.html#changefreqdef>
 +[priority]: <https://www.sitemaps.org/protocol.html#priority>
 +[sitemap protocol]: <https://www.sitemaps.org/protocol.html>
 +[sitemap.xml]: <https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/sitemap.xml>
 +[sitemapindex.xml]: <https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/sitemapindex.xml>
index e9fc80525272ac950c66bc6e709d6142752e64e7,0000000000000000000000000000000000000000..e343df471d8149090dcbfe6916f2a6f05b39d88a
mode 100644,000000..100644
--- /dev/null
@@@ -1,341 -1,0 +1,333 @@@
- # linktitle:
 +---
 +title: Taxonomy Templates
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Taxonomy templating includes taxonomy list pages, taxonomy terms pages, and using taxonomies in your single page templates.
-     parent: "templates"
 +categories: [templates]
 +keywords: [taxonomies,metadata,front matter,terms,templates]
 +menu:
 +  docs:
- sections_weight: 50
- draft: false
++    parent: templates
 +    weight: 50
 +weight: 50
- ```txt
- +++
 +aliases: [/taxonomies/displaying/,/templates/terms/,/indexes/displaying/,/taxonomies/templates/,/indexes/ordering/, /templates/taxonomies/, /templates/taxonomy/]
 +toc: true
 +---
 +
 +<!-- NOTE! Check on https://github.com/gohugoio/hugo/issues/2826 for shifting of terms' pages to .Data.Pages AND
 +https://discourse.gohugo.io/t/how-to-specify-category-slug/4856/15 for original discussion.-->
 +
 +Hugo includes support for user-defined groupings of content called **taxonomies**. Taxonomies are classifications that demonstrate logical relationships between content. See [Taxonomies under Content Management](/content-management/taxonomies) if you are unfamiliar with how Hugo leverages this powerful feature.
 +
 +Hugo provides multiple ways to use taxonomies throughout your project templates:
 +
 +* Order the way content associated with a taxonomy term is displayed in a [taxonomy list template](#taxonomy-list-templates)
 +* Order the way the terms for a taxonomy are displayed in a [taxonomy terms template](#taxonomy-terms-templates)
 +* List a single content's taxonomy terms within a [single page template]
 +
 +## Taxonomy List Templates
 +
 +Taxonomy list page templates are lists and therefore have all the variables and methods available to [list pages][lists].
 +
 +### Taxonomy List Template Lookup Order
 +
 +See [Template Lookup](/templates/lookup-order/).
 +
 +## Taxonomy Terms Templates
 +
 +### Taxonomy Terms Templates Lookup Order
 +
 +See [Template Lookup](/templates/lookup-order/).
 +
 +### Taxonomy Methods
 +
 +A Taxonomy is a `map[string]WeightedPages`.
 +
 +.Get(term)
 +: Returns the WeightedPages for a term.
 +
 +.Count(term)
 +: The number of pieces of content assigned to this term.
 +
 +.Alphabetical
 +: Returns an OrderedTaxonomy (slice) ordered by Term.
 +
 +.ByCount
 +: Returns an OrderedTaxonomy (slice) ordered by number of entries.
 +
 +.Reverse
 +: Returns an OrderedTaxonomy (slice) in reverse order. Must be used with an OrderedTaxonomy.
 +
 +### OrderedTaxonomy
 +
 +Since Maps are unordered, an OrderedTaxonomy is a special structure that has a defined order.
 +
 +```go
 +[]struct {
 +    Name          string
 +    WeightedPages WeightedPages
 +}
 +```
 +
 +Each element of the slice has:
 +
 +.Term
 +: The Term used.
 +
 +.WeightedPages
 +: A slice of Weighted Pages.
 +
 +.Count
 +: The number of pieces of content assigned to this term.
 +
 +.Pages
 +: All Pages assigned to this term. All [list methods][renderlists] are available to this.
 +
 +## WeightedPages
 +
 +WeightedPages is simply a slice of WeightedPage.
 +
 +```go
 +type WeightedPages []WeightedPage
 +```
 +
 +.Count(term)
 +: The number of pieces of content assigned to this term.
 +
 +.Pages
 +: Returns a slice of pages, which then can be ordered using any of the [list methods][renderlists].
 +
 +## Displaying custom metadata in Taxonomy Terms Templates
 +
 +If you need to display custom metadata for each taxonomy term, you will need to create a page for that term at `/content/<TAXONOMY>/<TERM>/_index.md` and add your metadata in its front matter, [as explained in the taxonomies documentation](/content-management/taxonomies/#add-custom-metadata-to-a-taxonomy-or-term). Based on the Actors taxonomy example shown there, within your taxonomy terms template, you may access your custom fields by iterating through the variable `.Pages` as such:
 +
 +```go-html-template
 +<ul>
 +    {{ range .Pages }}
 +        <li>
 +            <a href="{{ .Permalink }}">{{ .Title }}</a>
 +            {{ .Params.wikipedia }}
 +        </li>
 +    {{ end }}
 +</ul>
 +```
 +
 +<!-- Begin /taxonomies/ordering/ -->
 +
 +## Order Taxonomies
 +
 +Taxonomies can be ordered by either alphabetical key or by the number of content pieces assigned to that key.
 +
 +### Order Alphabetically Example
 +
 +```go-html-template
 +<ul>
 +    {{ range .Data.Terms.Alphabetical }}
 +            <li><a href="{{ .Page.Permalink }}">{{ .Page.Title }}</a> {{ .Count }}</li>
 +    {{ end }}
 +</ul>
 +```
 +
 +<!-- [See Also Taxonomy Lists](/templates/list/) -->
 +
 +## Order Content within Taxonomies
 +
 +Hugo uses both `date` and `weight` to order content within taxonomies.
 +
 +Each piece of content in Hugo can optionally be assigned a date. It can also be assigned a weight for each taxonomy it is assigned to.
 +
 +When iterating over content within taxonomies, the default sort is the same as that used for section and list pages: first by weight, then by date. This means that if the weights for two pieces of content are the same, then the more recent content will be displayed first.
 +
 +The default weight for any piece of content is 0. Zero means "does not have a weight", not "has a weight of numerical value zero".
 +
 +Weights of zero are thus treated specially: if two pages have unequal weights, and one of them is zero, then the zero-weighted page will always appear after the other one, regardless of the other's weight. Zero weights should thus be used with care: for example, if both positive and negative weights are used to extend a sequence in both directions, a zero-weighted page will appear not in the middle of the list, but at the end.
 +
 +### Assign Weight
 +
 +Content can be assigned weight for each taxonomy that it's assigned to.
 +
- title = "foo"
++
++{{< code-toggle file="content/example.md" fm=true copy=false >}}
 +tags = [ "a", "b", "c" ]
 +tags_weight = 22
 +categories = ["d"]
- +++
- Front Matter with weighted tags and categories
- ```
++title = "Example"
 +categories_weight = 44
- A [list template](/templates/list/) is any template that will be used to render multiple pieces of content in a single html page. This template will be used to generate all the automatically created taxonomy pages.
++{{< /code-toggle >}}
 +
 +The convention is `taxonomyname_weight`.
 +
 +In the above example, this piece of content has a weight of 22 which applies to the sorting when rendering the pages assigned to the "a", "b" and "c" values of the 'tag' taxonomy.
 +
 +It has also been assigned the weight of 44 when rendering the 'd' category.
 +
 +With this the same piece of content can appear in different positions in different taxonomies.
 +
 +Currently taxonomies only support the default ordering of content which is weight -> date.
 +
 +<!-- Begin /taxonomies/templates/ -->
 +
 +There are two different templates that the use of taxonomies will require you to provide.
 +
 +Both templates are covered in detail in the templates section.
 +
- A [taxonomy terms template](/templates/terms/) is a template used to
++A [list template](/templates/lists/) is any template that will be used to render multiple pieces of content in a single html page. This template will be used to generate all the automatically created taxonomy pages.
 +
- using the [list templates](/templates/list/):
++A [taxonomy template](/templates/taxonomy-templates/) is a template used to
 +generate the list of terms for a given template.
 +
 +<!-- Begin /taxonomies/displaying/ -->
 +
 +There are four common ways you can display the data in your
 +taxonomies in addition to the automatic taxonomy pages created by hugo
-             <li hugo-nav="{{ .RelPermalink}}"><a href="{{ .Permalink}}">{{ .LinkTitle }}</a></li>
++using the [list templates](/templates/lists/):
 +
 +1. For a given piece of content, you can list the terms attached
 +2. For a given piece of content, you can list other content with the same
 +   term
 +3. You can list all terms for a taxonomy
 +4. You can list all taxonomies (with their terms)
 +
 +## Display a Single Piece of Content's Taxonomies
 +
 +Within your content templates, you may wish to display the taxonomies that piece of content is assigned to.
 +
 +Because we are leveraging the front matter system to define taxonomies for content, the taxonomies assigned to each content piece are located in the usual place (i.e., `.Params.<TAXONOMYPLURAL>`).
 +
 +### Example: List Tags in a Single Page Template
 +
 +```go-html-template
 +<ul>
 +    {{ range (.GetTerms "tags") }}
 +        <li><a href="{{ .Permalink }}">{{ .LinkTitle }}</a></li>
 +    {{ end }}
 +</ul>
 +```
 +
 +If you want to list taxonomies inline, you will have to take care of optional plural endings in the title (if multiple taxonomies), as well as commas. Let's say we have a taxonomy "directors" such as `directors: [ "Joel Coen", "Ethan Coen" ]` in the TOML-format front matter.
 +
 +To list such taxonomies, use the following:
 +
 +### Example: Comma-delimit Tags in a Single Page Template
 +
 +```go-html-template
 +{{ $taxo := "directors" }} <!-- Use the plural form here -->
 +{{ with .Param $taxo }}
 +    <strong>Director{{ if gt (len .) 1 }}s{{ end }}:</strong>
 +    {{ range $index, $director := . }}
 +        {{- if gt $index 0 }}, {{ end -}}
 +        {{ with $.Site.GetPage (printf "/%s/%s" $taxo $director) -}}
 +            <a href="{{ .Permalink }}">{{ $director }}</a>
 +        {{- end -}}
 +    {{- end -}}
 +{{ end }}
 +```
 +
 +Alternatively, you may use the [delimit template function][delimit] as a shortcut if the taxonomies should just be listed with a separator. See {{< gh 2143 >}} on GitHub for discussion.
 +
 +## List Content with the Same Taxonomy Term
 +
 +If you are using a taxonomy for something like a series of posts, you can list individual pages associated with the same taxonomy. This is also a quick and dirty method for showing related content:
 +
 +### Example: Showing Content in Same Series
 +
 +```go-html-template
 +<ul>
 +    {{ range .Site.Taxonomies.series.golang }}
 +        <li><a href="{{ .Page.RelPermalink }}">{{ .Page.Title }}</a></li>
 +    {{ end }}
 +</ul>
 +```
 +
 +## List All content in a Given taxonomy
 +
 +This would be very useful in a sidebar as “featured content”. You could even have different sections of “featured content” by assigning different terms to the content.
 +
 +### Example: Grouping "Featured" Content
 +
 +```go-html-template
 +<section id="menu">
 +    <ul>
 +        {{ range $key, $taxonomy := .Site.Taxonomies.featured }}
 +        <li>{{ $key }}</li>
 +        <ul>
 +            {{ range $taxonomy.Pages }}
- {{< code file="layouts/partials/all-taxonomies.html" download="all-taxonomies.html" download="all-taxonomies.html" >}}
++            <li hugo-nav="{{ .RelPermalink }}"><a href="{{ .Permalink }}">{{ .LinkTitle }}</a></li>
 +            {{ end }}
 +        </ul>
 +        {{ end }}
 +    </ul>
 +</section>
 +```
 +
 +## Render a Site's Taxonomies
 +
 +If you wish to display the list of all keys for your site's taxonomy, you can retrieve them from the [`.Site` variable][sitevars] available on every page.
 +
 +This may take the form of a tag cloud, a menu, or simply a list.
 +
 +The following example displays all terms in a site's tags taxonomy:
 +
 +### Example: List All Site Tags {#example-list-all-site-tags}
 +
 +```go-html-template
 +<ul>
 +    {{ range .Site.Taxonomies.tags }}
 +            <li><a href="{{ .Page.Permalink }}">{{ .Page.Title }}</a> {{ .Count }}</li>
 +    {{ end }}
 +</ul>
 +```
 +
 +### Example: List All Taxonomies, Terms, and Assigned Content
 +
 +This example will list all taxonomies and their terms, as well as all the content assigned to each of the terms.
 +
-                                     <li hugo-nav="{{ .RelPermalink}}">
-                                         <a href="{{ .Permalink}}">{{ .LinkTitle }}</a>
++{{< code file="layouts/partials/all-taxonomies.html" >}}
 +<section>
 +    <ul id="all-taxonomies">
 +        {{ range $taxonomy_term, $taxonomy := .Site.Taxonomies }}
 +            {{ with $.Site.GetPage (printf "/%s" $taxonomy_term) }}
 +                <li><a href="{{ .Permalink }}">{{ $taxonomy_term }}</a>
 +                    <ul>
 +                        {{ range $key, $value := $taxonomy }}
 +                            <li>{{ $key }}</li>
 +                            <ul>
 +                                {{ range $value.Pages }}
- Because taxonomies are lists, the [`.GetPage` function][getpage] can be used to get all the pages associated with a particular taxonomy term using a terse syntax. The following ranges over the full list of tags on your site and links to each of the individual taxonomy pages for each term without having to use the more fragile URL construction of the ["List All Site Tags" example above]({{< relref "#example-list-all-site-tags" >}}):
++                                    <li hugo-nav="{{ .RelPermalink }}">
++                                        <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
 +                                    </li>
 +                                {{ end }}
 +                            </ul>
 +                        {{ end }}
 +                    </ul>
 +                </li>
 +            {{ end }}
 +        {{ end }}
 +    </ul>
 +</section>
 +{{< /code >}}
 +
 +## `.Site.GetPage` for Taxonomies
 +
-             <li><a href="{{ .Permalink }}">{{ .Title}}</a></li>
++Because taxonomies are lists, the [`.GetPage` function][getpage] can be used to get all the pages associated with a particular taxonomy term using a terse syntax. The following ranges over the full list of tags on your site and links to each of the individual taxonomy pages for each term without having to use the more fragile URL construction of the ["List All Site Tags" example above](#example-list-all-site-tags):
 +
 +{{< code file="links-to-all-tags.html" >}}
 +{{ $taxo := "tags" }}
 +<ul class="{{ $taxo }}">
 +    {{ with ($.Site.GetPage (printf "/%s" $taxo)) }}
 +        {{ range .Pages }}
++            <li><a href="{{ .Permalink }}">{{ .Title }}</a></li>
 +        {{ end }}
 +    {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +<!-- TODO: ### `.Site.GetPage` Taxonomy List Example -->
 +
 +<!-- TODO: ### `.Site.GetPage` Taxonomy Terms Example -->
 +
 +
 +[delimit]: /functions/delimit/
 +[getpage]: /functions/getpage/
 +[lists]: /templates/lists/
 +[renderlists]: /templates/lists/
 +[single page template]: /templates/single-page-templates/
 +[sitevars]: /variables/site/
index b8938890f6f117200f5a52926bb26df762096974,0000000000000000000000000000000000000000..0f32fa73241602ba21ae83349ac8cb2e6b70ce48
mode 100644,000000..100644
--- /dev/null
@@@ -1,69 -1,0 +1,64 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
 +---
 +title: Template Debugging
 +description: You can use Go templates' `printf` function to debug your Hugo  templates. These snippets provide a quick and easy visualization of the variables available to you in different contexts.
-     parent: "templates"
 +categories: [templates]
 +keywords: [debugging,troubleshooting]
 +menu:
 +  docs:
- sections_weight: 180
- aliases: []
- toc: false
++    parent: templates
 +    weight: 180
 +weight: 180
 +---
 +
 +Here are some snippets you can add to your template to answer some common questions.
 +
 +These snippets use the `printf` function available in all Go templates.  This function is an alias to the Go function, [fmt.Printf](https://pkg.go.dev/fmt).
 +
 +## What Variables are Available in this Context?
 +
 +You can use the template syntax, `$.`, to get the top-level template context from anywhere in your template. This will print out all the values under, `.Site`.
 +
 +```go-html-template
 +{{ printf "%#v" $.Site }}
 +```
 +
 +This will print out the value of `.Permalink`:
 +
 +```go-html-template
 +{{ printf "%#v" .Permalink }}
 +```
 +
 +This will print out a list of all the variables scoped to the current context
 +(`.`, aka ["the dot"][tempintro]).
 +
 +```go-html-template
 +{{ printf "%#v" . }}
 +```
 +
 +When developing a [homepage], what does one of the pages you're looping through look like?
 +
 +```go-html-template
 +{{ range .Pages }}
 +    {{/* The context, ".", is now each one of the pages as it goes through the loop */}}
 +    {{ printf "%#v" . }}
 +{{ end }}
 +```
 +
 +## Why Am I Showing No Defined Variables?
 +
 +Check that you are passing variables in the `partial` function:
 +
 +```go-html-template
 +{{ partial "header.html" }}
 +```
 +
 +This example will render the header partial, but the header partial will not have access to any contextual variables. You need to pass variables explicitly. For example, note the addition of ["the dot"][tempintro].
 +
 +```go-html-template
 +{{ partial "header.html" . }}
 +```
 +
 +The dot (`.`) is considered fundamental to understanding Hugo templating. For more information, see [Introduction to Hugo Templating][tempintro].
 +
 +[homepage]: /templates/homepage/
 +[tempintro]: /templates/introduction/
index 495f701bd135bb6c214657ba7bb219eee0fdf110,0000000000000000000000000000000000000000..24ff611507a0a5f9a3869983dd858f868172b543
mode 100644,000000..100644
--- /dev/null
@@@ -1,121 -1,0 +1,114 @@@
- # linktitle: Content Views
 +---
 +title: Content View Templates
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Hugo can render alternative views of your content, which is especially useful in list and summary views.
-     parent: "templates"
 +categories: [templates]
 +keywords: [views]
 +menu:
 +  docs:
- sections_weight: 70
- draft: false
- aliases: []
++    parent: templates
 +    weight: 70
 +weight: 70
- {{< code file="layouts/_default/list.html" download="list.html" >}}
 +toc: true
 +---
 +
 +These alternative **content views** are especially useful in [list templates][lists].
 +
 +The following are common use cases for content views:
 +
 +* You want content of every type to be shown on the homepage but only with limited [summary views][summaries].
 +* You only want a bulleted list of your content on a [taxonomy list page][taxonomylists]. Views make this very straightforward by delegating the rendering of each different type of content to the content itself.
 +
 +## Create a Content View
 +
 +To create a new view, create a template in each of your different content type directories with the view name. The following example contains an "li" view and a "summary" view for the `posts` and `project` content types. As you can see, these sit next to the [single content view][single] template, `single.html`. You can even provide a specific view for a given type and continue to use the `_default/single.html` for the primary view.
 +
 +```txt
 +  ▾ layouts/
 +    ▾ posts/
 +        li.html
 +        single.html
 +        summary.html
 +    ▾ project/
 +        li.html
 +        single.html
 +        summary.html
 +```
 +
 +Hugo also has support for a default content template to be used in the event that a specific content view template has not been provided for that type. Content views can also be defined in the `_default` directory and will work the same as list and single templates who eventually trickle down to the `_default` directory as a matter of the lookup order.
 +
 +
 +```txt
 +▾ layouts/
 +  ▾ _default/
 +      li.html
 +      single.html
 +      summary.html
 +```
 +
 +## Which Template Will be Rendered?
 +
 +The following is the [lookup order][lookup] for content views:
 +
 +1. `/layouts/<TYPE>/<VIEW>.html`
 +2. `/layouts/_default/<VIEW>.html`
 +3. `/themes/<THEME>/layouts/<TYPE>/<VIEW>.html`
 +4. `/themes/<THEME>/layouts/_default/<VIEW>.html`
 +
 +## Example: Content View Inside a List
 +
 +The following example demonstrates how to use content views inside your [list templates][lists].
 +
 +### `list.html`
 +
 +In this example, `.Render` is passed into the template to call the [render function][render]. `.Render` is a special function that instructs content to render itself with the view template provided as the first argument. In this case, the template is going to render the `summary.html` view that follows:
 +
-   <h1 id="title">{{ .Title }}</h1>
-   {{ range .Pages }}
-     {{ .Render "summary"}}
-   {{ end }}
++{{< code file="layouts/_default/list.html" >}}
 +<main id="main">
 +  <div>
- {{< code file="layouts/_default/summary.html" download="summary.html" >}}
++    <h1 id="title">{{ .Title }}</h1>
++    {{ range .Pages }}
++      {{ .Render "summary" }}
++    {{ end }}
 +  </div>
 +</main>
 +{{< /code >}}
 +
 +### `summary.html`
 +
 +Hugo will pass the entire page object to the following `summary.html` view template. (See [Page Variables][pagevars] for a complete list.)
 +
- {{< code file="layouts/_default/li.html" download="li.html" >}}
++{{< code file="layouts/_default/summary.html" >}}
 +<article class="post">
 +  <header>
 +    <h2><a href='{{ .Permalink }}'> {{ .Title }}</a> </h2>
 +    <div class="post-meta">{{ .Date.Format "Mon, Jan 2, 2006" }} - {{ .FuzzyWordCount }} Words </div>
 +  </header>
 +  {{ .Summary }}
 +  <footer>
 +  <a href='{{ .Permalink }}'><nobr>Read more →</nobr></a>
 +  </footer>
 +</article>
 +{{< /code >}}
 +
 +### `li.html`
 +
 +Continuing on the previous example, we can change our render function to use a smaller `li.html` view by changing the argument in the call to the `.Render` function (i.e., `{{ .Render "li" }}`).
 +
++{{< code file="layouts/_default/li.html" >}}
 +<li>
 +  <a href="{{ .Permalink }}">{{ .Title }}</a>
 +  <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +</li>
 +{{< /code >}}
 +
 +[lists]: /templates/lists/
 +[lookup]: /templates/lookup-order/
 +[pagevars]: /variables/page/
 +[render]: /functions/render/
 +[single]: /templates/single-page-templates/
 +[spf]: https://spf13.com
 +[spfsourceli]: https://github.com/spf13/spf13.com/blob/master/layouts/_default/li.html
 +[spfsourcesection]: https://github.com/spf13/spf13.com/blob/master/layouts/_default/section.html
 +[spfsourcesummary]: https://github.com/spf13/spf13.com/blob/master/layouts/_default/summary.html
 +[summaries]: /content-management/summaries/
 +[taxonomylists]: /templates/taxonomy-templates/
index a630418193bb257835829c4e6aa29f615641c90f,0000000000000000000000000000000000000000..b553dac9c42828e4397b6ada549c17668770ff6f
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,19 @@@
- date: 2016-12-05
- publishdate: 2016-12-05
- lastmod: 2017-02-26
 +---
 +title: Developer Tools
 +linktitle: Developer Tools Overview
 +description: In addition to Hugo's powerful CLI, there is a large number of community-developed tool chains for Hugo developers.
-     parent: "tools"
 +categories: [developer tools]
 +keywords: []
 +menu:
 +  docs:
- sections_weight: 01
++    parent: tools
 +    weight: 01
 +weight: 01
- [syntax]: /tools/syntax-highlighting/
 +---
 +
 +One of Hugo's greatest strengths is its passionate---and always evolving---developer community. With the exception of the `highlight` shortcode mentioned in [Syntax Highlighting][syntax], the tools and other projects featured in this section are offerings from both commercial services and open-source projects, many of which are developed by Hugo developers just like you.
 +
 +[See the popularity of Hugo compared with other static site generators.][staticgen]
 +
 +[staticgen]: https://staticgen.com
++[syntax]: /content-management/syntax-highlighting/
index ed67885fcb976047529e620d9c2cee317e90db19,0000000000000000000000000000000000000000..55ab47090c910be4a656e599419e44dce3c3714c
mode 100644,000000..100644
--- /dev/null
@@@ -1,50 -1,0 +1,44 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
 +---
 +title: Editor Plug-ins for Hugo
 +linktitle: Editor Plug-ins
 +description: The Hugo community uses a wide range of preferred tools and has developed plug-ins for some of the most popular text editors to help automate parts of your workflow.
-     parent: "tools"
 +categories: [developer tools]
 +keywords: [editor, plug-ins]
 +menu:
 +  docs:
- sections_weight: 50
- draft: false
- aliases: []
- toc: false
++    parent: tools
 +    weight: 50
 +weight: 50
 +---
 +
 +The Hugo community uses a wide range of preferred tools and has developed plug-ins for some of the most popular text editors to help automate parts of your workflow.
 +
 +## Sublime Text
 +
 +* [Hugofy](https://github.com/akmittal/Hugofy). Hugofy is a plugin for Sublime Text 3 to make life easier to use Hugo static site generator.
 +* [Hugo Snippets](https://packagecontrol.io/packages/Hugo%20Snippets). Hugo Snippets is a useful plugin for adding automatic snippets to Sublime Text 3.
 +
 +## Visual Studio Code
 +
 +* [Hugofy](https://marketplace.visualstudio.com/items?itemName=akmittal.hugofy). Hugofy is a plugin for Visual Studio Code to "make life easier" when developing with Hugo. The source code can be found [here](https://github.com/akmittal/hugofy-vscode).
 +* [Hugo Helper](https://marketplace.visualstudio.com/items?itemName=rusnasonov.vscode-hugo). Hugo Helper is a plugin for Visual Studio Code that has some useful commands for Hugo. The source code can be found [here](https://github.com/rusnasonov/vscode-hugo).
 +* [Hugo Language and Syntax Support](https://marketplace.visualstudio.com/items?itemName=budparr.language-hugo-vscode). Hugo Language and Syntax Support is a Visual Studio Code plugin for Hugo syntax highlighting and snippets. The source code can be found [here](https://github.com/budparr/language-hugo-vscode).
 +* [Hugo Themer](https://marketplace.visualstudio.com/items?itemName=eliostruyf.vscode-hugo-themer). Hugo Themer is an extension to help you while developing themes. It allows you to easily navigate through your theme files.
 +* [Front Matter](https://marketplace.visualstudio.com/items?itemName=eliostruyf.vscode-front-matter). Once you go for a static site, you need to think about how you are going to manage your articles. Front matter is a tool that helps you maintain the metadata/front matter of your articles like: creation date, modified date, slug, tile, SEO check, and many more...
 +* [Syntax Highlighting for Hugo Shortcodes](https://marketplace.visualstudio.com/items?itemName=kaellarkin.hugo-shortcode-syntax). This extension add some syntax highlighting for Shortcodes, making visual identification of individual pieces easier.
 +
 +## Emacs
 +
 +* [emacs-easy-hugo](https://github.com/masasam/emacs-easy-hugo). Emacs major mode for managing hugo blogs. Note that Hugo also supports [Org-mode][formats].
 +* [ox-hugo.el](https://ox-hugo.scripter.co). Native Org-mode exporter that exports to Blackfriday Markdown with Hugo front-matter. `ox-hugo` supports two common Org blogging flows --- exporting multiple Org subtrees in a single file to multiple Hugo posts, and exporting a single Org file to a single Hugo post. It also leverages the Org tag and property inheritance features. See [*Why ox-hugo?*](https://ox-hugo.scripter.co/doc/why-ox-hugo/) for more.
 +
 +## Vim
 +
 +* [Vim Hugo Helper](https://github.com/robertbasic/vim-hugo-helper). A small Vim plugin to help me with writing posts with Hugo.
 +
 +## Atom
 +
 +* [Hugofy](https://atom.io/packages/hugofy). A Hugo Static Website Generator package for Atom.
 +* [language-hugo](https://atom.io/packages/language-hugo). Adds syntax highlighting to Hugo files.
 +
 +[formats]: /content-management/formats/
index 7ad44df53062351f2ab24f5d9f6760d0f74b2b74,0000000000000000000000000000000000000000..1bfaf0995f03b956d3e8f94f8841bdcfef06dfc0
mode 100644,000000..100644
--- /dev/null
@@@ -1,29 -1,0 +1,22 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: Frontend Interfaces with Hugo
 +linktitle: Frontends
 +description: Do you prefer a graphical user interface over a text editor? Give these frontends a try.
-     parent: "tools"
 +categories: [developer tools]
 +keywords: [frontend, gui]
 +menu:
 +  docs:
- sections_weight: 40
- draft: false
- aliases: []
- toc: false
++    parent: tools
 +    weight: 40
 +weight: 40
 +---
 +
 +- [enwrite](https://github.com/zzamboni/enwrite). Enwrite enables evernote-powered, statically generated blogs and websites. Now posting to your blog or updating your website is as easy as writing a new note in Evernote!
 +- [Lipi](https://github.com/SohanChy/Lipi). Lipi is a native GUI frontend written in Java to manage your Hugo websites.
 +- [Netlify CMS](https://netlifycms.org). Netlify CMS is an open source, serverless solution for managing Git based content in static sites, and it works on any platform that can host static sites. A [Hugo/Netlify CMS starter](https://github.com/netlify-templates/one-click-hugo-cms) is available to get new projects running quickly.
 +- [Hokus CMS](https://github.com/julianoappelklein/hokus). Hokus CMS is an open source, multi-platform, easy to use, desktop application for Hugo. Build from simple to complex user interfaces for Hugo websites by choosing from a dozen ready-to-use components — all for free, with no vendor lock-in.
 +
 +## Commercial Services
 +
 +- [DATOCMS](https://www.datocms.com) DatoCMS is a fully customizable administrative area for your static websites. Use your favorite website generator, let your clients publish new content independently, and the host the site anywhere you like.
 +- [CloudCannon](https://cloudcannon.com/hugo-cms/). The intuitive Git-based CMS for your Hugo website. CloudCannon syncs changes from your Git repository and pushes content changes back, so your development and content teams are always in sync. Edit all of your content on the page with visual editing, build entire pages with reusable custom components and then publish confidently.
index d6ca14ab52fabc6eaeea22a0430e760fb2674faa,0000000000000000000000000000000000000000..0156c46db4a51c8e06d8cb69409d93729a920df8
mode 100644,000000..100644
--- /dev/null
@@@ -1,85 -1,0 +1,80 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2022-03-26
 +---
 +title: Migrate to Hugo
 +linktitle: Migrations
 +description: A list of community-developed tools for migrating from your existing static site generator or content management system to Hugo.
-     parent: "tools"
 +keywords: [migrations, jekyll, wordpress, drupal, ghost, contentful]
 +menu:
 +  docs:
- sections_weight: 10
- draft: false
++    parent: tools
 +    weight: 10
 +weight: 10
- - [contentful2hugo](https://github.com/ArnoNuyts/contentful2hugo) - A tool to create content-files for Hugo from content on [Contentful](https://www.contentful.com/).
 +aliases: [/developer-tools/migrations/, /developer-tools/migrated/]
 +toc: true
 +---
 +
 +This section highlights some projects around Hugo that are independently developed. These tools try to extend the functionality of our static site generator or help you to get started.
 +
 +{{% note %}}
 +Do you know or maintain a similar project around Hugo? Feel free to open a [pull request](https://github.com/gohugoio/hugoDocs/pulls) on GitHub if you think it should be added.
 +{{% /note %}}
 +
 +Take a look at this list of migration tools if you currently use other blogging tools like Jekyll or WordPress but intend to switch to Hugo instead. They'll take care to export your content into Hugo-friendly formats.
 +
 +## Jekyll
 +
 +Alternatively, you can use the new [Jekyll import command](/commands/hugo_import_jekyll/).
 +
 +- [JekyllToHugo](https://github.com/fredrikloch/JekyllToHugo) - A Small script for converting Jekyll blog posts to a Hugo site.
 +- [ConvertToHugo](https://github.com/coderzh/ConvertToHugo) - Convert your blog from Jekyll to Hugo.
 +
 +## Ghost
 +
 +- [ghostToHugo](https://github.com/jbarone/ghostToHugo) - Convert Ghost blog posts and export them to Hugo.
 +
 +## Octopress
 +
 +- [octohug](https://github.com/codebrane/octohug) - Octopress to Hugo migrator.
 +
 +## DokuWiki
 +
 +- [dokuwiki-to-hugo](https://github.com/wgroeneveld/dokuwiki-to-hugo) - Migrates your DokuWiki source pages from [DokuWiki syntax](https://www.dokuwiki.org/wiki:syntax) to Hugo Markdown syntax. Includes extra's like the TODO plugin. Written with extensibility in mind using python 3. Also generates a TOML header for each page. Designed to copypaste the wiki directory into your /content directory.
 +
 +## WordPress
 +
 +- [wordpress-to-hugo-exporter](https://github.com/SchumacherFM/wordpress-to-hugo-exporter) - A one-click WordPress plugin that converts all posts, pages, taxonomies, metadata, and settings to Markdown and YAML which can be dropped into Hugo. (Note: If you have trouble using this plugin, you can [export your site for Jekyll](https://wordpress.org/plugins/jekyll-exporter/) and use Hugo's built in Jekyll converter listed above.)
 +- [blog2md](https://github.com/palaniraja/blog2md) - Works with [exported xml](https://en.support.wordpress.com/export/) file of your free YOUR-TLD.wordpress.com website. It also saves approved comments to `YOUR-POST-NAME-comments.md` file along with posts.
 +- [wordhugopress](https://github.com/nantipov/wordhugopress) - A small utility written in Java, exports the entire WordPress site from the database and resource (e.g. images) files stored locally or remotely. Therefore, migration from the backup files is possible. Supports merging of the multiple WordPress sites into a single Hugo one.
 +
 +## Medium
 +
 +- [medium2md](https://github.com/gautamdhameja/medium-2-md) - A simple Medium to Hugo exporter able to import stories in one command, including Front Matter.
 +- [medium-to-hugo](https://github.com/bgadrian/medium-to-hugo) - CLI tool written in Go to export medium posts into a Hugo compatible Markdown format. Tags and images are included. All images will be downloaded locally and linked appropriately.
 +
 +## Tumblr
 +
 +- [tumblr-importr](https://github.com/carlmjohnson/tumblr-importr) - An importer that uses the Tumblr API to create a Hugo static site.
 +- [tumblr2hugomarkdown](https://github.com/Wysie/tumblr2hugomarkdown) - Export all your Tumblr content to Hugo Markdown files with preserved original formatting.
 +- [Tumblr to Hugo](https://github.com/jipiboily/tumblr-to-hugo) - A migration tool that converts each of your Tumblr posts to a content file with a proper title and path. Furthermore, "Tumblr to Hugo" creates a CSV file with the original URL and the new path on Hugo, to help you setup the redirections.
 +
 +## Drupal
 +
 +- [drupal2hugo](https://github.com/danapsimer/drupal2hugo) - Convert a Drupal site to Hugo.
 +
 +## Joomla
 +
 +- [hugojoomla](https://github.com/davetcc/hugojoomla) - This utility written in Java takes a Joomla database and converts all the content into Markdown files. It changes any URLs that are in Joomla's internal format and converts them to a suitable form.
 +
 +## Blogger
 +
 +- [blogimport](https://github.com/natefinch/blogimport) - A tool to import from Blogger posts to Hugo.
 +- [blogger-to-hugo](https://pypi.org/project/blogger-to-hugo/) - Another tool to import Blogger posts to Hugo. It also downloads embedded images so they will be stored locally.
 +- [blog2md](https://github.com/palaniraja/blog2md) - Works with [exported xml](https://support.google.com/blogger/answer/41387?hl=en) file of your YOUR-TLD.blogspot.com website. It also saves comments to `YOUR-POST-NAME-comments.md` file along with posts.
 +- [BloggerToHugo](https://github.com/huanlin/blogger-to-hugo) - Yet another tool to import Blogger posts to Hugo. For Windows platform only, and .NET Framework 4.5 is required. See README.md before using this tool.
 +
 +## Contentful
 +
++- [contentful-hugo](https://github.com/ModiiMedia/contentful-hugo) - A tool to create content-files for Hugo from content on [Contentful](https://www.contentful.com/).
 +
 +## BlogML
 +
 +- [BlogML2Hugo](https://github.com/jijiechen/BlogML2Hugo) - A tool that helps you convert BlogML xml file to Hugo Markdown files. Users need to take care of links to attachments and images by themselves. This helps the blogs that export BlogML files (e.g. BlogEngine.NET) transform to hugo sites easily.
index ed7c530d0df4ac203b457f4b15c8e492dfc5af2d,0000000000000000000000000000000000000000..3f8aeebbb7036b6f80db8d597355bc8cddc2a893
mode 100644,000000..100644
--- /dev/null
@@@ -1,28 -1,0 +1,23 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
 +---
 +title: Other Hugo Community Projects
 +linktitle: Other Projects
 +description: Some interesting projects developed by the Hugo community that don't quite fit into our other developer tool categories.
-     parent: "tools"
 +categories: [developer tools]
 +keywords: [frontend, gui]
 +menu:
 +  docs:
- sections_weight: 70
- aliases: []
- toc: false
++    parent: tools
 +    weight: 70
 +weight: 70
 +---
 +
 +And for all the other small things around Hugo:
 +
 +- [hugo-gallery](https://github.com/icecreammatt/hugo-gallery) lets you create an image gallery for Hugo sites.
 +- [flickr-hugo-embed](https://github.com/nikhilm/flickr-hugo-embed) prints shortcodes to embed a set of images from an album on Flickr into Hugo.
 +- [hugo-openapispec-shortcode](https://github.com/tenfourty/hugo-openapispec-shortcode) A shortcode that allows you to include [Open API Spec](https://openapis.org) (formerly known as Swagger Spec) in a page.
 +- [HugoPhotoSwipe](https://github.com/GjjvdBurg/HugoPhotoSwipe) makes it easy to create image galleries using PhotoSwipe.
 +- [Hugo SFTP Upload](https://github.com/thomasmey/HugoSftpUpload) Syncs the local build of your Hugo website with your remote webserver via SFTP.
 +- [Emacs Easy Hugo](https://github.com/masasam/emacs-easy-hugo) Emacs package for writing blog posts in markdown or org-mode and building your site with Hugo.
 +- [JAMStack Themes](https://jamstackthemes.dev/ssg/hugo/). JAMStack themes is a collection of site themes filterable by static site generator and supported CMS to help build CMS-connected sites using Hugo (linking to Hugo-specific themes).
 +- [plausible-hugo](https://github.com/divinerites/plausible-hugo). Easy Hugo integration for Plausible Analytics, a simple, open-source, lightweight and privacy-friendly web analytics alternative to Google Analytics.
index 464aa91079080a1be008ec174793bbca0723fd9b,0000000000000000000000000000000000000000..030e9f2c78ccabf45e692b1cedc3e4f6e9635034
mode 100644,000000..100644
--- /dev/null
@@@ -1,36 -1,0 +1,30 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- categories: [developer tools]
- keywords: [search,tools]
 +---
 +title: Search for your Hugo Website
 +linktitle: Search
 +description: See some of the open-source and commercial search options for your newly created Hugo website.
-     parent: "tools"
 +menu:
 +  docs:
- sections_weight: 60
- aliases: []
++    parent: tools
 +    weight: 60
 +weight: 60
- * [Bonsai](https://www.bonsai.io) is a fully-managed hosted Elasticsearch service that is fast, reliable, and simple to set up. Easily ingest your docs from Hugo into Elasticsearch following [this guide from the docs](https://docs.bonsai.io/docs/hugo).
 +toc: true
 +---
 +
 +A static website with a dynamic search function? Yes, Hugo provides an alternative to embeddable scripts from Google or other search engines for static websites. Hugo allows you to provide your visitors with a custom search function by indexing your content files directly.
 +
 +* [GitHub Gist for Hugo Workflow](https://gist.github.com/sebz/efddfc8fdcb6b480f567). This gist contains a simple workflow to create a search index for your static website. It uses a simple Grunt script to index all your content files and [lunr.js](https://lunrjs.com/) to serve the search results.
 +
 +* [hugo-lunr](https://www.npmjs.com/package/hugo-lunr). A simple way to add site search to your static Hugo site using [lunr.js](https://lunrjs.com/). Hugo-lunr will create an index file of any HTML and Markdown documents in your Hugo project.
 +* [hugo-lunr-zh](https://www.npmjs.com/package/hugo-lunr-zh). A bit like Hugo-lunr, but Hugo-lunr-zh can help you separate the Chinese keywords.
 +* [GitHub Gist for Fuse.js integration](https://gist.github.com/eddiewebb/735feb48f50f0ddd65ae5606a1cb41ae). This gist demonstrates how to leverage Hugo's existing build time processing to generate a searchable JSON index used by [Fuse.js](https://fusejs.io/) on the client-side. Although this gist uses Fuse.js for fuzzy matching, any client-side search tool capable of reading JSON indexes will work. Does not require npm, grunt or other build-time tools except Hugo!
 +* [hugo-search-index](https://www.npmjs.com/package/hugo-search-index). A library containing Gulp tasks and a prebuilt browser script that implements search. Gulp generates a search index from project markdown files.
 +* [hugofastsearch](https://gist.github.com/cmod/5410eae147e4318164258742dd053993). A usability and speed update to "GitHub Gist for Fuse.js integration" — global, keyboard-optimized search.
 +* [JS & Fuse.js tutorial](https://makewithhugo.com/add-search-to-a-hugo-site/) A simple client-side search solution, using FuseJS (does not require jQuery).
 +* [Pagefind](https://github.com/cloudcannon/pagefind). A fully static search library that aims to perform well on large sites, while using as little of your users' bandwidth as possible.
 +* [Hugo Lyra](https://github.com/paolomainardi/hugo-lyra). Hugo-Lyra is a JavaScript module to integrate [Lyra](https://github.com/LyraSearch/lyra) into a Hugo website. It contains the server-side part to generate the index and the client-side library (optional) to bootstrap the search engine easily.
 +
 +## Commercial Search Services
 +
 +* [Algolia](https://www.algolia.com/)'s Search API makes it easy to deliver a great search experience in your apps and websites. Algolia Search provides hosted full-text, numerical, faceted, and geolocalized search.
++* [Bonsai](https://www.bonsai.io) is a fully-managed hosted Elasticsearch service that is fast, reliable, and simple to set up. Easily ingest your docs from Hugo into Elasticsearch following [this guide from the docs](https://docs.bonsai.io/hc/en-us/articles/13929190788756-Hugo).
 +* [ExpertRec](https://www.expertrec.com/) is a hosted search-as-a-service solution that is fast and scalable. Set-up and integration is extremely easy and takes only a few minutes. The search settings can be modified without coding using a dashboard.
index 8399e99dfc3268f131980f8c44917e7ae386035d,0000000000000000000000000000000000000000..69c8f3e0b722a31674dc22db9a6884565b6dc033
mode 100644,000000..100644
--- /dev/null
@@@ -1,38 -1,0 +1,31 @@@
- linktitle: Starter Kits
 +---
 +title: Starter Kits
- date: 2017-02-22
- publishdate: 2017-02-01
- lastmod: 2018-08-11
 +description: A list of community-developed projects designed to help you get up and running with Hugo.
-     parent: "tools"
 +keywords: [starters,assets,pipeline]
 +menu:
 +  docs:
- sections_weight: 30
- draft: false
++    parent: tools
 +    weight: 30
 +weight: 30
- toc: false
 +aliases: [/developer-tools/migrations/,/developer-tools/migrated/]
- {{% note "Starter Kits are Not Maintained by the Hugo Team"%}}
 +---
 +
 +Know of a Hugo-related starter kit that isn't mentioned here? [Please add it to the list.][addkit]
 +
- [gohugodocs]: https://gohugo-amp.gohugohq.com/
++{{% note %}}
 +The following starter kits are developed by active members of the Hugo community. If you find yourself having issues with any of the projects, it's best to file an issue directly with the project's maintainer(s).
 +{{% /note %}}
 +
 +* [Wowchemy]. Wowchemy is the 5,500+ star open source Hugo starter kit and website builder trusted by 750,000+ sites since 2016. Create _any_ kind of site with [50+ templates, widgets, and extensions](https://wowchemy.com/). Translated into 35+ languages and backed by a large, active community of 150+ contributors.
 +* [Hugo Wrapper][hugow]. Hugo Wrapper is a POSIX-style shell script which acts as a wrapper to download and run Hugo binary for your platform. It can be executed in variety of [Operating Systems][hugow-test] and [Command Shells][hugow-test].
 +* [GOHUGO AMP]. GoHugo AMP is a starter theme that aims to make it easy to adopt [Google's AMP Project][amp]. The starter kit comes with 40+ shortcodes and partials plus automatic structured data. The project also includes a [separate site with extensive documentation][gohugodocs].
 +* [Hyas]. Hyas is a Hugo starter helping you build modern websites that are secure, fast, and SEO-ready — by default. It is Netlify-ready (functions, redirects, headers) and comes with [documentation](https://gethyas.com/) to easily make it your own.
 +
 +[Wowchemy]: https://github.com/wowchemy/wowchemy-hugo-modules
 +[addkit]: https://github.com/gohugoio/hugo/edit/master/docs/content/en/tools/starter-kits.md
 +[amp]: https://amp.dev
 +[GOHUGO AMP]: https://github.com/wildhaber/gohugo-amp
++[gohugodocs]: https://github.com/wildhaber/gohugo-amp.gohugohq.com
 +[hugow]: https://github.com/khos2ow/hugo-wrapper
 +[hugow-test]: https://github.com/khos2ow/hugo-wrapper#tested-on
 +[Hyas]: https://github.com/h-enk/hyas
index 3170dc7d848924dc6c7d5848ee0f09c32082e2a3,0000000000000000000000000000000000000000..51f1791a3a6b86a612d6bc5b7b58143619b531b1
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,14 @@@
- linktitle: Troubleshoot
 +---
 +title: Troubleshoot
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Frequently asked questions and known issues pulled from the Hugo Discuss forum.
-     parent: "troubleshooting"
 +menu:
 +  docs:
- draft: false
- hidesectioncontents: false
- slug:
++    parent: troubleshooting
 +    weight: 1
 +weight: 1
- toc: false
- notesforauthors:
 +aliases: [/troubleshooting/faqs/,/faqs/]
 +---
 +
 +The Troubleshooting section includes known issues, recent workarounds, and FAQs pulled from the [Hugo Discussion Forum][forum].
 +
 +[forum]: https://discourse.gohugo.io
index ea31ef84b62876cf863755fb47c99a0c5cb96080,0000000000000000000000000000000000000000..b58cdc11fe1e2dbfb05b54d5bee5fbc24827cae7
mode 100644,000000..100644
--- /dev/null
@@@ -1,94 -1,0 +1,87 @@@
- linktitle: Build Performance
 +---
 +title: Build Performance
- date: 2017-03-12
- publishdate: 2017-03-12
- keywords: [performance, build]
- categories: [troubleshooting]
 +description: An overview of features used for diagnosing and improving performance issues in site builds.
-     parent: "troubleshooting"
 +menu:
 +  docs:
- slug:
- aliases: []
++    parent: troubleshooting
 +weight: 3
- {{% tip %}}
 +toc: true
 +---
 +
 +## Template Metrics
 +
 +Hugo is a very fast static site generator, but it is possible to write
 +inefficient templates. Hugo's _template metrics_ feature is extremely helpful
 +in pinpointing which templates are executed most often and how long those
 +executions take **in terms of CPU time**.
 +
 +| Metric Name         | Description                                                    |
 +| ------------------- | -------------------------------------------------------------- |
 +| cumulative duration | The cumulative time spent executing a given template.          |
 +| average duration    | The average time spent executing a given template.             |
 +| maximum duration    | The maximum time a single execution took for a given template. |
 +| count               | The number of times a template was executed.                   |
 +| template            | The template name.                                             |
 +
 +```txt
 +▶ hugo --templateMetrics
 +Started building sites ...
 +
 +Built site for language en:
 +0 draft content
 +0 future content
 +0 expired content
 +2 regular pages created
 +22 other pages created
 +0 non-page files copied
 +0 paginator pages created
 +4 tags created
 +3 categories created
 +total in 18 ms
 +
 +Template Metrics:
 +
 +     cumulative       average       maximum
 +       duration      duration      duration  count  template
 +     ----------      --------      --------  -----  --------
 +     6.419663ms     583.605µs     994.374µs     11  _internal/_default/rss.xml
 +     4.718511ms    1.572837ms    3.880742ms      3  indexes/category.html
 +     4.642666ms    2.321333ms    3.282842ms      2  posts/single.html
 +     4.364445ms     396.767µs    2.451372ms     11  partials/header.html
 +     2.346069ms     586.517µs     903.343µs      4  indexes/tag.html
 +     2.330919ms     211.901µs    2.281342ms     11  partials/header.includes.html
 +     1.238976ms     103.248µs     446.084µs     12  posts/li.html
 +       972.16µs      972.16µs      972.16µs      1  _internal/_default/sitemap.xml
 +      953.597µs     953.597µs     953.597µs      1  index.html
 +      822.263µs     822.263µs     822.263µs      1  indexes/post.html
 +      567.498µs       51.59µs     112.205µs     11  partials/navbar.html
 +       348.22µs      31.656µs      88.249µs     11  partials/meta.html
 +      346.782µs     173.391µs     276.176µs      2  posts/summary.html
 +      235.184µs       21.38µs     124.383µs     11  partials/footer.copyright.html
 +      132.003µs          12µs     117.999µs     11  partials/menu.html
 +       72.547µs       6.595µs      63.764µs     11  partials/footer.html
 +```
 +
 +{{% note %}}
 +**A Note About Parallelism**
 +
 +Hugo builds pages in parallel where multiple pages are generated
 +simultaneously. Because of this parallelism, the sum of "cumulative duration"
 +values is usually greater than the actual time it takes to build a site.
 +{{% /note %}}
 +
 +## Cached Partials
 +
 +Some `partial` templates such as sidebars or menus are executed many times
 +during a site build. Depending on the content within the `partial` template and
 +the desired output, the template may benefit from caching to reduce the number
 +of executions. The [`partialCached`][partialcached] template function provides
 +caching capabilities for `partial` templates.
 +
- {{% /tip %}}
++{{% note %}}
 +Note that you can create cached variants of each `partial` by passing additional
 +parameters to `partialCached` beyond the initial context. See the
 +`partialCached` documentation for more details.
- [partialCached]:{{< ref "/functions/partialCached.md" >}}
++{{% /note %}}
 +
++[partialCached]: /functions/partialcached
index 998f9bbbe807d9af719acb2167b92b69f7b6e0a2,0000000000000000000000000000000000000000..04e857acb751741c1d2751c92946bbd163b028ee
mode 100644,000000..100644
--- /dev/null
@@@ -1,62 -1,0 +1,61 @@@
- date: 2018-02-10
 +---
 +title: Frequently Asked Questions
 +linktitle: FAQ
 +description: Solutions to some common Hugo problems.
-     parent: "troubleshooting"
 +categories: [troubleshooting]
 +menu:
 +  docs:
++    parent: troubleshooting
 +keywords: [faqs]
 +weight: 2
 +toc: true
 +aliases: [/faq/]
 +---
 +
 +{{% note %}}
 +**Note:** The answers/solutions presented below are short, and may not be enough to solve your problem. Visit [Hugo Discourse](https://discourse.gohugo.io/) and use the search. It that does not help, start a new topic and ask your questions.
 +{{% /note %}}
 +
 +## I can't see my content!
 +
 +Is your Markdown file [in draft mode](https://gohugo.io/content-management/front-matter/#front-matter-variables)? When testing, run `hugo server` with the `-D` or `--buildDrafts` [switch](https://gohugo.io/getting-started/usage/#draft-future-and-expired-content).
 +
 +Is your Markdown file part of a [leaf bundle](/content-management/page-bundles/)? If there is an `index.md` file in the same or any parent directory then other Markdown files will not be rendered as individual pages.
 +
 +## Can I set configuration variables via OS environment?
 +
 +Yes you can! See [Configure with Environment Variables](/getting-started/configuration/#configure-with-environment-variables).
 +
 +## How do I schedule posts?
 +
 +1. Set `publishDate` in the page [Front Matter](/content-management/front-matter/) to a datetime in the future. If you want the creation and publication datetime to be the same, it's also sufficient to only set `date`[^date-hierarchy].
 +2. Build and publish at intervals.
 +
 +How to automate the "publish at intervals" part depends on your situation:
 +
 +* If you deploy from your own PC/server, you can automate with [Cron](https://en.wikipedia.org/wiki/Cron) or similar.
 +* If your site is hosted on a service similar to [Netlify](https://www.netlify.com/) you can:
 +  * Use a service such as [ifttt](https://ifttt.com/date_and_time) to schedule the updates
 +  * Set up a deploy hook which you can run with a cron service to deploy your site at intervals, such as [cron-job.org](https://cron-job.org/) (both Netlify and Cloudflare Pages support deploy hooks)
 +
 +Also see this Twitter thread:
 +
 +{{< tweet user="ChrisShort" id="962380712027590657" >}}
 +
 +[^date-hierarchy]: See [Configure Dates](https://gohugo.io/getting-started/configuration/#configure-dates) for the order in which the different date variables are complemented by each other when not explicitly set.
 +
 +## Can I use the latest Hugo version on Netlify?
 +
 +Yes you can! Read [this](/hosting-and-deployment/hosting-on-netlify/#configure-hugo-version-in-netlify).
 +
 +## I get "... this feature is not available in your current Hugo version"
 +
 +If you process `SCSS` or `Sass` to `CSS` in your Hugo project with `libsass` as the transpiler or if you convert images to the `webp` format, you need the Hugo `extended` version, or else you may see an error message similar to the below:
 +
 +```bash
 +error: failed to transform resource: TOCSS: failed to transform "scss/main.scss" (text/x-scss): this feature is not available in your current Hugo version
 +```
 +
 +We release two set of binaries for technical reasons. The extended version is not what you get by default for some installation methods. On the [release page](https://github.com/gohugoio/hugo/releases), look for archives with `extended` in the name. To build `hugo-extended`, use `go install --tags extended`
 +
 +To confirm, run `hugo version` and look for the word `extended`.
index 382ee25d4feee04ac70964bf266df375a72f3313,0000000000000000000000000000000000000000..9b5289573166a09144698a3c804eb1f856ae4626
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,17 @@@
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: Variables and Params
 +linktitle: Variables Overview
 +description: Page-, file-, taxonomy-, and site-level variables and parameters available in templates.
- draft: false
 +categories: [variables and params]
 +keywords: [variables,params,values,globals]
-     parent: "variables"
 +menu:
 +  docs:
- weight: 01    #rem
- sections_weight: 01
++    parent: variables
 +    weight: 1
- toc: false
++weight: 01
 +aliases: [/templates/variables/]
 +---
 +
 +Hugo's templates are context aware and make a large number of values available to you as you're creating views for your website.
 +
 +[Go templates]: /templates/introduction/ "Understand context in Go templates by learning the language's fundamental templating functions."
index 4e6c0632f06b33baaf7723adc68154fb7454ae39,0000000000000000000000000000000000000000..784ab7c648688e641c060ec70f8212985d7447b6
mode 100644,000000..100644
--- /dev/null
@@@ -1,54 -1,0 +1,102 @@@
- linktitle:
- description: "You can access filesystem-related data for a content file in the `.File` variable."
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: File Variables
- draft: false
++description: "Use File variables to access file-related values for each page that is backed by a file."
 +categories: [variables and params]
 +keywords: [files]
-     parent: "variables"
 +menu:
 +  docs:
- sections_weight: 40
++    parent: variables
 +    weight: 40
++toc: true
 +weight: 40
- toc: false
 +aliases: [/variables/file-variables/]
- {{% note "Rendering Local Files" %}}
- For information on creating shortcodes and templates that tap into Hugo's file-related feature set, see [Local File Templates](/templates/files/).
 +---
++## Variables
 +
- The `.File` object contains the following fields:
++{{% note %}}
++The path separators (slash or backslash) in `.File.Path`, `.File.Dir`, and `.File.Filename` depend on the operating system.
 +{{% /note %}}
 +
- : the original relative path of the page, relative to the content dir (e.g., `posts/foo.en.md`)
- .File.LogicalName
- : the name of the content file that represents a page (e.g., `foo.en.md`)
 +.File.Path
- .File.TranslationBaseName
- : the filename without extension or optional language identifier (e.g., `foo`)
++: (`string`) The file path, relative to the `content` directory.
 +
- .File.ContentBaseName
- : is either a TranslationBaseName or name of containing folder if file is a leaf bundle.
++.File.Dir
++: (`string`) The file path, excluding the file name, relative to the `content` directory.
 +
- : the filename without extension (e.g., `foo.en`)
++.File.LogicalName
++: (`string`) The file name.
 +
 +.File.BaseFileName
- : the file extension of the content file (e.g., `md`).
++: (`string`) The file name, excluding the extension.
++
++.File.TranslationBaseName
++: (`string`) The file name, excluding the extension and language identifier.
 +
 +.File.Ext
- : the language associated with the given file if Hugo's [Multilingual features][multilingual] are enabled (e.g., `en`)
++: (`string`) The file extension.
 +
 +.File.Lang
- .File.Dir
- : given the path `content/posts/dir1/dir2/`, the relative directory path of the content file will be returned (e.g., `posts/dir1/dir2/`). Note that the path separator (`\` or `/`) could be dependent on the operating system.
++: (`string`) The language associated with the given file.
 +
- : the MD5-checksum of the content file's path.
++
++.File.ContentBaseName
++: (`string`) If the page is a branch or leaf bundle, the name of the containing directory, else the `.TranslationBaseName`.
++
++.File.Filename
++: (`string`) The absolute file path.
 +
 +.File.UniqueID
- [Multilingual]: /content-management/multilingual/
++: (`string`) The MD5 hash of `.File.Path`.
++
++## Examples
++
++```text
++content/
++├── news/
++│   ├── b/
++│   │   ├── index.de.md   <-- leaf bundle
++│   │   └── index.en.md   <-- leaf bundle
++│   ├── a.de.md           <-- regular content
++│   ├── a.en.md           <-- regular content
++│   ├── _index.de.md      <-- branch bundle
++│   └── _index.en.md      <-- branch bundle
++├── _index.de.md
++└── _index.en.md
++```
++
++With the content structure above, the `.File` objects for the English pages contain the following properties:
++
++&nbsp;|regular content|leaf bundle|branch bundle
++:--|:--|:--|:--
++Path|news/a.en.md|news/b/index.en.md|news/_index.en.md
++Dir|news/|news/b/|news/
++LogicalName|a.en.md|index.en.md|_index.en.md
++BaseFileName|a.en|index.en|_index.en
++TranslationBaseName|a|index|_index
++Ext|md|md|md
++Lang|en|en|en
++ContentBaseName|a|b|news
++Filename|/home/user/...|/home/user/...|/home/user/...
++UniqueID|15be14b...|186868f...|7d9159d...
++
++## Defensive coding
++
++Some of the pages on a site may not be backed by a file. For example:
++
++- Top level section pages
++- Taxonomy pages
++- Term pages
++
++Without a backing file, Hugo will throw a warning if you attempt to access a `.File` property. For example:
++
++```text
++WARN .File.ContentBaseName on zero object. Wrap it in if or with...
++```
++
++To code defensively:
 +
++```go-html-template
++{{ with .File }}
++  {{ .ContentBaseName }}
++{{ end }}
++```
index 24878e350de090ac3142afe2a34e3990c4c8360e,0000000000000000000000000000000000000000..dfd6e5407445e2852af4e4450aab51074b987e58
mode 100644,000000..100644
--- /dev/null
@@@ -1,58 -1,0 +1,51 @@@
- date: 2017-03-12
- publishdate: 2017-03-12
- lastmod: 2017-03-12
 +---
 +title: Git Info Variables
 +linktitle: Git Variables
 +description: Get the last Git revision information for every content file.
- draft: false
 +categories: [variables and params]
 +keywords: [git]
-     parent: "variables"
 +menu:
 +  docs:
- sections_weight: 70
++    parent: variables
 +    weight: 70
 +weight: 70
- toc: false
- wip: false
 +aliases: [/extras/gitinfo/]
- {{% note "`.GitInfo` Performance Considerations"  %}}
 +---
 +
++{{% note %}}
 +Hugo's Git integrations should be fairly performant but *can* increase your build time. This will depend on the size of your Git history.
 +{{% /note %}}
 +
 +## `.GitInfo` Prerequisites
 +
 +1. The Hugo site must be in a Git-enabled directory.
 +2. The Git executable must be installed and in your system `PATH`.
 +3. The `.GitInfo` feature must be enabled in your Hugo project by passing `--enableGitInfo` flag on the command line or by setting `enableGitInfo` to `true` in your [site's configuration file][configuration].
 +
 +## The `.GitInfo` Object
 +
 +The `GitInfo` object contains the following fields:
 +
 +.AbbreviatedHash
 +: the abbreviated commit hash (e.g., `866cbcc`)
 +
 +.AuthorName
 +: the author's name, respecting [`.mailmap`](https://git-scm.com/docs/gitmailmap)
 +
 +.AuthorEmail
 +: the author's email address, respecting [`.mailmap`](https://git-scm.com/docs/gitmailmap)
 +
 +.AuthorDate
 +: the author date
 +
 +.Hash
 +: the commit hash (e.g., `866cbccdab588b9908887ffd3b4f2667e94090c3`)
 +
 +.Subject
 +: commit message subject (e.g., `tpl: Add custom index function`)
 +
 +## `.Lastmod`
 +
 +If the `.GitInfo` feature is enabled, `.Lastmod` (on `Page`) is fetched from Git i.e. `.GitInfo.AuthorDate`. This behavior can be changed by adding your own [front matter configuration for dates](/getting-started/configuration/#configure-front-matter).
 +
 +[configuration]: /getting-started/configuration/
index a59560729603a210735ffd17dc9fe5adfaccd23c,0000000000000000000000000000000000000000..b88514803e0196ea9e3da94bcf866bc3f1b38217
mode 100644,000000..100644
--- /dev/null
@@@ -1,127 -1,0 +1,92 @@@
- title: Menu Entry Properties
- linktitle: Menu Entry Properties
- description: A menu entry in a menu-template has specific variables and functions to make menu management easier.
- date: 2017-03-12
- publishdate: 2017-03-12
- lastmod: 2017-03-12
 +---
- draft: false
++title: Menu Variables
++description: Use these variables and methods in your menu templates.
 +categories: [variables and params]
 +keywords: [menus]
-     title: "variables defined by a menu entry"
-     parent: "variables"
 +menu:
 +  docs:
- sections_weight: 50
++    parent: variables
 +    weight: 50
 +weight: 50
- toc: false
 +aliases: [/variables/menu/]
- A **menu entry** has the following properties available that can be used in a
- [menu template][menu-template].
 +---
 +
- ## Menu Entry Variables
++## Variables
 +
- : _string_ <br />
- Name of the **menu** that contains this **menu entry**.
++After [defining menu entries], access their properties in [menu templates] with these variables.
++
++.Children
++: (`menu`) A collection of child menu entries, if any, under the current menu entry.
++
++.Identifier
++: (`string`) The `identifier` property of the menu entry. If you define the menu entry [automatically], the page's `.Section`.
++
++.KeyName
++: (`string`) The `identifier` property of the menu entry, else the `name` property.
 +
 +.Menu
- .URL
- : _string_ <br />
- URL that the menu entry points to. The `url` key, if set for the menu entry,
- sets this value. If that key is not set, and if the menu entry is set in a page
- front-matter, this value defaults to the page's `.RelPermalink`.
++: (`string`) The identifier of the menu that contains the menu entry.
 +
- : _\*Page_ <br />
- Reference to the [page object][page-object] associated with the menu entry. This
- will be non-nil if the menu entry is set via a page's front-matter and not via
- the site config.
++.Name
++: (`string`) The `name` property of the menu entry.
++
++- If you define the menu entry [automatically], the page's `.LinkTitle`, else the page's `.Title`.
++- If you define the menu [in front matter] or [in site configuration], falls back to the page's `.LinkTitle`, then to the page's `.Title`.
 +
 +.Page
- : _string_ <br /> Can be set if defined in site config and the menu entry refers to a Page. [site.GetPage](/functions/getpage/) will be used to do the page lookup. If this is set, you don't need to set the `URL`.
++: (`page`) A reference to the page associated with the menu entry.
 +
++<!-- This provides no value when rendering menu. Omitting to avoid confusion.
 +.PageRef
- .Name
- : _string_ <br />
- Name of the menu entry. The `name` key, if set for the menu entry, sets
- this value. If that key is not set, and if the menu entry is set in a page
- front-matter, this value defaults to the page's `.LinkTitle`.
++: (`string`) The `pageRef` property of the menu entry.
++-->
 +
- .Identifier
- : _string_ <br />
- Value of the `identifier` key if set for the menu entry. This value must be
- unique for each menu entry. **It is necessary to set a unique identifier
- manually if two or more menu entries have the same `.Name`.**
++.Params
++: (`map`) The `params` property of the menu entry.
 +
- : _template.HTML_ <br />
- Value of the `pre` key if set for the menu entry. This value typically contains
- a string representing HTML.
++.Parent
++: (`string`)  The `parent` property of the menu entry.
++
++.Post
++: (`template.HTML`) The `post` property of the menu entry.
 +
 +.Pre
- .Post
- : _template.HTML_ <br />
- Value of the `post` key if set for the menu entry. This value typically contains
- a string representing HTML.
++: (`template.HTML`) The `pre` property of the menu entry.
 +
- .Weight
- : _int_ <br />
- Value of the `weight` key if set for the menu entry. By default the entries in
- a menu are sorted ascending by their `weight`. If that key is not set, and if
- the menu entry is set in a page front-matter, this value defaults to the page's
- `.Weight`.
++.Title
++: (`string`) The `title` property of the menu entry.
 +
- .Parent
- : _string_ <br />
- Name (or Identifier if present) of this menu entry's parent **menu entry**. The
- `parent` key, if set for the menu entry, sets this value. If this key is set,
- this menu entry nests under that parent entry, else it nests directly under the
- `.Menu`.
++- If you define the menu entry [automatically], the page's `.LinkTitle`, else the page's `.Title`.
++- If you define the menu [in front matter] or [in site configuration], falls back to the page's `.LinkTitle`, then to the page's `.Title`.
 +
- .Children
- : _Menu_ <br />
- This value is auto-populated by Hugo. It is a collection of children menu
- entries, if any, under the current menu entry.
++.URL
++: (`string`) The `.RelPermalink` of the page associated with the menu entry. For menu entries pointing to external resources, the `url` property of the menu entry.
 +
- ## Menu Entry Functions
++.Weight
++: (`int`) The `weight` property of the menu entry.
 +
- Menus also have the following functions available:
++- If you define the menu entry [automatically], the page's `.Weight`.
++- If you define the menu [in front matter] or [in site configuration], falls back to the page's `.Weight`.
 +
- : _boolean_ <br />
- Returns `true` if `.Children` is non-nil.
- .KeyName
- : _string_ <br />
- Returns the `.Identifier` if present, else returns the `.Name`.
++## Methods
 +
 +.HasChildren
- : _boolean_ <br />
- Returns `true` if the two compared menu entries represent the same menu entry.
++: (`bool`) Returns `true` if `.Children` is non-nil.
 +
 +.IsEqual
- : _boolean_ <br />
- Returns `true` if the two compared menu entries have the same `.URL`.
- .Title
- : _string_ <br />
- Link title, meant to be used in the `title` attribute of a menu entry's
- `<a>`-tags.  Returns the menu entry's `title` key if set. Else, if the menu
- entry was created through a page's front-matter, it returns the page's
- `.LinkTitle`. Else, it just returns an empty string.
- ## Other Menu-related Functions
- Additionally, here are some relevant methods available to menus on a page:
++: (`bool`) Returns `true` if the compared menu entries represent the same menu entry.
 +
 +.IsSameResource
- .IsMenuCurrent
- : _(menu string, menuEntry *MenuEntry ) boolean_ <br />
- See [`.IsMenuCurrent` method](/functions/ismenucurrent/).
++: (`bool`) Returns `true` if the compared menu entries point to the same resource.
 +
- .HasMenuCurrent
- : _(menu string, menuEntry *MenuEntry) boolean_ <br />
- See [`.HasMenuCurrent` method](/functions/hasmenucurrent/).
++.Page.HasMenuCurrent
++: (`bool`) Use this method to determine ancestors of the active menu entry. See [details](/functions/hasmenucurrent/).
 +
- [menu-template]: /templates/menu-templates/
- [page-object]: /variables/page/
++.Page.IsMenuCurrent
++: (`bool`) Use this method to determine the active menu entry. See [details](/functions/ismenucurrent/).
 +
++[automatically]: /content-management/menus/#define-automatically
++[defining menu entries]: /content-management/menus/#overview
++[in front matter]: /content-management/menus/#define-in-front-matter
++[in site configuration]: /content-management/menus/#define-in-site-configuration
++[menu templates]: /templates/menu-templates/
index 2de54ff8bebe6fd1b7bd38a4850375a8f66deb24,0000000000000000000000000000000000000000..f8266965eb31b95bb014ae30d2803d832a446f2b
mode 100644,000000..100644
--- /dev/null
@@@ -1,301 -1,0 +1,325 @@@
- linktitle:
 +---
 +title: Page Variables
- date: 2017-02-01
- publishdate: 2017-02-01
 +description: Page-level variables are defined in a content file's front matter, derived from the content's file location, or extracted from the content body itself.
- draft: false
 +categories: [variables and params]
 +keywords: [pages]
-     title: "variables defined by a page"
-     parent: "variables"
 +menu:
 +  docs:
- sections_weight: 20
- aliases: []
++    parent: variables
 +    weight: 20
 +weight: 20
- {{% note "`.Scratch`" %}}
- See [`.Scratch`](/functions/scratch/) for page-scoped, writable variables.
- {{% /note %}}
 +toc: true
 +---
 +
 +The following is a list of page-level variables. Many of these will be defined in the front matter, derived from file location, or extracted from the content itself.
 +
- : get the ancestors of each page, simplify [breadcrumb navigation]({{< relref "content-management/sections#example-breadcrumb-navigation" >}}) implementation complexity  
 +## Page Variables
 +
 +.AlternativeOutputFormats
 +: contains all alternative formats for a given page; this variable is especially useful `link rel` list in your site's `<head>`. (See [Output Formats](/templates/output-formats/).)
 +
 +.Aliases
 +: aliases of this page
 +
 +.Ancestors
- : Points up to the next [regular page](/variables/site/#site-pages) (sorted by Hugo's [default sort](/templates/lists#default-weight--date--linktitle--filepath)). Example: `{{with .Next}}{{.Permalink}}{{end}}`. Calling `.Next` from the first page returns `nil`.
++: get the ancestors of each page, simplify [breadcrumb navigation](/content-management/sections#example-breadcrumb-navigation) implementation complexity  
 +
 +.BundleType
 +: the [bundle] type: `leaf`, `branch`, or an empty string if the page is not a bundle.
 +
 +.Content
 +: the content itself, defined below the front matter.
 +
 +.Data
 +: the data specific to this type of page.
 +
 +.Date
 +: the date associated with the page; `.Date` pulls from the `date` field in a content's front matter. See also `.ExpiryDate`, `.PublishDate`, and `.Lastmod`.
 +
 +.Description
 +: the description for the page.
 +
 +.Draft
 +: a boolean, `true` if the content is marked as a draft in the front matter.
 +
 +.ExpiryDate
 +: the date on which the content is scheduled to expire; `.ExpiryDate` pulls from the `expirydate` field in a content's front matter. See also `.PublishDate`, `.Date`, and `.Lastmod`.
 +
 +.File
 +: filesystem-related data for this content file. See also [File Variables].
 +
++.Fragments
++: Fragments returns the fragments for this page. See [Page Fragments](#page-fragments).
++
 +.FuzzyWordCount
 +: the approximate number of words in the content.
 +
 +.IsHome
 +: `true` in the context of the [homepage](/templates/homepage/).
 +
 +.IsNode
 +: always `false` for regular content pages.
 +
 +.IsPage
 +: always `true` for regular content pages.
 +
 +.IsSection
 +: `true` if [`.Kind`](/templates/section-templates/#page-kinds) is `section`.
 +
 +.IsTranslated
 +: `true` if there are translations to display.
 +
 +.Keywords
 +: the meta keywords for the content.
 +
 +.Kind
 +: the page's *kind*. Possible return values are `page`, `home`, `section`, `taxonomy`, or `term`. Note that there are also `RSS`, `sitemap`, `robotsTXT`, and `404` kinds, but these are only available during the rendering of each of these respective page's kind and therefore *not* available in any of the `Pages` collections.
 +
 +.Language
 +: a language object that points to the language's definition in the site `config`. `.Language.Lang` gives you the language code.
 +
 +.Lastmod
 +: the date the content was last modified. `.Lastmod` pulls from the `lastmod` field in a content's front matter.
 +
 + - If `lastmod` is not set, and `.GitInfo` feature is disabled, the front matter `date` field will be used.
 + - If `lastmod` is not set, and `.GitInfo` feature is enabled, `.GitInfo.AuthorDate` will be used instead.
 +
 +See also `.ExpiryDate`, `.Date`, `.PublishDate`, and [`.GitInfo`][gitinfo].
 +
 +.LinkTitle
 +: access when creating links to the content. If set, Hugo will use the `linktitle` from the front matter before `title`.
 +
 +.Next
- : Points up to the next [regular page](/variables/site/#site-pages) below the same top level section (e.g. in `/blog`)). Pages are sorted by Hugo's [default sort](/templates/lists#default-weight--date--linktitle--filepath). Example: `{{with .NextInSection}}{{.Permalink}}{{end}}`. Calling `.NextInSection` from the first page returns `nil`.
++: Points up to the next [regular page](/variables/site/#site-pages) (sorted by Hugo's [default sort](/templates/lists#default-weight--date--linktitle--filepath)). Example: `{{ with .Next }}{{ .Permalink }}{{ end }}`. Calling `.Next` from the first page returns `nil`.
 +
 +.NextInSection
-   the context of regular content pages. See [`.Pages`]({{< relref "page.md#pages" >}}).
++: Points up to the next [regular page](/variables/site/#site-pages) below the same top level section (e.g. in `/blog`)). Pages are sorted by Hugo's [default sort](/templates/lists#default-weight--date--linktitle--filepath). Example: `{{ with .NextInSection }}{{ .Permalink }}{{ end }}`. Calling `.NextInSection` from the first page returns `nil`.
 +
 +.OutputFormats
 +: contains all formats, including the current format, for a given page. Can be combined the with [`.Get` function](/functions/get/) to grab a specific format. (See [Output Formats](/templates/output-formats/).)
 +
 +.Pages
 +: a collection of associated pages. This value will be `nil` within
- : Points down to the previous [regular page](/variables/site/#site-pages) (sorted by Hugo's [default sort](/templates/lists#default-weight--date--linktitle--filepath)). Example: `{{if .Prev}}{{.Prev.Permalink}}{{end}}`.  Calling `.Prev` from the last page returns `nil`.
++  the context of regular content pages. See [`.Pages`](#pages).
 +
 +.Permalink
 +: the Permanent link for this page; see [Permalinks](/content-management/urls/)
 +
 +.Plain
 +: the Page content stripped of HTML tags and presented as a string. You may need to pipe the result through the [`htmlUnescape`](/functions/htmlunescape/) function when rendering this value with the HTML [output format](/templates/output-formats#output-format-definitions).
 +
 +.PlainWords
 +: the slice of strings that results from splitting .Plain into words, as defined in Go's [strings.Fields](https://pkg.go.dev/strings#Fields).
 +
 +.Prev
- : Points down to the previous [regular page](/variables/site/#site-pages) below the same top level section (e.g. `/blog`). Pages are sorted by Hugo's [default sort](/templates/lists#default-weight--date--linktitle--filepath). Example: `{{if .PrevInSection}}{{.PrevInSection.Permalink}}{{end}}`.  Calling `.PrevInSection` from the last page returns `nil`.
++: Points down to the previous [regular page](/variables/site/#site-pages) (sorted by Hugo's [default sort](/templates/lists#default-weight--date--linktitle--filepath)). Example: `{{ if .Prev }}{{ .Prev.Permalink }}{{ end }}`.  Calling `.Prev` from the last page returns `nil`.
 +
 +.PrevInSection
- ```yml
- ---
- title: My First Post
- date: 2017-02-20T15:26:23-06:00
++: Points down to the previous [regular page](/variables/site/#site-pages) below the same top level section (e.g. `/blog`). Pages are sorted by Hugo's [default sort](/templates/lists#default-weight--date--linktitle--filepath). Example: `{{ if .PrevInSection }}{{ .PrevInSection.Permalink }}{{ end }}`.  Calling `.PrevInSection` from the last page returns `nil`.
 +
 +.PublishDate
 +: the date on which the content was or will be published; `.Publishdate` pulls from the `publishdate` field in a content's front matter. See also `.ExpiryDate`, `.Date`, and `.Lastmod`.
 +
 +.RawContent
 +: raw markdown content without the front matter. Useful with [remarkjs.com](
 +https://remarkjs.com)
 +
 +.ReadingTime
 +: the estimated time, in minutes, it takes to read the content.
 +
 +.Resources
 +: resources such as images and CSS that are associated with this page
 +
 +.Ref
 +: returns the permalink for a given reference (e.g., `.Ref "sample.md"`).  `.Ref` does *not* handle in-page fragments correctly. See [Cross References](/content-management/cross-references/).
 +
 +.RelPermalink
 +: the relative permanent link for this page.
 +
 +.RelRef
 +: returns the relative permalink for a given reference (e.g., `RelRef
 +"sample.md"`). `.RelRef` does *not* handle in-page fragments correctly. See [Cross References](/content-management/cross-references/).
 +
 +.Site
 +: see [Site Variables](/variables/site/).
 +
 +.Sites
 +: returns all sites (languages). A typical use case would be to link back to the main language: `<a href="{{ .Sites.First.Home.RelPermalink }}">...</a>`.
 +
 +.Sites.First
 +: returns the site for the first language. If this is not a multilingual setup, it will return itself.
 +
 +.Summary
 +: a generated summary of the content for easily showing a snippet in a summary view. The breakpoint can be set manually by inserting <code>&lt;!&#x2d;&#x2d;more&#x2d;&#x2d;&gt;</code> at the appropriate place in the content page, or the summary can be written independent of the page text.  See [Content Summaries](/content-management/summaries/) for more details.
 +
 +.TableOfContents
 +: the rendered [table of contents](/content-management/toc/) for the page.
 +
 +.Title
 +: the title for this page.
 +
 +.Translations
 +: a list of translated versions of the current page. See [Multilingual Mode](/content-management/multilingual/) for more information.
 +
 +.TranslationKey
 +: the key used to map language translations of the current page. See [Multilingual Mode](/content-management/multilingual/) for more information.
 +
 +.Truncated
 +: a boolean, `true` if the `.Summary` is truncated. Useful for showing a "Read more..." link only when necessary.  See [Summaries](/content-management/summaries/) for more information.
 +
 +.Type
 +: the [content type](/content-management/types/) of the content (e.g., `posts`).
 +
 +.Weight
 +: assigned weight (in the front matter) to this content, used in sorting.
 +
 +.WordCount
 +: the number of words in the content.
 +
++## Writable Page-scoped Variables
++
++[.Scratch][scratch]
++: returns a Scratch to store and manipulate data. In contrast to the [`.Store`][store] method, this scratch is reset on server rebuilds.
++
++[.Store][store]
++: returns a Scratch to store and manipulate data. In contrast to the [`.Scratch`][scratch] method, this scratch is not reset on server rebuilds.
++
 +## Section Variables and Methods
 +
 +Also see [Sections](/content-management/sections/).
 +
 +{{< readfile file="/content/en/readfiles/sectionvars.md" markdown="true" >}}
 +
 +## The `.Pages` Variable {#pages}
 +
 +`.Pages` is an alias to `.Data.Pages`. It is conventional to use the
 +aliased form `.Pages`.
 +
 +### `.Pages` compared to `.Site.Pages`
 +
 +{{< getcontent path="readfiles/pages-vs-site-pages.md" >}}
 +
++## Page Fragments
++
++{{< new-in "0.111.0" >}}
++
++The `.Fragments` method returns a list of fragments for the current page.
++
++.Headings
++: A recursive list of headings for the current page. Can be used to generate a table of contents.
++
++{{< todo >}}add .Headings toc example{{< /todo >}}
++
++.Identifiers
++: A sorted list of identifiers for the current page. Can be used to check if a page contains a specific identifier or if a page contains duplicate identifiers:
++
++```go-html-template
++{{ if .Fragments.Identifiers.Contains "my-identifier" }}
++    <p>Page contains identifier "my-identifier"</p>
++{{ end }}
++
++{{ if gt (.Fragments.Identifiers.Count "my-identifier")  1 }}
++    <p>Page contains duplicate "my-identifier" fragments</p>
++{{ end }}
++```
++
++.HeadingsMap
++: Holds a map of headings for the current page. Can be used to start the table of contents from a specific heading.
++
++Also see the [Go Doc](https://pkg.go.dev/github.com/gohugoio/hugo@v0.111.0/markup/tableofcontents#Fragments) for the return type.
++
++### Fragments in hooks and shortcodes
++
++`.Fragments` are safe to call from render hooks, even on the page you're on (`.Page.Fragments`). For shortcodes we recommend that all `.Fragments` usage is nested inside the `{{</**/>}}` shortcode delimiter (`{{%/**/%}}` takes part in the ToC creation so it's easy to end up in a situation where you bite yourself in the tail).
++
++
++## The global page function
++
++{{< new-in "0.111.1" >}}
++
++Hugo almost always passes a `Page` as the data context into the top level template (e.g. `single.html`) (the one exception is the multihost sitemap template). This means that you can access the current page with the `.` variable in the template.
++
++But when you're deeply nested inside `.Render`, partial etc., accessing that `Page` object isn't always practical or possible.
++
++For this reason, Hugo provides a global `page` function that you can use to access the current page from anywhere in any template.
++
++```go-html-template
++{{ page.Title }}
++```
++
++There are one caveat with this, and this isn't new, but it's worth mentioning here: There are situations in Hugo where you may see a cached value, e.g. when using `partialCached` or in a shortcode. 
++
 +## Page-level Params
 +
 +Any other value defined in the front matter in a content file, including taxonomies, will be made available as part of the `.Params` variable.
 +
- ```
++{{< code-toggle file="content/example.md" fm=true copy=false >}}
++title: Example
 +categories: [one]
 +tags: [two,three,four]
- {{% note "Casing of Params" %}}
- Page-level `.Params` are *only* accessible in lowercase.
- {{% /note %}}
- The `.Params` variable is particularly useful for the introduction of user-defined front matter fields in content files. For example, a Hugo website on book reviews could have the following front matter in `/content/review/book01.md`:
++{{< /code-toggle >}}
 +
 +With the above front matter, the `tags` and `categories` taxonomies are accessible via the following:
 +
 +* `.Params.tags`
 +* `.Params.categories`
 +
- ```yml
- ---
- ...
++The `.Params` variable is particularly useful for the introduction of user-defined front matter fields in content files. For example, a Hugo website on book reviews could have the following front matter:
 +
- ...
- ---
- ```
++{{< code-toggle file="content/example.md" fm=true copy=false >}}
++title: Example
 +affiliatelink: "http://www.my-book-link.here"
 +recommendedby: "My Mother"
- These fields would then be accessible to the `/themes/yourtheme/layouts/review/single.html` template through `.Params.affiliatelink` and `.Params.recommendedby`, respectively.
++{{< /code-toggle >}}
 +
- Two common situations where this type of front matter field could be introduced is as a value of a certain attribute like `href=""` or by itself to be displayed as text to the website's visitors.
- {{< code file="/themes/yourtheme/layouts/review/single.html" >}}
- <h3><a href={{ printf "%s" $.Params.affiliatelink }}>Buy this book</a></h3>
++These fields would then be accessible to via `.Params.affiliatelink` and `.Params.recommendedby`.
 +
- {{< /code >}}
++```go-html-template
++<h3><a href="{{ .Params.affiliatelink }}">Buy this book</a></h3>
 +<p>It was recommended by {{ .Params.recommendedby }}.</p>
- This template would render as follows, assuming you've set [`uglyURLs`](/content-management/urls/) to `false` in your [site `config`](/getting-started/configuration/):
++```
 +
- {{< output file="yourbaseurl/review/book01/index.html" >}}
++This template would render as follows:
 +
- {{< /output >}}
++```html
 +<h3><a href="http://www.my-book-link.here">Buy this book</a></h3>
 +<p>It was recommended by my Mother.</p>
- ```yml
- ---
++```
 +
 +{{% note %}}
 +See [Archetypes](/content-management/archetypes/) for consistency of `Params` across pieces of content.
 +{{% /note %}}
 +
 +### The `.Param` Method
 +
 +In Hugo, you can declare params in individual pages and globally for your entire website. A common use case is to have a general value for the site param and a more specific value for some of the pages (i.e., a header image):
 +
 +```go-html-template
 +{{ $.Param "header_image" }}
 +```
 +
 +The `.Param` method provides a way to resolve a single value according to it's definition in a page parameter (i.e. in the content's front matter) or a site parameter (i.e., in your `config`).
 +
 +### Access Nested Fields in Front Matter
 +
 +When front matter contains nested fields like the following:
 +
- ---
- ```
++{{< code-toggle file="content/example.md" fm=true copy=false >}}
++title: Example
 +author:
 +  given_name: John
 +  family_name: Feminella
 +  display_name: John Feminella
- If your front matter contains a top-level key that is ambiguous with a nested key, as in the following case:
- ```yml
- ---
- favorites.flavor: vanilla
- favorites:
-   flavor: chocolate
- ---
- ```
- The top-level key will be preferred. Therefore, the following method, when applied to the previous example, will print `vanilla` and not `chocolate`:
- ```txt
- {{ $.Param "favorites.flavor" }}
- => vanilla
- ```
++{{< /code-toggle >}}
++
 +`.Param` can access these fields by concatenating the field names together with a dot:
 +
 +```go-html-template
 +{{ $.Param "author.display_name" }}
 +```
 +
- [bundle]: {{< relref "content-management/page-bundles" >}}
 +[gitinfo]: /variables/git/
 +[File Variables]: /variables/files/
++[bundle]: /content-management/page-bundles
++[scratch]: /functions/scratch
++[store]: /functions/store
index 61036dd74f7c5e538221b1efbee0df4accec3032,0000000000000000000000000000000000000000..15904de952f3a7a66995cc88b78644d6f71b944f
mode 100644,000000..100644
--- /dev/null
@@@ -1,30 -1,0 +1,25 @@@
- linktitle:
 +---
 +title: Pages Methods
- date: 2019-10-20
 +description: Pages is the core page collection in Hugo and has many useful methods.
- draft: false
 +categories: [variables and params]
 +keywords: [pages]
-     title: "methods defined on a page collection"
-     parent: "variables"
 +menu:
 +  docs:
- sections_weight: 20
++    parent: variables
 +    weight: 21
 +weight: 21
- `.Next` points **up** to the next page relative to the page sent in as the argument. Example: `{{with .Site.RegularPages.Next . }}{{.RelPermalink}}{{end}}`. Calling `.Next` with the first page in the collection returns `nil`.
 +aliases: [/pages]
 +toc: true
 +---
 +
 +Also see [List templates](/templates/lists) for an overview of sort methods.
 +
 +## .Next PAGE
 +
 +`.Next` and `.Prev` on `Pages` work similar to the methods with the same names on `.Page`, but are more flexible (and slightly slower) as they can be used on any page collection.
 +
- `.Prev` points **down** to the previous page relative to the page sent in as the argument. Example: `{{with .Site.RegularPages.Prev . }}{{.RelPermalink}}{{end}}`. Calling `.Prev` with the last page in the collection returns `nil`.
++`.Next` points **up** to the next page relative to the page sent in as the argument. Example: `{{ with .Site.RegularPages.Next . }}{{ .RelPermalink }}{{ end }}`. Calling `.Next` with the first page in the collection returns `nil`.
 +
 +## .Prev PAGE
 +
++`.Prev` points **down** to the previous page relative to the page sent in as the argument. Example: `{{ with .Site.RegularPages.Prev . }}{{ .RelPermalink }}{{ end }}`. Calling `.Prev` with the last page in the collection returns `nil`.
index a7c9e475b83d53a8b292cd50aa4146104d3a79a8,0000000000000000000000000000000000000000..3d4185b45e0445bfcf931aeaca4d3539c4490e22
mode 100644,000000..100644
--- /dev/null
@@@ -1,47 -1,0 +1,45 @@@
- linktitle: Shortcode Variables
 +---
 +title: Shortcode Variables
- date: 2017-03-12
- publishdate: 2017-03-12
 +description: Shortcodes can access page variables and also have their own specific built-in variables.
-     parent: "variables"
 +categories: [variables and params]
 +keywords: [shortcodes]
 +menu:
 +  docs:
- sections_weight: 20
- aliases: []
- toc: false
++    parent: variables
 +    weight: 20
 +weight: 20
- [getfunction]: /functions/get/
- [markdownshortcode]: /content-management/shortcodes/#shortcodes-with-markdown
- [shortcodes]: /templates/shortcode-templates/
 +---
 +
 +[Shortcodes][shortcodes] have access to parameters delimited in the shortcode declaration via [`.Get`][getfunction], page- and site-level variables, and also the following shortcode-specific fields:
 +
 +.Name
 +: Shortcode name.
 +
 +.Ordinal
 +: Zero-based ordinal in relation to its parent. If the parent is the page itself, this ordinal will represent the position of this shortcode in the page content.
 +
 +.Page
 +: The owning ´Page`.
 +
 +.Parent
 +: provides access to the parent shortcode context in nested shortcodes. This can be very useful for inheritance of common shortcode parameters from the root.
 +
 +.Position
 +: Contains [filename and position](https://godoc.org/github.com/gohugoio/hugo/common/text#Position) for the shortcode in a page. Note that this can be relatively expensive to calculate, and is meant for error reporting. See [Error Handling in Shortcodes](/templates/shortcode-templates/#error-handling-in-shortcodes).
 +
 +.IsNamedParams
 +: boolean that returns `true` when the shortcode in question uses [named rather than positional parameters][shortcodes]
 +
 +.Inner
 +: represents the content between the opening and closing shortcode tags when a [closing shortcode][markdownshortcode] is used
 +
++.Scratch
++: returns a writable [`Scratch`][scratch] to store and manipulate data which will be attached to the shortcode context. This scratch is reset on server rebuilds.
 +
 +.InnerDeindent {{< new-in "0.100.0" >}}
 +: Gets the `.Inner` with any indentation removed. This is what's used in the built-in `{{</* highlight */>}}` shortcode.
++
++[getfunction]: /functions/get/
++[markdownshortcode]: /content-management/shortcodes/#shortcodes-with-markdown
++[shortcodes]: /templates/shortcode-templates/
++[scratch]: /functions/scratch
index 34239ad444dcd83106cb3d266ec41768ea963485,0000000000000000000000000000000000000000..71111eb83ab8105b583213bea12470db9ae159bb
mode 100644,000000..100644
--- /dev/null
@@@ -1,129 -1,0 +1,123 @@@
- linktitle: Site Variables
 +---
 +title: Site Variables
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +description: Many, but not all, site-wide variables are defined in your site's configuration. However, Hugo provides a number of built-in variables for convenient access to global values in your templates.
- draft: false
 +categories: [variables and params]
 +keywords: [global,site]
-     parent: "variables"
 +menu:
 +  docs:
- sections_weight: 10
++    parent: variables
 +    weight: 10
 +weight: 10
- : array of all content ordered by Date with the newest first. This array contains only the pages in the current language. See [`.Site.Pages`]({{< relref "site.md#site-pages" >}}).
 +aliases: [/variables/site-variables/]
 +toc: true
 +---
 +
 +The following is a list of site-level (aka "global") variables. Many of these variables are defined in your site's [configuration file][config], whereas others are built into Hugo's core for convenient usage in your templates.
 +
 +## Get the Site object from a partial
 +
 +All the methods below, e.g. `.Site.RegularPages` can also be reached via the global [`site`](/functions/site/) function, e.g. `site.RegularPages`, which can be handy in partials where the `Page` object isn't easily available.
 +
 +## Site Variables List
 +
 +.Site.AllPages
 +: array of all pages, regardless of their translation.
 +
 +.Site.BaseURL
 +: the base URL for the site as defined in the site configuration.
 +
 +.Site.BuildDrafts
 +: a boolean (default: `false`) to indicate whether to build drafts as defined in the site configuration.
 +
 +.Site.Copyright
 +: a string representing the copyright of your website as defined in the site configuration.
 +
 +.Site.Data
 +: custom data, see [Data Templates](/templates/data-templates/).
 +
 +.Site.DisqusShortname
 +: a string representing the shortname of the Disqus shortcode as defined in the site configuration.
 +
 +.Site.GoogleAnalytics
 +: a string representing your tracking code for Google Analytics as defined in the site configuration.
 +
 +.Site.Home
 +: reference to the homepage's [page object](https://gohugo.io/variables/page/)
 +
 +.Site.IsMultiLingual
 +: whether there are more than one language in this site. See [Multilingual](/content-management/multilingual/) for more information.
 +
 +.Site.IsServer
 +: a boolean to indicate if the site is being served with Hugo's built-in server. See [`hugo server`](/commands/hugo_server/) for more information.
 +
 +.Site.Language.Lang
 +: the language code of the current locale (e.g., `en`).
 +
 +.Site.Language.LanguageName
 +: the full language name (e.g. `English`).
 +
 +.Site.Language.Weight
 +: the weight that defines the order in the `.Site.Languages` list.
 +
 +.Site.Language
 +: indicates the language currently being used to render the website. This object's attributes are set in site configurations' language definition.
 +
 +.Site.LanguageCode
 +: a string representing the language tag as defined in the site configuration.
 +
 +.Site.LanguagePrefix
 +: this can be used to prefix URLs to point to the correct language. It will even work when only one defined language. See also the functions [absLangURL](/functions/abslangurl/) and [relLangURL](/functions/rellangurl).
 +
 +.Site.Languages
 +: an ordered list (ordered by defined weight) of languages.
 +
 +.Site.LastChange
 +: a string representing the date/time of the most recent change to your site. This string is based on the [`date` variable in the front matter](/content-management/front-matter) of your content pages.
 +
 +.Site.Menus
 +: all the menus in the site.
 +
 +.Site.Pages
- : a shortcut to the *regular* page collection. `.Site.RegularPages` is equivalent to `where .Site.Pages "Kind" "page"`. See [`.Site.Pages`]({{< relref "site.md#site-pages" >}}).
++: array of all content ordered by Date with the newest first. This array contains only the pages in the current language. See [`.Site.Pages`](#site-pages).
 +
 +.Site.RegularPages
- : the [taxonomies](/taxonomies/usage/) for the entire site. Also see section [Use `.Site.Taxonomies` Outside of Taxonomy Templates](/variables/taxonomy/#use-sitetaxonomies-outside-of-taxonomy-templates).
++: a shortcut to the *regular* page collection. `.Site.RegularPages` is equivalent to `where .Site.Pages "Kind" "page"`. See [`.Site.Pages`](#site-pages).
 +
 +.Site.Sections
 +: top-level directories of the site.
 +
 +.Site.Taxonomies
- <meta name="description" content="{{if .IsHome}}{{ $.Site.Params.description }}{{else}}{{.Description}}{{end}}" />
++: the [taxonomies](/content-management/taxonomies/) for the entire site. Also see section [Access taxonomy data from any template](/variables/taxonomy/#access-taxonomy-data-from-any-template).
 +
 +.Site.Title
 +: a string representing the title of the site.
 +
 +## The `.Site.Params` Variable
 +
 +`.Site.Params` is a container holding the values from the `params` section of your site configuration.
 +
 +### Example: `.Site.Params`
 +
 +The following `config.[yaml|toml|json]` defines a site-wide param for `description`:
 +
 +{{< code-toggle file="config" >}}
 +baseURL = "https://yoursite.example.com/"
 +
 +[params]
 +  description = "Tesla's Awesome Hugo Site"
 +  author = "Nikola Tesla"
 +{{</ code-toggle >}}
 +
 +You can use `.Site.Params` in a [partial template](/templates/partials/) to call the default site description:
 +
 +{{< code file="layouts/partials/head.html" >}}
++<meta name="description" content="{{ if .IsHome }}{{ $.Site.Params.description }}{{ else }}{{ .Description }}{{ end }}" />
 +{{< /code >}}
 +
 +## The `.Site.Pages` Variable {#site-pages}
 +
 +### `.Site.Pages` compared to `.Pages`
 +
 +{{< getcontent path="readfiles/pages-vs-site-pages.md" >}}
 +
 +[config]: /getting-started/configuration/
index 24700182afa64d935e3c3af68284cf0c4854649b,0000000000000000000000000000000000000000..b0b080d00a0e71cb401c49923fa3bf8df37ced71
mode 100644,000000..100644
--- /dev/null
@@@ -1,31 -1,0 +1,25 @@@
- date: 2017-03-12
- publishdate: 2017-03-12
 +---
 +title: Sitemap Variables
 +linktitle: Sitemap Variables
 +description:
- draft: false
 +categories: [variables and params]
 +keywords: [sitemap]
-     parent: "variables"
 +menu:
 +  docs:
- sections_weight: 80
- aliases: []
- toc: false
++    parent: variables
 +    weight: 80
 +weight: 80
 +---
 +
 +A sitemap is a `Page` and therefore has all the [page variables][pagevars] available to use sitemap templates. They also have the following sitemap-specific variables available to them:
 +
 +.Sitemap.ChangeFreq
 +: the page change frequency
 +
 +.Sitemap.Priority
 +: the priority of the page
 +
 +.Sitemap.Filename
 +: the sitemap filename
 +
 +[pagevars]: /variables/page/
index 901769b3164a1dff0fd4caa3e247cad24aac0e5b,0000000000000000000000000000000000000000..63b5523288651d1c3babbcd1e446944a7651b3b5
mode 100644,000000..100644
--- /dev/null
@@@ -1,140 -1,0 +1,138 @@@
- linktitle:
 +---
 +title: Taxonomy Variables
-     parent: "variables"
 +description: Hugo's taxonomy system exposes variables to taxonomy and term templates.
 +categories: [variables and params]
 +keywords: [taxonomy,term]
 +menu:
 +  docs:
- aliases: []
++    parent: variables
 +    weight: 30
 +toc: true
 +weight: 30
-                 <a href="{{ .RelPermalink}}"> {{ .LinkTitle }}</a>
 +---
 +
 +## Taxonomy templates
 +
 +Pages rendered by taxonomy templates have `.Kind` set to `taxonomy` and `.Type` set to the taxonomy name.
 +
 +In taxonomy templates you may access `.Site`, `.Page`. `.Section`, and `.File` variables, as well as the following _taxonomy_ variables:
 +
 +.Data.Singular
 +: The singular name of the taxonomy (e.g., `tags => tag`).
 +
 +.Data.Plural
 +: The plural name of the taxonomy (e.g., `tags => tags`).
 +
 +.Data.Pages
 +: The collection of term pages related to this taxonomy. Aliased by `.Pages`.
 +
 +.Data.Terms
 +: A map of terms and weighted pages related to this taxonomy.
 +
 +.Data.Terms.Alphabetical
 +: A map of terms and weighted pages related to this taxonomy, sorted alphabetically in ascending order. Reverse the sort order with`.Data.Terms.Alphabetical.Reverse`.
 +
 +.Data.Terms.ByCount
 +: A map of terms and weighted pages related to this taxonomy, sorted by count in ascending order. Reverse the sort order with`.Data.Terms.ByCount.Reverse`.
 +
 +## Term templates
 +
 +Pages rendered by term templates have `.Kind` set to `term` and `.Type` set to the taxonomy name.
 +
 +In term templates you may access `.Site`, `.Page`. `.Section`, and `.File` variables, as well as the following _term_ variables:
 +
 +.Data.Singular
 +: The singular name of the taxonomy (e.g., `tags => tag`).
 +
 +.Data.Plural
 +: The plural name of the taxonomy (e.g., `tags => tags`).
 +
 +.Data.Pages
 +: The collection of content pages related to this taxonomy. Aliased by `.Pages`.
 +
 +.Data.Term
 +: The term itself (e.g., `tag-one`).
 +
 +## Access taxonomy data from any template
 +
 +Access the entire taxonomy data structure from any template with `site.Taxonomies`. This returns a map of taxonomies, terms, and a collection of weighted content pages related to each term. For example:
 +
 +```json
 +{
 +  "categories": {
 +    "news": [
 +      {
 +        "Weight": 0,
 +        "Page": {
 +          "Title": "Post 1",
 +          "Date": "2022-12-18T15:13:35-08:00"
 +          ...
 +          }
 +      },
 +      {
 +        "Weight": 0,
 +        "Page": {
 +          "Title": "Post 2",
 +          "Date": "2022-12-18T15:13:46-08:00",
 +          ...
 +        }
 +      }
 +    ]
 +  },
 +  "tags": {
 +    "international": [
 +      {
 +        "Weight": 0,
 +        "Page": {
 +          "Title": "Post 1",
 +          "Date": "2021-01-01T00:00:00Z"
 +          ... 
 +        }
 +      }
 +    ]
 +  }
 +}
 +```
 +
 +Access a subset of the taxonomy data structure by chaining one or more identifiers, or by using the [`index`] function with one or more keys. For example, to access the collection of weighted content pages related to the news category, use either of the following:
 +
 +[`index`]: /functions/index-function/
 +
 +```go-html-template
 +{{ $pages := site.Taxonomies.categories.news }}
 +{{ $pages := index site.Taxonomies "categories" "news" }}
 +```
 +
 +For example, to render the entire taxonomy data structure as a nested unordered list:
 +
 +```go-html-template
 +<ul>
 +  {{ range $taxonomy, $terms := site.Taxonomies }}
 +    <li>
 +      {{ with site.GetPage $taxonomy }}
 +        <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
 +      {{ end }}
 +      <ul>
 +        {{ range $term, $weightedPages := $terms }}
 +        <li>
 +          {{ with site.GetPage (path.Join $taxonomy $term) }}
 +            <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
 +          {{ end }}
 +        </li>
 +          <ul>
 +            {{ range $weightedPages }}
 +              <li>
++                <a href="{{ .RelPermalink }}"> {{ .LinkTitle }}</a>
 +              </li>
 +            {{ end }}
 +          </ul>
 +        {{ end }}
 +      </ul>
 +    </li>
 +  {{ end }}
 +</ul>
 +```
 +
 +See [Taxonomy Templates] for more examples.
 +
 +[Taxonomy Templates]: /templates/taxonomy-templates/
diff --cc docs/go.mod
index 33f818ad6517c1edd4e765730392c2a79089f204,0000000000000000000000000000000000000000..07badfeaf9a0379f37a935e7cb3b659571d3fcb6
mode 100644,000000..100644
--- /dev/null
@@@ -1,5 -1,0 +1,5 @@@
- require github.com/gohugoio/gohugoioTheme v0.0.0-20230124135550-462d5fe4a87f // indirect
 +module github.com/gohugoio/hugoDocs
 +
 +go 1.16
 +
++require github.com/gohugoio/gohugoioTheme v0.0.0-20230418063032-99f9185b8e11 // indirect
diff --cc docs/go.sum
index ea0d2dcbe898af0edf78be75a1b2a29cf178148b,0000000000000000000000000000000000000000..6783cb92ebfba3eb0967d4e6759693af26514780
mode 100644,000000..100644
--- /dev/null
@@@ -1,61 -1,0 +1,65 @@@
 +github.com/gohugoio/gohugoioTheme v0.0.0-20190808163145-07b3c0f73b02/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20191014144142-1f3a01deed7b h1:PWNjl46fvtz54PKO0BdiXOF6/4L/uCP0F3gtcCxGrJs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20191014144142-1f3a01deed7b/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20191021162625-2e7250ca437d h1:D3DcaYkuJbotdWNNAQpQl37txX4HQ6R5uMHoxVmTw0w=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20191021162625-2e7250ca437d/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200123151337-9475fd449324 h1:UZwHDYtGY0uOKIvcm2LWd+xfFxD3X5L222LIJdI5RE4=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200123151337-9475fd449324/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200123204146-589b4c309025 h1:ScYFARz+bHX1rEr1donVknhRdxGY/cwqK1hHvWEfrlc=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200123204146-589b4c309025/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200123205007-5d6620a0db26 h1:acXfduibbWxji9tW0WkLHbjcXFsnd5uIwXe0WfwOazg=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200123205007-5d6620a0db26/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200128164921-1d0bc5482051 h1:cS14MnUGS6xwWYfPNshimm8HdMCZiYBxWkCD0VnvgVw=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200128164921-1d0bc5482051/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200327225449-368f4cbef8d7 h1:cZ+ahAjSetbFv3aDJ9ipDbKyqaVlmkbSZ5cULgBTh+w=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200327225449-368f4cbef8d7/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200327231942-7f80b3d02bfa h1:kG+O/wT9UXomzp5eQiUuFVZ0l7YylAW6EVPLyjMxi/c=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200327231942-7f80b3d02bfa/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200328100657-2bfd5f8c6aee h1:PJZhCwnuVLyafDWNPSHk9iJvk6gEIvPRnycy7Pq3peA=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200328100657-2bfd5f8c6aee/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200518164958-62cbad03c40f h1:Ge3JACszSUyJW2Az9cJzWdo4PUqdijJA1RxoQSVMBSI=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200518164958-62cbad03c40f/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200518165806-0095b7b902a7 h1:Sy0hlWyZmFtdSY0Cobvw1ZYm3G1aR5+4DuFNRbMkh48=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200518165806-0095b7b902a7/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200711112515-b0dfe471654f h1:BWJyycs4HD7tUbaU8RIGeMay84bIBWRVVLE3yajPas4=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200711112515-b0dfe471654f/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20210301124928-2c15837dfec3 h1:ShqzOFeeg54FPSuS6q8HSeTVgj2xNZRe/YS0jNbi21g=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20210301124928-2c15837dfec3/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20210409065807-6383d8cbaf65 h1:EJzierSWKqwsrUXU6MaFe0J97c0e5pzl5dBNRRrV2Nc=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20210409065807-6383d8cbaf65/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20210409071416-c88da48134b7 h1:uRCgPslaBgLYy4ANXBoPbBQVM8aNiHoxIZTKUXpkuUA=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20210409071416-c88da48134b7/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20211211125852-b85e21c1f3d6 h1:lAgdWrn8VEg0PrNCPX4DflCg2msDKpSYV6E8RTNV3N0=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20211211125852-b85e21c1f3d6/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220228085601-7cfbda06d135 h1:6hVzfE9YhSsZP5t6jWjvVp7MoPm7Y5fEhH/ls4ahhKk=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220228085601-7cfbda06d135/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220905093719-cb8b64046950 h1:Ovlh3nuy/aNptYZHmIra2MP+ZUEqiihY0HxvhdaMqGg=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220905093719-cb8b64046950/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220912070954-88dcaf003b4d h1:UYJL6RmEepprvlgHvDnFCWtPOvjmqzFCQ90cRDRBO7U=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220912070954-88dcaf003b4d/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220914071648-0ef1c51685bf h1:A8Ksnvp8reNt2Ap0mUK7gFkJkCjt9R60yopGsezcOBA=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220914071648-0ef1c51685bf/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221116211530-5ae8dcdd68d6 h1:eG53kL1LkQuKmrDdzbvvx6d60qM07zp2Wjo/tYxkDOY=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221116211530-5ae8dcdd68d6/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221118083537-967e29e21382 h1:e30rl1dxWkYOcgdl0omeOK0HBzgDLI/b9MfYHrINjzU=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221118083537-967e29e21382/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221124154621-1451a01f406b h1:TRrIisSY7ckt9FVHOOQtmKG4jsnORCYn72UMvMu+IQ0=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221124154621-1451a01f406b/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221206093948-1408550ab675 h1:wjpYa1cTELeceWndBDV7IG2vRxRWICBBO79HObOfTtk=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221206093948-1408550ab675/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221217122332-1c1752ad8f14 h1:K6tPFpi7W0zb89QIf+lNdgdTXfDFemU6NKk46MlX9lQ=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221217122332-1c1752ad8f14/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221220160735-8ffa1ef883b6 h1:yEoQecRBoLGfc7yTybMD3Mhm03bTScZFYPvwe0p75vA=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221220160735-8ffa1ef883b6/go.mod h1:GOYeAPQJ/ok8z7oz1cjfcSlsFpXrmx6VkzQ5RpnyhZM=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20230109120406-12694c4a9456 h1:RSLItaapVjWkqSdQhumAmJkodFDbWMGNZmkVW/AFx0c=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20230109120406-12694c4a9456/go.mod h1:GOYeAPQJ/ok8z7oz1cjfcSlsFpXrmx6VkzQ5RpnyhZM=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20230119103504-3bcd960d6f1b h1:i/iaEOOuR1mKRR0qUOET587ooVhG8c2tllpA5HsrWNU=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20230119103504-3bcd960d6f1b/go.mod h1:GOYeAPQJ/ok8z7oz1cjfcSlsFpXrmx6VkzQ5RpnyhZM=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20230120185049-2c3c4d0ba232 h1:bEojKgKInbsLkID5Arh95vP4+0xydtn/+ayT6I8vkiU=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20230120185049-2c3c4d0ba232/go.mod h1:GOYeAPQJ/ok8z7oz1cjfcSlsFpXrmx6VkzQ5RpnyhZM=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20230124135550-462d5fe4a87f h1:8wI3zOTWQG15aKkbAZQaoGnUQff46hO95opQndBHRE4=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20230124135550-462d5fe4a87f/go.mod h1:GOYeAPQJ/ok8z7oz1cjfcSlsFpXrmx6VkzQ5RpnyhZM=
++github.com/gohugoio/gohugoioTheme v0.0.0-20230330081257-7a8c9614432c h1:TyHgmowfiMyxKrqTdRxm/yWIFeN7XRh7Hm6/dOG6yDA=
++github.com/gohugoio/gohugoioTheme v0.0.0-20230330081257-7a8c9614432c/go.mod h1:GOYeAPQJ/ok8z7oz1cjfcSlsFpXrmx6VkzQ5RpnyhZM=
++github.com/gohugoio/gohugoioTheme v0.0.0-20230418063032-99f9185b8e11 h1:mDcricMewd66x8QjKqNun7Div7iYVLtl8s1dVs9VnB8=
++github.com/gohugoio/gohugoioTheme v0.0.0-20230418063032-99f9185b8e11/go.mod h1:GOYeAPQJ/ok8z7oz1cjfcSlsFpXrmx6VkzQ5RpnyhZM=
diff --cc docs/hugo.toml
index da6bd95341935d5fdc5da131b487d1a7804a2d5b,0000000000000000000000000000000000000000..5bed0ab2b38845bac1db240faff7925d1bdc979b
mode 100644,000000..100644
--- /dev/null
@@@ -1,87 -1,0 +1,97 @@@
-     weight = 100
 +# This his the main configuration file. There are also environment specific configuration stored in the /config directory.
 +
 +baseURL                = "https://gohugo.io/"
 +defaultContentLanguage = "en"
 +enableEmoji            = true
 +googleAnalytics        = "G-MBZGKNMDWC"
 +ignoreErrors           = ["error-remote-getjson", "error-missing-instagram-accesstoken"]
 +languageCode           = "en-us"
 +paginate               = 100
 +pluralizeListTitles    = false
 +timeZone               = "Europe/Oslo"
 +title                  = "Hugo"
 +
 +# We do redirects via Netlify's _redirects file, generated by Hugo (see "outputs" below).
 +disableAliases = true
 +
 +[minify]
 +  [minify.tdewolff]
 +    [minify.tdewolff.html]
 +      keepWhitespace = true
 +
 +[module]
 +  [module.hugoVersion]
 +    min = "0.56.0"
 +  [[module.imports]]
 +    path = "github.com/gohugoio/gohugoioTheme"
 +
 +[outputs]
 +  home    = ["HTML", "RSS", "REDIR", "HEADERS"]
 +  section = ["HTML", "RSS"]
 +
 +[mediaTypes]
 +  [mediaTypes."text/netlify"]
 +    delimiter = ""
 +
 +[outputFormats]
 +  [outputFormats.REDIR]
 +    mediatype      = "text/netlify"
 +    baseName       = "_redirects"
 +    isPlainText    = true
 +    notAlternative = true
 +  [outputFormats.HEADERS]
 +    mediatype      = "text/netlify"
 +    baseName       = "_headers"
 +    isPlainText    = true
 +    notAlternative = true
 +
 +[caches]
 +  [caches.getjson]
 +    dir    = ":cacheDir/:project"
 +    maxAge = -1
 +  [caches.getcsv]
 +    dir    = ":cacheDir/:project"
 +    maxAge = -1
 +  [caches.images]
 +    dir    = ":cacheDir/images"
 +    maxAge = "1440h"
 +  [caches.assets]
 +    dir    = ":resourceDir/_gen"
 +    maxAge = -1
 +
 +[related]
 +  threshold    = 80
 +  includeNewer = true
 +  toLower      = false
 +  [[related.indices]]
 +    name   = "keywords"
++    weight = 60
++  [[related.indices]]
++    # Can be used as a front matter slice to link to other page fragments (headings) using their ID.
++    # This isn't particular useful in the current docs, but we're planning on getting a auto generated
++    # reference section with a better ID setup.
++    # For now, we just use it to give pages with same headings some similarity score.
++    name                 = "fragmentrefs"
++    type                 = "fragments"
++    applyFilter          = false
++    weight               = 60
++    cardinalityThreshold = 50
 +  [[related.indices]]
 +    name    = "date"
 +    weight  = 10
 +    pattern = "2006"
 +
 +[social]
 +  twitter = "GoHugoIO"
 +
 +[imaging]
 +  # See https://github.com/disintegration/imaging
 +  # CatmullRom is a sharp bicubic filter which should fit the docs site well with its many screenshots.
 +  # Note that you can also set this per image processing.
 +  resampleFilter = "CatmullRom"
 +  # Default JPEG quality setting. Default is 75.
 +  quality = 75
 +  anchor  = "smart"
 +
 +[taxonomies]
 +  category = "categories"
index 113d85a1f7df6eb7f42d4c0239e834901902b973,0000000000000000000000000000000000000000..b4cfaaa20f103d8f0a93fc7a801ec0117d76ced7
mode 100644,000000..100644
--- /dev/null
@@@ -1,108 -1,0 +1,87 @@@
- @param {string} config
-   Section of site.Data.docs.config to render.
-   Example: markup.highlight
-   Default: ""
- @param {bool} copy
-   Display a copy button.
-   Default: true
- @param {string} file
-   File name to display above the rendered code.
-   Default: ""
- @param {bool} fm
-   Does Inner represent front matter?
-   Default: false
- @param {string} Inner
-   Content between opening and closing shortcode tags.
-   Default: ""
- @param {bool} skipHeader
-   Omit top level key(s) when rendering a section of site.Data.docs.config.
-   Default: false
 +{{- /*
 +Renders syntax-highlighted configuration data in JSON, TOML, and YAML formats.
 +
- */ -}}
++@param {string} [config] The section of site.Data.docs.config to render.
++@param {bool} [copy=true] If true, display a copy to clipboard button.
++@param {string} [file] The file name to display above the rendered code.
++@param {bool} [fm=false] If true, render the code as front matter.
++@param {bool} [skipHeader=false] If false, omit top level key(s) when rendering a section of site.Data.docs.config.
++
 +@returns {template.HTML}
- {{- /* Initialize. */ -}}
- {{- $config := "" -}}
- {{- $copy := true -}}
- {{- $file := "" -}}
- {{- $fm := false -}}
- {{- $skipHeader := false -}}
++*/}}
 +
- {{- /* Get parameters, defend against string booleans. */ -}}
- {{- if .Params -}}
-   {{- $config = .Get "config" -}}
-   {{- $file = .Get "file" -}}
-   {{- if (isset .Params "copy") -}}
-     {{- if in (slice true "true") (.Get "copy") -}}
-       {{- $copy = true -}}
-     {{- else -}}
-       {{- $copy = false -}}
-     {{- end -}}
-   {{- end -}}
-   {{- if (isset .Params "fm") -}}
-     {{- if in (slice true "true") (.Get "fm") -}}
-       {{- $fm = true -}}
-     {{- else -}}
-       {{- $fm = false -}}
-     {{- end -}}
-   {{- end -}}
-   {{- if (isset .Params "skipHeader") -}}
-     {{- if in (slice true "true") (.Get "skipHeader") -}}
-       {{- $skipHeader = true -}}
-     {{- else -}}
-       {{- $skipHeader = false -}}
-     {{- end -}}
-   {{- end -}}
- {{- end -}}
++{{- /* Initialize. */}}
++{{- $config := "" }}
++{{- $copy := true }}
++{{- $file := "" }}
++{{- $fm := false }}
++{{- $skipHeader := false }}
 +
- {{- /* Define constants. */ -}}
- {{- $delimiters := dict "toml" "+++" "yaml" "---" -}}
- {{- $langs := slice "yaml" "toml" "json" -}}
- {{- $placeHolder := "#-hugo-placeholder-#" -}}
++{{- /* Get parameters. */}}
++{{- $config = .Get "config" }}
++{{- $file = .Get "file" }}
++{{- if in (slice "false" false 0) (.Get "copy") }}
++  {{- $copy = false }}
++{{- else if in (slice "true" true 1) (.Get "copy")}}
++  {{- $copy = true }}
++{{- end }}
++{{- if in (slice "false" false 0) (.Get "fm") }}
++  {{- $fm = false }}
++{{- else if in (slice "true" true 1) (.Get "fm")}}
++  {{- $fm = true }}
++{{- end }}
++{{- if in (slice "false" false 0) (.Get "skipHeader") }}
++  {{- $skipHeader = false }}
++{{- else if in (slice "true" true 1) (.Get "skipHeader")}}
++  {{- $skipHeader = true }}
++{{- end }}
 +
- {{- /* Render. */ -}}
- {{- $code := "" -}}
- {{- with $config -}}
-   {{- $file = $file | default "config" -}}
-   {{- $sections := (split . ".") -}}
-   {{- $configSection := index $.Site.Data.docs.config $sections -}}
-   {{- $code = dict $sections $configSection -}}
-   {{- if $skipHeader -}}
-     {{- $code = $configSection -}}
-   {{- end -}}
- {{- else -}}
-   {{- $code = $.Inner -}}
++{{- /* Define constants. */}}
++{{- $delimiters := dict "toml" "+++" "yaml" "---" }}
++{{- $langs := slice "yaml" "toml" "json" }}
++{{- $placeHolder := "#-hugo-placeholder-#" }}
 +
-         {{- . -}}{{- if not $fm -}}.{{- end -}}
++{{- /* Render. */}}
++{{- $code := "" }}
++{{- with $config }}
++  {{- $file = $file | default "config" }}
++  {{- $sections := (split . ".") }}
++  {{- $configSection := index $.Site.Data.docs.config $sections }}
++  {{- $code = dict $sections $configSection }}
++  {{- if $skipHeader }}
++    {{- $code = $configSection }}
++  {{- end }}
++{{- else }}
++  {{- $code = $.Inner }}
 +{{- end }}
 +<div class="code relative" {{ with $file }}id="{{ . | urlize }}"{{ end }}>
 +  <div class="code-nav flex flex-nowrap items-stretch">
 +    {{- with $file }}
 +      <div class="san-serif f6 dib lh-solid pl2 pv2 mr2">
-     {{- end -}}
++        {{ . }}{{ if not $fm }}.{{ end }}
 +      </div>
-         {{- $hCode := $code | transform.Remarshal . -}}
-         {{- if and $fm (in (slice "toml" "yaml") .) -}}
-           {{- $hCode = printf "%s\n%s\n%s" $placeHolder $hCode $placeHolder -}}
-         {{- end -}}
++    {{- end }}
 +    {{- range $langs }}
 +      <button data-toggle-tab="{{ . }}" class="tab-button {{ cond (eq . "yaml") "active" "" }} ba san-serif f6 dib lh-solid ph2 pv2">
 +        {{ . }}
 +      </button>
 +      &nbsp;
 +    {{- end }}
 +  </div>
 +  <div class="tab-content">
 +    {{- range $langs }}
 +      <div data-pane="{{ . }}" class="code-copy-content nt3 tab-pane {{ cond (eq . "yaml") "active" "" }}">
-         {{- /* Functionality located within filesaver.js The copy here is located in the css with .copy class so it can be replaced with JS on success */ -}}
-       {{- end -}}
++        {{- $hCode := $code | transform.Remarshal . }}
++        {{- if and $fm (in (slice "toml" "yaml") .) }}
++          {{- $hCode = printf "%s\n%s\n%s" $placeHolder $hCode $placeHolder }}
++        {{- end }}
 +        {{- $hCode = $hCode | replaceRE `\n+` "\n" }}
 +        {{ highlight $hCode . "" | replaceRE $placeHolder (index $delimiters .) | safeHTML }}
 +      </div>
 +      {{- if $copy }}
 +        <button class="needs-js copy copy-toggle bg-accent-color-dark f6 absolute top-0 right-0 lh-solid hover-bg-primary-color-dark bn white ph3 pv2" title="Copy this code to your clipboard." data-clipboard-action="copy" aria-label="copy button"></button>
++        {{- /* Functionality located within filesaver.js The copy here is located in the css with .copy class so it can be replaced with JS on success */}}
++      {{- end }}
 +    {{- end }}
 +  </div>
 +</div>
index 0ee25149d1c651e33720fa5492d6338116bc17fc,0000000000000000000000000000000000000000..31ca27596fb274a182e733da370b5f0503006ca0
mode 100644,000000..100644
--- /dev/null
@@@ -1,26 -1,0 +1,39 @@@
- {{ $file := .Get "file" }}
- {{ $codeLang := "" }}
- {{ $suffix := findRE "(\\.[^.]+)$" $file 1 }}
- {{ with $suffix }}
- {{ $codeLang = (index . 0 | strings.TrimPrefix ".") }}
- {{ end }}
- {{ with .Get "codeLang" }}{{ $codeLang = . }}{{ end }}
- {{ if eq $codeLang "html" }}
- {{ $codeLang = "go-html-template" }}
- {{ end }}
- <div class="code relative" id="{{ $file | urlize }}">
-       {{- with $file -}}
-               <div class="filename san-serif f6 dib lh-solid pl2 pv2">{{ . }}</div>
-       {{- end -}}
++{{- /*
++Renders syntax highlighted code.
++
++@param {bool} [copy=true] If true, display a copy to clipboard button.
++@param {string} [file] The file name to display above the rendered code.
++@param {string} [lang] The code language of the inner content.
++
++@returns {template.HTML}
++*/}}
 +
-       {{ if ne (.Get "copy") "false" }}
-               <button class="needs-js copy bg-accent-color-dark f6 absolute top-0 right-0 lh-solid hover-bg-primary-color-dark bn white ph3 pv2" title="Copy this code to your clipboard." data-clipboard-action="copy" aria-label="copy button">
-               </button>
-               {{/* Functionality located within filesaver.js The copy here is located in the css with .copy class so it can be replaced with JS on success */}}
-       {{ end }}
-       <div class="code-copy-content nt3" {{ with .Get "download" }}id="{{ . }}"{{ end }}>
-               {{ $inner := trim .Inner "\n" | safeHTML }}
-               {{ if .Get "nocode" }}{{ $inner }}{{ else }}{{ with $codeLang }}{{ highlight $inner . "" }}{{ else }}<pre><code>{{ $inner }}</code></pre>{{ end }}{{ end }}
-       </div>
++{{- /* Initialize. */}}
++{{- $copy := true }}
++{{- $file := "&nbsp;" }}
++{{- $lang := "" }}
 +
++{{- /* Get parameters. */}}
++{{- $file = .Get "file" }}
++{{- $lang = or (.Get "lang") (path.Ext $file | strings.TrimPrefix ".") "text" }}
++{{- if in (slice "false" false 0) (.Get "copy") }}
++  {{- $copy = false }}
++{{- else if in (slice "true" true 1) (.Get "copy")}}
++  {{- $copy = true }}
++{{- end }}
++
++{{- /* Use the go-html-template Chroma lexer for HTML. */}}
++{{- if eq $lang "html" }}
++  {{- $lang = "go-html-template" }}
++{{- end }}
++
++{{- /* Render. */}}
++<div class="code relative" id="{{ $file | urlize }}">
++  <div class="f6 dib lh-solid pl2 pv2">{{ or $file "nbsp;" }}</div>
++  {{- if $copy }}
++    <button class="needs-js copy bg-accent-color-dark f6 absolute top-0 right-0 lh-solid hover-bg-primary-color-dark bn white ph3 pv2" title="Copy this code to your clipboard." data-clipboard-action="copy" aria-label="copy button"></button>
++  {{- end }}
++  <div class="code-copy-content nt3">
++    {{- highlight (trim .Inner "\n\r") $lang }}
++  </div>
 +</div>
index d99f6d223bc9600fe34588de6ef047de0a70c75a,0000000000000000000000000000000000000000..a07e29a94c089e208d1de03f3f7c6930df90f8d8
mode 100644,000000..100644
--- /dev/null
@@@ -1,35 -1,0 +1,35 @@@
- HUGO_VERSION = "0.110.0"
 +[build]
 +publish = "public"
 +command = "hugo --gc --minify"
 +
 +[context.production.environment]
- HUGO_VERSION = "0.110.0"
++HUGO_VERSION = "0.111.3"
 +HUGO_ENV = "production"
 +HUGO_ENABLEGITINFO = "true"
 +
 +[context.split1]
 +command = "hugo --gc --minify --enableGitInfo"
 +
 +[context.split1.environment]
- HUGO_VERSION = "0.110.0"
++HUGO_VERSION = "0.111.3"
 +HUGO_ENV = "production"
 +
 +[context.deploy-preview]
 +command = "hugo --gc --minify --buildFuture -b $DEPLOY_PRIME_URL"
 +
 +[context.deploy-preview.environment]
- HUGO_VERSION = "0.110.0"
++HUGO_VERSION = "0.111.3"
 +
 +[context.branch-deploy]
 +command = "hugo --gc --minify -b $DEPLOY_PRIME_URL"
 +
 +[context.branch-deploy.environment]
++HUGO_VERSION = "0.111.3"
 +
 +[context.next.environment]
 +HUGO_ENABLEGITINFO = "true"
 +
 +[[redirects]]
 +from = "/npmjs/*"
 +to = "/npmjs/"
 +status = 200