blob: 2bd12c53269ac8684b50c47a75b62ccf7fd9a823 [file] [log] [blame]
Ilya Ryzhenkova0bfdbd2014-07-14 15:00:33 +04001package org.jetbrains.dokka
2
Ilya Ryzhenkov68d3bc82014-07-14 19:34:52 +04003
Ilya Ryzhenkov455d74a2014-09-19 22:25:27 +03004public open class MarkdownFormatService(locationService: LocationService,
Ilya Ryzhenkov455d74a2014-09-19 22:25:27 +03005 signatureGenerator: LanguageService)
Dmitry Jemerovea1f4cc2015-02-19 19:51:01 +01006: StructuredFormatService(locationService, signatureGenerator, "md") {
Ilya Ryzhenkov62cb5092014-07-15 15:54:05 +04007 override public fun formatBreadcrumbs(items: Iterable<FormatLink>): String {
8 return items.map { formatLink(it) }.joinToString(" / ")
Ilya Ryzhenkovcd7084d2014-07-14 21:15:04 +04009 }
10
Ilya Ryzhenkovfb41c692014-07-15 18:23:15 +040011 override public fun formatText(text: String): String {
12 return text.htmlEscape()
13 }
14
Ilya Ryzhenkov7c6da4b2014-10-03 19:09:31 +040015 override fun formatSymbol(text: String): String {
16 return text.htmlEscape()
17 }
18
19 override fun formatKeyword(text: String): String {
20 return text.htmlEscape()
21 }
22 override fun formatIdentifier(text: String): String {
23 return text.htmlEscape()
24 }
25
Ilya Ryzhenkov62cb5092014-07-15 15:54:05 +040026 override public fun formatCode(code: String): String {
27 return "`$code`"
Ilya Ryzhenkovcd7084d2014-07-14 21:15:04 +040028 }
29
Ilya Ryzhenkov18399492014-12-22 09:50:17 +020030 override public fun formatList(text: String): String {
31 return text
32 }
33
34 override fun formatListItem(text: String): String {
35 return "* $text"
36 }
37
Ilya Ryzhenkov9f0ff552014-10-13 13:38:40 +040038 override public fun formatStrong(text: String): String {
Ilya Ryzhenkov62cb5092014-07-15 15:54:05 +040039 return "**$text**"
Ilya Ryzhenkova0bfdbd2014-07-14 15:00:33 +040040 }
Ilya Ryzhenkovcd7084d2014-07-14 21:15:04 +040041
Ilya Ryzhenkov9f0ff552014-10-13 13:38:40 +040042 override fun formatEmphasis(text: String): String {
43 return "*$text*"
44 }
45
Dmitry Jemerove17eaa52015-01-09 20:59:58 +010046 override fun formatStrikethrough(text: String): String {
47 return "~~$text~~"
48 }
49
Ilya Ryzhenkov71cd87e2014-10-03 22:51:44 +040050 override fun formatLink(text: String, href: String): String {
51 return "[$text]($href)"
Ilya Ryzhenkov62cb5092014-07-15 15:54:05 +040052 }
53
54 override public fun appendLine(to: StringBuilder) {
55 to.appendln()
56 }
57
58 override public fun appendLine(to: StringBuilder, text: String) {
Ilya Ryzhenkovaa59acb2014-07-15 20:05:55 +040059 to.appendln(text)
Ilya Ryzhenkov62cb5092014-07-15 15:54:05 +040060 }
61
Dmitry Jemerov85a3ae72015-02-20 14:08:30 +010062 override fun appendAnchor(to: StringBuilder, anchor: String) {
63 // no anchors in Markdown
64 }
65
Dmitry Jemerov8ef68182014-12-30 12:36:14 +010066 override public fun appendParagraph(to: StringBuilder, text: String) {
Ilya Ryzhenkov280dc292014-10-14 16:08:10 +040067 to.appendln()
68 to.appendln(text)
69 to.appendln()
Ilya Ryzhenkov62cb5092014-07-15 15:54:05 +040070 }
71
72 override public fun appendHeader(to: StringBuilder, text: String, level: Int) {
73 appendLine(to)
74 appendLine(to, "${"#".repeat(level)} $text")
75 appendLine(to)
76 }
77
78 override public fun appendBlockCode(to: StringBuilder, lines: Iterable<String>) {
Ilya Ryzhenkovfb41c692014-07-15 18:23:15 +040079 appendLine(to)
Ilya Ryzhenkov62cb5092014-07-15 15:54:05 +040080 appendLine(to, "```")
81 for (line in lines)
Ilya Ryzhenkovfb41c692014-07-15 18:23:15 +040082 to.appendln(line)
Ilya Ryzhenkov62cb5092014-07-15 15:54:05 +040083 appendLine(to, "```")
Ilya Ryzhenkovfb41c692014-07-15 18:23:15 +040084 appendLine(to)
Ilya Ryzhenkov62cb5092014-07-15 15:54:05 +040085 }
86
87 override public fun appendBlockCode(to: StringBuilder, line: String) {
kisenka8fbeb612014-10-10 20:33:05 +040088 appendLine(to)
89 to.appendln("```")
Ilya Ryzhenkovfb41c692014-07-15 18:23:15 +040090 to.appendln(line)
kisenka8fbeb612014-10-10 20:33:05 +040091 to.appendln("```")
92 appendLine(to)
Ilya Ryzhenkov62cb5092014-07-15 15:54:05 +040093 }
Ilya Ryzhenkov499d0822014-07-15 16:18:53 +040094
Ilya Ryzhenkovaa59acb2014-07-15 20:05:55 +040095 override fun appendTable(to: StringBuilder, body: () -> Unit) {
96 to.appendln()
97 body()
98 to.appendln()
99 }
100
101 override fun appendTableHeader(to: StringBuilder, body: () -> Unit) {
102 body()
103 }
104
105 override fun appendTableBody(to: StringBuilder, body: () -> Unit) {
106 body()
107 }
108
109 override fun appendTableRow(to: StringBuilder, body: () -> Unit) {
Dmitry Jemerov7fbff242015-01-09 18:54:06 +0100110 to.append("|")
Ilya Ryzhenkovaa59acb2014-07-15 20:05:55 +0400111 body()
112 to.appendln()
113 }
114
115 override fun appendTableCell(to: StringBuilder, body: () -> Unit) {
Dmitry Jemerov7fbff242015-01-09 18:54:06 +0100116 to.append(" ")
Ilya Ryzhenkovaa59acb2014-07-15 20:05:55 +0400117 body()
Dmitry Jemerov7fbff242015-01-09 18:54:06 +0100118 to.append(" |")
Ilya Ryzhenkovaa59acb2014-07-15 20:05:55 +0400119 }
Ilya Ryzhenkov68d3bc82014-07-14 19:34:52 +0400120}