blob: 9626f62c9a47c825daee5de4e4a3264e15107d02 [file] [log] [blame]
Ilya Ryzhenkova0bfdbd2014-07-14 15:00:33 +04001package org.jetbrains.dokka
2
Ilya Ryzhenkov68d3bc82014-07-14 19:34:52 +04003import org.jetbrains.dokka.DocumentationNode.Kind
4
Ilya Ryzhenkova0bfdbd2014-07-14 15:00:33 +04005public class MarkdownFormatService(val locationService: LocationService,
6 val signatureGenerator: SignatureGenerator) : FormatService {
7 override val extension: String = "md"
8 override fun format(node: DocumentationNode, to: StringBuilder) {
9 with (to) {
10 appendln(node.path.map { "[${it.name}](${locationService.relativeLocation(node, it, extension)})" }.joinToString(" / "))
11 appendln()
Ilya Ryzhenkov03d0fd42014-07-14 16:08:17 +040012 appendln("# ${node.name}")
Ilya Ryzhenkov69abe982014-07-14 18:38:22 +040013 appendln(node.doc.summary)
Ilya Ryzhenkov03d0fd42014-07-14 16:08:17 +040014 appendln("```")
Ilya Ryzhenkova0bfdbd2014-07-14 15:00:33 +040015 appendln(signatureGenerator.render(node))
Ilya Ryzhenkov03d0fd42014-07-14 16:08:17 +040016 appendln("```")
Ilya Ryzhenkov69abe982014-07-14 18:38:22 +040017 appendln(node.doc.description)
Ilya Ryzhenkova0bfdbd2014-07-14 15:00:33 +040018 appendln()
19 for (section in node.doc.sections) {
Ilya Ryzhenkov68d3bc82014-07-14 19:34:52 +040020 append("##### ")
21 append(section.label)
22 appendln()
23 append(section.text)
24 appendln()
Ilya Ryzhenkova0bfdbd2014-07-14 15:00:33 +040025 }
26
Ilya Ryzhenkov69abe982014-07-14 18:38:22 +040027 if (node.members.any()) {
28 appendln("### Members")
29 appendln("| Name | Signature | Summary |")
30 appendln("|------|-----------|---------|")
31 for (member in node.members.sortBy { it.name }) {
32 val relativePath = locationService.relativeLocation(node, member, extension)
Ilya Ryzhenkov68d3bc82014-07-14 19:34:52 +040033 val displayName = when (member.kind) {
34 Kind.Constructor -> "*.init*"
35 else -> signatureGenerator.renderName(member).htmlEscape()
36 }
37 append("|[${displayName}](${relativePath})")
Ilya Ryzhenkov69abe982014-07-14 18:38:22 +040038 append("|`${signatureGenerator.render(member)}`")
39 append("|${member.doc.summary} ")
40 appendln("|")
41 }
Ilya Ryzhenkova0bfdbd2014-07-14 15:00:33 +040042 }
43 }
44 }
Ilya Ryzhenkov68d3bc82014-07-14 19:34:52 +040045}