Fixed Archetype Error for This Site

Background

In Customized Archetype for This Site, I was using

{{ slicestr .Name 11 | humanize | title }}

in the title attribute in my site’s archetypes/default.md, so that the first 11 characters (YYYY-MM-DD-) would be taken out if I type this command.

$ hugo new post/$(date -I)-<MY_POST_TITLE>.md

In practice, <MY_POST_TITLE> can be replaced to any title, like my-post-title.

Problem

I wanted to create my IntelliJ cheatsheet, so I typed this command.

$ hugo new page/intellij.md

The system returned the following error.

Error: failed to execute archetype template: template: archetype.md:2:11: execut
ing "archetype.md" at <slicestr .Name 11>: error calling slicestr: slice bounds
out of range: template: archetype.md:2:11: executing "archetype.md" at  <slicest
r .Name 11>: error calling slicestr: slice bounds out of range

Analysis

The desired page name is IntelliJ, while the unprocessed .Name would be intellij, which contains only eight characters. Cutting off the first 11 characters leads to “slice bounds out of range” error.

There’re two possible ways to solve the problem:

  1. use a custom archetype archetypes/post.md.
  2. introduce a regular expression replace replaceRE.

Solution

I copied the regular expression from the linked discussion in my previous linked post, but it wasn’t working.

{{ .Name | replaceRE "^([0-9_]{11})([a-zA-Z_])" "$2" | replaceRE  "_" " " | title }}

To breaking down the problem, I took away the second replaceRE, "$2" and all pipes, so that the replacement looks more similar to the one provided in Hugo’s official docs for replaceRE.

{{ replaceRE "^[0-9_]{11}" "" .Name }}

However, the above line returned a string like 2023-04-11-testing-title. It took me a while to realize what’s wrong through {{ .Name }}: the author of the linked forum named his/her posts like 2023_04_11_foo_bar.md, but I have been using hypens - instead of underscores _ for my file names. It’s because Google doesn’t like links with underscores _: links are usually underlined in normal and/or hovered states.

Finally I replaced the underscore _ with hyphen - in the above code block, so that it matches my personal naming convention. My new default Go-HTML template is now like this.

---
title: "{{ replaceRE `^([0-9-]{11})` "" .Name | humanize | title }}"
date: {{ .Date }}
categories:
- uncategorised
tags:
- notag
draft: true
---
Hugo 

No comment

Your email address will not be published. Required fields are marked *.