From 0b6f2b22f972b8e62f1d5eece72aea93043ffb90 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 9 Feb 2015 20:12:30 +0100 Subject: make sure that file names generated from identifiers are unique on case-insensitive file systems --- src/Locations/FoldersLocationService.kt | 2 +- src/Locations/LocationService.kt | 6 +++++- src/Locations/SingleFolderLocationService.kt | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/Locations/FoldersLocationService.kt b/src/Locations/FoldersLocationService.kt index 6bfa9446..db06dc2c 100644 --- a/src/Locations/FoldersLocationService.kt +++ b/src/Locations/FoldersLocationService.kt @@ -5,7 +5,7 @@ import java.io.File public fun FoldersLocationService(root: String): FoldersLocationService = FoldersLocationService(File(root)) public class FoldersLocationService(val root: File) : LocationService { override fun location(node: DocumentationNode): Location { - val parts = node.path.map { escapeUri(it.name) } + val parts = node.path.map { identifierToFilename(it.name) } val folder = if (node.members.none()) { // leaf node, use file in owner's folder parts.joinToString("/", limit = parts.size - 1, truncated = "") + "/" + parts.last() diff --git a/src/Locations/LocationService.kt b/src/Locations/LocationService.kt index cb0a5670..26a67382 100644 --- a/src/Locations/LocationService.kt +++ b/src/Locations/LocationService.kt @@ -32,7 +32,11 @@ public trait LocationService { } -public fun escapeUri(path: String): String = path.replace('<', '-').replace('>', '-') +public fun identifierToFilename(path: String): String { + val escaped = path.replace('<', '-').replace('>', '-') + val lowercase = escaped.replaceAll("[A-Z]") { matchResult -> "-" + matchResult.group().toLowerCase() } + return if (lowercase == "index") "--index--" else lowercase +} /** * Returns relative location between two nodes. Used for relative links in documentation. diff --git a/src/Locations/SingleFolderLocationService.kt b/src/Locations/SingleFolderLocationService.kt index 8fc6a201..4f926959 100644 --- a/src/Locations/SingleFolderLocationService.kt +++ b/src/Locations/SingleFolderLocationService.kt @@ -5,7 +5,7 @@ import java.io.File public fun SingleFolderLocationService(root: String): SingleFolderLocationService = SingleFolderLocationService(File(root)) public class SingleFolderLocationService(val root: File) : LocationService { override fun location(node: DocumentationNode): Location { - val filename = node.path.map { escapeUri(it.name) }.joinToString("-") + val filename = node.path.map { identifierToFilename(it.name) }.joinToString("-") return Location(File(root, filename)) } } \ No newline at end of file -- cgit