diff --git a/libraries/kdoc/kdoc.iml b/libraries/kdoc/kdoc.iml index eaed1e76539..0af9805c1eb 100644 --- a/libraries/kdoc/kdoc.iml +++ b/libraries/kdoc/kdoc.iml @@ -1,14 +1,15 @@ - - - + + + + + - @@ -157,6 +158,15 @@ + + + + + + + + + diff --git a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/KDocCompiler.kt b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/KDocCompiler.kt new file mode 100644 index 00000000000..06c78eb6064 --- /dev/null +++ b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/KDocCompiler.kt @@ -0,0 +1,76 @@ +package org.jetbrains.kotlin.doc + +import org.jetbrains.jet.cli.KotlinCompiler +import org.jetbrains.jet.compiler.CompileEnvironment +import org.jetbrains.jet.cli.CompilerArguments +import java.io.PrintStream +import java.io.File +import kotlin.util.orEmpty + +/** + * Main for running the KDocCompiler + */ +fun main(args: Array): Unit { + KotlinCompiler.doMain(KDocCompiler(), args); +} + + +/** + * A version of the [[KotlinCompiler]] which includes the [[KDoc]] compiler plugin and allows + * command line validation or for the configuration to be provided via [[KDocArguments]] + */ +class KDocCompiler() : KotlinCompiler() { + + override fun configureEnvironment(environment : CompileEnvironment?, arguments : CompilerArguments?, errStream : PrintStream?) { + // TODO lets clear the docOutput as a temporary hack while + // KotlinCompiler has a KDoc hook... + val docOutputDir = if (arguments != null) { + val answer = arguments.docOutputDir + arguments.docOutputDir = null + answer + } else null + + super.configureEnvironment(environment, arguments, errStream) + val coreEnvironment = environment?.getMyEnvironment() + if (coreEnvironment != null) { + // now lets add the KDoc plugin + val outDir = File(docOutputDir ?: "target/apidocs") + val kdoc = KDoc(outDir) + + if (arguments is KDocArguments) { + kdoc.config = arguments.apply() + } + coreEnvironment.getCompilerPlugins().orEmpty().add(kdoc); + } + } + + override fun createArguments() : CompilerArguments? { + return KDocArguments() + } + + override fun usage(target : PrintStream?) { + target?.println("Usage: KDocCompiler -docOutput [-output |-jar ] [-stdlib ] [-src |-module ] [-includeRuntime]"); + } +} + +class KDocArguments() : CompilerArguments() { + + public var docConfig: KDocConfig = KDocConfig() + + /** + * Applies the command line arguments to the given KDoc configuration + */ + fun apply(): KDocConfig { + // TODO... + return docConfig + } + + + /** + * Add more configurations here when value attributes supported + * see: KT-1522 + + @Argument(value = "docOutput", description = "KDoc output directory") + public String docOutputDir; + */ +} diff --git a/libraries/kunit/kunit.iml b/libraries/kunit/kunit.iml index f7f04b9e44a..433583df099 100644 --- a/libraries/kunit/kunit.iml +++ b/libraries/kunit/kunit.iml @@ -1,9 +1,12 @@ - - - + + + + - + + + @@ -16,7 +19,8 @@ - + + diff --git a/libraries/stdlib/stdlib.iml b/libraries/stdlib/stdlib.iml index 41523570756..2af5136d412 100644 --- a/libraries/stdlib/stdlib.iml +++ b/libraries/stdlib/stdlib.iml @@ -1,13 +1,17 @@ - - - + + + + + + + diff --git a/libraries/website/pom.xml b/libraries/website/pom.xml index 1ba05f585fe..dbd2b9a8b3c 100644 --- a/libraries/website/pom.xml +++ b/libraries/website/pom.xml @@ -24,6 +24,49 @@ pegdown ${pegdown.version} + + + + org.jetbrains.kotlin + kdoc + ${project.version} + test + + + picocontainer + picocontainer + 1.0 + system + ${kotlin-sdk}/lib/picocontainer.jar + + + trove4j + trove4j + 1.0 + system + ${kotlin-sdk}/lib/trove4j.jar + + + guava + guava + 11.0.1 + system + ${kotlin-sdk}/lib/guava-11.0.1.jar + + + asm + asm-commons + 1.0 + system + ${kotlin-sdk}/lib/asm-commons.jar + + + asm + asm + 1.0 + system + ${kotlin-sdk}/lib/asm.jar + @@ -35,35 +78,6 @@ com.goldin.plugins kotlin-maven-plugin - - - compile-kotlin-sources - - compile - - - ${project.basedir}/target/site/apidocs - - ${project.basedir}/../stdlib/src - ${project.basedir}/../kunit/src - - - - - - - org.jetbrains.kotlin - kdoc - 1.0-SNAPSHOT - - - - - org.pegdown - pegdown - ${pegdown.version} - - diff --git a/libraries/website/src/main/templates/apidocs/resources/bkgheader.png b/libraries/website/src/main/apidocs/resources/bkgheader.png similarity index 100% rename from libraries/website/src/main/templates/apidocs/resources/bkgheader.png rename to libraries/website/src/main/apidocs/resources/bkgheader.png diff --git a/libraries/website/src/main/templates/apidocs/resources/gradient-sand-white.png b/libraries/website/src/main/apidocs/resources/gradient-sand-white.png similarity index 100% rename from libraries/website/src/main/templates/apidocs/resources/gradient-sand-white.png rename to libraries/website/src/main/apidocs/resources/gradient-sand-white.png diff --git a/libraries/website/src/main/templates/apidocs/stylesheet.css b/libraries/website/src/main/apidocs/stylesheet.css similarity index 100% rename from libraries/website/src/main/templates/apidocs/stylesheet.css rename to libraries/website/src/main/apidocs/stylesheet.css diff --git a/libraries/website/src/main/kotlin/org/jetbrains/kotlin/site/SiteGenerator.kt b/libraries/website/src/main/kotlin/org/jetbrains/kotlin/site/SiteGenerator.kt index bb5bc44a4d8..bb6122bf56c 100644 --- a/libraries/website/src/main/kotlin/org/jetbrains/kotlin/site/SiteGenerator.kt +++ b/libraries/website/src/main/kotlin/org/jetbrains/kotlin/site/SiteGenerator.kt @@ -18,15 +18,22 @@ class SiteGenerator(val sourceDir: File, val outputDir: File) : Runnable { if (it.isFile()) { var relativePath = sourceDir.relativePath(it) println("Processing ${relativePath}") - var text = it.readText() + var output: String? = null if (it.extension == "md") { - text = markdownProcessor.markdownToHtml(text, linkRendered) ?: "" + val text = it.readText() + output = markdownProcessor.markdownToHtml(text, linkRendered) ?: "" relativePath = relativePath.trimTrailing(it.extension) + "html" + } else if (it.extension == "html") { + output = it.readText() } - text = layout(relativePath, it, text) val outFile = File(outputDir, relativePath) outFile.directory.mkdirs() - outFile.writeText(text) + if (output != null) { + val text = layout(relativePath, it, output.sure()) + outFile.writeText(text) + } else { + it.copyTo(outFile) + } } } } diff --git a/libraries/website/src/main/templates/index.md b/libraries/website/src/main/templates/index.md index 44a0d4b7d97..53f3a7b6281 100644 --- a/libraries/website/src/main/templates/index.md +++ b/libraries/website/src/main/templates/index.md @@ -4,7 +4,7 @@ Welcome to [Kotlin](http://www.jetbrains.com/kotlin)! Some handy links - * [API Docs](apidocs/index.html) + * [API Docs](versions/snapshot/apidocs/index.html) * [Kotlin Blog](http://blog.jetbrains.com/kotlin/) * [Web Demo](http://kotlin-demo.jetbrains.com/) * [Issue Tracker](http://youtrack.jetbrains.com/issues/KT) diff --git a/libraries/website/src/test/kotlin/org/jetbrains/kotlin/site/GenerateSiteTest.kt b/libraries/website/src/test/kotlin/org/jetbrains/kotlin/site/GenerateSiteTest.kt index fbf4e4bce80..153ca2ef7ae 100644 --- a/libraries/website/src/test/kotlin/org/jetbrains/kotlin/site/GenerateSiteTest.kt +++ b/libraries/website/src/test/kotlin/org/jetbrains/kotlin/site/GenerateSiteTest.kt @@ -3,15 +3,60 @@ package org.jetbrains.kotlin.site import junit.framework.TestCase import java.io.File import kotlin.util.arrayList +import org.jetbrains.kotlin.doc.KDocArguments +import org.jetbrains.kotlin.doc.KDocCompiler class GenerateSiteTest : TestCase() { + val srcDir = findTemplateDir() + val siteOutputDir = File(srcDir, "../../../target/site") + + // TODO find version from environment? + val version = "snapshot" fun testGenerateSite(): Unit { - val srcDir = findTemplateDir() - val generator = SiteGenerator(srcDir, File(srcDir, "../../../target/site")) + val generator = SiteGenerator(srcDir, siteOutputDir) generator.run() } + fun testGenerateStdlibKDoc(): Unit { + val outDir = File(siteOutputDir, "versions/$version/apidocs") + println("Generating stdlib KDocs to $outDir") + + copyDocResources(outDir) + val args = KDocArguments() + args.setSrc("../stdlib/src") + args.setDocOutputDir(outDir.toString()) + args.setOutputDir("target/classes-stdlib") + + val compiler = KDocCompiler() + compiler.exec(System.out, args) + } + + /** + fun testGenerateJsKDoc(): Unit { + val args = KDocArguments() + args.docOutputDir = File(siteOutputDir, "versions/$version/apidocs").toString() + args.src = "../js/src" + args.outputDir = "target/classes-js" + + val compiler = KDocCompiler() + compiler.exec(System.out, args) + } + */ + + fun copyDocResources(outDir: File): Unit { + val sourceDir = File(srcDir, "../apidocs") + sourceDir.recurse { + if (it.isFile()) { + var relativePath = sourceDir.relativePath(it) + val outFile = File(outDir, relativePath) + outFile.directory.mkdirs() + it.copyTo(outFile) + } + } + } + + fun findTemplateDir(): File { val path = "src/main/templates" for (p in arrayList(".", "apidocs", "library/apidocs")) { diff --git a/libraries/website/website.iml b/libraries/website/website.iml index 36f35bf21dd..23d31600ebd 100644 --- a/libraries/website/website.iml +++ b/libraries/website/website.iml @@ -11,14 +11,20 @@ + + - + - + + + + +