package org.jetbrains.dokka
public open class HtmlFormatService(locationService: LocationService,
signatureGenerator: LanguageService,
val templateService: HtmlTemplateService = HtmlTemplateService.default())
: StructuredFormatService(locationService, signatureGenerator) {
override val extension: String = "html"
override public fun formatText(text: String): String {
return text.htmlEscape()
}
override fun formatSymbol(text: String): String {
return "${formatText(text)}"
}
override fun formatKeyword(text: String): String {
return "${formatText(text)}"
}
override fun formatIdentifier(text: String): String {
return "${formatText(text)}"
}
override fun appendBlockCode(to: StringBuilder, line: String) {
to.append("
")
to.append(line)
to.append("
")
}
override fun appendBlockCode(to: StringBuilder, lines: Iterable) {
to.append("")
to.append(lines.join("\n"))
to.append("
")
}
override fun appendHeader(to: StringBuilder, text: String, level: Int) {
to.appendln("${text}")
}
override fun appendParagraph(to: StringBuilder, text: String) {
to.appendln("${text}
")
}
override fun appendLine(to: StringBuilder, text: String) {
to.appendln("${text}
")
}
override fun appendLine(to: StringBuilder) {
to.appendln("
")
}
override fun appendTable(to: StringBuilder, body: () -> Unit) {
to.appendln("")
}
override fun appendTableHeader(to: StringBuilder, body: () -> Unit) {
to.appendln("")
body()
to.appendln("")
}
override fun appendTableBody(to: StringBuilder, body: () -> Unit) {
to.appendln("")
body()
to.appendln("")
}
override fun appendTableRow(to: StringBuilder, body: () -> Unit) {
to.appendln("")
body()
to.appendln("
")
}
override fun appendTableCell(to: StringBuilder, body: () -> Unit) {
to.appendln("")
body()
to.appendln(" | ")
}
override fun formatLink(text: String, location: Location): String {
return "${text}"
}
override fun formatLink(text: String, href: String): String {
return "${text}"
}
override fun formatStrong(text: String): String {
return "${text}"
}
override fun formatEmphasis(text: String): String {
return "${text}"
}
override fun formatStrikethrough(text: String): String {
return "${text}"
}
override fun formatCode(code: String): String {
return "${code}
"
}
override fun formatList(text: String): String {
return ""
}
override fun formatListItem(text: String): String {
return "${text}"
}
override fun formatBreadcrumbs(items: Iterable): String {
return items.map { formatLink(it) }.joinToString(" / ")
}
override fun appendNodes(location: Location, to: StringBuilder, nodes: Iterable) {
templateService.appendHeader(to, getPageTitle(nodes))
super.appendNodes(location, to, nodes)
templateService.appendFooter(to)
}
override fun appendOutlineChildren(to: StringBuilder, nodes: Iterable) {
}
override fun appendOutlineHeader(to: StringBuilder, node: DocumentationNode) {
}
fun getPageTitle(nodes: Iterable): String? {
val breakdownByLocation = nodes.groupBy { node -> formatPageTitle(node) }
return breakdownByLocation.keySet().singleOrNull()
}
fun formatPageTitle(node: DocumentationNode): String {
val path = node.path
if (path.size() == 1) {
return path.first().name
}
val qualifiedName = path.drop(1).map { it.name }.filter { it.length() > 0 }.join(".")
if (qualifiedName.length() == 0 && path.size() == 2) {
return path.first().name + " / root package"
}
return path.first().name + " / " + qualifiedName
}
}