blob: 29e47fa578a2d9d04f4e66b882b6ce9263ae856c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
/* NSC -- new Scala compiler -- Copyright 2007-2010 LAMP/EPFL */
package scala.tools.nsc
package doc
package model
package comment
import scala.collection._
import java.net.URL
/** A body of text. A comment has a single body, which is composed of at least one block. Inside every body is exactly
* one summary (see [[scala.tools.nsc.doc.model.comment.Summary]]). */
final case class Body(blocks: Seq[Block]) {
/** The summary text of the comment body. */
lazy val summary: Option[Inline] = {
def summaryInBlock(block: Block): Seq[Inline] = block match {
case Title(text, _) => summaryInInline(text)
case Paragraph(text) => summaryInInline(text)
case UnorderedList(items) => items flatMap { summaryInBlock(_) }
case OrderedList(items, _) => items flatMap { summaryInBlock(_) }
case DefinitionList(items) => items.values.toSeq flatMap { summaryInBlock(_) }
case _ => Nil
}
def summaryInInline(text: Inline): Seq[Inline] = text match {
case Summary(text) => List(text)
case Chain(items) => items flatMap { summaryInInline(_) }
case Italic(text) => summaryInInline(text)
case Bold(text) => summaryInInline(text)
case Underline(text) => summaryInInline(text)
case Superscript(text) => summaryInInline(text)
case Subscript(text) => summaryInInline(text)
case Link(_, title) => summaryInInline(title)
case _ => Nil
}
(blocks flatMap { summaryInBlock(_) }).toList match {
case Nil => None
case inline :: Nil => Some(inline)
case inlines => Some(Chain(inlines))
}
}
}
/** A block-level element of text, such as a paragraph or code block. */
sealed abstract class Block
final case class Title(text: Inline, level: Int) extends Block
final case class Paragraph(text: Inline) extends Block
final case class Code(data: String) extends Block
final case class UnorderedList(items: Seq[Block]) extends Block
final case class OrderedList(items: Seq[Block], style: String) extends Block
final case class DefinitionList(items: SortedMap[Inline, Block]) extends Block
final case class HorizontalRule() extends Block
/** An section of text inside a block, possibly with formatting. */
sealed abstract class Inline
final case class Chain(items: Seq[Inline]) extends Inline
final case class Italic(text: Inline) extends Inline
final case class Bold(text: Inline) extends Inline
final case class Underline(text: Inline) extends Inline
final case class Superscript(text: Inline) extends Inline
final case class Subscript(text: Inline) extends Inline
final case class Link(target: String, title: Inline) extends Inline
final case class EntityLink(target: TemplateEntity) extends Inline
final case class Monospace(text: String) extends Inline
final case class Text(text: String) extends Inline
/** The summary of a comment, usually its first sentence. There must be exactly one summary per body. */
final case class Summary(text: Inline) extends Inline
|