blob: e3c94505ab1606abd3e19744a0428e225a5e1eca (
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
|
/* NSC -- new Scala compiler
* Copyright 2007-2013 LAMP/EPFL
* @author David Bernard, Manohar Jonnalagedda
*/
package scala.tools.nsc.doc.html.page
import scala.tools.nsc.doc
import scala.tools.nsc.doc.model.{Package, DocTemplateEntity}
import scala.tools.nsc.doc.html.{Page, HtmlFactory}
import scala.util.parsing.json.{JSONObject, JSONArray}
class IndexScript(universe: doc.Universe, index: doc.Index) extends Page {
def path = List("index.js")
override def writeFor(site: HtmlFactory) {
writeFile(site) {
_.write("Index.PACKAGES = " + packages.toString() + ";")
}
}
val packages = {
val pairs = allPackagesWithTemplates.toIterable.map(_ match {
case (pack, templates) => {
val merged = mergeByQualifiedName(templates)
val ary = merged.keys.toList.sortBy(_.toLowerCase).map(key => {
val pairs = merged(key).map(
t => kindToString(t) -> relativeLinkTo(t)
) :+ ("name" -> key)
JSONObject(scala.collection.immutable.Map(pairs : _*))
})
pack.qualifiedName -> JSONArray(ary)
}
}).toSeq
JSONObject(scala.collection.immutable.Map(pairs : _*))
}
def mergeByQualifiedName(source: List[DocTemplateEntity]) = {
var result = Map[String, List[DocTemplateEntity]]()
for (t <- source) {
val k = t.qualifiedName
result += k -> (result.getOrElse(k, List()) :+ t)
}
result
}
def allPackages = {
def f(parent: Package): List[Package] = {
parent.packages.flatMap(
p => f(p) :+ p
)
}
f(universe.rootPackage).sortBy(_.toString)
}
def allPackagesWithTemplates = {
Map(allPackages.map((key) => {
key -> key.templates.collect {
case t: DocTemplateEntity if !t.isPackage && !universe.settings.hardcoded.isExcluded(t.qualifiedName) => t
}
}) : _*)
}
}
|