diff options
author | Felix Mulder <felix.mulder@gmail.com> | 2016-08-15 17:58:41 +0200 |
---|---|---|
committer | Felix Mulder <felix.mulder@gmail.com> | 2016-08-19 15:37:34 +0200 |
commit | d6b5c3e0404b754c2bef432b3227cf8f61bc8896 (patch) | |
tree | 4a09f037bd64d474f4f880dbf5baa99b497cfb4a /dottydoc | |
parent | bd7751924d9c145accf04b69e71621347d2b77f6 (diff) | |
download | dotty-d6b5c3e0404b754c2bef432b3227cf8f61bc8896.tar.gz dotty-d6b5c3e0404b754c2bef432b3227cf8f61bc8896.tar.bz2 dotty-d6b5c3e0404b754c2bef432b3227cf8f61bc8896.zip |
Implement dotty bridge for doc
Diffstat (limited to 'dottydoc')
4 files changed, 32 insertions, 23 deletions
diff --git a/dottydoc/src/dotty/tools/dottydoc/api/java/Dottydoc.java b/dottydoc/src/dotty/tools/dottydoc/api/java/Dottydoc.java index b461c3096..dbe3f6f41 100644 --- a/dottydoc/src/dotty/tools/dottydoc/api/java/Dottydoc.java +++ b/dottydoc/src/dotty/tools/dottydoc/api/java/Dottydoc.java @@ -5,6 +5,7 @@ import dotty.tools.dottydoc.model.Package; import dotty.tools.dottydoc.util.OutputWriter; import java.util.Map; import java.util.List; +import java.net.URL; /** FIXME: document me! */ public class Dottydoc extends DocDriver { @@ -18,11 +19,11 @@ public class Dottydoc extends DocDriver { public void buildDocs( String outputDir, - String templatePath, - List<String> resources, + URL template, + List<URL> resources, Map<String, Package> index ) { - new OutputWriter().writeJava(index, templatePath, outputDir, resources); + new OutputWriter().writeJava(index, outputDir, template, resources); } public void writeJson(Map<String, Package> index, String outputDir) { diff --git a/dottydoc/src/dotty/tools/dottydoc/api/scala/Dottydoc.scala b/dottydoc/src/dotty/tools/dottydoc/api/scala/Dottydoc.scala index dce994f5d..a2c42d38c 100644 --- a/dottydoc/src/dotty/tools/dottydoc/api/scala/Dottydoc.scala +++ b/dottydoc/src/dotty/tools/dottydoc/api/scala/Dottydoc.scala @@ -5,14 +5,15 @@ import dotty.tools.dottydoc.model.Package import dotty.tools.dottydoc.util.OutputWriter import scala.collection.Map +import java.net.URL /** FIXME: document this class plz */ trait Dottydoc extends DocDriver { def createIndex(args: Array[String]): Map[String, Package] = compiledDocs(args) - def buildDocs(outDir: String, templatePath: String, resources: List[String], index: Map[String, Package]) = - new OutputWriter().write(index, templatePath, outDir, resources) + def buildDocs(outDir: String, template: URL, resources: List[URL], index: Map[String, Package]) = + new OutputWriter().write(index, outDir, template, resources) def writeJson(index: Map[String, Package], outputDir: String) = new OutputWriter().writeJson(index, outputDir) diff --git a/dottydoc/src/dotty/tools/dottydoc/util/OutputWriter.scala b/dottydoc/src/dotty/tools/dottydoc/util/OutputWriter.scala index d5a48912f..2084e0a97 100644 --- a/dottydoc/src/dotty/tools/dottydoc/util/OutputWriter.scala +++ b/dottydoc/src/dotty/tools/dottydoc/util/OutputWriter.scala @@ -8,11 +8,13 @@ import _root_.java.io.{ PrintWriter => JPrintWriter, FileReader => JFileReader, BufferedInputStream, - FileInputStream, + InputStream, + InputStreamReader, FileOutputStream, BufferedOutputStream, FileNotFoundException } +import _root_.java.net.URL import _root_.java.util.{ Map => JMap, List => JList } import model.{ Entity, Package } import model.json._ @@ -21,16 +23,16 @@ import scala.collection.JavaConverters._ class OutputWriter { - def writeJava(packs: JMap[String, Package], templatePath: String, outPath: String, resources: JList[String]): Unit = { - write(packs.asScala, templatePath, outPath, resources.asScala) + def writeJava(packs: JMap[String, Package], outPath: String, template: URL, resources: JList[URL]): Unit = { + write(packs.asScala, outPath, template, resources.asScala) } - def write(packs: collection.Map[String, Package], templatePath: String, outPath: String, resources: Iterable[String]): Unit = { + def write(packs: collection.Map[String, Package], outPath: String, template: URL, resources: Traversable[URL]): Unit = { // Write all packages to `outPath` for (pack <- packs.values) { println(s"""Writing '${pack.path.mkString(".")}'""") writeFile( - expandTemplate(templatePath, pack, outPath), + expandTemplate(template, pack, outPath), outPath + pack.path.mkString("/", "/", "/"), "index.html") @@ -41,7 +43,7 @@ class OutputWriter { } { println(s"""Writing '${child.path.mkString(".")}'""") writeFile( - expandTemplate(templatePath, child, outPath), + expandTemplate(template, child, outPath), outPath + child.path.dropRight(1).mkString("/", "/", "/"), child.path.last + ".html") } @@ -55,7 +57,10 @@ class OutputWriter { // Write resources to outPath println("Copying CSS/JS resources to destination...") assert(resources.nonEmpty) - resources.map(s => copy(new JFile(s), outPath)) + + // TODO: splitting the URL by '/' and taking the last means that we don't + // allow folders among the resources + resources.foreach(url => copy(url.openStream, outPath, url.getFile.split("/").last)) println("Done writing static material, building js-app") } @@ -66,14 +71,15 @@ class OutputWriter { def writeJson(index: collection.Map[String, Package], outputDir: String): Unit = writeFile(index.json, outputDir + "/", "index.json") - def expandTemplate(templatePath: String, entity: Entity, outPath: String): String = try { + def expandTemplate(template: URL, entity: Entity, outPath: String): String = try { import model.json._ import model.java._ + val inputStream = template.openStream val writer = new _root_.java.io.StringWriter() val mf = new DefaultMustacheFactory() - def toRoot = "../" * (entity.path.length - 1) + def toRoot = "../" * (entity.path.length - { if (entity.isInstanceOf[Package]) 0 else 1 }) val entityWithExtras = entity.asJava(Map( "assets" -> s"${toRoot}docassets", @@ -81,14 +87,15 @@ class OutputWriter { "currentEntity" -> entity.json )) - mf.compile(new JFileReader(templatePath), "template") + mf.compile(new InputStreamReader(inputStream), "template") .execute(writer, entityWithExtras) + inputStream.close() writer.flush() writer.toString } catch { case fnf: FileNotFoundException => - dottydoc.println(s"""Couldn't find the template: "$templatePath"...exiting""") + dottydoc.println(s"""Couldn't find the template: "${template.getFile}"...exiting""") System.exit(1); "" } @@ -107,11 +114,12 @@ class OutputWriter { printToFile(new JFile(path + file))(printer => bytes.foreach(printer.print)) } - def copy(src: JFile, path: String): Unit = { - val reader = new BufferedInputStream(new FileInputStream(src)) + def copy(src: InputStream, path: String, name: String): Unit = { + val reader = new BufferedInputStream(src) try { - val bytes = Stream.continually(reader.read).takeWhile(-1 != _).map(_.toByte) - writeFile(bytes.toArray, path + "/docassets/", src.getName) + val bytes = Stream.continually(reader.read).takeWhile(-1 != _).map(_.toByte) + writeFile(bytes.toArray, path + "/docassets/", name) + src.close() } finally reader.close() } } diff --git a/dottydoc/test/WhitelistedStdLibMain.scala b/dottydoc/test/WhitelistedStdLibMain.scala index 95d4afbae..fcd08e50d 100644 --- a/dottydoc/test/WhitelistedStdLibMain.scala +++ b/dottydoc/test/WhitelistedStdLibMain.scala @@ -3,7 +3,7 @@ package dottydoc import scala.io.Source -object WhitelistedStandardLib extends dottydoc.api.java.Dottydoc { +object WhitelistedStandardLib extends dottydoc.api.scala.Dottydoc { import scala.collection.JavaConverters._ val files: List[String] = { @@ -16,7 +16,6 @@ object WhitelistedStandardLib extends dottydoc.api.java.Dottydoc { .map(_.takeWhile(_ != '#').trim) // allow comments in the end of line .filter(_.nonEmpty) .filterNot(_.endsWith("package.scala")) - .map("." + _) .toList } @@ -42,6 +41,6 @@ object WhitelistedStandardLib extends dottydoc.api.java.Dottydoc { "-language:Scala2" +: "-Ydoc-output" +: "../build/dottydoc" +: files.toArray val index = createIndex(compilerArgs) - buildDocs("../build/dottydoc", "../../dottydoc-client/resources/template.html", resources.asJava, index) + buildDocs("../build/dottydoc", "../../dottydoc-client/resources/template.html", resources, index) } } |