From 821ba6bc8e72cc7dc1704d8241740e39af717e95 Mon Sep 17 00:00:00 2001 From: David Herman Date: Fri, 18 Oct 2024 17:34:21 -0700 Subject: [PATCH] Add new helper method for escaping YAML text ... which can be useful when importing user strings in conf.yaml files, etc. Bug #14 --- .../kobweb/cli/create/freemarker/FreemarkerState.kt | 2 ++ .../cli/create/freemarker/methods/YamlMethods.kt | 13 +++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 kobweb/src/main/kotlin/com/varabyte/kobweb/cli/create/freemarker/methods/YamlMethods.kt diff --git a/kobweb/src/main/kotlin/com/varabyte/kobweb/cli/create/freemarker/FreemarkerState.kt b/kobweb/src/main/kotlin/com/varabyte/kobweb/cli/create/freemarker/FreemarkerState.kt index 0b74401..0b404dd 100644 --- a/kobweb/src/main/kotlin/com/varabyte/kobweb/cli/create/freemarker/FreemarkerState.kt +++ b/kobweb/src/main/kotlin/com/varabyte/kobweb/cli/create/freemarker/FreemarkerState.kt @@ -17,6 +17,7 @@ import com.varabyte.kobweb.cli.create.freemarker.methods.IsPositiveNumberMethod import com.varabyte.kobweb.cli.create.freemarker.methods.IsYesNoMethod import com.varabyte.kobweb.cli.create.freemarker.methods.NotMethod import com.varabyte.kobweb.cli.create.freemarker.methods.PackageToPathMethod +import com.varabyte.kobweb.cli.create.freemarker.methods.EscapeYamlStringMethod import com.varabyte.kobweb.cli.create.freemarker.methods.YesNoToBoolMethod import com.varabyte.kobweb.common.error.KobwebException import com.varabyte.kobweb.common.path.invariantSeparatorsPath @@ -59,6 +60,7 @@ class FreemarkerState(private val src: Path, private val dest: Path) { // endregion // region Converters + "escapeYamlString" to EscapeYamlStringMethod(), // Added in 0.9.17 "fileToTitle" to FileToTitleMethod(), "fileToPackage" to FileToPackageMethod(), "not" to NotMethod(), diff --git a/kobweb/src/main/kotlin/com/varabyte/kobweb/cli/create/freemarker/methods/YamlMethods.kt b/kobweb/src/main/kotlin/com/varabyte/kobweb/cli/create/freemarker/methods/YamlMethods.kt new file mode 100644 index 0000000..bbb68a9 --- /dev/null +++ b/kobweb/src/main/kotlin/com/varabyte/kobweb/cli/create/freemarker/methods/YamlMethods.kt @@ -0,0 +1,13 @@ +package com.varabyte.kobweb.cli.create.freemarker.methods + +/** + * Utility method for escaping relevant control characters before inserting text into a yaml string. + */ +class EscapeYamlStringMethod : SingleArgMethodModel() { + override fun exec(value: String): String { + return value + // Replace backslash first, else we'd modify any quote substitutions (e.g. '"' -> '\"' -> '\\"') + .replace("\\", """\\""") + .replace("\"", """\"""") + } +} \ No newline at end of file