aboutsummaryrefslogtreecommitdiff
path: root/src/Locations
diff options
context:
space:
mode:
Diffstat (limited to 'src/Locations')
-rw-r--r--src/Locations/FoldersLocationService.kt17
-rw-r--r--src/Locations/LocationService.kt18
-rw-r--r--src/Locations/SingleFolderLocationService.kt11
3 files changed, 46 insertions, 0 deletions
diff --git a/src/Locations/FoldersLocationService.kt b/src/Locations/FoldersLocationService.kt
new file mode 100644
index 00000000..6bfa9446
--- /dev/null
+++ b/src/Locations/FoldersLocationService.kt
@@ -0,0 +1,17 @@
+package org.jetbrains.dokka
+
+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 folder = if (node.members.none()) {
+ // leaf node, use file in owner's folder
+ parts.joinToString("/", limit = parts.size - 1, truncated = "") + "/" + parts.last()
+ } else {
+ parts.joinToString("/") + (if (parts.none()) "" else "/") + "index"
+ }
+ return Location(File(root, folder))
+ }
+} \ No newline at end of file
diff --git a/src/Locations/LocationService.kt b/src/Locations/LocationService.kt
new file mode 100644
index 00000000..03f22d08
--- /dev/null
+++ b/src/Locations/LocationService.kt
@@ -0,0 +1,18 @@
+package org.jetbrains.dokka
+
+import java.io.File
+
+data class Location(val file: File)
+
+public trait LocationService {
+ fun location(node: DocumentationNode): Location
+}
+
+
+public fun escapeUri(path: String): String = path.replace('<', '_').replace('>', '_')
+
+fun LocationService.relativeLocation(node: DocumentationNode, link: DocumentationNode, extension: String): File {
+ val ownerFolder = location(node).file.getParentFile()!!
+ val memberPath = location(link).file.appendExtension(extension)
+ return ownerFolder.getRelativePath(memberPath)
+}
diff --git a/src/Locations/SingleFolderLocationService.kt b/src/Locations/SingleFolderLocationService.kt
new file mode 100644
index 00000000..8fc6a201
--- /dev/null
+++ b/src/Locations/SingleFolderLocationService.kt
@@ -0,0 +1,11 @@
+package org.jetbrains.dokka
+
+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("-")
+ return Location(File(root, filename))
+ }
+} \ No newline at end of file