diff --git a/src/main/kotlin/de/idetools/filename_template/CreateFileWithFilenameTemplateAction.kt b/src/main/kotlin/de/idetools/filename_template/CreateFileWithFilenameTemplateAction.kt index f7ea062..2e9cacf 100644 --- a/src/main/kotlin/de/idetools/filename_template/CreateFileWithFilenameTemplateAction.kt +++ b/src/main/kotlin/de/idetools/filename_template/CreateFileWithFilenameTemplateAction.kt @@ -14,6 +14,7 @@ import java.awt.event.InputEvent import java.time.LocalDateTime import java.time.ZoneOffset import java.util.function.Consumer +import kotlin.math.max class CreateFileWithFilenameTemplateAction( text: String, @@ -52,7 +53,47 @@ class CreateFileWithFilenameTemplateAction( } private fun processTemplate(template: String): String { - val epoch = LocalDateTime.now(ZoneOffset.UTC).toEpochSecond(ZoneOffset.UTC) - return template.replace("{EPOCH}", epoch.toString()) + var placeholderLevel = 0 + var placeholder = "" + var filename = "" + + for (character in template) { + when (character) { + '{' -> { + if (0 < placeholderLevel) { + placeholder += character + } + + placeholderLevel += 1 + } + '}' -> { + if (placeholderLevel == 1) { + filename += processPlaceholder(placeholder) + placeholder = "" + } + + placeholderLevel = max(0, placeholderLevel - 1) + + if (0 < placeholderLevel) { + placeholder += character + } + } + else -> { + if (0 < placeholderLevel) { + placeholder += character + } else { + filename += character + } + } + } + } + + return filename } + + private fun processPlaceholder(placeholder: String): String = + when (placeholder) { + "EPOCH" -> LocalDateTime.now(ZoneOffset.UTC).toEpochSecond(ZoneOffset.UTC).toString() + else -> "{$placeholder}" + } }