Skip to content

Commit 20f4e81

Browse files
authored
Merge pull request #10752 from pikinier20/markdown-html-tags
Add support for html tags inside documentation written in markdown
2 parents 3c18f6b + 4ad0430 commit 20f4e81

File tree

4 files changed

+46
-4
lines changed

4 files changed

+46
-4
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package tests
2+
package htmlTests
3+
4+
5+
/**<table>
6+
* <tr>
7+
* <th> ASD </th>
8+
* <th> FGH </th>
9+
* <th> JKL </th>
10+
* </tr>
11+
* <tr>
12+
* <td> 123 </td>
13+
* <td> 456 </td>
14+
* <td> 789 </td>
15+
* </tr>
16+
* </table>
17+
* This is <span style="color:red;">red</span> text.
18+
* <b> I'm bold </b>
19+
* <i> And I'm italic </i>
20+
*
21+
* An example documention with markdown formatting
22+
*
23+
*
24+
* <pre><code>
25+
* def someScalaCode(x: String) = println("Hello " + x)
26+
* </code></pre>
27+
*
28+
*/
29+
class HtmlTest

scala3doc/src/dotty/dokka/tasty/comments/MarkdownConverter.scala

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,17 @@ class MarkdownConverter(val repr: Repr) extends BaseConverter {
161161

162162
case _: mda.SoftLineBreak => emit(dkkd.Br.INSTANCE)
163163

164+
case inline: mda.HtmlInline =>
165+
emit(dkkd.Html(List(dkk.text(inline.getSegments.mkString)).asJava, kt.emptyMap))
166+
167+
case entity: mda.HtmlEntity =>
168+
emit(dkkd.Html(List(dkk.text(entity.getSegments.mkString)).asJava, kt.emptyMap))
169+
170+
case block: mda.HtmlBlock =>
171+
emit(dkkd.Html(List(dkk.text(block.getContentChars.toString)).asJava, kt.emptyMap))
172+
164173
// TODO (https://github.com/lampepfl/scala3doc/issues/205): for now just silent the warnigs
165-
case _:mda.HtmlInline | _: mda.LinkRef | _: mda.HtmlEntity | _: mda.HtmlBlock | _: com.vladsch.flexmark.ext.emoji.Emoji =>
174+
case _: mda.LinkRef | _: com.vladsch.flexmark.ext.emoji.Emoji =>
166175
emit(dkk.text(MarkdownParser.renderToText(n)))
167176

168177
case _ =>

scala3doc/src/dotty/dokka/tasty/comments/MarkdownParser.scala

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dotty.dokka.tasty.comments
22

33
import java.util.{ Arrays }
4+
import Regexes._
45

56
import com.vladsch.flexmark.util.{ast => mdu}
67
import com.vladsch.flexmark.formatter.Formatter
@@ -36,11 +37,13 @@ object MarkdownParser {
3637
"https://github.global.ssl.fastly.net/images/icons/emoji/")
3738
.set(WikiLinkExtension.LINK_ESCAPE_CHARS, "")
3839

40+
val parser = Parser.builder(markdownOptions).build()
41+
3942
val RENDERER = Formatter.builder(markdownOptions).build()
4043

4144
def parseToMarkdown(text: String): mdu.Document =
42-
Parser.builder(markdownOptions)
43-
.build.parse(text).asInstanceOf[mdu.Document]
45+
// We need to remove safe tag markers as they break flexmark parsing
46+
parser.parse(text.replace(safeTagMarker.toString, "")).asInstanceOf[mdu.Document]
4447

4548

4649
def renderToText(node: mdu.Node): String =

scala3doc/src/dotty/renderers/ScalaHtmlRenderer.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ class ScalaHtmlRenderer(using ctx: DokkaContext) extends HtmlRenderer(ctx) {
9999

100100
override def buildContentNode(f: FlowContent, node: ContentNode, pageContext: ContentPage, sourceSetRestriciton: JSet[DisplaySourceSet]) = {
101101
node match {
102-
case n: HtmlContentNode => withHtml(f, raw(n.body).toString)
102+
case n: HtmlContentNode =>
103+
withHtml(f, raw(n.body).toString)
103104
case n: HierarchyGraphContentNode => buildDiagram(f, n.diagram, pageContext)
104105
case n: DocumentableList =>
105106
val ss = if sourceSetRestriciton == null then Set.empty.asJava else sourceSetRestriciton

0 commit comments

Comments
 (0)