Ilya Ryzhenkov | a0bfdbd | 2014-07-14 15:00:33 +0400 | [diff] [blame] | 1 | package org.jetbrains.dokka |
| 2 | |
Ilya Ryzhenkov | 68d3bc8 | 2014-07-14 19:34:52 +0400 | [diff] [blame^] | 3 | import org.jetbrains.dokka.DocumentationNode.Kind |
| 4 | |
Ilya Ryzhenkov | a0bfdbd | 2014-07-14 15:00:33 +0400 | [diff] [blame] | 5 | public 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 Ryzhenkov | 03d0fd4 | 2014-07-14 16:08:17 +0400 | [diff] [blame] | 12 | appendln("# ${node.name}") |
Ilya Ryzhenkov | 69abe98 | 2014-07-14 18:38:22 +0400 | [diff] [blame] | 13 | appendln(node.doc.summary) |
Ilya Ryzhenkov | 03d0fd4 | 2014-07-14 16:08:17 +0400 | [diff] [blame] | 14 | appendln("```") |
Ilya Ryzhenkov | a0bfdbd | 2014-07-14 15:00:33 +0400 | [diff] [blame] | 15 | appendln(signatureGenerator.render(node)) |
Ilya Ryzhenkov | 03d0fd4 | 2014-07-14 16:08:17 +0400 | [diff] [blame] | 16 | appendln("```") |
Ilya Ryzhenkov | 69abe98 | 2014-07-14 18:38:22 +0400 | [diff] [blame] | 17 | appendln(node.doc.description) |
Ilya Ryzhenkov | a0bfdbd | 2014-07-14 15:00:33 +0400 | [diff] [blame] | 18 | appendln() |
| 19 | for (section in node.doc.sections) { |
Ilya Ryzhenkov | 68d3bc8 | 2014-07-14 19:34:52 +0400 | [diff] [blame^] | 20 | append("##### ") |
| 21 | append(section.label) |
| 22 | appendln() |
| 23 | append(section.text) |
| 24 | appendln() |
Ilya Ryzhenkov | a0bfdbd | 2014-07-14 15:00:33 +0400 | [diff] [blame] | 25 | } |
| 26 | |
Ilya Ryzhenkov | 69abe98 | 2014-07-14 18:38:22 +0400 | [diff] [blame] | 27 | 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 Ryzhenkov | 68d3bc8 | 2014-07-14 19:34:52 +0400 | [diff] [blame^] | 33 | val displayName = when (member.kind) { |
| 34 | Kind.Constructor -> "*.init*" |
| 35 | else -> signatureGenerator.renderName(member).htmlEscape() |
| 36 | } |
| 37 | append("|[${displayName}](${relativePath})") |
Ilya Ryzhenkov | 69abe98 | 2014-07-14 18:38:22 +0400 | [diff] [blame] | 38 | append("|`${signatureGenerator.render(member)}`") |
| 39 | append("|${member.doc.summary} ") |
| 40 | appendln("|") |
| 41 | } |
Ilya Ryzhenkov | a0bfdbd | 2014-07-14 15:00:33 +0400 | [diff] [blame] | 42 | } |
| 43 | } |
| 44 | } |
Ilya Ryzhenkov | 68d3bc8 | 2014-07-14 19:34:52 +0400 | [diff] [blame^] | 45 | } |