Fixing Section Casing
With a bit more playing around in Publish, I ran into another obstacle. I thought I'd try to put in a page for my CV. It'd give me a good spot to keep a current copy and it would help me when it comes time to futz with the CSS. So I add a case cv
to my SectionID
enum, rebuild and… ugh! Cv shows up in my section list. OK, I figure, it's probably pulling from the case's raw value, so I change it to case cv = "CV"
, rebuild it and… ugh! Cv still hows up in my section list.
I figure this is because the package is making use of Swift's capitalized
String property, which, rather than just forcing the case of the first character to upper case, also forces all letters following the initial one to be lowercase.
For all I know there's some option somewhere to fix this, but who the hell has time to dig through all the source code for it? So I searched for "capitalized" and verified that, sure enough, that's what was going on. So to fix it, I added an additional processing step.
Alt-clicking on (or Cmd-clicking and looking at the definition of) publish
in your main.swift
shows that the full signature of publish
is:
func publish(
withTheme theme: Theme<Website>,
indentation: Indentation.Kind? = nil,
at path: Path? = nil,
rssFeedSections: Set<SectionID> = Set(SectionID.allCases),
rssFeedConfig: RSSFeedConfiguration? = .default,
deployedUsing deploymentMethod: DeploymentMethod<Website>? = nil,
additionalSteps: [PublishingStep<Website>] = [],
plugins: [Plugin<Website>] = [],
file: StaticString = #file
) throws -> PublishedWebsite<Website>
So we can see that additionalSteps
takes an Array of PublishingStep
s. Here's one area that Publish's README documentation does a good job of covering with its addDefaultSectionTitles()
portion. A simple extension of PublishingStep
allows us to change the casing of the "CV" section.
extension PublishingStep where Site == YourWebsiteStruct {
static func fixSectionTitles() -> Self {
.step(named: "Fix messed up section titles") { context in
context.mutateAllSections { section in
switch section.id {
case .cv: section.title = "CV"
default: break
}
}
}
}
}
Now we can change the call to publish
to:
try Wdneumann().publish(
withTheme: .wdnTheme,
additionalSteps: [.fixSectionTitles()],
plugins: [.splash(withClassPrefix: "")]
)
ow when we rebuild, the section name reads as "CV" rather than "Cv".
Up next, learning to Deploy the website.