From fb75185dee2184c380dcf9330e93b73b33539f99 Mon Sep 17 00:00:00 2001 From: Marcin Aman Date: Wed, 16 Sep 2020 15:49:24 +0200 Subject: Escape special characters in file names --- .../main/kotlin/resolvers/local/DokkaLocationProvider.kt | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'plugins/base/src/main') diff --git a/plugins/base/src/main/kotlin/resolvers/local/DokkaLocationProvider.kt b/plugins/base/src/main/kotlin/resolvers/local/DokkaLocationProvider.kt index 43ffff85..48e44f5f 100644 --- a/plugins/base/src/main/kotlin/resolvers/local/DokkaLocationProvider.kt +++ b/plugins/base/src/main/kotlin/resolvers/local/DokkaLocationProvider.kt @@ -105,14 +105,23 @@ open class DokkaLocationProvider( companion object { internal val reservedFilenames = setOf("index", "con", "aux", "lst", "prn", "nul", "eof", "inp", "out") + //Taken from: https://stackoverflow.com/questions/1976007/what-characters-are-forbidden-in-windows-and-linux-directory-names + internal val reservedCharacters = setOf('|', '>', '<', '*', ':', '"', '?', '%') internal fun identifierToFilename(name: String): String { if (name.isEmpty()) return "--root--" - val escaped = name.replace("[<>]".toRegex(), "-") - val lowercase = escaped.replace("[A-Z]".toRegex()) { matchResult -> "-" + matchResult.value.toLowerCase() } - return if (lowercase in reservedFilenames) "--$lowercase--" else lowercase + return sanitizeFileName(name, reservedFilenames, reservedCharacters) } } } +internal fun sanitizeFileName(name: String, reservedFileNames: Set, reservedCharacters: Set): String { + val lowercase = name.replace("[A-Z]".toRegex()) { matchResult -> "-" + matchResult.value.toLowerCase() } + val withoutReservedFileNames = if (lowercase in reservedFileNames) "--$lowercase--" else lowercase + return reservedCharacters.fold(withoutReservedFileNames){ + acc, character -> + if(character in acc) acc.replace(character.toString(), "[${character.toInt()}]") + else acc + } +} -- cgit