added a simple little site generator for the API docs
This commit is contained in:
+1
-1
@@ -56,7 +56,7 @@
|
|||||||
<module>stdlib</module>
|
<module>stdlib</module>
|
||||||
<module>kunit</module>
|
<module>kunit</module>
|
||||||
<module>kdoc</module>
|
<module>kdoc</module>
|
||||||
<module>apidocs</module>
|
<module>website</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|||||||
@@ -4,10 +4,19 @@
|
|||||||
<output url="file://$MODULE_DIR$/target/classes" />
|
<output url="file://$MODULE_DIR$/target/classes" />
|
||||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/kotlin" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/kotlin" isTestSource="true" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="library" name="Maven: org.pegdown:pegdown:1.1.0" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: org.parboiled:parboiled-core:1.0.2" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: org.parboiled:parboiled-java:1.0.2" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: asm:asm:3.3.1" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: asm:asm-util:3.3.1" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: asm:asm-tree:3.3.1" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: asm:asm-analysis:3.3.1" level="project" />
|
||||||
<orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-compiler:0.2.3.8" level="project" />
|
<orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-compiler:0.2.3.8" level="project" />
|
||||||
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.9" level="project" />
|
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.9" level="project" />
|
||||||
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />
|
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />
|
||||||
@@ -11,9 +11,14 @@
|
|||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>apidocs</artifactId>
|
<artifactId>website</artifactId>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jetbrains.kotlin</groupId>
|
||||||
|
<artifactId>stdlib</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.pegdown</groupId>
|
<groupId>org.pegdown</groupId>
|
||||||
<artifactId>pegdown</artifactId>
|
<artifactId>pegdown</artifactId>
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package org.jetbrains.kotlin.site
|
||||||
|
|
||||||
|
import kotlin.io.*
|
||||||
|
|
||||||
|
import java.io.File
|
||||||
|
import org.pegdown.Extensions
|
||||||
|
import org.pegdown.PegDownProcessor
|
||||||
|
import org.pegdown.LinkRenderer
|
||||||
|
|
||||||
|
class SiteGenerator(val sourceDir: File, val outputDir: File) : Runnable {
|
||||||
|
public var markdownProcessor: PegDownProcessor = PegDownProcessor(Extensions.ALL)
|
||||||
|
public var linkRendered: LinkRenderer = LinkRenderer()
|
||||||
|
|
||||||
|
override fun run() {
|
||||||
|
println("Generating the site to $outputDir")
|
||||||
|
|
||||||
|
sourceDir.recurse {
|
||||||
|
if (it.isFile()) {
|
||||||
|
var relativePath = sourceDir.relativePath(it)
|
||||||
|
println("Processing ${relativePath}")
|
||||||
|
var text = it.readText()
|
||||||
|
if (it.extension == "md") {
|
||||||
|
text = markdownProcessor.markdownToHtml(text, linkRendered) ?: ""
|
||||||
|
relativePath = relativePath.trimTrailing(it.extension) + "html"
|
||||||
|
}
|
||||||
|
text = layout(relativePath, it, text)
|
||||||
|
val outFile = File(outputDir, relativePath)
|
||||||
|
outFile.directory.mkdirs()
|
||||||
|
outFile.writeText(text)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies a layout to the given file
|
||||||
|
*/
|
||||||
|
fun layout(uri: String, file: File, text: String): String {
|
||||||
|
return """<html>
|
||||||
|
<body>
|
||||||
|
$text
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.8 KiB |
@@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2009 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Red Hat licenses this file to you under the Apache License, version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with the
|
||||||
|
* License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Javadoc style sheet */
|
||||||
|
|
||||||
|
/* Define colors, fonts and other style attributes here to override the defaults */
|
||||||
|
|
||||||
|
/* Page background color */
|
||||||
|
body {
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
background-image:url(resources/gradient-sand-white.png);
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
margin:0 auto;
|
||||||
|
font-family:'Lucida Grande', Geneva, Verdana, Arial, sans-serif;
|
||||||
|
font-size:12px;
|
||||||
|
padding:0em 1em;
|
||||||
|
color:#333;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Common elements */
|
||||||
|
|
||||||
|
font {
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
color: inherit;
|
||||||
|
font-weight: inherit; }
|
||||||
|
|
||||||
|
hr {
|
||||||
|
border-top: 1px solid #A9A89B;
|
||||||
|
border-bottom: 0 none;
|
||||||
|
}
|
||||||
|
|
||||||
|
tt, tt *, pre, pre *, code, code * {
|
||||||
|
font-family: "Liberation Mono", "DejaVu Sans Mono", Consolas, Monaco, "Vera Sans Mono", "Lucida Console", "Courier New", monospace !important;
|
||||||
|
}
|
||||||
|
a:link { color:#5d5c50; }
|
||||||
|
a:visited { color:#5d5c50; }
|
||||||
|
a:hover { color:#5d5c50; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Headings */
|
||||||
|
h1 {
|
||||||
|
font-size: 145%;
|
||||||
|
border-top:1px dotted #CCCCCC;
|
||||||
|
line-height:1.2em;
|
||||||
|
color:#CC333A;
|
||||||
|
font-size:2em;
|
||||||
|
padding:1.5em;
|
||||||
|
margin-top: 0px;
|
||||||
|
text-align:left;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Default Table elements and colors */
|
||||||
|
|
||||||
|
th, table { border-collapse:collapse;border-color: #A9A89B; }
|
||||||
|
|
||||||
|
|
||||||
|
.TableHeadingColor {
|
||||||
|
background:#EBE7C4 url(resources/bkgheader.png) no-repeat right top;
|
||||||
|
color:#CC333A;
|
||||||
|
font-size:12px;
|
||||||
|
font-weight:bold;
|
||||||
|
height:31px;
|
||||||
|
text-align:left;
|
||||||
|
padding:1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.TableHeadingColor th {
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.TableSubHeadingColor { background-color:#EBE7C4; }
|
||||||
|
.TableRowColor { background: white; border-color: #A9A89B;}
|
||||||
|
.TableRowColor td { line-height: 175%; padding-left: 10px;}
|
||||||
|
|
||||||
|
/* Font used in left-hand frame lists */
|
||||||
|
.FrameTitleFont { font-size: 125%; font-family: Helvetica, Arial, sans-serif; font-weight: bold; margin-top: 1em; display: block; }
|
||||||
|
.FrameHeadingFont { font-size: 125%; font-family: 'Lucida Grande', Geneva, Verdana, Arial, sans-serif; font-weight: bold; margin-top: 1em; display: block; }
|
||||||
|
.FrameItemFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif }
|
||||||
|
|
||||||
|
/* Navigation bar fonts and colors */
|
||||||
|
|
||||||
|
.NavBarCell1 {
|
||||||
|
background:#EBE7C4;
|
||||||
|
line-height:2em;
|
||||||
|
padding-left:6px;
|
||||||
|
padding-right:6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.NavBarFont1 {
|
||||||
|
color: #CC333A;
|
||||||
|
}
|
||||||
|
.NavBarCell1 a {
|
||||||
|
color: #CC333A;
|
||||||
|
}
|
||||||
|
|
||||||
|
.NavBarCell1Rev { background:#EBE7C4; padding-left:6px; padding-right:6px;}
|
||||||
|
.NavBarFont1 { color:#CC333A;}
|
||||||
|
.NavBarFont1Rev { color:#243446;}
|
||||||
|
|
||||||
|
.NavBarCell2 { background-color:#FFFFFF;}
|
||||||
|
.NavBarCell3 { background-color:#FFFFFF;}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Kotlin Programming Language
|
||||||
|
|
||||||
|
Welcome to [Kotlin](http://www.jetbrains.com/kotlin)!
|
||||||
|
|
||||||
|
Some handy links
|
||||||
|
|
||||||
|
* [API Docs](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)
|
||||||
|
* [follow Kotlin on twitter](http://twitter.com/#!/project_kotlin)
|
||||||
|
|
||||||
|
## Editing Kotlin
|
||||||
|
|
||||||
|
* [Kotlin IDEA Plugin](http://hadihariri.com/2012/02/17/the-kotlin-journey-part-i-getting-things-set-up/)
|
||||||
|
* [Kotlin TextMate Bundle](https://github.com/k33g/kotlin-textmate-bundle#readme)
|
||||||
|
|
||||||
|
## Kommitter links
|
||||||
|
|
||||||
|
* [TeamCity CI build](http://teamcity.jetbrains.com/project.html?projectId=project67&tab=projectOverview)
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package org.jetbrains.kotlin.site
|
||||||
|
|
||||||
|
import junit.framework.TestCase
|
||||||
|
import java.io.File
|
||||||
|
import kotlin.util.arrayList
|
||||||
|
|
||||||
|
class GenerateSiteTest : TestCase() {
|
||||||
|
|
||||||
|
fun testGenerateSite(): Unit {
|
||||||
|
val srcDir = findTemplateDir()
|
||||||
|
val generator = SiteGenerator(srcDir, File(srcDir, "../../../target/site"))
|
||||||
|
generator.run()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun findTemplateDir(): File {
|
||||||
|
val path = "src/main/templates"
|
||||||
|
for (p in arrayList(".", "apidocs", "library/apidocs")) {
|
||||||
|
val sourceDir = File(".", path)
|
||||||
|
if (sourceDir.exists()) {
|
||||||
|
return sourceDir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw IllegalArgumentException("Could not find template directory: $path")
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user