diff options
author | Kato Kazuyoshi <kato.kazuyoshi@gmail.com> | 2011-06-20 14:20:45 +0000 |
---|---|---|
committer | Kato Kazuyoshi <kato.kazuyoshi@gmail.com> | 2011-06-20 14:20:45 +0000 |
commit | 2627ab313f0d9f33e1b97e8aeda4447cf34bd27d (patch) | |
tree | b119264c47c6c990395ba3610209905aaf270b51 /src/compiler/scala/tools/nsc/doc/html/page/IndexScript.scala | |
parent | d2fd3d61d1cceb79c731a4be46977384c7cb7c9b (diff) | |
download | scala-2627ab313f0d9f33e1b97e8aeda4447cf34bd27d.tar.gz scala-2627ab313f0d9f33e1b97e8aeda4447cf34bd27d.tar.bz2 scala-2627ab313f0d9f33e1b97e8aeda4447cf34bd27d.zip |
Separete index.js to parallelize downloads.
Diffstat (limited to 'src/compiler/scala/tools/nsc/doc/html/page/IndexScript.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/doc/html/page/IndexScript.scala | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/doc/html/page/IndexScript.scala b/src/compiler/scala/tools/nsc/doc/html/page/IndexScript.scala new file mode 100644 index 0000000000..2cafe6caa3 --- /dev/null +++ b/src/compiler/scala/tools/nsc/doc/html/page/IndexScript.scala @@ -0,0 +1,68 @@ +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 java.nio.channels.Channels +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): Unit = { + val stream = createFileOutputStream(site) + val writer = Channels.newWriter(stream.getChannel, site.encoding) + try { + writer.write("Index.PACKAGES = " + packages.toString() + ";") + } + finally { + writer.close + stream.close + } + } + + 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 => docEntityKindToString(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.filter(t => !t.isPackage && !isExcluded(t)) + }) : _*) + } +} |