You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2018/05/23 14:37:54 UTC

[1/5] groovy git commit: GROOVY-8600: BUG! exception in phase 'instruction selection'

Repository: groovy
Updated Branches:
  refs/heads/master 5eab4a5ff -> c8e8c7b67


GROOVY-8600: BUG! exception in phase 'instruction selection'


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/711d82a8
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/711d82a8
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/711d82a8

Branch: refs/heads/master
Commit: 711d82a8476ecabecc6101f676d32c2d9ad9e0cc
Parents: 1936f18
Author: Paul King <pa...@asert.com.au>
Authored: Thu May 24 00:07:10 2018 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Thu May 24 00:08:24 2018 +1000

----------------------------------------------------------------------
 .../MethodCallExpressionTransformer.java        |  2 +-
 src/test/groovy/bugs/Groovy8600Bug.groovy       | 37 ++++++++++++++++++++
 2 files changed, 38 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/711d82a8/src/main/java/org/codehaus/groovy/transform/sc/transformers/MethodCallExpressionTransformer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/transform/sc/transformers/MethodCallExpressionTransformer.java b/src/main/java/org/codehaus/groovy/transform/sc/transformers/MethodCallExpressionTransformer.java
index c93db9e..5dd83ad 100644
--- a/src/main/java/org/codehaus/groovy/transform/sc/transformers/MethodCallExpressionTransformer.java
+++ b/src/main/java/org/codehaus/groovy/transform/sc/transformers/MethodCallExpressionTransformer.java
@@ -61,7 +61,7 @@ public class MethodCallExpressionTransformer {
         }
         Expression objectExpression = expr.getObjectExpression();
         ClassNode type = staticCompilationTransformer.getTypeChooser().resolveType(objectExpression, staticCompilationTransformer.getClassNode());
-        if (isCallOnClosure(expr)) {
+        if (isCallOnClosure(expr) && staticCompilationTransformer.getClassNode() != null) {
             FieldNode field = staticCompilationTransformer.getClassNode().getField(expr.getMethodAsString());
             if (field != null) {
                 VariableExpression vexp = new VariableExpression(field);

http://git-wip-us.apache.org/repos/asf/groovy/blob/711d82a8/src/test/groovy/bugs/Groovy8600Bug.groovy
----------------------------------------------------------------------
diff --git a/src/test/groovy/bugs/Groovy8600Bug.groovy b/src/test/groovy/bugs/Groovy8600Bug.groovy
new file mode 100644
index 0000000..43d4093
--- /dev/null
+++ b/src/test/groovy/bugs/Groovy8600Bug.groovy
@@ -0,0 +1,37 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF 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.
+ */
+package groovy.bugs
+
+class Groovy8600Bug extends GroovyTestCase {
+    void testClosureFieldUseWithinMethod() {
+        assertScript '''
+            import groovy.transform.CompileStatic
+
+            class TestCompileStatic {
+                private Closure<String> func = { it.toUpperCase() }
+                @CompileStatic
+                def testCallFunc () {
+                    func('foo') + func.call('bar')
+                }
+            }
+
+            assert new TestCompileStatic().testCallFunc() == 'FOOBAR'
+        '''
+    }
+}


[5/5] groovy git commit: GROOVY-8593: DocGenerator could be moved to avoid split packages (closes #715)

Posted by pa...@apache.org.
GROOVY-8593: DocGenerator could be moved to avoid split packages (closes #715)


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/c8e8c7b6
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/c8e8c7b6
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/c8e8c7b6

Branch: refs/heads/master
Commit: c8e8c7b67069a91a0e80e8be45140d42737c91c9
Parents: 711d82a
Author: Paul King <pa...@asert.com.au>
Authored: Wed May 23 00:05:21 2018 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Thu May 24 00:36:13 2018 +1000

----------------------------------------------------------------------
 gradle/docs.gradle                              |    2 +-
 .../codehaus/groovy/tools/DocGeneratorMain.java |   38 -
 .../groovy/docgenerator/DocGenerator.groovy     |  546 ++++
 .../codehaus/groovy/tools/DocGenerator.groovy   |  523 +---
 .../groovy/docgenerator/DocGenerator.properties |   34 +
 .../org/apache/groovy/docgenerator/groovy.ico   |  Bin 0 -> 9662 bytes
 .../org/apache/groovy/docgenerator/index.html   |   95 +
 .../groovy/docgenerator/overview-summary.html   |   58 +
 .../apache/groovy/docgenerator/stylesheet.css   | 2321 ++++++++++++++++++
 .../docgenerator/template.allclasses-frame.html |   46 +
 .../groovy/docgenerator/template.class.html     |  196 ++
 .../groovy/docgenerator/template.index-all.html |   93 +
 .../docgenerator/template.overview-frame.html   |   46 +
 .../docgenerator/template.package-frame.html    |   61 +
 .../docgenerator/template.package-summary.html  |   93 +
 .../groovy/tools/DocGenerator.properties        |   34 -
 .../org/codehaus/groovy/tools/groovy.ico        |  Bin 9662 -> 0 bytes
 .../org/codehaus/groovy/tools/index.html        |   95 -
 .../codehaus/groovy/tools/overview-summary.html |   58 -
 .../org/codehaus/groovy/tools/stylesheet.css    | 2321 ------------------
 .../groovy/tools/template.allclasses-frame.html |   46 -
 .../codehaus/groovy/tools/template.class.html   |  196 --
 .../groovy/tools/template.index-all.html        |   93 -
 .../groovy/tools/template.overview-frame.html   |   46 -
 .../groovy/tools/template.package-frame.html    |   61 -
 .../groovy/tools/template.package-summary.html  |   93 -
 26 files changed, 3595 insertions(+), 3600 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/gradle/docs.gradle
----------------------------------------------------------------------
diff --git a/gradle/docs.gradle b/gradle/docs.gradle
index de9c66b..a7643d0 100644
--- a/gradle/docs.gradle
+++ b/gradle/docs.gradle
@@ -128,7 +128,7 @@ task docGDK {
     doLast { task ->
         try {
             ant {
-                java(classname: 'org.codehaus.groovy.tools.DocGenerator',
+                java(classname: 'org.apache.groovy.docgenerator.DocGenerator',
                      fork: 'true',
                      failonerror: 'true',
                      classpath: (sourceSets.main.runtimeClasspath + rootProject.files(docProjectVersionInfo.destinationDir) + configurations.tools + groovydocAll.groovyClasspath + docGeneratorPath).asPath,

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/src/test/org/codehaus/groovy/tools/DocGeneratorMain.java
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/tools/DocGeneratorMain.java b/src/test/org/codehaus/groovy/tools/DocGeneratorMain.java
deleted file mode 100644
index b07685e..0000000
--- a/src/test/org/codehaus/groovy/tools/DocGeneratorMain.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF 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.
- */
-package org.codehaus.groovy.tools;
-
-import groovy.lang.GroovyShell;
-
-import java.io.File;
-
-public class DocGeneratorMain {
-
-    public static void main(String[] args) {
-        try {
-            GroovyShell shell = new GroovyShell();
-            //shell.run("src/main/org/codehaus/groovy/tools/DocGenerator.groovy", "org.codehaus.groovy.tools.DocGenerator.groovy", args);
-            shell.run(new File("src/main/groovy/org/codehaus/groovy/tools/DocGenerator.groovy"), args);
-        }
-        catch (Exception e) {
-            System.out.println("Failed: " + e);
-            e.printStackTrace();
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/groovy/org/apache/groovy/docgenerator/DocGenerator.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/groovy/org/apache/groovy/docgenerator/DocGenerator.groovy b/subprojects/groovy-docgenerator/src/main/groovy/org/apache/groovy/docgenerator/DocGenerator.groovy
new file mode 100644
index 0000000..da325d7
--- /dev/null
+++ b/subprojects/groovy-docgenerator/src/main/groovy/org/apache/groovy/docgenerator/DocGenerator.groovy
@@ -0,0 +1,546 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF 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.
+ */
+package org.apache.groovy.docgenerator
+
+import com.thoughtworks.qdox.JavaDocBuilder
+import com.thoughtworks.qdox.model.JavaClass
+import com.thoughtworks.qdox.model.JavaMethod
+import com.thoughtworks.qdox.model.JavaParameter
+import com.thoughtworks.qdox.model.Type
+import groovy.cli.picocli.CliBuilder
+import groovy.text.SimpleTemplateEngine
+import groovy.text.Template
+import groovy.text.TemplateEngine
+import org.codehaus.groovy.runtime.DefaultGroovyMethods
+import org.codehaus.groovy.tools.shell.util.Logger
+import org.codehaus.groovy.tools.shell.util.MessageSource
+
+import java.text.BreakIterator
+import java.util.concurrent.ConcurrentHashMap
+
+/**
+ * Generate documentation about the methods provided by the Groovy Development Kit
+ * that enhance the standard JDK classes.
+ */
+class DocGenerator {
+    private static final MessageSource messages = new MessageSource(DocGenerator)
+    private static final Logger log = Logger.create(DocGenerator)
+    private static final Comparator SORT_KEY_COMPARATOR = [compare: { a, b -> return a.sortKey.compareTo(b.sortKey) }] as Comparator
+    private static final Map<String, Object> CONFIG = new ConcurrentHashMap<String, Object>();
+
+    List<File> sourceFiles
+    File outputDir
+    DocSource docSource
+
+    DocGenerator(List<File> sourceFiles, File outputFolder) {
+        this.sourceFiles = sourceFiles
+        this.outputDir = outputFolder
+        this.docSource = parseSource(sourceFiles)
+    }
+
+    /**
+     * Parse the *GroovyMethods (DGM) classes to build a graph representing the structure of the class,
+     * with its methods, javadoc comments and tags.
+     */
+    private static DocSource parseSource(List<File> sourceFiles) {
+        JavaDocBuilder builder = new JavaDocBuilder()
+        sourceFiles.each {
+            if (it.exists()) {
+                builder.addSource(it.newReader())
+                log.debug "adding reader for $it"
+            } else {
+                log.debug "not found, skipping: $it.path"
+            }
+        }
+
+        def methods = builder.sources.collectMany { source ->
+            source.classes.collectMany { aClass ->
+                aClass.methods.findAll { !it.annotations.any { it.type.fullyQualifiedName == 'java.lang.Deprecated' } }
+            }
+        }
+
+        def docSource = new DocSource()
+        methods.each { JavaMethod method ->
+            if (!method.isPublic() || !method.isStatic()) {
+                return // skip it
+            }
+
+            def firstParam = method.parameters[0]
+            def firstParamType = firstParam.resolvedValue.isEmpty() ? firstParam.type : new Type(firstParam.resolvedValue, 0, firstParam.parentClass)
+            docSource.add(firstParamType, method)
+        }
+        docSource.populateInheritedMethods()
+        return docSource
+    }
+
+    /**
+     * Builds an HTML page from the structure of DefaultGroovyMethods.
+     */
+    void generateAll() {
+        def engine = new SimpleTemplateEngine()
+
+        // the index.html
+        def indexTemplate = createTemplate(engine, 'index.html')
+        new File(outputDir, 'index.html').withWriter {
+            it << indexTemplate.make(title: CONFIG.title)
+        }
+
+        // the overview-summary.html
+        def overviewTemplate = createTemplate(engine, 'overview-summary.html')
+        new File(outputDir, 'overview-summary.html').withWriter {
+            it << overviewTemplate.make(title: CONFIG.title)
+        }
+
+        // the overview-frame.html
+        def overviewFrameTemplate = createTemplate(engine, 'template.overview-frame.html')
+        new File(outputDir, 'overview-frame.html').withWriter {
+            def docPackagesExceptPrimitiveType = docSource.packages.findAll { !it.primitive }
+            it << overviewFrameTemplate.make(packages: docPackagesExceptPrimitiveType, title: CONFIG.title)
+        }
+
+        // the package-list
+        new File(outputDir, 'package-list').withWriter { writer ->
+            docSource.packages*.name.each { writer.println it }
+        }
+
+        // the allclasses-frame.html
+        def allClassesTemplate = createTemplate(engine, 'template.allclasses-frame.html')
+        new File(outputDir, 'allclasses-frame.html').withWriter {
+            it << allClassesTemplate.make(docTypes: docSource.allDocTypes, title: CONFIG.title)
+        }
+
+        // the package-frame.html and package-summary.html for each package
+        def packageFrameTemplate = createTemplate(engine, 'template.package-frame.html')
+        def packageSummaryTemplate = createTemplate(engine, 'template.package-summary.html')
+        docSource.packages.each { DocPackage docPackage ->
+            def dir = DocUtil.createPackageDirectory(outputDir, docPackage.name)
+            new File(dir, 'package-frame.html').withWriter {
+                it << packageFrameTemplate.make(docPackage: docPackage, title: CONFIG.title)
+            }
+            new File(dir, 'package-summary.html').withWriter {
+                it << packageSummaryTemplate.make(docPackage: docPackage, title: CONFIG.title)
+            }
+        }
+
+        // the class.html for each class
+        def classTemplate = createTemplate(engine, 'template.class.html')
+        docSource.allDocTypes.each { DocType docType ->
+            def dir = DocUtil.createPackageDirectory(outputDir, docType.packageName)
+            new File(dir, docType.simpleClassName + '.html').withWriter {
+                it << classTemplate.make(docType: docType, title: CONFIG.title)
+            }
+        }
+
+        // the index-all.html
+        def indexAllTemplate = createTemplate(engine, 'template.index-all.html')
+        new File(outputDir, 'index-all.html').withWriter {
+            it << indexAllTemplate.make('indexMap': generateIndexMap(), title: CONFIG.title)
+        }
+
+        // copy resources
+        ['groovy.ico', 'stylesheet.css'].each { String resource ->
+            new File(outputDir, resource) << getClass().getResource(resource).bytes
+        }
+    }
+
+    private Template createTemplate(TemplateEngine templateEngine, String resourceFile) {
+        def resourceUrl = getClass().getResource(resourceFile)
+        return templateEngine.createTemplate(resourceUrl.text)
+    }
+
+    /**
+     * Generate an index map for index-all.html.
+     * <p>
+     * This method creates a index map indexed by the first letter of the
+     * method in upper case, the map value is a list of methods.
+     * <p>
+     * e.g.: 'A' : [ m1, m2, m3 .. ]
+     * The values m1, m2, m3 are sorted by the method name, and the parameter signature.
+     * The method names of m1, m2, m3 start either with 'a', or 'A'.
+     *
+     * @return indexMap
+     */
+    private Map generateIndexMap() {
+        def indexItems = []
+        docSource.allDocTypes.each { DocType docType ->
+            // the class
+            indexItems << [
+                index: docType.simpleClassName.capitalize()[0],
+                docType: docType,
+                sortKey: docType.sortKey,
+            ]
+
+            // the methods
+            docType.docMethods.each { DocMethod docMethod ->
+                indexItems << [
+                    index: docMethod.javaMethod.name.capitalize()[0],
+                    docType: docType,
+                    docMethod: docMethod,
+                    sortKey: docMethod.sortKey
+                ]
+            }
+        }
+        def indexMap = new TreeMap().withDefault { new TreeSet(SORT_KEY_COMPARATOR) }
+        for (indexItem in indexItems) {
+            indexMap[indexItem['index']] << indexItem
+        }
+        return indexMap
+    }
+
+    /**
+     * Main entry point.
+     */
+    static void main(String... args) {
+        def cli = new CliBuilder(usage : 'DocGenerator [options] [sourcefiles]', posix:false)
+        cli.help(longOpt: 'help', messages['cli.option.help.description'])
+        cli._(longOpt: 'version', messages['cli.option.version.description'])
+        cli.o(longOpt: 'outputDir', args:1, argName: 'path', messages['cli.option.output.dir.description'])
+        cli.title(longOpt: 'title', args:1, argName: 'text', messages['cli.option.title.description'])
+        cli.link(args:2, valueSeparator:'=', argName:'comma-separated-package-prefixes=url',
+                messages['cli.option.link.patterns.description'])
+        def options = cli.parse(args)
+
+        if (options.help) {
+            cli.usage()
+            return
+        }
+
+        if (options.links && options.links.size() % 2 == 1) {
+            throw new IllegalArgumentException("Links should be specified in pattern=url pairs")
+        }
+
+        if (options.version) {
+            println messages.format('cli.info.version', GroovySystem.version)
+            return
+        }
+
+        def start = System.currentTimeMillis()
+
+        def outputDir = new File(options.outputDir ?: "target/html/groovy-jdk")
+        outputDir.mkdirs()
+        CONFIG.title = options.title ?: "Groovy JDK"
+        if (options.links) {
+            CONFIG.links = options.links.collate(2).collectMany{ prefixes, url -> prefixes.tokenize(',').collect{[it, url]} }.collectEntries()
+        }
+        CONFIG.locale = Locale.default  // TODO allow locale to be passed in
+
+        def srcFiles = options.arguments().collect { DocUtil.sourceFileOf(it) }
+        try {
+            DefaultGroovyMethods.ADDITIONAL_CLASSES.each { aClass ->
+                def className = aClass.name.replaceAll(/\$.*/, '')
+                def additionalFile = DocUtil.sourceFileOf(className)
+                if (srcFiles.every { it.canonicalPath != additionalFile.canonicalPath }) {
+                    srcFiles << additionalFile
+                }
+            }
+        } catch (MissingPropertyException e) { // TODO is it still needed?
+            // no call site change available, so ignore it
+            log.error e.message, e
+        }
+
+        def docGen = new DocGenerator(srcFiles, outputDir)
+        docGen.generateAll()
+
+        def end = System.currentTimeMillis()
+        log.debug "Done. Took ${end - start} milliseconds."
+    }
+
+    private static class DocSource {
+        SortedSet<DocPackage> packages = new TreeSet<DocPackage>(SORT_KEY_COMPARATOR)
+
+        void add(Type type, JavaMethod javaMethod) {
+            DocType tempDocType = new DocType(type: type)
+
+            DocPackage aPackage = packages.find { it.name == tempDocType.packageName }
+            if (!aPackage) {
+                aPackage = new DocPackage(name: tempDocType.packageName)
+                packages << aPackage
+            }
+
+            DocType docType = aPackage.docTypes.find { it.fullyQualifiedClassName == tempDocType.fullyQualifiedClassName }
+            if (!docType) {
+                docType = tempDocType
+                aPackage.docTypes << docType
+            }
+
+            def docMethod = new DocMethod(declaringDocType: docType, javaMethod: javaMethod)
+            docType.docMethods << docMethod
+        }
+
+        void populateInheritedMethods() {
+            def allTypes = allDocTypes.collectEntries{ [it.fullyQualifiedClassName, it] }
+            allTypes.each { name, docType ->
+                if (name.endsWith('[]') || name.startsWith('primitive-types')) return
+                Type next = docType.javaClass.superClass
+                while (next != null) {
+                    if (allTypes.keySet().contains(next.value)) {
+                        docType.inheritedMethods[allTypes[next.value]] = allTypes[next.value].docMethods
+                    }
+                    next = next.javaClass.superClass
+                }
+                def remaining = docType.javaClass.implementedInterfaces.toList()
+                while (!remaining.isEmpty()) {
+                    def nextInt = remaining.remove(0)
+                    if (allTypes.keySet().contains(nextInt.fullyQualifiedName)) {
+                        docType.inheritedMethods[allTypes[nextInt.fullyQualifiedName]] = allTypes[nextInt.fullyQualifiedName].docMethods
+                    }
+                    remaining.addAll(nextInt.implementedInterfaces.toList())
+                }
+            }
+        }
+
+        SortedSet<DocType> getAllDocTypes() {
+            def allSet = new TreeSet(SORT_KEY_COMPARATOR)
+            allSet.addAll(packages.collectMany { it.docTypes })
+            return allSet
+        }
+    }
+
+    private static class DocPackage {
+        static final String PRIMITIVE_TYPE_PSEUDO_PACKAGE = 'primitive-types'
+        String name
+        SortedSet<DocType> docTypes = new TreeSet<DocType>(SORT_KEY_COMPARATOR)
+
+        boolean isPrimitive() {
+            name == PRIMITIVE_TYPE_PSEUDO_PACKAGE
+        }
+
+        String getSortKey() {
+            name
+        }
+    }
+
+    private static class DocType {
+        private Type type
+        final String shortComment = "" // empty because cannot get a comment of JDK
+        SortedSet<DocMethod> docMethods = new TreeSet<DocMethod>(SORT_KEY_COMPARATOR)
+        Map<String, List<DocMethod>> inheritedMethods = new LinkedHashMap<String, List<DocMethod>>()
+
+        JavaClass getJavaClass() {
+            type.javaClass
+        }
+
+        String getPackageName() {
+            if (type.primitive) {
+                return DocPackage.PRIMITIVE_TYPE_PSEUDO_PACKAGE
+            }
+            def fqcn = fullyQualifiedClassName
+            if (fqcn.indexOf(".") < 0) {
+                return ""
+            }
+            fqcn.replaceAll(/\.[^.]*$/, '')
+        }
+
+        String getSimpleClassName() {
+            fullyQualifiedClassName.replaceAll(/^.*\./, '')
+        }
+
+        String getFullyQualifiedClassName() {
+            if (type.primitive) {
+                return DocPackage.PRIMITIVE_TYPE_PSEUDO_PACKAGE + '.' + type.toString()
+            }
+            DocUtil.resolveJdkClassName(type.toString())
+        }
+
+        boolean isInterface() {
+            type.javaClass.isInterface()
+        }
+
+        String getSortKey() {
+            simpleClassName + ' ' + fullyQualifiedClassName
+        }
+
+        String linkAnchor(DocType otherDocType) {
+            DocUtil.getLinkAnchor(otherDocType.fullyQualifiedClassName, packageName)
+        }
+    }
+
+    private static class DocMethod {
+        DocType declaringDocType
+        JavaMethod javaMethod
+
+        String getName() {
+            javaMethod.name
+        }
+
+        /**
+         * Retrieve the parameters of the method.
+         *
+         * @param method a method
+         * @return a list of parameters without the first one
+         */
+        List<JavaParameter> getParameters() {
+            if (javaMethod.getParameters().size() > 1) {
+                return javaMethod.getParameters().toList()[1..-1]
+            }
+            return []
+        }
+
+        String getParametersSignature() {
+            parameters.collect { DocUtil.resolveJdkClassName(it.type.toString()) }.join(", ")
+        }
+
+        String getParametersDocUrl() {
+            parameters.collect { "${DocUtil.getLinkAnchor(it.type.toString(), declaringDocType.packageName)} $it.name" }.join(", ")
+        }
+
+        String getReturnTypeDocUrl() {
+            def returnType = javaMethod.returnType
+            def resolvedReturnType = (returnType) ? DocUtil.resolveJdkClassName(returnType.toString()) : ""
+            DocUtil.getLinkAnchor(resolvedReturnType, declaringDocType.packageName)
+        }
+
+        String getComment() {
+            DocUtil.formatJavadocText(javaMethod.comment ?: '', declaringDocType.packageName)
+        }
+
+        String getShortComment() {
+            DocUtil.formatJavadocText(DocUtil.getFirstSentence(javaMethod.comment ?: ''), declaringDocType.packageName)
+        }
+
+        String getReturnComment() {
+            DocUtil.formatJavadocText(javaMethod.getTagByName("return")?.value ?: '', declaringDocType.packageName)
+        }
+
+        Map getParameterComments() {
+            javaMethod.getTagsByName("param").drop(1).collectEntries { // first arg is the "real this"
+                def name = it.value.replaceAll(/ .*/, '')
+                def comment = DocUtil.formatJavadocText(it.value.replaceAll(/^\w*/, ''), declaringDocType.packageName)
+                [name, comment]
+            }
+        }
+
+        List<String> getSeeComments() {
+            javaMethod.getTagsByName("see").collect { DocUtil.getLinkAnchor(it.value, declaringDocType.packageName) }
+        }
+
+        String getSinceComment() {
+            javaMethod.getTagByName("since")?.value
+        }
+
+        boolean isStatic() {
+            javaMethod.parentClass.name == 'DefaultGroovyStaticMethods'
+        }
+
+        String getSortKey() {
+            name + ' ' + parametersSignature + ' ' + declaringDocType.fullyQualifiedClassName
+        }
+    }
+
+    private static class DocUtil {
+        static String resolveJdkClassName(String className) {
+            if (className in 'A'..'Z') {
+                return 'java.lang.Object'
+            }
+            if (className in ('A'..'Z').collect{ it + '[]' }) {
+                return 'java.lang.Object[]'
+            }
+            return className
+        }
+
+        static String formatJavadocText(String text, String packageName) {
+            linkify(codify(text), packageName)
+        }
+
+        private static String linkify(String text, String packageName) {
+            text.replaceAll(/\{@link\s+([^}]*)\s*\}/) { String all, String destination ->
+                // A class name cannot be omitted: https://issues.apache.org/jira/browse/GROOVY-6740 TODO: remove DocUtil once fixed?
+                DocUtil.getLinkAnchor(destination, packageName)
+            }
+        }
+
+        private static String codify(String text) {
+            text.replaceAll(/\{@code\s+([^}]*)\s*\}/) { String all, String code -> """<code>${code}</code>""" }
+        }
+
+        static String getFirstSentence(String text) {
+            def boundary = BreakIterator.getSentenceInstance(CONFIG.locale)
+            boundary.setText(text)
+            int start = boundary.first()
+            int end = boundary.next()
+            if (start > -1 && end > -1) {
+                return text.substring(start, end)
+            }
+            return text
+        }
+
+        static String getLinkAnchor(String destination, String originPackageName) {
+            // resolving a destination if it's in GDK.
+            def inGdk = destination.startsWith('#')
+            if (inGdk) {
+                (destination =~ /#([^(]*)\(([^)]+)\)/).each { String all, String name, String argsText ->
+                    def args = argsText.split(/,\s?/).toList()
+                    def first = args.remove(0)
+                    destination = "$first#$name(${args.join(', ')})".toString()
+                }
+            }
+
+            def fullyQualifiedClassName = resolveJdkClassName(destination.replaceFirst(/#.*$/, ''))
+            def methodSignatureHash = destination.replaceFirst(/^[^#]*/, '')
+            def simpleClassName = fullyQualifiedClassName.replaceFirst(/.*\./, "")
+            def packageName = fullyQualifiedClassName.replaceFirst(/.?[^.]+$/, '')
+
+            // If a package is empty, a destination text should be just returned
+            // because a link to the right documentation location cannot be made.
+            if (packageName.empty) {
+                return destination
+            }
+
+            def apiBaseUrl, title
+            if (inGdk) {
+                apiBaseUrl = '../' * (originPackageName.count('.') + 1)
+                title = "GDK enhancement for ${fullyQualifiedClassName}"
+            } else {
+                title = "Class in $packageName"
+                apiBaseUrl = './'
+                String key = CONFIG.links.keySet().find{ packageName.startsWith(it) }
+                if (key) {
+                    apiBaseUrl = CONFIG.links[key]
+                    if (apiBaseUrl.startsWith('..')) apiBaseUrl = '../' * (originPackageName.count('.') + 1) + apiBaseUrl
+
+                }
+            }
+
+            def url = "${apiBaseUrl}${packageName.replace('.', '/')}/${simpleClassName}.html${methodSignatureHash}"
+            return """<a href="$url" title="$title">${simpleClassName}${methodSignatureHash}</a>"""
+        }
+
+        static File createPackageDirectory(File outputDir, String packageName) {
+            def packagePath = filePathOf(packageName)
+            def dir = new File(outputDir, packagePath)
+            dir.mkdirs()
+            return dir
+        }
+
+        private static String filePathOf(String packageName) {
+            def fileSep = File.separator
+            // need to escape separator on windows for regex's sake
+            if (fileSep == '\\') fileSep *= 2
+            return packageName.replaceAll(/\./, fileSep)
+        }
+
+        static File sourceFileOf(String pathOrClassName) {
+            // TODO don't hardcode like this
+            if (pathOrClassName.contains("/")) {
+                return new File(pathOrClassName)
+            }
+            new File("src/main/java/" + pathOrClassName.replace('.', '/') + ".java")
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/groovy/org/codehaus/groovy/tools/DocGenerator.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/groovy/org/codehaus/groovy/tools/DocGenerator.groovy b/subprojects/groovy-docgenerator/src/main/groovy/org/codehaus/groovy/tools/DocGenerator.groovy
index 3822935..79b33cb 100644
--- a/subprojects/groovy-docgenerator/src/main/groovy/org/codehaus/groovy/tools/DocGenerator.groovy
+++ b/subprojects/groovy-docgenerator/src/main/groovy/org/codehaus/groovy/tools/DocGenerator.groovy
@@ -18,529 +18,16 @@
  */
 package org.codehaus.groovy.tools
 
-import com.thoughtworks.qdox.JavaDocBuilder
-import com.thoughtworks.qdox.model.JavaClass
-import com.thoughtworks.qdox.model.JavaMethod
-import com.thoughtworks.qdox.model.JavaParameter
-import com.thoughtworks.qdox.model.Type
-import groovy.cli.picocli.CliBuilder
-import groovy.text.SimpleTemplateEngine
-import groovy.text.Template
-import groovy.text.TemplateEngine
-import org.codehaus.groovy.runtime.DefaultGroovyMethods
-import org.codehaus.groovy.tools.shell.util.Logger
-import org.codehaus.groovy.tools.shell.util.MessageSource
-
-import java.text.BreakIterator
-import java.util.concurrent.ConcurrentHashMap
-
-/**
- * Generate documentation about the methods provided by the Groovy Development Kit
- * that enhance the standard JDK classes.
- */
+@Deprecated
 class DocGenerator {
-    private static final MessageSource messages = new MessageSource(DocGenerator)
-    private static final Logger log = Logger.create(DocGenerator)
-    private static final Comparator SORT_KEY_COMPARATOR = [compare: { a, b -> return a.sortKey.compareTo(b.sortKey) }] as Comparator
-    private static final Map<String, Object> CONFIG = new ConcurrentHashMap<String, Object>();
-
-    List<File> sourceFiles
-    File outputDir
-    DocSource docSource
+    @Delegate
+    org.apache.groovy.docgenerator.DocGenerator delegate
 
     DocGenerator(List<File> sourceFiles, File outputFolder) {
-        this.sourceFiles = sourceFiles
-        this.outputDir = outputFolder
-        this.docSource = parseSource(sourceFiles)
-    }
-
-    /**
-     * Parse the *GroovyMethods (DGM) classes to build a graph representing the structure of the class,
-     * with its methods, javadoc comments and tags.
-     */
-    private static DocSource parseSource(List<File> sourceFiles) {
-        JavaDocBuilder builder = new JavaDocBuilder()
-        sourceFiles.each {
-            if (it.exists()) {
-                builder.addSource(it.newReader())
-                log.debug "adding reader for $it"
-            } else {
-                log.debug "not found, skipping: $it.path"
-            }
-        }
-
-        def methods = builder.sources.collectMany { source ->
-            source.classes.collectMany { aClass ->
-                aClass.methods.findAll { !it.annotations.any { it.type.fullyQualifiedName == 'java.lang.Deprecated' } }
-            }
-        }
-
-        def docSource = new DocSource()
-        methods.each { JavaMethod method ->
-            if (!method.isPublic() || !method.isStatic()) {
-                return // skip it
-            }
-
-            def firstParam = method.parameters[0]
-            def firstParamType = firstParam.resolvedValue.isEmpty() ? firstParam.type : new Type(firstParam.resolvedValue, 0, firstParam.parentClass)
-            docSource.add(firstParamType, method)
-        }
-        docSource.populateInheritedMethods()
-        return docSource
-    }
-
-    /**
-     * Builds an HTML page from the structure of DefaultGroovyMethods.
-     */
-    void generateAll() {
-        def engine = new SimpleTemplateEngine()
-
-        // the index.html
-        def indexTemplate = createTemplate(engine, 'index.html')
-        new File(outputDir, 'index.html').withWriter {
-            it << indexTemplate.make(title: CONFIG.title)
-        }
-
-        // the overview-summary.html
-        def overviewTemplate = createTemplate(engine, 'overview-summary.html')
-        new File(outputDir, 'overview-summary.html').withWriter {
-            it << overviewTemplate.make(title: CONFIG.title)
-        }
-
-        // the overview-frame.html
-        def overviewFrameTemplate = createTemplate(engine, 'template.overview-frame.html')
-        new File(outputDir, 'overview-frame.html').withWriter {
-            def docPackagesExceptPrimitiveType = docSource.packages.findAll { !it.primitive }
-            it << overviewFrameTemplate.make(packages: docPackagesExceptPrimitiveType, title: CONFIG.title)
-        }
-
-        // the package-list
-        new File(outputDir, 'package-list').withWriter { writer ->
-            docSource.packages*.name.each { writer.println it }
-        }
-
-        // the allclasses-frame.html
-        def allClassesTemplate = createTemplate(engine, 'template.allclasses-frame.html')
-        new File(outputDir, 'allclasses-frame.html').withWriter {
-            it << allClassesTemplate.make(docTypes: docSource.allDocTypes, title: CONFIG.title)
-        }
-
-        // the package-frame.html and package-summary.html for each package
-        def packageFrameTemplate = createTemplate(engine, 'template.package-frame.html')
-        def packageSummaryTemplate = createTemplate(engine, 'template.package-summary.html')
-        docSource.packages.each { DocPackage docPackage ->
-            def dir = DocUtil.createPackageDirectory(outputDir, docPackage.name)
-            new File(dir, 'package-frame.html').withWriter {
-                it << packageFrameTemplate.make(docPackage: docPackage, title: CONFIG.title)
-            }
-            new File(dir, 'package-summary.html').withWriter {
-                it << packageSummaryTemplate.make(docPackage: docPackage, title: CONFIG.title)
-            }
-        }
-
-        // the class.html for each class
-        def classTemplate = createTemplate(engine, 'template.class.html')
-        docSource.allDocTypes.each { DocType docType ->
-            def dir = DocUtil.createPackageDirectory(outputDir, docType.packageName)
-            new File(dir, docType.simpleClassName + '.html').withWriter {
-                it << classTemplate.make(docType: docType, title: CONFIG.title)
-            }
-        }
-
-        // the index-all.html
-        def indexAllTemplate = createTemplate(engine, 'template.index-all.html')
-        new File(outputDir, 'index-all.html').withWriter {
-            it << indexAllTemplate.make('indexMap': generateIndexMap(), title: CONFIG.title)
-        }
-
-        // copy resources
-        ['groovy.ico', 'stylesheet.css'].each { String resource ->
-            new File(outputDir, resource) << getClass().getResource(resource).bytes
-        }
-    }
-
-    private Template createTemplate(TemplateEngine templateEngine, String resourceFile) {
-        def resourceUrl = getClass().getResource(resourceFile)
-        return templateEngine.createTemplate(resourceUrl.text)
-    }
-
-    /**
-     * Generate an index map for index-all.html.
-     * <p>
-     * This method creates a index map indexed by the first letter of the
-     * method in upper case, the map value is a list of methods.
-     * <p>
-     * e.g.: 'A' : [ m1, m2, m3 .. ]
-     * The values m1, m2, m3 are sorted by the method name, and the parameter signature.
-     * The method names of m1, m2, m3 start either with 'a', or 'A'.
-     *
-     * @return indexMap
-     */
-    private Map generateIndexMap() {
-        def indexItems = []
-        docSource.allDocTypes.each { DocType docType ->
-            // the class
-            indexItems << [
-                index: docType.simpleClassName.capitalize()[0],
-                docType: docType,
-                sortKey: docType.sortKey,
-            ]
-
-            // the methods
-            docType.docMethods.each { DocMethod docMethod ->
-                indexItems << [
-                    index: docMethod.javaMethod.name.capitalize()[0],
-                    docType: docType,
-                    docMethod: docMethod,
-                    sortKey: docMethod.sortKey
-                ]
-            }
-        }
-        def indexMap = new TreeMap().withDefault { new TreeSet(SORT_KEY_COMPARATOR) }
-        for (indexItem in indexItems) {
-            indexMap[indexItem['index']] << indexItem
-        }
-        return indexMap
+        delegate = new org.apache.groovy.docgenerator.DocGenerator(sourceFiles, outputFolder)
     }
 
-    /**
-     * Main entry point.
-     */
     static void main(String... args) {
-        def cli = new CliBuilder(usage : 'DocGenerator [options] [sourcefiles]', posix:false)
-        cli.help(longOpt: 'help', messages['cli.option.help.description'])
-        cli._(longOpt: 'version', messages['cli.option.version.description'])
-        cli.o(longOpt: 'outputDir', args:1, argName: 'path', messages['cli.option.output.dir.description'])
-        cli.title(longOpt: 'title', args:1, argName: 'text', messages['cli.option.title.description'])
-        cli.link(args:2, valueSeparator:'=', argName:'comma-separated-package-prefixes=url',
-                messages['cli.option.link.patterns.description'])
-        def options = cli.parse(args)
-
-        if (options.help) {
-            cli.usage()
-            return
-        }
-
-        if (options.links && options.links.size() % 2 == 1) {
-            throw new IllegalArgumentException("Links should be specified in pattern=url pairs")
-        }
-
-        if (options.version) {
-            println messages.format('cli.info.version', GroovySystem.version)
-            return
-        }
-
-        def start = System.currentTimeMillis()
-
-        def outputDir = new File(options.outputDir ?: "target/html/groovy-jdk")
-        outputDir.mkdirs()
-        CONFIG.title = options.title ?: "Groovy JDK"
-        if (options.links) {
-            CONFIG.links = options.links.collate(2).collectMany{ prefixes, url -> prefixes.tokenize(',').collect{[it, url]} }.collectEntries()
-        }
-        CONFIG.locale = Locale.default  // TODO allow locale to be passed in
-
-        def srcFiles = options.arguments().collect { DocUtil.sourceFileOf(it) }
-        try {
-            DefaultGroovyMethods.ADDITIONAL_CLASSES.each { aClass ->
-                def className = aClass.name.replaceAll(/\$.*/, '')
-                def additionalFile = DocUtil.sourceFileOf(className)
-                if (srcFiles.every { it.canonicalPath != additionalFile.canonicalPath }) {
-                    srcFiles << additionalFile
-                }
-            }
-        } catch (MissingPropertyException e) { // TODO is it still needed?
-            // no call site change available, so ignore it
-            log.error e.message, e
-        }
-
-        def docGen = new DocGenerator(srcFiles, outputDir)
-        docGen.generateAll()
-
-        def end = System.currentTimeMillis()
-        log.debug "Done. Took ${end - start} milliseconds."
-    }
-
-    private static class DocSource {
-        SortedSet<DocPackage> packages = new TreeSet<DocPackage>(SORT_KEY_COMPARATOR)
-
-        void add(Type type, JavaMethod javaMethod) {
-            DocType tempDocType = new DocType(type: type)
-
-            DocPackage aPackage = packages.find { it.name == tempDocType.packageName }
-            if (!aPackage) {
-                aPackage = new DocPackage(name: tempDocType.packageName)
-                packages << aPackage
-            }
-
-            DocType docType = aPackage.docTypes.find { it.fullyQualifiedClassName == tempDocType.fullyQualifiedClassName }
-            if (!docType) {
-                docType = tempDocType
-                aPackage.docTypes << docType
-            }
-
-            def docMethod = new DocMethod(declaringDocType: docType, javaMethod: javaMethod)
-            docType.docMethods << docMethod
-        }
-
-        void populateInheritedMethods() {
-            def allTypes = allDocTypes.collectEntries{ [it.fullyQualifiedClassName, it] }
-            allTypes.each { name, docType ->
-                if (name.endsWith('[]') || name.startsWith('primitive-types')) return
-                Type next = docType.javaClass.superClass
-                while (next != null) {
-                    if (allTypes.keySet().contains(next.value)) {
-                        docType.inheritedMethods[allTypes[next.value]] = allTypes[next.value].docMethods
-                    }
-                    next = next.javaClass.superClass
-                }
-                def remaining = docType.javaClass.implementedInterfaces.toList()
-                while (!remaining.isEmpty()) {
-                    def nextInt = remaining.remove(0)
-                    if (allTypes.keySet().contains(nextInt.fullyQualifiedName)) {
-                        docType.inheritedMethods[allTypes[nextInt.fullyQualifiedName]] = allTypes[nextInt.fullyQualifiedName].docMethods
-                    }
-                    remaining.addAll(nextInt.implementedInterfaces.toList())
-                }
-            }
-        }
-
-        SortedSet<DocType> getAllDocTypes() {
-            def allSet = new TreeSet(SORT_KEY_COMPARATOR)
-            allSet.addAll(packages.collectMany { it.docTypes })
-            return allSet
-        }
-    }
-
-    private static class DocPackage {
-        static final String PRIMITIVE_TYPE_PSEUDO_PACKAGE = 'primitive-types'
-        String name
-        SortedSet<DocType> docTypes = new TreeSet<DocType>(SORT_KEY_COMPARATOR)
-
-        boolean isPrimitive() {
-            name == PRIMITIVE_TYPE_PSEUDO_PACKAGE
-        }
-
-        String getSortKey() {
-            name
-        }
-    }
-
-    private static class DocType {
-        private Type type
-        final String shortComment = "" // empty because cannot get a comment of JDK
-        SortedSet<DocMethod> docMethods = new TreeSet<DocMethod>(SORT_KEY_COMPARATOR)
-        Map<String, List<DocMethod>> inheritedMethods = new LinkedHashMap<String, List<DocMethod>>()
-
-        JavaClass getJavaClass() {
-            type.javaClass
-        }
-
-        String getPackageName() {
-            if (type.primitive) {
-                return DocPackage.PRIMITIVE_TYPE_PSEUDO_PACKAGE
-            }
-            def fqcn = fullyQualifiedClassName
-            if (fqcn.indexOf(".") < 0) {
-                return ""
-            }
-            fqcn.replaceAll(/\.[^.]*$/, '')
-        }
-
-        String getSimpleClassName() {
-            fullyQualifiedClassName.replaceAll(/^.*\./, '')
-        }
-
-        String getFullyQualifiedClassName() {
-            if (type.primitive) {
-                return DocPackage.PRIMITIVE_TYPE_PSEUDO_PACKAGE + '.' + type.toString()
-            }
-            DocUtil.resolveJdkClassName(type.toString())
-        }
-
-        boolean isInterface() {
-            type.javaClass.isInterface()
-        }
-
-        String getSortKey() {
-            simpleClassName + ' ' + fullyQualifiedClassName
-        }
-
-        String linkAnchor(DocType otherDocType) {
-            DocUtil.getLinkAnchor(otherDocType.fullyQualifiedClassName, packageName)
-        }
-    }
-
-    private static class DocMethod {
-        DocType declaringDocType
-        JavaMethod javaMethod
-
-        String getName() {
-            javaMethod.name
-        }
-
-        /**
-         * Retrieve the parameters of the method.
-         *
-         * @param method a method
-         * @return a list of parameters without the first one
-         */
-        List<JavaParameter> getParameters() {
-            if (javaMethod.getParameters().size() > 1) {
-                return javaMethod.getParameters().toList()[1..-1]
-            }
-            return []
-        }
-
-        String getParametersSignature() {
-            parameters.collect { DocUtil.resolveJdkClassName(it.type.toString()) }.join(", ")
-        }
-
-        String getParametersDocUrl() {
-            parameters.collect { "${DocUtil.getLinkAnchor(it.type.toString(), declaringDocType.packageName)} $it.name" }.join(", ")
-        }
-
-        String getReturnTypeDocUrl() {
-            def returnType = javaMethod.returnType
-            def resolvedReturnType = (returnType) ? DocUtil.resolveJdkClassName(returnType.toString()) : ""
-            DocUtil.getLinkAnchor(resolvedReturnType, declaringDocType.packageName)
-        }
-
-        String getComment() {
-            DocUtil.formatJavadocText(javaMethod.comment ?: '', declaringDocType.packageName)
-        }
-
-        String getShortComment() {
-            DocUtil.formatJavadocText(DocUtil.getFirstSentence(javaMethod.comment ?: ''), declaringDocType.packageName)
-        }
-
-        String getReturnComment() {
-            DocUtil.formatJavadocText(javaMethod.getTagByName("return")?.value ?: '', declaringDocType.packageName)
-        }
-
-        Map getParameterComments() {
-            javaMethod.getTagsByName("param").drop(1).collectEntries { // first arg is the "real this"
-                def name = it.value.replaceAll(/ .*/, '')
-                def comment = DocUtil.formatJavadocText(it.value.replaceAll(/^\w*/, ''), declaringDocType.packageName)
-                [name, comment]
-            }
-        }
-
-        List<String> getSeeComments() {
-            javaMethod.getTagsByName("see").collect { DocUtil.getLinkAnchor(it.value, declaringDocType.packageName) }
-        }
-
-        String getSinceComment() {
-            javaMethod.getTagByName("since")?.value
-        }
-
-        boolean isStatic() {
-            javaMethod.parentClass.name == 'DefaultGroovyStaticMethods'
-        }
-
-        String getSortKey() {
-            name + ' ' + parametersSignature + ' ' + declaringDocType.fullyQualifiedClassName
-        }
-    }
-
-    private static class DocUtil {
-        static String resolveJdkClassName(String className) {
-            if (className in 'A'..'Z') {
-                return 'java.lang.Object'
-            }
-            if (className in ('A'..'Z').collect{ it + '[]' }) {
-                return 'java.lang.Object[]'
-            }
-            return className
-        }
-
-        static String formatJavadocText(String text, String packageName) {
-            linkify(codify(text), packageName)
-        }
-
-        private static String linkify(String text, String packageName) {
-            text.replaceAll(/\{@link\s+([^}]*)\s*\}/) { String all, String destination ->
-                // A class name cannot be omitted: https://issues.apache.org/jira/browse/GROOVY-6740 TODO: remove DocUtil once fixed?
-                DocUtil.getLinkAnchor(destination, packageName)
-            }
-        }
-
-        private static String codify(String text) {
-            text.replaceAll(/\{@code\s+([^}]*)\s*\}/) { String all, String code -> """<code>${code}</code>""" }
-        }
-
-        static String getFirstSentence(String text) {
-            def boundary = BreakIterator.getSentenceInstance(CONFIG.locale)
-            boundary.setText(text)
-            int start = boundary.first()
-            int end = boundary.next()
-            if (start > -1 && end > -1) {
-                return text.substring(start, end)
-            }
-            return text
-        }
-
-        static String getLinkAnchor(String destination, String originPackageName) {
-            // resolving a destination if it's in GDK.
-            def inGdk = destination.startsWith('#')
-            if (inGdk) {
-                (destination =~ /#([^(]*)\(([^)]+)\)/).each { String all, String name, String argsText ->
-                    def args = argsText.split(/,\s?/).toList()
-                    def first = args.remove(0)
-                    destination = "$first#$name(${args.join(', ')})".toString()
-                }
-            }
-
-            def fullyQualifiedClassName = resolveJdkClassName(destination.replaceFirst(/#.*$/, ''))
-            def methodSignatureHash = destination.replaceFirst(/^[^#]*/, '')
-            def simpleClassName = fullyQualifiedClassName.replaceFirst(/.*\./, "")
-            def packageName = fullyQualifiedClassName.replaceFirst(/.?[^.]+$/, '')
-
-            // If a package is empty, a destination text should be just returned
-            // because a link to the right documentation location cannot be made.
-            if (packageName.empty) {
-                return destination
-            }
-
-            def apiBaseUrl, title
-            if (inGdk) {
-                apiBaseUrl = '../' * (originPackageName.count('.') + 1)
-                title = "GDK enhancement for ${fullyQualifiedClassName}"
-            } else {
-                title = "Class in $packageName"
-                apiBaseUrl = './'
-                String key = CONFIG.links.keySet().find{ packageName.startsWith(it) }
-                if (key) {
-                    apiBaseUrl = CONFIG.links[key]
-                    if (apiBaseUrl.startsWith('..')) apiBaseUrl = '../' * (originPackageName.count('.') + 1) + apiBaseUrl
-
-                }
-            }
-
-            def url = "${apiBaseUrl}${packageName.replace('.', '/')}/${simpleClassName}.html${methodSignatureHash}"
-            return """<a href="$url" title="$title">${simpleClassName}${methodSignatureHash}</a>"""
-        }
-
-        static File createPackageDirectory(File outputDir, String packageName) {
-            def packagePath = filePathOf(packageName)
-            def dir = new File(outputDir, packagePath)
-            dir.mkdirs()
-            return dir
-        }
-
-        private static String filePathOf(String packageName) {
-            def fileSep = File.separator
-            // need to escape separator on windows for regex's sake
-            if (fileSep == '\\') fileSep *= 2
-            return packageName.replaceAll(/\./, fileSep)
-        }
-
-        static File sourceFileOf(String pathOrClassName) {
-            // TODO don't hardcode like this
-            if (pathOrClassName.contains("/")) {
-                return new File(pathOrClassName)
-            }
-            new File("src/main/java/" + pathOrClassName.replace('.', '/') + ".java")
-        }
+        org.apache.groovy.docgenerator.DocGenerator.main(args)
     }
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/DocGenerator.properties
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/DocGenerator.properties b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/DocGenerator.properties
new file mode 100644
index 0000000..5c54aec
--- /dev/null
+++ b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/DocGenerator.properties
@@ -0,0 +1,34 @@
+#
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF 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.
+#
+
+#
+# CLI messages
+#
+
+cli.option.help.description=Display this help message
+
+cli.option.version.description=Display the version
+
+cli.option.title.description=Title to appear in html, default "Groovy JDK"
+
+cli.option.output.dir.description=The output directory, default "target/html/groovy-jdk"
+
+cli.option.link.patterns.description=The JavaDoc URLs for the given package prefixes
+
+cli.info.version=@|green DocGenerator|@ {0}

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/groovy.ico
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/groovy.ico b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/groovy.ico
new file mode 100644
index 0000000..9e9b8d8
Binary files /dev/null and b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/groovy.ico differ

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/index.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/index.html b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/index.html
new file mode 100644
index 0000000..87d9028
--- /dev/null
+++ b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/index.html
@@ -0,0 +1,95 @@
+<!--
+
+     Licensed to the Apache Software Foundation (ASF) under one
+     or more contributor license agreements.  See the NOTICE file
+     distributed with this work for additional information
+     regarding copyright ownership.  The ASF 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.
+
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
+<html>
+<head>
+<title>
+$title
+</title>
+<link href="groovy.ico" type="image/x-icon" rel="shortcut icon">
+<link href="groovy.ico" type="image/x-icon" rel="icon">
+
+<script type="text/javascript">
+    targetPage = "" + window.location.search;
+    if (targetPage != "" && targetPage != "undefined")
+        targetPage = targetPage.substring(1);
+    if (targetPage.indexOf(":") != -1)
+        targetPage = "undefined";
+    if (targetPage != "" && !validURL(targetPage))
+        targetPage = "undefined";
+    function validURL(url) {
+        var pos = url.indexOf(".html");
+        if (pos == -1 || pos != url.length - 5)
+            return false;
+        var allowNumber = false;
+        var allowSep = false;
+        var seenDot = false;
+        for (var i = 0; i < url.length - 5; i++) {
+            var ch = url.charAt(i);
+            if ('a' <= ch && ch <= 'z' ||
+                    'A' <= ch && ch <= 'Z' ||
+                    ch == '\$' ||
+                    ch == '_') {
+                allowNumber = true;
+                allowSep = true;
+            } else if ('0' <= ch && ch <= '9'
+                    || ch == '-') {
+                if (!allowNumber)
+                    return false;
+            } else if (ch == '/' || ch == '.') {
+                if (!allowSep)
+                    return false;
+                allowNumber = false;
+                allowSep = false;
+                if (ch == '.')
+                    seenDot = true;
+                if (ch == '/' && seenDot)
+                    return false;
+            } else {
+                return false;
+            }
+        }
+        return true;
+    }
+    function loadFrames() {
+        if (targetPage != "" && targetPage != "undefined")
+            top.classFrame.location = top.targetPage;
+    }
+</script>
+</head>
+<frameset cols="20%,80%" title="" onLoad="top.loadFrames()">
+<frameset rows="30%,70%" title="" onLoad="top.loadFrames()">
+	<frame src="overview-frame.html" name="packageListFrame" title="All Packages">
+	<frame src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
+</frameset>
+
+<frame src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
+<noframes>
+<h2>
+Frame Alert</h2>
+<P>
+This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+<br>
+Link to<A HREF="overview-summary.html">Non-frame version.</A>
+</P>
+</noframes>
+</frameset>
+</html>

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/overview-summary.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/overview-summary.html b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/overview-summary.html
new file mode 100644
index 0000000..17ab69f
--- /dev/null
+++ b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/overview-summary.html
@@ -0,0 +1,58 @@
+<!--
+
+     Licensed to the Apache Software Foundation (ASF) under one
+     or more contributor license agreements.  See the NOTICE file
+     distributed with this work for additional information
+     regarding copyright ownership.  The ASF 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.
+
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+    <title>Overview ($title)</title>
+    <link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+    <script type="text/javascript">
+        function windowTitle() {
+            parent.document.title = document.title;
+        }
+    </script>
+</head>
+
+<body class="center" onload="windowTitle();">
+
+    <!-- ========== START OF NAVBAR ========== -->
+    <a name="navbar_top"><!-- --></a>
+
+    <div class="topNav">
+        <ul class="navList" title="Navigation">
+            <li class="navBarCell1Rev">Overview</li>
+            <li>Package</li>
+            <li>Class</li>
+            <li><a href="index-all.html">Index</a></li>
+        </ul>
+    </div>
+    <!-- =========== END OF NAVBAR =========== -->
+
+    <div class="header">
+        <h1>Groovy JDK API Documentation</h1>
+        <h2>Version ${GroovySystem.version}</h2>
+    </div>
+
+    <div class="container">
+        <p>This document describes the methods added to the JDK to make it more groovy.</p>
+    </div>
+
+</body>
+</html>


[4/5] groovy git commit: GROOVY-8593: DocGenerator could be moved to avoid split packages (closes #715)

Posted by pa...@apache.org.
http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/stylesheet.css
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/stylesheet.css b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/stylesheet.css
new file mode 100644
index 0000000..3aba844
--- /dev/null
+++ b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/stylesheet.css
@@ -0,0 +1,2321 @@
+@charset "${props.charset}";
+
+/*! normalize.css v2.1.0 | MIT License | git.io/normalize */
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary {
+    display: block
+}
+
+audio, canvas, video {
+    display: inline-block
+}
+
+audio:not([controls]) {
+    display: none;
+    height: 0
+}
+
+[hidden] {
+    display: none
+}
+
+html {
+    font-family: sans-serif;
+    -webkit-text-size-adjust: 100%;
+    -ms-text-size-adjust: 100%
+}
+
+body {
+    margin: 0
+}
+
+a:focus {
+    outline: thin dotted
+}
+
+a:active, a:hover {
+    outline: 0
+}
+
+h1 {
+    font-size: 2em;
+    margin: .67em 0
+}
+
+abbr[title] {
+    border-bottom: 1px dotted
+}
+
+b, strong {
+    font-weight: bold
+}
+
+dfn {
+    font-style: italic
+}
+
+hr {
+    -moz-box-sizing: content-box;
+    box-sizing: content-box;
+    height: 0
+}
+
+mark {
+    background: #ff0;
+    color: #000
+}
+
+code, kbd, pre, samp {
+    font-family: monospace, serif;
+    font-size: 1em
+}
+
+pre {
+    white-space: pre-wrap
+}
+
+q {
+    quotes: "\201C" "\201D" "\2018" "\2019"
+}
+
+small {
+    font-size: 80%
+}
+
+sub, sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline
+}
+
+sup {
+    top: -0.5em
+}
+
+sub {
+    bottom: -0.25em
+}
+
+img {
+    border: 0
+}
+
+svg:not(:root) {
+    overflow: hidden
+}
+
+figure {
+    margin: 0
+}
+
+fieldset {
+    border: 1px solid #c0c0c0;
+    margin: 0 2px;
+    padding: .35em .625em .75em
+}
+
+legend {
+    border: 0;
+    padding: 0
+}
+
+button, input, select, textarea {
+    font-family: inherit;
+    font-size: 100%;
+    margin: 0
+}
+
+button, input {
+    line-height: normal
+}
+
+button, select {
+    text-transform: none
+}
+
+button, html input[type="button"], input[type="reset"], input[type="submit"] {
+    -webkit-appearance: button;
+    cursor: pointer
+}
+
+button[disabled], html input[disabled] {
+    cursor: default
+}
+
+input[type="checkbox"], input[type="radio"] {
+    box-sizing: border-box;
+    padding: 0
+}
+
+input[type="search"] {
+    -webkit-appearance: textfield;
+    -moz-box-sizing: content-box;
+    -webkit-box-sizing: content-box;
+    box-sizing: content-box
+}
+
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration {
+    -webkit-appearance: none
+}
+
+button::-moz-focus-inner, input::-moz-focus-inner {
+    border: 0;
+    padding: 0
+}
+
+textarea {
+    overflow: auto;
+    vertical-align: top
+}
+
+table {
+    border-collapse: collapse;
+    border-spacing: 0
+}
+
+@-ms-viewport {
+    width: device-width
+}
+
+@media screen and (max-width: 400px) {
+    @-ms-viewport {
+        width: 320px
+    }
+}
+
+.hidden {
+    display: none !important;
+    visibility: hidden !important
+}
+
+.visible-xs {
+    display: none !important
+}
+
+tr.visible-xs {
+    display: none !important
+}
+
+th.visible-xs, td.visible-xs {
+    display: none !important
+}
+
+@media (max-width: 767px) {
+    .visible-xs {
+        display: block !important
+    }
+
+    tr.visible-xs {
+        display: table-row !important
+    }
+
+    th.visible-xs, td.visible-xs {
+        display: table-cell !important
+    }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+    .visible-xs.visible-sm {
+        display: block !important
+    }
+
+    tr.visible-xs.visible-sm {
+        display: table-row !important
+    }
+
+    th.visible-xs.visible-sm, td.visible-xs.visible-sm {
+        display: table-cell !important
+    }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+    .visible-xs.visible-md {
+        display: block !important
+    }
+
+    tr.visible-xs.visible-md {
+        display: table-row !important
+    }
+
+    th.visible-xs.visible-md, td.visible-xs.visible-md {
+        display: table-cell !important
+    }
+}
+
+@media (min-width: 1200px) {
+    .visible-xs.visible-lg {
+        display: block !important
+    }
+
+    tr.visible-xs.visible-lg {
+        display: table-row !important
+    }
+
+    th.visible-xs.visible-lg, td.visible-xs.visible-lg {
+        display: table-cell !important
+    }
+}
+
+.visible-sm {
+    display: none !important
+}
+
+tr.visible-sm {
+    display: none !important
+}
+
+th.visible-sm, td.visible-sm {
+    display: none !important
+}
+
+@media (max-width: 767px) {
+    .visible-sm.visible-xs {
+        display: block !important
+    }
+
+    tr.visible-sm.visible-xs {
+        display: table-row !important
+    }
+
+    th.visible-sm.visible-xs, td.visible-sm.visible-xs {
+        display: table-cell !important
+    }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+    .visible-sm {
+        display: block !important
+    }
+
+    tr.visible-sm {
+        display: table-row !important
+    }
+
+    th.visible-sm, td.visible-sm {
+        display: table-cell !important
+    }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+    .visible-sm.visible-md {
+        display: block !important
+    }
+
+    tr.visible-sm.visible-md {
+        display: table-row !important
+    }
+
+    th.visible-sm.visible-md, td.visible-sm.visible-md {
+        display: table-cell !important
+    }
+}
+
+@media (min-width: 1200px) {
+    .visible-sm.visible-lg {
+        display: block !important
+    }
+
+    tr.visible-sm.visible-lg {
+        display: table-row !important
+    }
+
+    th.visible-sm.visible-lg, td.visible-sm.visible-lg {
+        display: table-cell !important
+    }
+}
+
+.visible-md {
+    display: none !important
+}
+
+tr.visible-md {
+    display: none !important
+}
+
+th.visible-md, td.visible-md {
+    display: none !important
+}
+
+@media (max-width: 767px) {
+    .visible-md.visible-xs {
+        display: block !important
+    }
+
+    tr.visible-md.visible-xs {
+        display: table-row !important
+    }
+
+    th.visible-md.visible-xs, td.visible-md.visible-xs {
+        display: table-cell !important
+    }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+    .visible-md.visible-sm {
+        display: block !important
+    }
+
+    tr.visible-md.visible-sm {
+        display: table-row !important
+    }
+
+    th.visible-md.visible-sm, td.visible-md.visible-sm {
+        display: table-cell !important
+    }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+    .visible-md {
+        display: block !important
+    }
+
+    tr.visible-md {
+        display: table-row !important
+    }
+
+    th.visible-md, td.visible-md {
+        display: table-cell !important
+    }
+}
+
+@media (min-width: 1200px) {
+    .visible-md.visible-lg {
+        display: block !important
+    }
+
+    tr.visible-md.visible-lg {
+        display: table-row !important
+    }
+
+    th.visible-md.visible-lg, td.visible-md.visible-lg {
+        display: table-cell !important
+    }
+}
+
+.visible-lg {
+    display: none !important
+}
+
+tr.visible-lg {
+    display: none !important
+}
+
+th.visible-lg, td.visible-lg {
+    display: none !important
+}
+
+@media (max-width: 767px) {
+    .visible-lg.visible-xs {
+        display: block !important
+    }
+
+    tr.visible-lg.visible-xs {
+        display: table-row !important
+    }
+
+    th.visible-lg.visible-xs, td.visible-lg.visible-xs {
+        display: table-cell !important
+    }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+    .visible-lg.visible-sm {
+        display: block !important
+    }
+
+    tr.visible-lg.visible-sm {
+        display: table-row !important
+    }
+
+    th.visible-lg.visible-sm, td.visible-lg.visible-sm {
+        display: table-cell !important
+    }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+    .visible-lg.visible-md {
+        display: block !important
+    }
+
+    tr.visible-lg.visible-md {
+        display: table-row !important
+    }
+
+    th.visible-lg.visible-md, td.visible-lg.visible-md {
+        display: table-cell !important
+    }
+}
+
+@media (min-width: 1200px) {
+    .visible-lg {
+        display: block !important
+    }
+
+    tr.visible-lg {
+        display: table-row !important
+    }
+
+    th.visible-lg, td.visible-lg {
+        display: table-cell !important
+    }
+}
+
+.hidden-xs {
+    display: block !important
+}
+
+tr.hidden-xs {
+    display: table-row !important
+}
+
+th.hidden-xs, td.hidden-xs {
+    display: table-cell !important
+}
+
+@media (max-width: 767px) {
+    .hidden-xs {
+        display: none !important
+    }
+
+    tr.hidden-xs {
+        display: none !important
+    }
+
+    th.hidden-xs, td.hidden-xs {
+        display: none !important
+    }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+    .hidden-xs.hidden-sm {
+        display: none !important
+    }
+
+    tr.hidden-xs.hidden-sm {
+        display: none !important
+    }
+
+    th.hidden-xs.hidden-sm, td.hidden-xs.hidden-sm {
+        display: none !important
+    }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+    .hidden-xs.hidden-md {
+        display: none !important
+    }
+
+    tr.hidden-xs.hidden-md {
+        display: none !important
+    }
+
+    th.hidden-xs.hidden-md, td.hidden-xs.hidden-md {
+        display: none !important
+    }
+}
+
+@media (min-width: 1200px) {
+    .hidden-xs.hidden-lg {
+        display: none !important
+    }
+
+    tr.hidden-xs.hidden-lg {
+        display: none !important
+    }
+
+    th.hidden-xs.hidden-lg, td.hidden-xs.hidden-lg {
+        display: none !important
+    }
+}
+
+.hidden-sm {
+    display: block !important
+}
+
+tr.hidden-sm {
+    display: table-row !important
+}
+
+th.hidden-sm, td.hidden-sm {
+    display: table-cell !important
+}
+
+@media (max-width: 767px) {
+    .hidden-sm.hidden-xs {
+        display: none !important
+    }
+
+    tr.hidden-sm.hidden-xs {
+        display: none !important
+    }
+
+    th.hidden-sm.hidden-xs, td.hidden-sm.hidden-xs {
+        display: none !important
+    }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+    .hidden-sm {
+        display: none !important
+    }
+
+    tr.hidden-sm {
+        display: none !important
+    }
+
+    th.hidden-sm, td.hidden-sm {
+        display: none !important
+    }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+    .hidden-sm.hidden-md {
+        display: none !important
+    }
+
+    tr.hidden-sm.hidden-md {
+        display: none !important
+    }
+
+    th.hidden-sm.hidden-md, td.hidden-sm.hidden-md {
+        display: none !important
+    }
+}
+
+@media (min-width: 1200px) {
+    .hidden-sm.hidden-lg {
+        display: none !important
+    }
+
+    tr.hidden-sm.hidden-lg {
+        display: none !important
+    }
+
+    th.hidden-sm.hidden-lg, td.hidden-sm.hidden-lg {
+        display: none !important
+    }
+}
+
+.hidden-md {
+    display: block !important
+}
+
+tr.hidden-md {
+    display: table-row !important
+}
+
+th.hidden-md, td.hidden-md {
+    display: table-cell !important
+}
+
+@media (max-width: 767px) {
+    .hidden-md.hidden-xs {
+        display: none !important
+    }
+
+    tr.hidden-md.hidden-xs {
+        display: none !important
+    }
+
+    th.hidden-md.hidden-xs, td.hidden-md.hidden-xs {
+        display: none !important
+    }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+    .hidden-md.hidden-sm {
+        display: none !important
+    }
+
+    tr.hidden-md.hidden-sm {
+        display: none !important
+    }
+
+    th.hidden-md.hidden-sm, td.hidden-md.hidden-sm {
+        display: none !important
+    }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+    .hidden-md {
+        display: none !important
+    }
+
+    tr.hidden-md {
+        display: none !important
+    }
+
+    th.hidden-md, td.hidden-md {
+        display: none !important
+    }
+}
+
+@media (min-width: 1200px) {
+    .hidden-md.hidden-lg {
+        display: none !important
+    }
+
+    tr.hidden-md.hidden-lg {
+        display: none !important
+    }
+
+    th.hidden-md.hidden-lg, td.hidden-md.hidden-lg {
+        display: none !important
+    }
+}
+
+.hidden-lg {
+    display: block !important
+}
+
+tr.hidden-lg {
+    display: table-row !important
+}
+
+th.hidden-lg, td.hidden-lg {
+    display: table-cell !important
+}
+
+@media (max-width: 767px) {
+    .hidden-lg.hidden-xs {
+        display: none !important
+    }
+
+    tr.hidden-lg.hidden-xs {
+        display: none !important
+    }
+
+    th.hidden-lg.hidden-xs, td.hidden-lg.hidden-xs {
+        display: none !important
+    }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+    .hidden-lg.hidden-sm {
+        display: none !important
+    }
+
+    tr.hidden-lg.hidden-sm {
+        display: none !important
+    }
+
+    th.hidden-lg.hidden-sm, td.hidden-lg.hidden-sm {
+        display: none !important
+    }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+    .hidden-lg.hidden-md {
+        display: none !important
+    }
+
+    tr.hidden-lg.hidden-md {
+        display: none !important
+    }
+
+    th.hidden-lg.hidden-md, td.hidden-lg.hidden-md {
+        display: none !important
+    }
+}
+
+@media (min-width: 1200px) {
+    .hidden-lg {
+        display: none !important
+    }
+
+    tr.hidden-lg {
+        display: none !important
+    }
+
+    th.hidden-lg, td.hidden-lg {
+        display: none !important
+    }
+}
+
+.visible-print {
+    display: none !important
+}
+
+tr.visible-print {
+    display: none !important
+}
+
+th.visible-print, td.visible-print {
+    display: none !important
+}
+
+@media print {
+    .visible-print {
+        display: block !important
+    }
+
+    tr.visible-print {
+        display: table-row !important
+    }
+
+    th.visible-print, td.visible-print {
+        display: table-cell !important
+    }
+
+    .hidden-print {
+        display: none !important
+    }
+
+    tr.hidden-print {
+        display: none !important
+    }
+
+    th.hidden-print, td.hidden-print {
+        display: none !important
+    }
+}
+
+.container {
+    margin-right: auto;
+    margin-left: auto;
+    padding-left: 15px;
+    padding-right: 15px
+}
+
+.container:before, .container:after {
+    content: " ";
+    display: table
+}
+
+.container:after {
+    clear: both
+}
+
+.row-fluid {
+    margin-left: -15px;
+    margin-right: -15px
+}
+
+.row-fluid:before, .row-fluid:after {
+    content: " ";
+    display: table
+}
+
+.row-fluid:after {
+    clear: both
+}
+
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+    position: relative;
+    min-height: 1px;
+    padding-left: 15px;
+    padding-right: 15px
+}
+
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11 {
+    float: left
+}
+
+.col-xs-1 {
+    width: 8.333333333333332%
+}
+
+.col-xs-2 {
+    width: 16.666666666666664%
+}
+
+.col-xs-3 {
+    width: 25%
+}
+
+.col-xs-4 {
+    width: 33.33333333333333%
+}
+
+.col-xs-5 {
+    width: 41.66666666666667%
+}
+
+.col-xs-6 {
+    width: 50%
+}
+
+.col-xs-7 {
+    width: 58.333333333333336%
+}
+
+.col-xs-8 {
+    width: 66.66666666666666%
+}
+
+.col-xs-9 {
+    width: 75%
+}
+
+.col-xs-10 {
+    width: 83.33333333333334%
+}
+
+.col-xs-11 {
+    width: 91.66666666666666%
+}
+
+.col-xs-12 {
+    width: 100%
+}
+
+@media (min-width: 768px) {
+    .container {
+        max-width: 750px
+    }
+
+    .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11 {
+        float: left
+    }
+
+    .col-sm-1 {
+        width: 8.333333333333332%
+    }
+
+    .col-sm-2 {
+        width: 16.666666666666664%
+    }
+
+    .col-sm-3 {
+        width: 25%
+    }
+
+    .col-sm-4 {
+        width: 33.33333333333333%
+    }
+
+    .col-sm-5 {
+        width: 41.66666666666667%
+    }
+
+    .col-sm-6 {
+        width: 50%
+    }
+
+    .col-sm-7 {
+        width: 58.333333333333336%
+    }
+
+    .col-sm-8 {
+        width: 66.66666666666666%
+    }
+
+    .col-sm-9 {
+        width: 75%
+    }
+
+    .col-sm-10 {
+        width: 83.33333333333334%
+    }
+
+    .col-sm-11 {
+        width: 91.66666666666666%
+    }
+
+    .col-sm-12 {
+        width: 100%
+    }
+
+    .col-sm-push-1 {
+        left: 8.333333333333332%
+    }
+
+    .col-sm-push-2 {
+        left: 16.666666666666664%
+    }
+
+    .col-sm-push-3 {
+        left: 25%
+    }
+
+    .col-sm-push-4 {
+        left: 33.33333333333333%
+    }
+
+    .col-sm-push-5 {
+        left: 41.66666666666667%
+    }
+
+    .col-sm-push-6 {
+        left: 50%
+    }
+
+    .col-sm-push-7 {
+        left: 58.333333333333336%
+    }
+
+    .col-sm-push-8 {
+        left: 66.66666666666666%
+    }
+
+    .col-sm-push-9 {
+        left: 75%
+    }
+
+    .col-sm-push-10 {
+        left: 83.33333333333334%
+    }
+
+    .col-sm-push-11 {
+        left: 91.66666666666666%
+    }
+
+    .col-sm-pull-1 {
+        right: 8.333333333333332%
+    }
+
+    .col-sm-pull-2 {
+        right: 16.666666666666664%
+    }
+
+    .col-sm-pull-3 {
+        right: 25%
+    }
+
+    .col-sm-pull-4 {
+        right: 33.33333333333333%
+    }
+
+    .col-sm-pull-5 {
+        right: 41.66666666666667%
+    }
+
+    .col-sm-pull-6 {
+        right: 50%
+    }
+
+    .col-sm-pull-7 {
+        right: 58.333333333333336%
+    }
+
+    .col-sm-pull-8 {
+        right: 66.66666666666666%
+    }
+
+    .col-sm-pull-9 {
+        right: 75%
+    }
+
+    .col-sm-pull-10 {
+        right: 83.33333333333334%
+    }
+
+    .col-sm-pull-11 {
+        right: 91.66666666666666%
+    }
+
+    .col-sm-offset-1 {
+        margin-left: 8.333333333333332%
+    }
+
+    .col-sm-offset-2 {
+        margin-left: 16.666666666666664%
+    }
+
+    .col-sm-offset-3 {
+        margin-left: 25%
+    }
+
+    .col-sm-offset-4 {
+        margin-left: 33.33333333333333%
+    }
+
+    .col-sm-offset-5 {
+        margin-left: 41.66666666666667%
+    }
+
+    .col-sm-offset-6 {
+        margin-left: 50%
+    }
+
+    .col-sm-offset-7 {
+        margin-left: 58.333333333333336%
+    }
+
+    .col-sm-offset-8 {
+        margin-left: 66.66666666666666%
+    }
+
+    .col-sm-offset-9 {
+        margin-left: 75%
+    }
+
+    .col-sm-offset-10 {
+        margin-left: 83.33333333333334%
+    }
+
+    .col-sm-offset-11 {
+        margin-left: 91.66666666666666%
+    }
+}
+
+@media (min-width: 992px) {
+    .container {
+        max-width: 970px
+    }
+
+    .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11 {
+        float: left
+    }
+
+    .col-md-1 {
+        width: 8.333333333333332%
+    }
+
+    .col-md-2 {
+        width: 16.666666666666664%
+    }
+
+    .col-md-3 {
+        width: 25%
+    }
+
+    .col-md-4 {
+        width: 33.33333333333333%
+    }
+
+    .col-md-5 {
+        width: 41.66666666666667%
+    }
+
+    .col-md-6 {
+        width: 50%
+    }
+
+    .col-md-7 {
+        width: 58.333333333333336%
+    }
+
+    .col-md-8 {
+        width: 66.66666666666666%
+    }
+
+    .col-md-9 {
+        width: 75%
+    }
+
+    .col-md-10 {
+        width: 83.33333333333334%
+    }
+
+    .col-md-11 {
+        width: 91.66666666666666%
+    }
+
+    .col-md-12 {
+        width: 100%
+    }
+
+    .col-md-push-0 {
+        left: auto
+    }
+
+    .col-md-push-1 {
+        left: 8.333333333333332%
+    }
+
+    .col-md-push-2 {
+        left: 16.666666666666664%
+    }
+
+    .col-md-push-3 {
+        left: 25%
+    }
+
+    .col-md-push-4 {
+        left: 33.33333333333333%
+    }
+
+    .col-md-push-5 {
+        left: 41.66666666666667%
+    }
+
+    .col-md-push-6 {
+        left: 50%
+    }
+
+    .col-md-push-7 {
+        left: 58.333333333333336%
+    }
+
+    .col-md-push-8 {
+        left: 66.66666666666666%
+    }
+
+    .col-md-push-9 {
+        left: 75%
+    }
+
+    .col-md-push-10 {
+        left: 83.33333333333334%
+    }
+
+    .col-md-push-11 {
+        left: 91.66666666666666%
+    }
+
+    .col-md-pull-0 {
+        right: auto
+    }
+
+    .col-md-pull-1 {
+        right: 8.333333333333332%
+    }
+
+    .col-md-pull-2 {
+        right: 16.666666666666664%
+    }
+
+    .col-md-pull-3 {
+        right: 25%
+    }
+
+    .col-md-pull-4 {
+        right: 33.33333333333333%
+    }
+
+    .col-md-pull-5 {
+        right: 41.66666666666667%
+    }
+
+    .col-md-pull-6 {
+        right: 50%
+    }
+
+    .col-md-pull-7 {
+        right: 58.333333333333336%
+    }
+
+    .col-md-pull-8 {
+        right: 66.66666666666666%
+    }
+
+    .col-md-pull-9 {
+        right: 75%
+    }
+
+    .col-md-pull-10 {
+        right: 83.33333333333334%
+    }
+
+    .col-md-pull-11 {
+        right: 91.66666666666666%
+    }
+
+    .col-md-offset-0 {
+        margin-left: 0
+    }
+
+    .col-md-offset-1 {
+        margin-left: 8.333333333333332%
+    }
+
+    .col-md-offset-2 {
+        margin-left: 16.666666666666664%
+    }
+
+    .col-md-offset-3 {
+        margin-left: 25%
+    }
+
+    .col-md-offset-4 {
+        margin-left: 33.33333333333333%
+    }
+
+    .col-md-offset-5 {
+        margin-left: 41.66666666666667%
+    }
+
+    .col-md-offset-6 {
+        margin-left: 50%
+    }
+
+    .col-md-offset-7 {
+        margin-left: 58.333333333333336%
+    }
+
+    .col-md-offset-8 {
+        margin-left: 66.66666666666666%
+    }
+
+    .col-md-offset-9 {
+        margin-left: 75%
+    }
+
+    .col-md-offset-10 {
+        margin-left: 83.33333333333334%
+    }
+
+    .col-md-offset-11 {
+        margin-left: 91.66666666666666%
+    }
+}
+
+@media (min-width: 1200px) {
+    .container {
+        max-width: 1170px
+    }
+
+    .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11 {
+        float: left
+    }
+
+    .col-lg-1 {
+        width: 8.333333333333332%
+    }
+
+    .col-lg-2 {
+        width: 16.666666666666664%
+    }
+
+    .col-lg-3 {
+        width: 25%
+    }
+
+    .col-lg-4 {
+        width: 33.33333333333333%
+    }
+
+    .col-lg-5 {
+        width: 41.66666666666667%
+    }
+
+    .col-lg-6 {
+        width: 50%
+    }
+
+    .col-lg-7 {
+        width: 58.333333333333336%
+    }
+
+    .col-lg-8 {
+        width: 66.66666666666666%
+    }
+
+    .col-lg-9 {
+        width: 75%
+    }
+
+    .col-lg-10 {
+        width: 83.33333333333334%
+    }
+
+    .col-lg-11 {
+        width: 91.66666666666666%
+    }
+
+    .col-lg-12 {
+        width: 100%
+    }
+
+    .col-lg-push-0 {
+        left: auto
+    }
+
+    .col-lg-push-1 {
+        left: 8.333333333333332%
+    }
+
+    .col-lg-push-2 {
+        left: 16.666666666666664%
+    }
+
+    .col-lg-push-3 {
+        left: 25%
+    }
+
+    .col-lg-push-4 {
+        left: 33.33333333333333%
+    }
+
+    .col-lg-push-5 {
+        left: 41.66666666666667%
+    }
+
+    .col-lg-push-6 {
+        left: 50%
+    }
+
+    .col-lg-push-7 {
+        left: 58.333333333333336%
+    }
+
+    .col-lg-push-8 {
+        left: 66.66666666666666%
+    }
+
+    .col-lg-push-9 {
+        left: 75%
+    }
+
+    .col-lg-push-10 {
+        left: 83.33333333333334%
+    }
+
+    .col-lg-push-11 {
+        left: 91.66666666666666%
+    }
+
+    .col-lg-pull-0 {
+        right: auto
+    }
+
+    .col-lg-pull-1 {
+        right: 8.333333333333332%
+    }
+
+    .col-lg-pull-2 {
+        right: 16.666666666666664%
+    }
+
+    .col-lg-pull-3 {
+        right: 25%
+    }
+
+    .col-lg-pull-4 {
+        right: 33.33333333333333%
+    }
+
+    .col-lg-pull-5 {
+        right: 41.66666666666667%
+    }
+
+    .col-lg-pull-6 {
+        right: 50%
+    }
+
+    .col-lg-pull-7 {
+        right: 58.333333333333336%
+    }
+
+    .col-lg-pull-8 {
+        right: 66.66666666666666%
+    }
+
+    .col-lg-pull-9 {
+        right: 75%
+    }
+
+    .col-lg-pull-10 {
+        right: 83.33333333333334%
+    }
+
+    .col-lg-pull-11 {
+        right: 91.66666666666666%
+    }
+
+    .col-lg-offset-0 {
+        margin-left: 0
+    }
+
+    .col-lg-offset-1 {
+        margin-left: 8.333333333333332%
+    }
+
+    .col-lg-offset-2 {
+        margin-left: 16.666666666666664%
+    }
+
+    .col-lg-offset-3 {
+        margin-left: 25%
+    }
+
+    .col-lg-offset-4 {
+        margin-left: 33.33333333333333%
+    }
+
+    .col-lg-offset-5 {
+        margin-left: 41.66666666666667%
+    }
+
+    .col-lg-offset-6 {
+        margin-left: 50%
+    }
+
+    .col-lg-offset-7 {
+        margin-left: 58.333333333333336%
+    }
+
+    .col-lg-offset-8 {
+        margin-left: 66.66666666666666%
+    }
+
+    .col-lg-offset-9 {
+        margin-left: 75%
+    }
+
+    .col-lg-offset-10 {
+        margin-left: 83.33333333333334%
+    }
+
+    .col-lg-offset-11 {
+        margin-left: 91.66666666666666%
+    }
+}
+
+.btn {
+    display: inline-block;
+    padding: 6px 12px;
+    margin-bottom: 0;
+    font-size: 14px;
+    font-weight: normal;
+    line-height: 1.428571429;
+    text-align: center;
+    vertical-align: middle;
+    cursor: pointer;
+    border: 1px solid transparent;
+    border-radius: 0;
+    white-space: nowrap;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    -o-user-select: none;
+    user-select: none
+}
+
+.btn:focus {
+    outline: thin dotted #333;
+    outline: 5px auto -webkit-focus-ring-color;
+    outline-offset: -2px
+}
+
+.btn:hover, .btn:focus {
+    color: #333;
+    text-decoration: none
+}
+
+.btn:active, .btn.active {
+    outline: 0;
+    background-image: none
+}
+
+.btn.disabled, .btn[disabled], fieldset[disabled] .btn {
+    cursor: not-allowed;
+    pointer-events: none;
+    opacity: .65;
+    filter: alpha(opacity=65);
+    -webkit-box-shadow: none;
+    box-shadow: none
+}
+
+.btn-default {
+    color: #333;
+    background-color: #fff;
+    border-color: #ccc
+}
+
+.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
+    color: #333;
+    background-color: #ebebeb;
+    border-color: #adadad
+}
+
+.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
+    background-image: none
+}
+
+.btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active {
+    background-color: #fff;
+    border-color: #ccc
+}
+
+.btn-primary {
+    color: #fff;
+    background-color: #428bca;
+    border-color: #357ebd
+}
+
+.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {
+    color: #fff;
+    background-color: #3276b1;
+    border-color: #285e8e
+}
+
+.btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {
+    background-image: none
+}
+
+.btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active {
+    background-color: #428bca;
+    border-color: #357ebd
+}
+
+.btn-warning {
+    color: #fff;
+    background-color: #f0ad4e;
+    border-color: #eea236
+}
+
+.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {
+    color: #fff;
+    background-color: #ed9c28;
+    border-color: #d58512
+}
+
+.btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {
+    background-image: none
+}
+
+.btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active {
+    background-color: #f0ad4e;
+    border-color: #eea236
+}
+
+.btn-danger {
+    color: #fff;
+    background-color: #d9534f;
+    border-color: #d43f3a
+}
+
+.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {
+    color: #fff;
+    background-color: #d2322d;
+    border-color: #ac2925
+}
+
+.btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {
+    background-image: none
+}
+
+.btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active {
+    background-color: #d9534f;
+    border-color: #d43f3a
+}
+
+.btn-success {
+    color: #fff;
+    background-color: #5cb85c;
+    border-color: #4cae4c
+}
+
+.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
+    color: #fff;
+    background-color: #47a447;
+    border-color: #398439
+}
+
+.btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
+    background-image: none
+}
+
+.btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active {
+    background-color: #5cb85c;
+    border-color: #4cae4c
+}
+
+.btn-info {
+    color: #fff;
+    background-color: #5bc0de;
+    border-color: #46b8da
+}
+
+.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {
+    color: #fff;
+    background-color: #39b3d7;
+    border-color: #269abc
+}
+
+.btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {
+    background-image: none
+}
+
+.btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active {
+    background-color: #5bc0de;
+    border-color: #46b8da
+}
+
+.btn-link {
+    color: #428bca;
+    font-weight: normal;
+    cursor: pointer;
+    border-radius: 0
+}
+
+.btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link {
+    background-color: transparent;
+    -webkit-box-shadow: none;
+    box-shadow: none
+}
+
+.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {
+    border-color: transparent
+}
+
+.btn-link:hover, .btn-link:focus {
+    color: #2a6496;
+    text-decoration: underline;
+    background-color: transparent
+}
+
+.btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus {
+    color: #999;
+    text-decoration: none
+}
+
+.btn-lg {
+    padding: 10px 16px;
+    font-size: 18px;
+    line-height: 1.33;
+    border-radius: 6px
+}
+
+.btn-sm, .btn-xs {
+    padding: 5px 10px;
+    font-size: 12px;
+    line-height: 1.5;
+    border-radius: 3px
+}
+
+.btn-xs {
+    padding: 1px 5px
+}
+
+.btn-block {
+    display: block;
+    width: 100%;
+    padding-left: 0;
+    padding-right: 0
+}
+
+.btn-block + .btn-block {
+    margin-top: 5px
+}
+
+input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block {
+    width: 100%
+}
+
+.btn-default .caret {
+    border-top-color: #333
+}
+
+.btn-primary .caret, .btn-success .caret, .btn-warning .caret, .btn-danger .caret, .btn-info .caret {
+    border-top-color: #fff
+}
+
+.dropup .btn-default .caret {
+    border-bottom-color: #333
+}
+
+.dropup .btn-primary .caret, .dropup .btn-success .caret, .dropup .btn-warning .caret, .dropup .btn-danger .caret, .dropup .btn-info .caret {
+    border-bottom-color: #fff
+}
+
+.btn-group, .btn-group-vertical {
+    position: relative;
+    display: inline-block;
+    vertical-align: middle
+}
+
+.btn-group > .btn, .btn-group-vertical > .btn {
+    position: relative;
+    float: left
+}
+
+.btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, .btn-group-vertical > .btn:focus, .btn-group > .btn:active, .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active {
+    z-index: 2
+}
+
+.btn-group > .btn:focus, .btn-group-vertical > .btn:focus {
+    outline: 0
+}
+
+.btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group {
+    margin-left: -1px
+}
+
+.btn-toolbar:before, .btn-toolbar:after {
+    content: " ";
+    display: table
+}
+
+.btn-toolbar:after {
+    clear: both
+}
+
+.btn-toolbar .btn-group {
+    float: left
+}
+
+.btn-toolbar > .btn + .btn, .btn-toolbar > .btn-group + .btn, .btn-toolbar > .btn + .btn-group, .btn-toolbar > .btn-group + .btn-group {
+    margin-left: 5px
+}
+
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+    border-radius: 0
+}
+
+.btn-group > .btn:first-child {
+    margin-left: 0
+}
+
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+    border-bottom-right-radius: 0;
+    border-top-right-radius: 0
+}
+
+.btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) {
+    border-bottom-left-radius: 0;
+    border-top-left-radius: 0
+}
+
+.btn-group > .btn-group {
+    float: left
+}
+
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+    border-radius: 0
+}
+
+.btn-group > .btn-group:first-child > .btn:last-child, .btn-group > .btn-group:first-child > .dropdown-toggle {
+    border-bottom-right-radius: 0;
+    border-top-right-radius: 0
+}
+
+.btn-group > .btn-group:last-child > .btn:first-child {
+    border-bottom-left-radius: 0;
+    border-top-left-radius: 0
+}
+
+.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
+    outline: 0
+}
+
+.btn-group-xs > .btn {
+    padding: 5px 10px;
+    font-size: 12px;
+    line-height: 1.5;
+    border-radius: 3px;
+    padding: 1px 5px
+}
+
+.btn-group-sm > .btn {
+    padding: 5px 10px;
+    font-size: 12px;
+    line-height: 1.5;
+    border-radius: 3px
+}
+
+.btn-group-lg > .btn {
+    padding: 10px 16px;
+    font-size: 18px;
+    line-height: 1.33;
+    border-radius: 6px
+}
+
+.btn-group > .btn + .dropdown-toggle {
+    padding-left: 8px;
+    padding-right: 8px
+}
+
+.btn-group > .btn-lg + .dropdown-toggle {
+    padding-left: 12px;
+    padding-right: 12px
+}
+
+.btn-group.open .dropdown-toggle {
+    background: #f2f2f2
+}
+
+.btn .caret {
+    margin-left: 0
+}
+
+.btn-lg .caret {
+    border-width: 5px 5px 0;
+    border-bottom-width: 0
+}
+
+.dropup .btn-lg .caret {
+    border-width: 0 5px 5px
+}
+
+.btn-group-vertical > .btn, .btn-group-vertical > .btn-group {
+    display: block;
+    float: none;
+    width: 100%;
+    max-width: 100%
+}
+
+.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {
+    content: " ";
+    display: table
+}
+
+.btn-group-vertical > .btn-group:after {
+    clear: both
+}
+
+.btn-group-vertical > .btn-group > .btn {
+    float: none
+}
+
+.btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group {
+    margin-top: -1px;
+    margin-left: 0
+}
+
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+    border-radius: 0
+}
+
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+    border-top-right-radius: 0;
+    border-bottom-right-radius: 0;
+    border-bottom-left-radius: 0
+}
+
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+    border-bottom-left-radius: 0;
+    border-top-right-radius: 0;
+    border-top-left-radius: 0
+}
+
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+    border-radius: 0
+}
+
+.btn-group-vertical > .btn-group:first-child > .btn:last-child, .btn-group-vertical > .btn-group:first-child > .dropdown-toggle {
+    border-bottom-right-radius: 0;
+    border-bottom-left-radius: 0
+}
+
+.btn-group-vertical > .btn-group:last-child > .btn:first-child {
+    border-top-right-radius: 0;
+    border-top-left-radius: 0
+}
+
+.btn-group-justified {
+    display: table;
+    width: 100%;
+    table-layout: fixed;
+    border-collapse: separate
+}
+
+.btn-group-justified .btn {
+    float: none;
+    display: table-cell;
+    width: 1%
+}
+
+[data-toggle="buttons"] > .btn > input[type="radio"], [data-toggle="buttons"] > .btn > input[type="checkbox"] {
+    display: none
+}
+
+.caret {
+    display: inline-block;
+    width: 0;
+    height: 0;
+    margin-left: 2px;
+    vertical-align: middle;
+    border-top: 4px solid #000;
+    border-right: 4px solid transparent;
+    border-left: 4px solid transparent;
+    border-bottom: 0 dotted;
+    content: ""
+}
+
+.dropdown {
+    position: relative
+}
+
+.dropdown-toggle:focus {
+    outline: 0
+}
+
+.dropdown-menu {
+    position: absolute;
+    top: 100%;
+    left: 0;
+    z-index: 1000;
+    display: none;
+    float: left;
+    min-width: 160px;
+    padding: 5px 0;
+    margin: 2px 0 0;
+    list-style: none;
+    font-size: 14px;
+    background-color: #fff;
+    border: 1px solid #ccc;
+    border: 1px solid rgba(0, 0, 0, 0.15);
+    border-radius: 0;
+    background-clip: padding-box
+}
+
+.dropdown-menu.pull-right {
+    right: 0;
+    left: auto
+}
+
+.dropdown-menu .divider {
+    height: 1px;
+    margin: 9px 0;
+    overflow: hidden;
+    background-color: #e5e5e5
+}
+
+.dropdown-menu > li > a {
+    font-size: 14px;
+    text-decoration: none;
+    display: block;
+    padding: 5px 20px;
+    clear: both;
+    font-weight: normal;
+    line-height: 1.428571429;
+    color: #333;
+    white-space: nowrap
+}
+
+.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
+    text-decoration: none;
+    color: #fff;
+    background-color: #428bca
+}
+
+.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {
+    color: #fff;
+    text-decoration: none;
+    outline: 0;
+    background-color: #428bca
+}
+
+.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
+    color: #999
+}
+
+.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
+    text-decoration: none;
+    background-color: transparent;
+    background-image: none;
+    filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+    cursor: not-allowed
+}
+
+.open > .dropdown-menu {
+    display: block
+}
+
+.open > a {
+    outline: 0
+}
+
+.dropdown-header {
+    display: block;
+    padding: 3px 20px;
+    font-size: 12px;
+    line-height: 1.428571429;
+    color: #999
+}
+
+.dropdown-backdrop {
+    position: fixed;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    top: 0;
+    z-index: 990
+}
+
+.pull-right > .dropdown-menu {
+    right: 0;
+    left: auto
+}
+
+.dropup .caret, .navbar-fixed-bottom .dropdown .caret {
+    border-top: 0 dotted;
+    border-bottom: 4px solid #000;
+    content: ""
+}
+
+.dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu {
+    top: auto;
+    bottom: 100%;
+    margin-bottom: 1px
+}
+
+@media (min-width: 768px) {
+    .navbar-right .dropdown-menu {
+        right: 0;
+        left: auto
+    }
+}
+
+body, html {
+    font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+    margin: 0;
+    background: #ededed;
+    color: #343437;
+    line-height: 2em;
+    font-weight: 300;
+    font-size: .95em
+}
+
+h1 {
+    font-size: 2.5em;
+    margin: .8em 0
+}
+
+body.center {
+    padding: 0 30px;
+    background: #FFF;
+    font-size: 1em
+}
+
+ul li {
+    list-style-type: disc
+}
+
+a {
+    color: #4290ad;
+    text-decoration: none;
+    font-weight: normal
+}
+
+a:hover {
+    text-decoration: underline
+}
+
+h1, h2, h3 {
+    font-weight: 300;
+    line-height: 1.2em
+}
+
+.topNav, .bottomNav {
+    background: #f2f2f2;
+    margin: 0 -30px;
+    margin-bottom: 20px
+}
+
+.topNav:before, .bottomNav:before, .topNav:after, .bottomNav:after {
+    content: " ";
+    display: table
+}
+
+.topNav:after, .bottomNav:after {
+    clear: both
+}
+
+.topNav ul.navList, .bottomNav ul.navList {
+    padding: 10px 20px;
+    margin: 0;
+    list-style-type: none
+}
+
+.topNav ul.navList li, .bottomNav ul.navList li {
+    display: inline;
+    padding: 0 10px
+}
+
+.topNav ul.navList li.navBarCell1Rev, .bottomNav ul.navList li.navBarCell1Rev {
+    font-weight: bold
+}
+
+.bottomNav {
+    margin-top: 30px;
+    margin-bottom: 0
+}
+
+.aboutLanguage {
+    color: #BBB;
+    background: white;
+    text-align: center;
+    padding: 20px 0
+}
+
+.subNav {
+    padding-bottom: 10px;
+    margin-bottom: 10px;
+    border-bottom: 1px solid #EEE
+}
+
+.subNav:before, .subNav:after {
+    content: " ";
+    display: table
+}
+
+.subNav:after {
+    clear: both
+}
+
+.subNav div:before, .subNav div:after {
+    content: " ";
+    display: table
+}
+
+.subNav div:after {
+    clear: both
+}
+
+.subNav ul.navList, .subNav ul {
+    font-size: .9em;
+    margin: 0;
+    padding: 00;
+    float: left;
+    list-style-type: none
+}
+
+.subNav ul.navList li, .subNav ul li {
+    padding: 0 5px;
+    display: inline
+}
+
+table.overviewSummary tr {
+    border-left: 1px solid #EEE;
+    border-right: 1px solid #EEE;
+}
+
+table.overviewSummary tr:first-child {
+    border-top: 1px solid #EEE;
+    border-bottom: 1px solid #EEE;
+}
+
+table.overviewSummary tr:last-child {
+    border-bottom: 1px solid #EEE;
+}
+
+table.overviewSummary, .contentContainer ul li table {
+    width: 100%;
+    margin: 20px 0
+}
+
+table.overviewSummary caption, .contentContainer ul li table caption {
+    text-align: left;
+    font-weight: 100;
+    font-size: 1em;
+    float: left;
+    padding: 0 10px;
+    margin-top: 10px;
+    background: #db4800;
+    color: white
+}
+
+table.overviewSummary tr th, .contentContainer ul li table tr th {
+    padding: 5px 10px;
+    font-weight: bold;
+    font-size: 1em;
+    text-align: left;
+    white-space: nowrap;
+    background: #f2f2f2
+}
+
+table.overviewSummary tr td, .contentContainer ul li table tr td {
+    vertical-align: top;
+    font-size: .9em;
+    padding: 5px 10px
+}
+
+table.overviewSummary tbody > tr:nth-child(odd) > td, .contentContainer ul li table tbody > tr:nth-child(odd) > td {
+    background-color: #f9f9f9
+}
+
+body.left {
+    padding-top: 10px
+}
+
+body.left h1, body.left h2 {
+    display: inline;
+    text-align: left;
+    font-weight: 100;
+    font-size: 1em;
+    margin: 0 10px;
+    padding: 3px 10px;
+    margin-top: 10px;
+    background: #db4800;
+    color: white;
+    line-height: 40px
+}
+
+body.left .indexHeader {
+    margin: 0;
+    padding: 0 15px;
+    font-size: .9em
+}
+
+body.left ul {
+    list-style-type: none;
+    margin: 0;
+    padding: 0
+}
+
+body.left ul li {
+    margin: 0;
+    padding: 0
+}
+
+body.left ul li a {
+    display: block;
+    padding: 0 15px;
+    text-decoration: none
+}
+
+body.left ul li a:hover {
+    text-decoration: underline
+}
+
+.contentContainer .header ul, .contentContainer ul.blockList {
+    padding: 0
+}
+
+.contentContainer .header ul > li, .contentContainer ul.blockList > li {
+    list-style-type: none
+}
+
+.contentContainer ul.inheritance {
+    margin-left: 0;
+    padding-left: 0
+}
+
+.contentContainer ul.inheritance li {
+    list-style-type: none
+}
+
+.contentContainer ul.inheritance ul.inheritance {
+    padding-left: 20px
+}
+
+.contentContainer hr {
+    border: 0 none;
+    border-top: 1px solid #EEE;
+    margin-top: 30px;
+    margin-botom: 0
+}
+
+ul.blockList ul.blockList, ul.blockList ul.blockListLast {
+    border: 1px solid #EEE;
+    margin: 20px 0;
+    padding: 0 20px
+}
+
+ul.blockList ul.blockList h4, ul.blockList ul.blockListLast h4, ul.blockList ul.blockList h3, ul.blockList ul.blockListLast h3 {
+    font-size: 1em;
+    font-weight: bold;
+    line-height: 2em;
+    text-indent: 10px;
+    border-bottom: 1px solid #EEE;
+    margin: 0 -20px;
+    padding: 5px 0;
+    background: #f2f2f2
+}
+
+ul.blockList ul.blockList li, ul.blockList ul.blockListLast li {
+    list-style-type: none
+}
+
+ul.horizontal {
+    list-style-type: none;
+    padding: 0;
+    margin: 0;
+    font-size: .9em
+}
+
+ul.horizontal li {
+    display: inline
+}
+
+span.strong {
+    font-weight: bold
+}
+
+a span.strong {
+    font-weight: normal
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.allclasses-frame.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.allclasses-frame.html b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.allclasses-frame.html
new file mode 100644
index 0000000..6710dbb
--- /dev/null
+++ b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.allclasses-frame.html
@@ -0,0 +1,46 @@
+<!--
+
+     Licensed to the Apache Software Foundation (ASF) under one
+     or more contributor license agreements.  See the NOTICE file
+     distributed with this work for additional information
+     regarding copyright ownership.  The ASF 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.
+
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+    <title>All Classes ($title)</title>
+    <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+</head>
+
+<body class="left">
+
+<div class="indexContainer">
+    <h2 title="All Classes">All Classes</h2>
+    <ul>
+        <% docTypes.each { docType -> %>
+        <li><a href="${docType.fullyQualifiedClassName.replaceAll(/\./, '/')}.html" title="${docType.interface ? 'interface' : 'class'} in ${docType.packageName}"  target="classFrame">
+            <% if (docType.interface) { %>
+            <i>${docType.simpleClassName}</i>
+            <% } else { %>
+            ${docType.simpleClassName}
+            <% } %>
+        </a></li>
+        <% } %>
+    </ul>
+</div>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.class.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.class.html b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.class.html
new file mode 100644
index 0000000..4b13f72
--- /dev/null
+++ b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.class.html
@@ -0,0 +1,196 @@
+<!--
+
+     Licensed to the Apache Software Foundation (ASF) under one
+     or more contributor license agreements.  See the NOTICE file
+     distributed with this work for additional information
+     regarding copyright ownership.  The ASF 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.
+
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+    <title>${docType.simpleClassName} ($title)</title>
+    <%
+    int dotCount = docType.packageName.count('.')
+    String pathPref = '../' * (dotCount + 1)
+    %>
+    <link rel="stylesheet" type="text/css" href="${pathPref}stylesheet.css" title="Style">
+    <script type="text/javascript">
+        function windowTitle() {
+            parent.document.title = document.title;
+        }
+    </script>
+</head>
+
+<body class="center" onload="windowTitle();">
+
+    <!-- ========== START OF NAVBAR ========== -->
+    <a name="navbar_top"><!-- --></a>
+
+    <div class="topNav">
+        <ul class="navList" title="Navigation">
+            <li><a href="${pathPref}overview-summary.html">Overview</a></li>
+            <li><a href="package-summary.html">Package</a></li>
+            <li class="navBarCell1Rev">Class</li>
+            <li><a href="${pathPref}index-all.html">Index</a></li>
+        </ul>
+    </div>
+
+    <!-- =========== END OF NAVBAR =========== -->
+
+    <!-- ======== START OF class DATA ======== -->
+
+    <div class="header">
+        <div class="subTitle">Package: <strong>${docType.packageName}</strong></div>
+        <h2>${docType.interface ? 'Interface' : 'Class'} ${docType.simpleClassName}</h2>
+    </div>
+
+    <div class="contentContainer">
+
+    <!-- ========== METHOD SUMMARY =========== -->
+
+        <a name="method_summary"><!-- --></a>
+
+        <div class="summary">
+            <ul class="blockList">
+                <li class="blockList">
+                    <ul class="blockList">
+                        <li class="blockList">
+                            <h3>Methods Summary</h3>
+                            <table border="0" cellpadding="3" cellspacing="0" class="overviewSummary">
+                               <caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+                                <tbody>
+                                    <tr>
+                                        <th>Return type</th>
+                                        <th>Name and parameters</th>
+                                    </tr>
+                                    <% docType.docMethods.eachWithIndex { docMethod, i -> %>
+                                    <tr class="${i % 2 == 0 ? 'altColor' : 'rawColor'}">
+                                        <td align="right" valign="top" width="1%">
+                                            <span> <code>${docMethod.isStatic() ? 'static ' : ''}${docMethod.returnTypeDocUrl}</code></span>
+                                        </td>
+                                        <td>
+                                            <code><strong><a href="#${docMethod.name}(${docMethod.parametersSignature})">${docMethod.name}</a></strong>(${docMethod.parametersDocUrl})</code>
+                                            <br>
+                                            ${docMethod.shortComment}
+                                        </td>
+                                    </tr>
+                                    <% } %>
+                                </tbody>
+                            </table>
+                        </li>
+                        <% docType.inheritedMethods.each { inhDocType, inhDocMethods -> %>
+                        <ul class="blockList">
+                            <li class="blockList">
+                            <h4>Methods inherited from ${inhDocType.interface ? 'interface' : 'class'} ${inhDocType.packageName}.${docType.linkAnchor(inhDocType)}</h4>
+                                <p>
+                                    <%= inhDocMethods.findAll { !it.static }.collect { docMethod ->
+                                        """<code><strong><a href="${pathPref}${inhDocType.fullyQualifiedClassName.replace('.', '/')}.html#${docMethod.name}(${docMethod.parametersSignature})">${docMethod.name}</a></strong></code>"""
+                                    }.join(", ") %>
+                                </p>
+                            </li>
+                        </ul>
+                        <% } %>
+                    </ul>
+                </li>
+            </ul>
+        </div>
+
+    <!-- ============ METHOD DETAIL ========== -->
+
+    <a name="method_detail"><!-- --></a>
+
+
+        <div class="details">
+            <ul class="blockList">
+                <li class="blockList">
+                    <ul class="blockList">
+                        <li class="blockList">
+                            <h3>Methods Detail</h3>
+
+                            <% docType.docMethods.eachWithIndex { docMethod, i -> %>
+                            <a name="${docMethod.name}(${docMethod.parametersSignature})"><!-- --></a>
+
+                            <ul class="blockListLast">
+                                <li class="blockList">
+
+                                    <h4>public ${docMethod.isStatic() ? 'static ' : ''}${docMethod.returnTypeDocUrl} <b>${docMethod.name}</b>(${docMethod.parametersDocUrl})</h4>
+
+                                    <p>${docMethod.comment}</p>
+
+                                    <% if (docMethod.parametersSignature) { %>
+                                    <dl>
+                                        <dt><b>Parameters:</b></dt>
+                                        <% docMethod.parameterComments.each { name, comment -> %>
+                                        <dd><code>${name}</code> - ${comment}</dd>
+                                        <% } %>
+                                    </dl>
+                                    <%
+                                    } %>
+
+                                    <% if (docMethod.returnComment) { %>
+                                    <dl>
+                                        <dt><b>Returns:</b></dt>
+                                        <dd>${docMethod.returnComment}</dd>
+                                    </dl>
+                                    <% } %>
+
+                                    <%if (docMethod.sinceComment) { %>
+                                    <dl>
+                                        <dt><b>Since:</b></dt>
+                                        <dd>${docMethod.sinceComment}</dd>
+                                    </dl>
+                                    <%}%>
+
+                                    <% if (docMethod.seeComments) { %>
+                                    <dl>
+                                        <dt><b>See Also:</b></dt>
+                                        <% docMethod.seeComments.each { %>
+                                        <dd>${it}</dd>
+                                        <% }%>
+                                    </dl>
+                                    <% } %>
+
+                                </li>
+                            </ul>
+
+                            <% } %>
+
+                        </li>
+                    </ul>
+                </li>
+            </ul>
+        </div>
+
+    </div>
+
+    <!-- ========= END OF class DATA ========= -->
+
+    <!-- ======= START OF BOTTOM NAVBAR ====== -->
+    <a name="navbar_bottom"><!-- --></a>
+    <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
+
+    <div class="topNav">
+        <ul class="navList" title="Navigation">
+            <li><a href="${pathPref}overview-summary.html">Overview</a></li>
+            <li><a href="package-summary.html">Package</a></li>
+            <li class="navBarCell1Rev">Class</li>
+            <li><a href="${pathPref}index-all.html">Index</a></li>
+        </ul>
+    </div>
+    <!-- =========== END OF NAVBAR =========== -->
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.index-all.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.index-all.html b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.index-all.html
new file mode 100644
index 0000000..31c5c4b
--- /dev/null
+++ b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.index-all.html
@@ -0,0 +1,93 @@
+<!--
+
+     Licensed to the Apache Software Foundation (ASF) under one
+     or more contributor license agreements.  See the NOTICE file
+     distributed with this work for additional information
+     regarding copyright ownership.  The ASF 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.
+
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//Dtd HTML 4.0 transitional//EN""http://www.w3.org/tr/REC-html40/loose.dtd">
+<html>
+    <head>
+        <title>Index ($title)</title>
+        <link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+        <script type="text/javascript">
+            function windowTitle() {
+                parent.document.title = document.title;
+            }
+        </script>
+    </head>
+    <body class="center" onload="windowTitle();">
+
+        <!-- ========== START OF NAVBAR ========== -->
+        <a name="navbar_top"><!-- --></a>
+
+        <div class="topNav">
+            <ul class="navList" title="Navigation">
+                <li><a href="overview-summary.html">Overview</a></li>
+                <li>Package</li>
+                <li>Class</li>
+                <li class="navBarCell1Rev">Index</li>
+            </ul>
+        </div>
+        <!-- =========== END OF NAVBAR =========== -->
+        <!--
+        <a HREF="#_A_">A</a>
+        -->
+        <% indexMap.each { it -> %>
+        <a HREF="#_${it.key}_">${it.key}</a>
+        <% } %>
+        <hr>
+
+        <% indexMap.each { indexMapEntry -> %>
+        <a name="_${indexMapEntry.key}_"><!-- --></a>
+        <h2><b>${indexMapEntry.key}</b></h2>
+        <dl>
+            <% indexMapEntry.value.each { it -> %>
+            <% final String classUrl = it.docType.fullyQualifiedClassName.replaceAll('\\.','/') + '.html' %>
+            <% if (it.docMethod) { %>
+            <% final String methodUrl = classUrl + '#' + it.docMethod.name + '(' + it.docMethod.parametersSignature + ')' %>
+            <dt><a href="${methodUrl}"><b>${it.docMethod.name}(${it.docMethod.parametersSignature})</b></a> - Method in ${it.docType.interface ? 'interface' : 'class'} ${it.docType.packageName}.<a href="${classUrl}">${it.docType.simpleClassName}</a></dt>
+            <dd> ${it.docMethod.shortComment}</dd>
+            <% } else { %>
+            <dt><a href="${classUrl}"><b>${it.docType.simpleClassName}</b></a> - ${it.docType.interface ? 'Interface' : 'Class'} in ${it.docType.packageName}</dt>
+            <dd> ${it.docType.shortComment}</dd>
+            <% } %>
+            &nbsp;
+            <% } %>
+        </dl>
+        <% } %>
+
+        <!--
+        <a HREF="#_A_">A</a>
+        -->
+        <% indexMap.each { it -> %>
+        <a href="#_${it.key}_">${it.key}</a>
+        <% } %>
+
+        <!-- ========== START OF NAVBAR ========== -->
+        <a name="navbar_bottom"><!-- --></a>
+        <div class="topNav">
+            <ul class="navList" title="Navigation">
+                <li><a href="overview-summary.html">Overview</a></li>
+                <li>Package</li>
+                <li>Class</li>
+                <li class="navBarCell1Rev">Index</li>
+            </ul>
+        </div>
+        <!-- =========== END OF NAVBAR =========== -->
+
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.overview-frame.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.overview-frame.html b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.overview-frame.html
new file mode 100644
index 0000000..2504982
--- /dev/null
+++ b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.overview-frame.html
@@ -0,0 +1,46 @@
+<!--
+
+     Licensed to the Apache Software Foundation (ASF) under one
+     or more contributor license agreements.  See the NOTICE file
+     distributed with this work for additional information
+     regarding copyright ownership.  The ASF 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.
+
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<html>
+<head>
+    <title>Overview (${title})</title>
+    <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+</head>
+
+<body class="left">
+
+<div class="indexHeader">
+    <a href="allclasses-frame.html" target="packageFrame">All Classes</a>
+</div>
+
+<div class="indexContainer">
+    <h2 title="Packages">Packages</h2>
+    <ul>
+        <li><a href="primitive-types/package-frame.html" title="Primitive types" target="packageFrame">Primitive types</a></li>
+        <% packages.grep().each { %>
+        <li><a href="${it.name.replaceAll('\\.', '/')}/package-frame.html" title="${it.name}" target="packageFrame">${it.name}</a></li>
+        <% } %>
+    </ul>
+</div>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.package-frame.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.package-frame.html b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.package-frame.html
new file mode 100644
index 0000000..92a6b75
--- /dev/null
+++ b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.package-frame.html
@@ -0,0 +1,61 @@
+<!--
+
+     Licensed to the Apache Software Foundation (ASF) under one
+     or more contributor license agreements.  See the NOTICE file
+     distributed with this work for additional information
+     regarding copyright ownership.  The ASF 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.
+
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+    <title>${docPackage.name} ($title)</title>
+    <%
+    int dotCount = docPackage.name.count('.')
+    String pathPref = '../' * (dotCount + 1)
+    %>
+    <link rel="stylesheet" type="text/css" href="${pathPref}stylesheet.css" title="Style">
+</head>
+
+<body class="left">
+
+<div class="indexHeader">
+    <b><a href="package-summary.html" target="classFrame">${docPackage.name}</a></b>
+</div>
+
+<% if (docPackage.docTypes.any { it.interface }) { %>
+<div class="indexContainer">
+    <h2 title="Interfaces">Interfaces</h2>
+    <ul>
+        <% docPackage.docTypes.findAll { it.interface }.each { docType -> %>
+        <li><a href="${docType.simpleClassName}.html" title="interface in ${docType.packageName}" target="classFrame"><i>${docType.simpleClassName}</i></a></li>
+        <% } %>
+    </ul>
+</div>
+<% } %>
+
+<% if (docPackage.docTypes.any { !it.interface }) { %>
+<div class="indexContainer">
+    <h2 title="Classes">Classes</h2>
+    <ul>
+        <% docPackage.docTypes.findAll { !it.interface }.each { docType -> %>
+        <li><a href="${docType.simpleClassName}.html" title="class in ${docType.packageName}" target="classFrame">${docType.simpleClassName}</a></li>
+        <% } %>
+    </ul>
+</div>
+<% } %>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.package-summary.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.package-summary.html b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.package-summary.html
new file mode 100644
index 0000000..0d922f0
--- /dev/null
+++ b/subprojects/groovy-docgenerator/src/main/resources/org/apache/groovy/docgenerator/template.package-summary.html
@@ -0,0 +1,93 @@
+<!--
+
+     Licensed to the Apache Software Foundation (ASF) under one
+     or more contributor license agreements.  See the NOTICE file
+     distributed with this work for additional information
+     regarding copyright ownership.  The ASF 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.
+
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+    <title>${docPackage.name} ($title)</title>
+    <%
+    int dotCount = docPackage.name.count('.')
+    String pathPref = '../' * (dotCount + 1)
+    %>
+    <link rel="stylesheet" type="text/css" href="${pathPref}stylesheet.css" title="Style">
+    <script type="text/javascript">
+        function windowTitle() {
+            parent.document.title = document.title;
+        }
+    </script>
+</head>
+
+<body class="center" onload="windowTitle();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<a name="navbar_top"><!-- --></a>
+
+<div class="topNav">
+    <ul class="navList" title="Navigation">
+        <li><a href="${pathPref}overview-summary.html">Overview</a></li>
+        <li class="navBarCell1Rev">Package</li>
+        <li>Class</li>
+        <li><a href="${pathPref}index-all.html">Index</a></li>
+    </ul>
+</div>
+<!-- =========== END OF NAVBAR =========== -->
+
+<div class="header">
+    <h1>Package ${docPackage.name}</h1>
+</div>
+
+<% if (docPackage.docTypes.any { it.interface }) { %>
+<div class="indexContainer">
+    <h2 title="Interfaces">Interfaces</h2>
+    <ul>
+        <% docPackage.docTypes.findAll { it.interface }.each { docType -> %>
+        <li><a href="${docType.simpleClassName}.html" title="interface in ${docType.packageName}" target="classFrame"><i>${docType.simpleClassName}</i></a></li>
+        <% } %>
+    </ul>
+</div>
+<% } %>
+
+<% if (docPackage.docTypes.any { !it.interface }) { %>
+<div class="indexContainer">
+    <h2 title="Classes">Classes</h2>
+    <ul>
+        <% docPackage.docTypes.findAll { !it.interface }.each { docType -> %>
+        <li><a href="${docType.simpleClassName}.html" title="class in ${docType.packageName}" target="classFrame">${docType.simpleClassName}</a></li>
+        <% } %>
+    </ul>
+</div>
+<% } %>
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<a name="navbar_bottom"><!-- --></a>
+<a href="#skip-navbar_bottom" title="Skip navigation links"></a>
+
+<div class="topNav">
+    <ul class="navList" title="Navigation">
+        <li><a href="${pathPref}overview-summary.html">Overview</a></li>
+        <li class="navBarCell1Rev">Package</li>
+        <li>Class</li>
+        <li><a href="${pathPref}index-all.html">Index</a></li>
+    </ul>
+</div>
+<!-- =========== END OF NAVBAR =========== -->
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/DocGenerator.properties
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/DocGenerator.properties b/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/DocGenerator.properties
deleted file mode 100644
index 5c54aec..0000000
--- a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/DocGenerator.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-#  Licensed to the Apache Software Foundation (ASF) under one
-#  or more contributor license agreements.  See the NOTICE file
-#  distributed with this work for additional information
-#  regarding copyright ownership.  The ASF 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.
-#
-
-#
-# CLI messages
-#
-
-cli.option.help.description=Display this help message
-
-cli.option.version.description=Display the version
-
-cli.option.title.description=Title to appear in html, default "Groovy JDK"
-
-cli.option.output.dir.description=The output directory, default "target/html/groovy-jdk"
-
-cli.option.link.patterns.description=The JavaDoc URLs for the given package prefixes
-
-cli.info.version=@|green DocGenerator|@ {0}

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/groovy.ico
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/groovy.ico b/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/groovy.ico
deleted file mode 100644
index 9e9b8d8..0000000
Binary files a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/groovy.ico and /dev/null differ

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/index.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/index.html b/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/index.html
deleted file mode 100644
index 87d9028..0000000
--- a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/index.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!--
-
-     Licensed to the Apache Software Foundation (ASF) under one
-     or more contributor license agreements.  See the NOTICE file
-     distributed with this work for additional information
-     regarding copyright ownership.  The ASF 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.
-
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
-<html>
-<head>
-<title>
-$title
-</title>
-<link href="groovy.ico" type="image/x-icon" rel="shortcut icon">
-<link href="groovy.ico" type="image/x-icon" rel="icon">
-
-<script type="text/javascript">
-    targetPage = "" + window.location.search;
-    if (targetPage != "" && targetPage != "undefined")
-        targetPage = targetPage.substring(1);
-    if (targetPage.indexOf(":") != -1)
-        targetPage = "undefined";
-    if (targetPage != "" && !validURL(targetPage))
-        targetPage = "undefined";
-    function validURL(url) {
-        var pos = url.indexOf(".html");
-        if (pos == -1 || pos != url.length - 5)
-            return false;
-        var allowNumber = false;
-        var allowSep = false;
-        var seenDot = false;
-        for (var i = 0; i < url.length - 5; i++) {
-            var ch = url.charAt(i);
-            if ('a' <= ch && ch <= 'z' ||
-                    'A' <= ch && ch <= 'Z' ||
-                    ch == '\$' ||
-                    ch == '_') {
-                allowNumber = true;
-                allowSep = true;
-            } else if ('0' <= ch && ch <= '9'
-                    || ch == '-') {
-                if (!allowNumber)
-                    return false;
-            } else if (ch == '/' || ch == '.') {
-                if (!allowSep)
-                    return false;
-                allowNumber = false;
-                allowSep = false;
-                if (ch == '.')
-                    seenDot = true;
-                if (ch == '/' && seenDot)
-                    return false;
-            } else {
-                return false;
-            }
-        }
-        return true;
-    }
-    function loadFrames() {
-        if (targetPage != "" && targetPage != "undefined")
-            top.classFrame.location = top.targetPage;
-    }
-</script>
-</head>
-<frameset cols="20%,80%" title="" onLoad="top.loadFrames()">
-<frameset rows="30%,70%" title="" onLoad="top.loadFrames()">
-	<frame src="overview-frame.html" name="packageListFrame" title="All Packages">
-	<frame src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
-</frameset>
-
-<frame src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
-<noframes>
-<h2>
-Frame Alert</h2>
-<P>
-This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-<br>
-Link to<A HREF="overview-summary.html">Non-frame version.</A>
-</P>
-</noframes>
-</frameset>
-</html>

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/overview-summary.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/overview-summary.html b/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/overview-summary.html
deleted file mode 100644
index 17ab69f..0000000
--- a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/overview-summary.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
-
-     Licensed to the Apache Software Foundation (ASF) under one
-     or more contributor license agreements.  See the NOTICE file
-     distributed with this work for additional information
-     regarding copyright ownership.  The ASF 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.
-
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
-<head>
-    <title>Overview ($title)</title>
-    <link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
-    <script type="text/javascript">
-        function windowTitle() {
-            parent.document.title = document.title;
-        }
-    </script>
-</head>
-
-<body class="center" onload="windowTitle();">
-
-    <!-- ========== START OF NAVBAR ========== -->
-    <a name="navbar_top"><!-- --></a>
-
-    <div class="topNav">
-        <ul class="navList" title="Navigation">
-            <li class="navBarCell1Rev">Overview</li>
-            <li>Package</li>
-            <li>Class</li>
-            <li><a href="index-all.html">Index</a></li>
-        </ul>
-    </div>
-    <!-- =========== END OF NAVBAR =========== -->
-
-    <div class="header">
-        <h1>Groovy JDK API Documentation</h1>
-        <h2>Version ${GroovySystem.version}</h2>
-    </div>
-
-    <div class="container">
-        <p>This document describes the methods added to the JDK to make it more groovy.</p>
-    </div>
-
-</body>
-</html>


[2/5] groovy git commit: fix typo

Posted by pa...@apache.org.
fix typo


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/1936f184
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/1936f184
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/1936f184

Branch: refs/heads/master
Commit: 1936f1844e952a08eb8eacdb6eebb0233f4eed44
Parents: 5eab4a5
Author: Paul King <pa...@asert.com.au>
Authored: Wed May 23 10:09:42 2018 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Thu May 24 00:08:24 2018 +1000

----------------------------------------------------------------------
 src/spec/doc/core-semantics.adoc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/1936f184/src/spec/doc/core-semantics.adoc
----------------------------------------------------------------------
diff --git a/src/spec/doc/core-semantics.adoc b/src/spec/doc/core-semantics.adoc
index 37f5b42..5fe3f5d 100644
--- a/src/spec/doc/core-semantics.adoc
+++ b/src/spec/doc/core-semantics.adoc
@@ -1591,8 +1591,8 @@ The type checker will now fail at compile time, because it knows that `o` is a `
 so it's a type error.
 
 It is important to understand that it is not the fact of declaring a variable with `def` that triggers type inference.
-Flow typing works for *any* variable of any type. Declaring a variable with an explicit type only constraints what you
-can assign to a variable:
+Flow typing works for *any* variable of any type. Declaring a variable with an explicit type only constrains what you
+can assign to the variable:
 
 [source,groovy]
 ----


[3/5] groovy git commit: GROOVY-8593: DocGenerator could be moved to avoid split packages (closes #715)

Posted by pa...@apache.org.
http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/stylesheet.css
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/stylesheet.css b/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/stylesheet.css
deleted file mode 100644
index 3aba844..0000000
--- a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/stylesheet.css
+++ /dev/null
@@ -1,2321 +0,0 @@
-@charset "${props.charset}";
-
-/*! normalize.css v2.1.0 | MIT License | git.io/normalize */
-article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary {
-    display: block
-}
-
-audio, canvas, video {
-    display: inline-block
-}
-
-audio:not([controls]) {
-    display: none;
-    height: 0
-}
-
-[hidden] {
-    display: none
-}
-
-html {
-    font-family: sans-serif;
-    -webkit-text-size-adjust: 100%;
-    -ms-text-size-adjust: 100%
-}
-
-body {
-    margin: 0
-}
-
-a:focus {
-    outline: thin dotted
-}
-
-a:active, a:hover {
-    outline: 0
-}
-
-h1 {
-    font-size: 2em;
-    margin: .67em 0
-}
-
-abbr[title] {
-    border-bottom: 1px dotted
-}
-
-b, strong {
-    font-weight: bold
-}
-
-dfn {
-    font-style: italic
-}
-
-hr {
-    -moz-box-sizing: content-box;
-    box-sizing: content-box;
-    height: 0
-}
-
-mark {
-    background: #ff0;
-    color: #000
-}
-
-code, kbd, pre, samp {
-    font-family: monospace, serif;
-    font-size: 1em
-}
-
-pre {
-    white-space: pre-wrap
-}
-
-q {
-    quotes: "\201C" "\201D" "\2018" "\2019"
-}
-
-small {
-    font-size: 80%
-}
-
-sub, sup {
-    font-size: 75%;
-    line-height: 0;
-    position: relative;
-    vertical-align: baseline
-}
-
-sup {
-    top: -0.5em
-}
-
-sub {
-    bottom: -0.25em
-}
-
-img {
-    border: 0
-}
-
-svg:not(:root) {
-    overflow: hidden
-}
-
-figure {
-    margin: 0
-}
-
-fieldset {
-    border: 1px solid #c0c0c0;
-    margin: 0 2px;
-    padding: .35em .625em .75em
-}
-
-legend {
-    border: 0;
-    padding: 0
-}
-
-button, input, select, textarea {
-    font-family: inherit;
-    font-size: 100%;
-    margin: 0
-}
-
-button, input {
-    line-height: normal
-}
-
-button, select {
-    text-transform: none
-}
-
-button, html input[type="button"], input[type="reset"], input[type="submit"] {
-    -webkit-appearance: button;
-    cursor: pointer
-}
-
-button[disabled], html input[disabled] {
-    cursor: default
-}
-
-input[type="checkbox"], input[type="radio"] {
-    box-sizing: border-box;
-    padding: 0
-}
-
-input[type="search"] {
-    -webkit-appearance: textfield;
-    -moz-box-sizing: content-box;
-    -webkit-box-sizing: content-box;
-    box-sizing: content-box
-}
-
-input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration {
-    -webkit-appearance: none
-}
-
-button::-moz-focus-inner, input::-moz-focus-inner {
-    border: 0;
-    padding: 0
-}
-
-textarea {
-    overflow: auto;
-    vertical-align: top
-}
-
-table {
-    border-collapse: collapse;
-    border-spacing: 0
-}
-
-@-ms-viewport {
-    width: device-width
-}
-
-@media screen and (max-width: 400px) {
-    @-ms-viewport {
-        width: 320px
-    }
-}
-
-.hidden {
-    display: none !important;
-    visibility: hidden !important
-}
-
-.visible-xs {
-    display: none !important
-}
-
-tr.visible-xs {
-    display: none !important
-}
-
-th.visible-xs, td.visible-xs {
-    display: none !important
-}
-
-@media (max-width: 767px) {
-    .visible-xs {
-        display: block !important
-    }
-
-    tr.visible-xs {
-        display: table-row !important
-    }
-
-    th.visible-xs, td.visible-xs {
-        display: table-cell !important
-    }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-    .visible-xs.visible-sm {
-        display: block !important
-    }
-
-    tr.visible-xs.visible-sm {
-        display: table-row !important
-    }
-
-    th.visible-xs.visible-sm, td.visible-xs.visible-sm {
-        display: table-cell !important
-    }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-    .visible-xs.visible-md {
-        display: block !important
-    }
-
-    tr.visible-xs.visible-md {
-        display: table-row !important
-    }
-
-    th.visible-xs.visible-md, td.visible-xs.visible-md {
-        display: table-cell !important
-    }
-}
-
-@media (min-width: 1200px) {
-    .visible-xs.visible-lg {
-        display: block !important
-    }
-
-    tr.visible-xs.visible-lg {
-        display: table-row !important
-    }
-
-    th.visible-xs.visible-lg, td.visible-xs.visible-lg {
-        display: table-cell !important
-    }
-}
-
-.visible-sm {
-    display: none !important
-}
-
-tr.visible-sm {
-    display: none !important
-}
-
-th.visible-sm, td.visible-sm {
-    display: none !important
-}
-
-@media (max-width: 767px) {
-    .visible-sm.visible-xs {
-        display: block !important
-    }
-
-    tr.visible-sm.visible-xs {
-        display: table-row !important
-    }
-
-    th.visible-sm.visible-xs, td.visible-sm.visible-xs {
-        display: table-cell !important
-    }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-    .visible-sm {
-        display: block !important
-    }
-
-    tr.visible-sm {
-        display: table-row !important
-    }
-
-    th.visible-sm, td.visible-sm {
-        display: table-cell !important
-    }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-    .visible-sm.visible-md {
-        display: block !important
-    }
-
-    tr.visible-sm.visible-md {
-        display: table-row !important
-    }
-
-    th.visible-sm.visible-md, td.visible-sm.visible-md {
-        display: table-cell !important
-    }
-}
-
-@media (min-width: 1200px) {
-    .visible-sm.visible-lg {
-        display: block !important
-    }
-
-    tr.visible-sm.visible-lg {
-        display: table-row !important
-    }
-
-    th.visible-sm.visible-lg, td.visible-sm.visible-lg {
-        display: table-cell !important
-    }
-}
-
-.visible-md {
-    display: none !important
-}
-
-tr.visible-md {
-    display: none !important
-}
-
-th.visible-md, td.visible-md {
-    display: none !important
-}
-
-@media (max-width: 767px) {
-    .visible-md.visible-xs {
-        display: block !important
-    }
-
-    tr.visible-md.visible-xs {
-        display: table-row !important
-    }
-
-    th.visible-md.visible-xs, td.visible-md.visible-xs {
-        display: table-cell !important
-    }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-    .visible-md.visible-sm {
-        display: block !important
-    }
-
-    tr.visible-md.visible-sm {
-        display: table-row !important
-    }
-
-    th.visible-md.visible-sm, td.visible-md.visible-sm {
-        display: table-cell !important
-    }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-    .visible-md {
-        display: block !important
-    }
-
-    tr.visible-md {
-        display: table-row !important
-    }
-
-    th.visible-md, td.visible-md {
-        display: table-cell !important
-    }
-}
-
-@media (min-width: 1200px) {
-    .visible-md.visible-lg {
-        display: block !important
-    }
-
-    tr.visible-md.visible-lg {
-        display: table-row !important
-    }
-
-    th.visible-md.visible-lg, td.visible-md.visible-lg {
-        display: table-cell !important
-    }
-}
-
-.visible-lg {
-    display: none !important
-}
-
-tr.visible-lg {
-    display: none !important
-}
-
-th.visible-lg, td.visible-lg {
-    display: none !important
-}
-
-@media (max-width: 767px) {
-    .visible-lg.visible-xs {
-        display: block !important
-    }
-
-    tr.visible-lg.visible-xs {
-        display: table-row !important
-    }
-
-    th.visible-lg.visible-xs, td.visible-lg.visible-xs {
-        display: table-cell !important
-    }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-    .visible-lg.visible-sm {
-        display: block !important
-    }
-
-    tr.visible-lg.visible-sm {
-        display: table-row !important
-    }
-
-    th.visible-lg.visible-sm, td.visible-lg.visible-sm {
-        display: table-cell !important
-    }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-    .visible-lg.visible-md {
-        display: block !important
-    }
-
-    tr.visible-lg.visible-md {
-        display: table-row !important
-    }
-
-    th.visible-lg.visible-md, td.visible-lg.visible-md {
-        display: table-cell !important
-    }
-}
-
-@media (min-width: 1200px) {
-    .visible-lg {
-        display: block !important
-    }
-
-    tr.visible-lg {
-        display: table-row !important
-    }
-
-    th.visible-lg, td.visible-lg {
-        display: table-cell !important
-    }
-}
-
-.hidden-xs {
-    display: block !important
-}
-
-tr.hidden-xs {
-    display: table-row !important
-}
-
-th.hidden-xs, td.hidden-xs {
-    display: table-cell !important
-}
-
-@media (max-width: 767px) {
-    .hidden-xs {
-        display: none !important
-    }
-
-    tr.hidden-xs {
-        display: none !important
-    }
-
-    th.hidden-xs, td.hidden-xs {
-        display: none !important
-    }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-    .hidden-xs.hidden-sm {
-        display: none !important
-    }
-
-    tr.hidden-xs.hidden-sm {
-        display: none !important
-    }
-
-    th.hidden-xs.hidden-sm, td.hidden-xs.hidden-sm {
-        display: none !important
-    }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-    .hidden-xs.hidden-md {
-        display: none !important
-    }
-
-    tr.hidden-xs.hidden-md {
-        display: none !important
-    }
-
-    th.hidden-xs.hidden-md, td.hidden-xs.hidden-md {
-        display: none !important
-    }
-}
-
-@media (min-width: 1200px) {
-    .hidden-xs.hidden-lg {
-        display: none !important
-    }
-
-    tr.hidden-xs.hidden-lg {
-        display: none !important
-    }
-
-    th.hidden-xs.hidden-lg, td.hidden-xs.hidden-lg {
-        display: none !important
-    }
-}
-
-.hidden-sm {
-    display: block !important
-}
-
-tr.hidden-sm {
-    display: table-row !important
-}
-
-th.hidden-sm, td.hidden-sm {
-    display: table-cell !important
-}
-
-@media (max-width: 767px) {
-    .hidden-sm.hidden-xs {
-        display: none !important
-    }
-
-    tr.hidden-sm.hidden-xs {
-        display: none !important
-    }
-
-    th.hidden-sm.hidden-xs, td.hidden-sm.hidden-xs {
-        display: none !important
-    }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-    .hidden-sm {
-        display: none !important
-    }
-
-    tr.hidden-sm {
-        display: none !important
-    }
-
-    th.hidden-sm, td.hidden-sm {
-        display: none !important
-    }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-    .hidden-sm.hidden-md {
-        display: none !important
-    }
-
-    tr.hidden-sm.hidden-md {
-        display: none !important
-    }
-
-    th.hidden-sm.hidden-md, td.hidden-sm.hidden-md {
-        display: none !important
-    }
-}
-
-@media (min-width: 1200px) {
-    .hidden-sm.hidden-lg {
-        display: none !important
-    }
-
-    tr.hidden-sm.hidden-lg {
-        display: none !important
-    }
-
-    th.hidden-sm.hidden-lg, td.hidden-sm.hidden-lg {
-        display: none !important
-    }
-}
-
-.hidden-md {
-    display: block !important
-}
-
-tr.hidden-md {
-    display: table-row !important
-}
-
-th.hidden-md, td.hidden-md {
-    display: table-cell !important
-}
-
-@media (max-width: 767px) {
-    .hidden-md.hidden-xs {
-        display: none !important
-    }
-
-    tr.hidden-md.hidden-xs {
-        display: none !important
-    }
-
-    th.hidden-md.hidden-xs, td.hidden-md.hidden-xs {
-        display: none !important
-    }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-    .hidden-md.hidden-sm {
-        display: none !important
-    }
-
-    tr.hidden-md.hidden-sm {
-        display: none !important
-    }
-
-    th.hidden-md.hidden-sm, td.hidden-md.hidden-sm {
-        display: none !important
-    }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-    .hidden-md {
-        display: none !important
-    }
-
-    tr.hidden-md {
-        display: none !important
-    }
-
-    th.hidden-md, td.hidden-md {
-        display: none !important
-    }
-}
-
-@media (min-width: 1200px) {
-    .hidden-md.hidden-lg {
-        display: none !important
-    }
-
-    tr.hidden-md.hidden-lg {
-        display: none !important
-    }
-
-    th.hidden-md.hidden-lg, td.hidden-md.hidden-lg {
-        display: none !important
-    }
-}
-
-.hidden-lg {
-    display: block !important
-}
-
-tr.hidden-lg {
-    display: table-row !important
-}
-
-th.hidden-lg, td.hidden-lg {
-    display: table-cell !important
-}
-
-@media (max-width: 767px) {
-    .hidden-lg.hidden-xs {
-        display: none !important
-    }
-
-    tr.hidden-lg.hidden-xs {
-        display: none !important
-    }
-
-    th.hidden-lg.hidden-xs, td.hidden-lg.hidden-xs {
-        display: none !important
-    }
-}
-
-@media (min-width: 768px) and (max-width: 991px) {
-    .hidden-lg.hidden-sm {
-        display: none !important
-    }
-
-    tr.hidden-lg.hidden-sm {
-        display: none !important
-    }
-
-    th.hidden-lg.hidden-sm, td.hidden-lg.hidden-sm {
-        display: none !important
-    }
-}
-
-@media (min-width: 992px) and (max-width: 1199px) {
-    .hidden-lg.hidden-md {
-        display: none !important
-    }
-
-    tr.hidden-lg.hidden-md {
-        display: none !important
-    }
-
-    th.hidden-lg.hidden-md, td.hidden-lg.hidden-md {
-        display: none !important
-    }
-}
-
-@media (min-width: 1200px) {
-    .hidden-lg {
-        display: none !important
-    }
-
-    tr.hidden-lg {
-        display: none !important
-    }
-
-    th.hidden-lg, td.hidden-lg {
-        display: none !important
-    }
-}
-
-.visible-print {
-    display: none !important
-}
-
-tr.visible-print {
-    display: none !important
-}
-
-th.visible-print, td.visible-print {
-    display: none !important
-}
-
-@media print {
-    .visible-print {
-        display: block !important
-    }
-
-    tr.visible-print {
-        display: table-row !important
-    }
-
-    th.visible-print, td.visible-print {
-        display: table-cell !important
-    }
-
-    .hidden-print {
-        display: none !important
-    }
-
-    tr.hidden-print {
-        display: none !important
-    }
-
-    th.hidden-print, td.hidden-print {
-        display: none !important
-    }
-}
-
-.container {
-    margin-right: auto;
-    margin-left: auto;
-    padding-left: 15px;
-    padding-right: 15px
-}
-
-.container:before, .container:after {
-    content: " ";
-    display: table
-}
-
-.container:after {
-    clear: both
-}
-
-.row-fluid {
-    margin-left: -15px;
-    margin-right: -15px
-}
-
-.row-fluid:before, .row-fluid:after {
-    content: " ";
-    display: table
-}
-
-.row-fluid:after {
-    clear: both
-}
-
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
-    position: relative;
-    min-height: 1px;
-    padding-left: 15px;
-    padding-right: 15px
-}
-
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11 {
-    float: left
-}
-
-.col-xs-1 {
-    width: 8.333333333333332%
-}
-
-.col-xs-2 {
-    width: 16.666666666666664%
-}
-
-.col-xs-3 {
-    width: 25%
-}
-
-.col-xs-4 {
-    width: 33.33333333333333%
-}
-
-.col-xs-5 {
-    width: 41.66666666666667%
-}
-
-.col-xs-6 {
-    width: 50%
-}
-
-.col-xs-7 {
-    width: 58.333333333333336%
-}
-
-.col-xs-8 {
-    width: 66.66666666666666%
-}
-
-.col-xs-9 {
-    width: 75%
-}
-
-.col-xs-10 {
-    width: 83.33333333333334%
-}
-
-.col-xs-11 {
-    width: 91.66666666666666%
-}
-
-.col-xs-12 {
-    width: 100%
-}
-
-@media (min-width: 768px) {
-    .container {
-        max-width: 750px
-    }
-
-    .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11 {
-        float: left
-    }
-
-    .col-sm-1 {
-        width: 8.333333333333332%
-    }
-
-    .col-sm-2 {
-        width: 16.666666666666664%
-    }
-
-    .col-sm-3 {
-        width: 25%
-    }
-
-    .col-sm-4 {
-        width: 33.33333333333333%
-    }
-
-    .col-sm-5 {
-        width: 41.66666666666667%
-    }
-
-    .col-sm-6 {
-        width: 50%
-    }
-
-    .col-sm-7 {
-        width: 58.333333333333336%
-    }
-
-    .col-sm-8 {
-        width: 66.66666666666666%
-    }
-
-    .col-sm-9 {
-        width: 75%
-    }
-
-    .col-sm-10 {
-        width: 83.33333333333334%
-    }
-
-    .col-sm-11 {
-        width: 91.66666666666666%
-    }
-
-    .col-sm-12 {
-        width: 100%
-    }
-
-    .col-sm-push-1 {
-        left: 8.333333333333332%
-    }
-
-    .col-sm-push-2 {
-        left: 16.666666666666664%
-    }
-
-    .col-sm-push-3 {
-        left: 25%
-    }
-
-    .col-sm-push-4 {
-        left: 33.33333333333333%
-    }
-
-    .col-sm-push-5 {
-        left: 41.66666666666667%
-    }
-
-    .col-sm-push-6 {
-        left: 50%
-    }
-
-    .col-sm-push-7 {
-        left: 58.333333333333336%
-    }
-
-    .col-sm-push-8 {
-        left: 66.66666666666666%
-    }
-
-    .col-sm-push-9 {
-        left: 75%
-    }
-
-    .col-sm-push-10 {
-        left: 83.33333333333334%
-    }
-
-    .col-sm-push-11 {
-        left: 91.66666666666666%
-    }
-
-    .col-sm-pull-1 {
-        right: 8.333333333333332%
-    }
-
-    .col-sm-pull-2 {
-        right: 16.666666666666664%
-    }
-
-    .col-sm-pull-3 {
-        right: 25%
-    }
-
-    .col-sm-pull-4 {
-        right: 33.33333333333333%
-    }
-
-    .col-sm-pull-5 {
-        right: 41.66666666666667%
-    }
-
-    .col-sm-pull-6 {
-        right: 50%
-    }
-
-    .col-sm-pull-7 {
-        right: 58.333333333333336%
-    }
-
-    .col-sm-pull-8 {
-        right: 66.66666666666666%
-    }
-
-    .col-sm-pull-9 {
-        right: 75%
-    }
-
-    .col-sm-pull-10 {
-        right: 83.33333333333334%
-    }
-
-    .col-sm-pull-11 {
-        right: 91.66666666666666%
-    }
-
-    .col-sm-offset-1 {
-        margin-left: 8.333333333333332%
-    }
-
-    .col-sm-offset-2 {
-        margin-left: 16.666666666666664%
-    }
-
-    .col-sm-offset-3 {
-        margin-left: 25%
-    }
-
-    .col-sm-offset-4 {
-        margin-left: 33.33333333333333%
-    }
-
-    .col-sm-offset-5 {
-        margin-left: 41.66666666666667%
-    }
-
-    .col-sm-offset-6 {
-        margin-left: 50%
-    }
-
-    .col-sm-offset-7 {
-        margin-left: 58.333333333333336%
-    }
-
-    .col-sm-offset-8 {
-        margin-left: 66.66666666666666%
-    }
-
-    .col-sm-offset-9 {
-        margin-left: 75%
-    }
-
-    .col-sm-offset-10 {
-        margin-left: 83.33333333333334%
-    }
-
-    .col-sm-offset-11 {
-        margin-left: 91.66666666666666%
-    }
-}
-
-@media (min-width: 992px) {
-    .container {
-        max-width: 970px
-    }
-
-    .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11 {
-        float: left
-    }
-
-    .col-md-1 {
-        width: 8.333333333333332%
-    }
-
-    .col-md-2 {
-        width: 16.666666666666664%
-    }
-
-    .col-md-3 {
-        width: 25%
-    }
-
-    .col-md-4 {
-        width: 33.33333333333333%
-    }
-
-    .col-md-5 {
-        width: 41.66666666666667%
-    }
-
-    .col-md-6 {
-        width: 50%
-    }
-
-    .col-md-7 {
-        width: 58.333333333333336%
-    }
-
-    .col-md-8 {
-        width: 66.66666666666666%
-    }
-
-    .col-md-9 {
-        width: 75%
-    }
-
-    .col-md-10 {
-        width: 83.33333333333334%
-    }
-
-    .col-md-11 {
-        width: 91.66666666666666%
-    }
-
-    .col-md-12 {
-        width: 100%
-    }
-
-    .col-md-push-0 {
-        left: auto
-    }
-
-    .col-md-push-1 {
-        left: 8.333333333333332%
-    }
-
-    .col-md-push-2 {
-        left: 16.666666666666664%
-    }
-
-    .col-md-push-3 {
-        left: 25%
-    }
-
-    .col-md-push-4 {
-        left: 33.33333333333333%
-    }
-
-    .col-md-push-5 {
-        left: 41.66666666666667%
-    }
-
-    .col-md-push-6 {
-        left: 50%
-    }
-
-    .col-md-push-7 {
-        left: 58.333333333333336%
-    }
-
-    .col-md-push-8 {
-        left: 66.66666666666666%
-    }
-
-    .col-md-push-9 {
-        left: 75%
-    }
-
-    .col-md-push-10 {
-        left: 83.33333333333334%
-    }
-
-    .col-md-push-11 {
-        left: 91.66666666666666%
-    }
-
-    .col-md-pull-0 {
-        right: auto
-    }
-
-    .col-md-pull-1 {
-        right: 8.333333333333332%
-    }
-
-    .col-md-pull-2 {
-        right: 16.666666666666664%
-    }
-
-    .col-md-pull-3 {
-        right: 25%
-    }
-
-    .col-md-pull-4 {
-        right: 33.33333333333333%
-    }
-
-    .col-md-pull-5 {
-        right: 41.66666666666667%
-    }
-
-    .col-md-pull-6 {
-        right: 50%
-    }
-
-    .col-md-pull-7 {
-        right: 58.333333333333336%
-    }
-
-    .col-md-pull-8 {
-        right: 66.66666666666666%
-    }
-
-    .col-md-pull-9 {
-        right: 75%
-    }
-
-    .col-md-pull-10 {
-        right: 83.33333333333334%
-    }
-
-    .col-md-pull-11 {
-        right: 91.66666666666666%
-    }
-
-    .col-md-offset-0 {
-        margin-left: 0
-    }
-
-    .col-md-offset-1 {
-        margin-left: 8.333333333333332%
-    }
-
-    .col-md-offset-2 {
-        margin-left: 16.666666666666664%
-    }
-
-    .col-md-offset-3 {
-        margin-left: 25%
-    }
-
-    .col-md-offset-4 {
-        margin-left: 33.33333333333333%
-    }
-
-    .col-md-offset-5 {
-        margin-left: 41.66666666666667%
-    }
-
-    .col-md-offset-6 {
-        margin-left: 50%
-    }
-
-    .col-md-offset-7 {
-        margin-left: 58.333333333333336%
-    }
-
-    .col-md-offset-8 {
-        margin-left: 66.66666666666666%
-    }
-
-    .col-md-offset-9 {
-        margin-left: 75%
-    }
-
-    .col-md-offset-10 {
-        margin-left: 83.33333333333334%
-    }
-
-    .col-md-offset-11 {
-        margin-left: 91.66666666666666%
-    }
-}
-
-@media (min-width: 1200px) {
-    .container {
-        max-width: 1170px
-    }
-
-    .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11 {
-        float: left
-    }
-
-    .col-lg-1 {
-        width: 8.333333333333332%
-    }
-
-    .col-lg-2 {
-        width: 16.666666666666664%
-    }
-
-    .col-lg-3 {
-        width: 25%
-    }
-
-    .col-lg-4 {
-        width: 33.33333333333333%
-    }
-
-    .col-lg-5 {
-        width: 41.66666666666667%
-    }
-
-    .col-lg-6 {
-        width: 50%
-    }
-
-    .col-lg-7 {
-        width: 58.333333333333336%
-    }
-
-    .col-lg-8 {
-        width: 66.66666666666666%
-    }
-
-    .col-lg-9 {
-        width: 75%
-    }
-
-    .col-lg-10 {
-        width: 83.33333333333334%
-    }
-
-    .col-lg-11 {
-        width: 91.66666666666666%
-    }
-
-    .col-lg-12 {
-        width: 100%
-    }
-
-    .col-lg-push-0 {
-        left: auto
-    }
-
-    .col-lg-push-1 {
-        left: 8.333333333333332%
-    }
-
-    .col-lg-push-2 {
-        left: 16.666666666666664%
-    }
-
-    .col-lg-push-3 {
-        left: 25%
-    }
-
-    .col-lg-push-4 {
-        left: 33.33333333333333%
-    }
-
-    .col-lg-push-5 {
-        left: 41.66666666666667%
-    }
-
-    .col-lg-push-6 {
-        left: 50%
-    }
-
-    .col-lg-push-7 {
-        left: 58.333333333333336%
-    }
-
-    .col-lg-push-8 {
-        left: 66.66666666666666%
-    }
-
-    .col-lg-push-9 {
-        left: 75%
-    }
-
-    .col-lg-push-10 {
-        left: 83.33333333333334%
-    }
-
-    .col-lg-push-11 {
-        left: 91.66666666666666%
-    }
-
-    .col-lg-pull-0 {
-        right: auto
-    }
-
-    .col-lg-pull-1 {
-        right: 8.333333333333332%
-    }
-
-    .col-lg-pull-2 {
-        right: 16.666666666666664%
-    }
-
-    .col-lg-pull-3 {
-        right: 25%
-    }
-
-    .col-lg-pull-4 {
-        right: 33.33333333333333%
-    }
-
-    .col-lg-pull-5 {
-        right: 41.66666666666667%
-    }
-
-    .col-lg-pull-6 {
-        right: 50%
-    }
-
-    .col-lg-pull-7 {
-        right: 58.333333333333336%
-    }
-
-    .col-lg-pull-8 {
-        right: 66.66666666666666%
-    }
-
-    .col-lg-pull-9 {
-        right: 75%
-    }
-
-    .col-lg-pull-10 {
-        right: 83.33333333333334%
-    }
-
-    .col-lg-pull-11 {
-        right: 91.66666666666666%
-    }
-
-    .col-lg-offset-0 {
-        margin-left: 0
-    }
-
-    .col-lg-offset-1 {
-        margin-left: 8.333333333333332%
-    }
-
-    .col-lg-offset-2 {
-        margin-left: 16.666666666666664%
-    }
-
-    .col-lg-offset-3 {
-        margin-left: 25%
-    }
-
-    .col-lg-offset-4 {
-        margin-left: 33.33333333333333%
-    }
-
-    .col-lg-offset-5 {
-        margin-left: 41.66666666666667%
-    }
-
-    .col-lg-offset-6 {
-        margin-left: 50%
-    }
-
-    .col-lg-offset-7 {
-        margin-left: 58.333333333333336%
-    }
-
-    .col-lg-offset-8 {
-        margin-left: 66.66666666666666%
-    }
-
-    .col-lg-offset-9 {
-        margin-left: 75%
-    }
-
-    .col-lg-offset-10 {
-        margin-left: 83.33333333333334%
-    }
-
-    .col-lg-offset-11 {
-        margin-left: 91.66666666666666%
-    }
-}
-
-.btn {
-    display: inline-block;
-    padding: 6px 12px;
-    margin-bottom: 0;
-    font-size: 14px;
-    font-weight: normal;
-    line-height: 1.428571429;
-    text-align: center;
-    vertical-align: middle;
-    cursor: pointer;
-    border: 1px solid transparent;
-    border-radius: 0;
-    white-space: nowrap;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    -o-user-select: none;
-    user-select: none
-}
-
-.btn:focus {
-    outline: thin dotted #333;
-    outline: 5px auto -webkit-focus-ring-color;
-    outline-offset: -2px
-}
-
-.btn:hover, .btn:focus {
-    color: #333;
-    text-decoration: none
-}
-
-.btn:active, .btn.active {
-    outline: 0;
-    background-image: none
-}
-
-.btn.disabled, .btn[disabled], fieldset[disabled] .btn {
-    cursor: not-allowed;
-    pointer-events: none;
-    opacity: .65;
-    filter: alpha(opacity=65);
-    -webkit-box-shadow: none;
-    box-shadow: none
-}
-
-.btn-default {
-    color: #333;
-    background-color: #fff;
-    border-color: #ccc
-}
-
-.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
-    color: #333;
-    background-color: #ebebeb;
-    border-color: #adadad
-}
-
-.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
-    background-image: none
-}
-
-.btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active {
-    background-color: #fff;
-    border-color: #ccc
-}
-
-.btn-primary {
-    color: #fff;
-    background-color: #428bca;
-    border-color: #357ebd
-}
-
-.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {
-    color: #fff;
-    background-color: #3276b1;
-    border-color: #285e8e
-}
-
-.btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {
-    background-image: none
-}
-
-.btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active {
-    background-color: #428bca;
-    border-color: #357ebd
-}
-
-.btn-warning {
-    color: #fff;
-    background-color: #f0ad4e;
-    border-color: #eea236
-}
-
-.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {
-    color: #fff;
-    background-color: #ed9c28;
-    border-color: #d58512
-}
-
-.btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {
-    background-image: none
-}
-
-.btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active {
-    background-color: #f0ad4e;
-    border-color: #eea236
-}
-
-.btn-danger {
-    color: #fff;
-    background-color: #d9534f;
-    border-color: #d43f3a
-}
-
-.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {
-    color: #fff;
-    background-color: #d2322d;
-    border-color: #ac2925
-}
-
-.btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {
-    background-image: none
-}
-
-.btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active {
-    background-color: #d9534f;
-    border-color: #d43f3a
-}
-
-.btn-success {
-    color: #fff;
-    background-color: #5cb85c;
-    border-color: #4cae4c
-}
-
-.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
-    color: #fff;
-    background-color: #47a447;
-    border-color: #398439
-}
-
-.btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
-    background-image: none
-}
-
-.btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active {
-    background-color: #5cb85c;
-    border-color: #4cae4c
-}
-
-.btn-info {
-    color: #fff;
-    background-color: #5bc0de;
-    border-color: #46b8da
-}
-
-.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {
-    color: #fff;
-    background-color: #39b3d7;
-    border-color: #269abc
-}
-
-.btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {
-    background-image: none
-}
-
-.btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active {
-    background-color: #5bc0de;
-    border-color: #46b8da
-}
-
-.btn-link {
-    color: #428bca;
-    font-weight: normal;
-    cursor: pointer;
-    border-radius: 0
-}
-
-.btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link {
-    background-color: transparent;
-    -webkit-box-shadow: none;
-    box-shadow: none
-}
-
-.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {
-    border-color: transparent
-}
-
-.btn-link:hover, .btn-link:focus {
-    color: #2a6496;
-    text-decoration: underline;
-    background-color: transparent
-}
-
-.btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus {
-    color: #999;
-    text-decoration: none
-}
-
-.btn-lg {
-    padding: 10px 16px;
-    font-size: 18px;
-    line-height: 1.33;
-    border-radius: 6px
-}
-
-.btn-sm, .btn-xs {
-    padding: 5px 10px;
-    font-size: 12px;
-    line-height: 1.5;
-    border-radius: 3px
-}
-
-.btn-xs {
-    padding: 1px 5px
-}
-
-.btn-block {
-    display: block;
-    width: 100%;
-    padding-left: 0;
-    padding-right: 0
-}
-
-.btn-block + .btn-block {
-    margin-top: 5px
-}
-
-input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block {
-    width: 100%
-}
-
-.btn-default .caret {
-    border-top-color: #333
-}
-
-.btn-primary .caret, .btn-success .caret, .btn-warning .caret, .btn-danger .caret, .btn-info .caret {
-    border-top-color: #fff
-}
-
-.dropup .btn-default .caret {
-    border-bottom-color: #333
-}
-
-.dropup .btn-primary .caret, .dropup .btn-success .caret, .dropup .btn-warning .caret, .dropup .btn-danger .caret, .dropup .btn-info .caret {
-    border-bottom-color: #fff
-}
-
-.btn-group, .btn-group-vertical {
-    position: relative;
-    display: inline-block;
-    vertical-align: middle
-}
-
-.btn-group > .btn, .btn-group-vertical > .btn {
-    position: relative;
-    float: left
-}
-
-.btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, .btn-group-vertical > .btn:focus, .btn-group > .btn:active, .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active {
-    z-index: 2
-}
-
-.btn-group > .btn:focus, .btn-group-vertical > .btn:focus {
-    outline: 0
-}
-
-.btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group {
-    margin-left: -1px
-}
-
-.btn-toolbar:before, .btn-toolbar:after {
-    content: " ";
-    display: table
-}
-
-.btn-toolbar:after {
-    clear: both
-}
-
-.btn-toolbar .btn-group {
-    float: left
-}
-
-.btn-toolbar > .btn + .btn, .btn-toolbar > .btn-group + .btn, .btn-toolbar > .btn + .btn-group, .btn-toolbar > .btn-group + .btn-group {
-    margin-left: 5px
-}
-
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
-    border-radius: 0
-}
-
-.btn-group > .btn:first-child {
-    margin-left: 0
-}
-
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
-    border-bottom-right-radius: 0;
-    border-top-right-radius: 0
-}
-
-.btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) {
-    border-bottom-left-radius: 0;
-    border-top-left-radius: 0
-}
-
-.btn-group > .btn-group {
-    float: left
-}
-
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
-    border-radius: 0
-}
-
-.btn-group > .btn-group:first-child > .btn:last-child, .btn-group > .btn-group:first-child > .dropdown-toggle {
-    border-bottom-right-radius: 0;
-    border-top-right-radius: 0
-}
-
-.btn-group > .btn-group:last-child > .btn:first-child {
-    border-bottom-left-radius: 0;
-    border-top-left-radius: 0
-}
-
-.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
-    outline: 0
-}
-
-.btn-group-xs > .btn {
-    padding: 5px 10px;
-    font-size: 12px;
-    line-height: 1.5;
-    border-radius: 3px;
-    padding: 1px 5px
-}
-
-.btn-group-sm > .btn {
-    padding: 5px 10px;
-    font-size: 12px;
-    line-height: 1.5;
-    border-radius: 3px
-}
-
-.btn-group-lg > .btn {
-    padding: 10px 16px;
-    font-size: 18px;
-    line-height: 1.33;
-    border-radius: 6px
-}
-
-.btn-group > .btn + .dropdown-toggle {
-    padding-left: 8px;
-    padding-right: 8px
-}
-
-.btn-group > .btn-lg + .dropdown-toggle {
-    padding-left: 12px;
-    padding-right: 12px
-}
-
-.btn-group.open .dropdown-toggle {
-    background: #f2f2f2
-}
-
-.btn .caret {
-    margin-left: 0
-}
-
-.btn-lg .caret {
-    border-width: 5px 5px 0;
-    border-bottom-width: 0
-}
-
-.dropup .btn-lg .caret {
-    border-width: 0 5px 5px
-}
-
-.btn-group-vertical > .btn, .btn-group-vertical > .btn-group {
-    display: block;
-    float: none;
-    width: 100%;
-    max-width: 100%
-}
-
-.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {
-    content: " ";
-    display: table
-}
-
-.btn-group-vertical > .btn-group:after {
-    clear: both
-}
-
-.btn-group-vertical > .btn-group > .btn {
-    float: none
-}
-
-.btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group {
-    margin-top: -1px;
-    margin-left: 0
-}
-
-.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
-    border-radius: 0
-}
-
-.btn-group-vertical > .btn:first-child:not(:last-child) {
-    border-top-right-radius: 0;
-    border-bottom-right-radius: 0;
-    border-bottom-left-radius: 0
-}
-
-.btn-group-vertical > .btn:last-child:not(:first-child) {
-    border-bottom-left-radius: 0;
-    border-top-right-radius: 0;
-    border-top-left-radius: 0
-}
-
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
-    border-radius: 0
-}
-
-.btn-group-vertical > .btn-group:first-child > .btn:last-child, .btn-group-vertical > .btn-group:first-child > .dropdown-toggle {
-    border-bottom-right-radius: 0;
-    border-bottom-left-radius: 0
-}
-
-.btn-group-vertical > .btn-group:last-child > .btn:first-child {
-    border-top-right-radius: 0;
-    border-top-left-radius: 0
-}
-
-.btn-group-justified {
-    display: table;
-    width: 100%;
-    table-layout: fixed;
-    border-collapse: separate
-}
-
-.btn-group-justified .btn {
-    float: none;
-    display: table-cell;
-    width: 1%
-}
-
-[data-toggle="buttons"] > .btn > input[type="radio"], [data-toggle="buttons"] > .btn > input[type="checkbox"] {
-    display: none
-}
-
-.caret {
-    display: inline-block;
-    width: 0;
-    height: 0;
-    margin-left: 2px;
-    vertical-align: middle;
-    border-top: 4px solid #000;
-    border-right: 4px solid transparent;
-    border-left: 4px solid transparent;
-    border-bottom: 0 dotted;
-    content: ""
-}
-
-.dropdown {
-    position: relative
-}
-
-.dropdown-toggle:focus {
-    outline: 0
-}
-
-.dropdown-menu {
-    position: absolute;
-    top: 100%;
-    left: 0;
-    z-index: 1000;
-    display: none;
-    float: left;
-    min-width: 160px;
-    padding: 5px 0;
-    margin: 2px 0 0;
-    list-style: none;
-    font-size: 14px;
-    background-color: #fff;
-    border: 1px solid #ccc;
-    border: 1px solid rgba(0, 0, 0, 0.15);
-    border-radius: 0;
-    background-clip: padding-box
-}
-
-.dropdown-menu.pull-right {
-    right: 0;
-    left: auto
-}
-
-.dropdown-menu .divider {
-    height: 1px;
-    margin: 9px 0;
-    overflow: hidden;
-    background-color: #e5e5e5
-}
-
-.dropdown-menu > li > a {
-    font-size: 14px;
-    text-decoration: none;
-    display: block;
-    padding: 5px 20px;
-    clear: both;
-    font-weight: normal;
-    line-height: 1.428571429;
-    color: #333;
-    white-space: nowrap
-}
-
-.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
-    text-decoration: none;
-    color: #fff;
-    background-color: #428bca
-}
-
-.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {
-    color: #fff;
-    text-decoration: none;
-    outline: 0;
-    background-color: #428bca
-}
-
-.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
-    color: #999
-}
-
-.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
-    text-decoration: none;
-    background-color: transparent;
-    background-image: none;
-    filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-    cursor: not-allowed
-}
-
-.open > .dropdown-menu {
-    display: block
-}
-
-.open > a {
-    outline: 0
-}
-
-.dropdown-header {
-    display: block;
-    padding: 3px 20px;
-    font-size: 12px;
-    line-height: 1.428571429;
-    color: #999
-}
-
-.dropdown-backdrop {
-    position: fixed;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    top: 0;
-    z-index: 990
-}
-
-.pull-right > .dropdown-menu {
-    right: 0;
-    left: auto
-}
-
-.dropup .caret, .navbar-fixed-bottom .dropdown .caret {
-    border-top: 0 dotted;
-    border-bottom: 4px solid #000;
-    content: ""
-}
-
-.dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu {
-    top: auto;
-    bottom: 100%;
-    margin-bottom: 1px
-}
-
-@media (min-width: 768px) {
-    .navbar-right .dropdown-menu {
-        right: 0;
-        left: auto
-    }
-}
-
-body, html {
-    font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
-    margin: 0;
-    background: #ededed;
-    color: #343437;
-    line-height: 2em;
-    font-weight: 300;
-    font-size: .95em
-}
-
-h1 {
-    font-size: 2.5em;
-    margin: .8em 0
-}
-
-body.center {
-    padding: 0 30px;
-    background: #FFF;
-    font-size: 1em
-}
-
-ul li {
-    list-style-type: disc
-}
-
-a {
-    color: #4290ad;
-    text-decoration: none;
-    font-weight: normal
-}
-
-a:hover {
-    text-decoration: underline
-}
-
-h1, h2, h3 {
-    font-weight: 300;
-    line-height: 1.2em
-}
-
-.topNav, .bottomNav {
-    background: #f2f2f2;
-    margin: 0 -30px;
-    margin-bottom: 20px
-}
-
-.topNav:before, .bottomNav:before, .topNav:after, .bottomNav:after {
-    content: " ";
-    display: table
-}
-
-.topNav:after, .bottomNav:after {
-    clear: both
-}
-
-.topNav ul.navList, .bottomNav ul.navList {
-    padding: 10px 20px;
-    margin: 0;
-    list-style-type: none
-}
-
-.topNav ul.navList li, .bottomNav ul.navList li {
-    display: inline;
-    padding: 0 10px
-}
-
-.topNav ul.navList li.navBarCell1Rev, .bottomNav ul.navList li.navBarCell1Rev {
-    font-weight: bold
-}
-
-.bottomNav {
-    margin-top: 30px;
-    margin-bottom: 0
-}
-
-.aboutLanguage {
-    color: #BBB;
-    background: white;
-    text-align: center;
-    padding: 20px 0
-}
-
-.subNav {
-    padding-bottom: 10px;
-    margin-bottom: 10px;
-    border-bottom: 1px solid #EEE
-}
-
-.subNav:before, .subNav:after {
-    content: " ";
-    display: table
-}
-
-.subNav:after {
-    clear: both
-}
-
-.subNav div:before, .subNav div:after {
-    content: " ";
-    display: table
-}
-
-.subNav div:after {
-    clear: both
-}
-
-.subNav ul.navList, .subNav ul {
-    font-size: .9em;
-    margin: 0;
-    padding: 00;
-    float: left;
-    list-style-type: none
-}
-
-.subNav ul.navList li, .subNav ul li {
-    padding: 0 5px;
-    display: inline
-}
-
-table.overviewSummary tr {
-    border-left: 1px solid #EEE;
-    border-right: 1px solid #EEE;
-}
-
-table.overviewSummary tr:first-child {
-    border-top: 1px solid #EEE;
-    border-bottom: 1px solid #EEE;
-}
-
-table.overviewSummary tr:last-child {
-    border-bottom: 1px solid #EEE;
-}
-
-table.overviewSummary, .contentContainer ul li table {
-    width: 100%;
-    margin: 20px 0
-}
-
-table.overviewSummary caption, .contentContainer ul li table caption {
-    text-align: left;
-    font-weight: 100;
-    font-size: 1em;
-    float: left;
-    padding: 0 10px;
-    margin-top: 10px;
-    background: #db4800;
-    color: white
-}
-
-table.overviewSummary tr th, .contentContainer ul li table tr th {
-    padding: 5px 10px;
-    font-weight: bold;
-    font-size: 1em;
-    text-align: left;
-    white-space: nowrap;
-    background: #f2f2f2
-}
-
-table.overviewSummary tr td, .contentContainer ul li table tr td {
-    vertical-align: top;
-    font-size: .9em;
-    padding: 5px 10px
-}
-
-table.overviewSummary tbody > tr:nth-child(odd) > td, .contentContainer ul li table tbody > tr:nth-child(odd) > td {
-    background-color: #f9f9f9
-}
-
-body.left {
-    padding-top: 10px
-}
-
-body.left h1, body.left h2 {
-    display: inline;
-    text-align: left;
-    font-weight: 100;
-    font-size: 1em;
-    margin: 0 10px;
-    padding: 3px 10px;
-    margin-top: 10px;
-    background: #db4800;
-    color: white;
-    line-height: 40px
-}
-
-body.left .indexHeader {
-    margin: 0;
-    padding: 0 15px;
-    font-size: .9em
-}
-
-body.left ul {
-    list-style-type: none;
-    margin: 0;
-    padding: 0
-}
-
-body.left ul li {
-    margin: 0;
-    padding: 0
-}
-
-body.left ul li a {
-    display: block;
-    padding: 0 15px;
-    text-decoration: none
-}
-
-body.left ul li a:hover {
-    text-decoration: underline
-}
-
-.contentContainer .header ul, .contentContainer ul.blockList {
-    padding: 0
-}
-
-.contentContainer .header ul > li, .contentContainer ul.blockList > li {
-    list-style-type: none
-}
-
-.contentContainer ul.inheritance {
-    margin-left: 0;
-    padding-left: 0
-}
-
-.contentContainer ul.inheritance li {
-    list-style-type: none
-}
-
-.contentContainer ul.inheritance ul.inheritance {
-    padding-left: 20px
-}
-
-.contentContainer hr {
-    border: 0 none;
-    border-top: 1px solid #EEE;
-    margin-top: 30px;
-    margin-botom: 0
-}
-
-ul.blockList ul.blockList, ul.blockList ul.blockListLast {
-    border: 1px solid #EEE;
-    margin: 20px 0;
-    padding: 0 20px
-}
-
-ul.blockList ul.blockList h4, ul.blockList ul.blockListLast h4, ul.blockList ul.blockList h3, ul.blockList ul.blockListLast h3 {
-    font-size: 1em;
-    font-weight: bold;
-    line-height: 2em;
-    text-indent: 10px;
-    border-bottom: 1px solid #EEE;
-    margin: 0 -20px;
-    padding: 5px 0;
-    background: #f2f2f2
-}
-
-ul.blockList ul.blockList li, ul.blockList ul.blockListLast li {
-    list-style-type: none
-}
-
-ul.horizontal {
-    list-style-type: none;
-    padding: 0;
-    margin: 0;
-    font-size: .9em
-}
-
-ul.horizontal li {
-    display: inline
-}
-
-span.strong {
-    font-weight: bold
-}
-
-a span.strong {
-    font-weight: normal
-}

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.allclasses-frame.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.allclasses-frame.html b/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.allclasses-frame.html
deleted file mode 100644
index 6710dbb..0000000
--- a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.allclasses-frame.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!--
-
-     Licensed to the Apache Software Foundation (ASF) under one
-     or more contributor license agreements.  See the NOTICE file
-     distributed with this work for additional information
-     regarding copyright ownership.  The ASF 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.
-
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-    <title>All Classes ($title)</title>
-    <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
-</head>
-
-<body class="left">
-
-<div class="indexContainer">
-    <h2 title="All Classes">All Classes</h2>
-    <ul>
-        <% docTypes.each { docType -> %>
-        <li><a href="${docType.fullyQualifiedClassName.replaceAll(/\./, '/')}.html" title="${docType.interface ? 'interface' : 'class'} in ${docType.packageName}"  target="classFrame">
-            <% if (docType.interface) { %>
-            <i>${docType.simpleClassName}</i>
-            <% } else { %>
-            ${docType.simpleClassName}
-            <% } %>
-        </a></li>
-        <% } %>
-    </ul>
-</div>
-
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.class.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.class.html b/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.class.html
deleted file mode 100644
index 4b13f72..0000000
--- a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.class.html
+++ /dev/null
@@ -1,196 +0,0 @@
-<!--
-
-     Licensed to the Apache Software Foundation (ASF) under one
-     or more contributor license agreements.  See the NOTICE file
-     distributed with this work for additional information
-     regarding copyright ownership.  The ASF 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.
-
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-    <title>${docType.simpleClassName} ($title)</title>
-    <%
-    int dotCount = docType.packageName.count('.')
-    String pathPref = '../' * (dotCount + 1)
-    %>
-    <link rel="stylesheet" type="text/css" href="${pathPref}stylesheet.css" title="Style">
-    <script type="text/javascript">
-        function windowTitle() {
-            parent.document.title = document.title;
-        }
-    </script>
-</head>
-
-<body class="center" onload="windowTitle();">
-
-    <!-- ========== START OF NAVBAR ========== -->
-    <a name="navbar_top"><!-- --></a>
-
-    <div class="topNav">
-        <ul class="navList" title="Navigation">
-            <li><a href="${pathPref}overview-summary.html">Overview</a></li>
-            <li><a href="package-summary.html">Package</a></li>
-            <li class="navBarCell1Rev">Class</li>
-            <li><a href="${pathPref}index-all.html">Index</a></li>
-        </ul>
-    </div>
-
-    <!-- =========== END OF NAVBAR =========== -->
-
-    <!-- ======== START OF class DATA ======== -->
-
-    <div class="header">
-        <div class="subTitle">Package: <strong>${docType.packageName}</strong></div>
-        <h2>${docType.interface ? 'Interface' : 'Class'} ${docType.simpleClassName}</h2>
-    </div>
-
-    <div class="contentContainer">
-
-    <!-- ========== METHOD SUMMARY =========== -->
-
-        <a name="method_summary"><!-- --></a>
-
-        <div class="summary">
-            <ul class="blockList">
-                <li class="blockList">
-                    <ul class="blockList">
-                        <li class="blockList">
-                            <h3>Methods Summary</h3>
-                            <table border="0" cellpadding="3" cellspacing="0" class="overviewSummary">
-                               <caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
-                                <tbody>
-                                    <tr>
-                                        <th>Return type</th>
-                                        <th>Name and parameters</th>
-                                    </tr>
-                                    <% docType.docMethods.eachWithIndex { docMethod, i -> %>
-                                    <tr class="${i % 2 == 0 ? 'altColor' : 'rawColor'}">
-                                        <td align="right" valign="top" width="1%">
-                                            <span> <code>${docMethod.isStatic() ? 'static ' : ''}${docMethod.returnTypeDocUrl}</code></span>
-                                        </td>
-                                        <td>
-                                            <code><strong><a href="#${docMethod.name}(${docMethod.parametersSignature})">${docMethod.name}</a></strong>(${docMethod.parametersDocUrl})</code>
-                                            <br>
-                                            ${docMethod.shortComment}
-                                        </td>
-                                    </tr>
-                                    <% } %>
-                                </tbody>
-                            </table>
-                        </li>
-                        <% docType.inheritedMethods.each { inhDocType, inhDocMethods -> %>
-                        <ul class="blockList">
-                            <li class="blockList">
-                            <h4>Methods inherited from ${inhDocType.interface ? 'interface' : 'class'} ${inhDocType.packageName}.${docType.linkAnchor(inhDocType)}</h4>
-                                <p>
-                                    <%= inhDocMethods.findAll { !it.static }.collect { docMethod ->
-                                        """<code><strong><a href="${pathPref}${inhDocType.fullyQualifiedClassName.replace('.', '/')}.html#${docMethod.name}(${docMethod.parametersSignature})">${docMethod.name}</a></strong></code>"""
-                                    }.join(", ") %>
-                                </p>
-                            </li>
-                        </ul>
-                        <% } %>
-                    </ul>
-                </li>
-            </ul>
-        </div>
-
-    <!-- ============ METHOD DETAIL ========== -->
-
-    <a name="method_detail"><!-- --></a>
-
-
-        <div class="details">
-            <ul class="blockList">
-                <li class="blockList">
-                    <ul class="blockList">
-                        <li class="blockList">
-                            <h3>Methods Detail</h3>
-
-                            <% docType.docMethods.eachWithIndex { docMethod, i -> %>
-                            <a name="${docMethod.name}(${docMethod.parametersSignature})"><!-- --></a>
-
-                            <ul class="blockListLast">
-                                <li class="blockList">
-
-                                    <h4>public ${docMethod.isStatic() ? 'static ' : ''}${docMethod.returnTypeDocUrl} <b>${docMethod.name}</b>(${docMethod.parametersDocUrl})</h4>
-
-                                    <p>${docMethod.comment}</p>
-
-                                    <% if (docMethod.parametersSignature) { %>
-                                    <dl>
-                                        <dt><b>Parameters:</b></dt>
-                                        <% docMethod.parameterComments.each { name, comment -> %>
-                                        <dd><code>${name}</code> - ${comment}</dd>
-                                        <% } %>
-                                    </dl>
-                                    <%
-                                    } %>
-
-                                    <% if (docMethod.returnComment) { %>
-                                    <dl>
-                                        <dt><b>Returns:</b></dt>
-                                        <dd>${docMethod.returnComment}</dd>
-                                    </dl>
-                                    <% } %>
-
-                                    <%if (docMethod.sinceComment) { %>
-                                    <dl>
-                                        <dt><b>Since:</b></dt>
-                                        <dd>${docMethod.sinceComment}</dd>
-                                    </dl>
-                                    <%}%>
-
-                                    <% if (docMethod.seeComments) { %>
-                                    <dl>
-                                        <dt><b>See Also:</b></dt>
-                                        <% docMethod.seeComments.each { %>
-                                        <dd>${it}</dd>
-                                        <% }%>
-                                    </dl>
-                                    <% } %>
-
-                                </li>
-                            </ul>
-
-                            <% } %>
-
-                        </li>
-                    </ul>
-                </li>
-            </ul>
-        </div>
-
-    </div>
-
-    <!-- ========= END OF class DATA ========= -->
-
-    <!-- ======= START OF BOTTOM NAVBAR ====== -->
-    <a name="navbar_bottom"><!-- --></a>
-    <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
-
-    <div class="topNav">
-        <ul class="navList" title="Navigation">
-            <li><a href="${pathPref}overview-summary.html">Overview</a></li>
-            <li><a href="package-summary.html">Package</a></li>
-            <li class="navBarCell1Rev">Class</li>
-            <li><a href="${pathPref}index-all.html">Index</a></li>
-        </ul>
-    </div>
-    <!-- =========== END OF NAVBAR =========== -->
-
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.index-all.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.index-all.html b/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.index-all.html
deleted file mode 100644
index 31c5c4b..0000000
--- a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.index-all.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!--
-
-     Licensed to the Apache Software Foundation (ASF) under one
-     or more contributor license agreements.  See the NOTICE file
-     distributed with this work for additional information
-     regarding copyright ownership.  The ASF 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.
-
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//Dtd HTML 4.0 transitional//EN""http://www.w3.org/tr/REC-html40/loose.dtd">
-<html>
-    <head>
-        <title>Index ($title)</title>
-        <link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
-        <script type="text/javascript">
-            function windowTitle() {
-                parent.document.title = document.title;
-            }
-        </script>
-    </head>
-    <body class="center" onload="windowTitle();">
-
-        <!-- ========== START OF NAVBAR ========== -->
-        <a name="navbar_top"><!-- --></a>
-
-        <div class="topNav">
-            <ul class="navList" title="Navigation">
-                <li><a href="overview-summary.html">Overview</a></li>
-                <li>Package</li>
-                <li>Class</li>
-                <li class="navBarCell1Rev">Index</li>
-            </ul>
-        </div>
-        <!-- =========== END OF NAVBAR =========== -->
-        <!--
-        <a HREF="#_A_">A</a>
-        -->
-        <% indexMap.each { it -> %>
-        <a HREF="#_${it.key}_">${it.key}</a>
-        <% } %>
-        <hr>
-
-        <% indexMap.each { indexMapEntry -> %>
-        <a name="_${indexMapEntry.key}_"><!-- --></a>
-        <h2><b>${indexMapEntry.key}</b></h2>
-        <dl>
-            <% indexMapEntry.value.each { it -> %>
-            <% final String classUrl = it.docType.fullyQualifiedClassName.replaceAll('\\.','/') + '.html' %>
-            <% if (it.docMethod) { %>
-            <% final String methodUrl = classUrl + '#' + it.docMethod.name + '(' + it.docMethod.parametersSignature + ')' %>
-            <dt><a href="${methodUrl}"><b>${it.docMethod.name}(${it.docMethod.parametersSignature})</b></a> - Method in ${it.docType.interface ? 'interface' : 'class'} ${it.docType.packageName}.<a href="${classUrl}">${it.docType.simpleClassName}</a></dt>
-            <dd> ${it.docMethod.shortComment}</dd>
-            <% } else { %>
-            <dt><a href="${classUrl}"><b>${it.docType.simpleClassName}</b></a> - ${it.docType.interface ? 'Interface' : 'Class'} in ${it.docType.packageName}</dt>
-            <dd> ${it.docType.shortComment}</dd>
-            <% } %>
-            &nbsp;
-            <% } %>
-        </dl>
-        <% } %>
-
-        <!--
-        <a HREF="#_A_">A</a>
-        -->
-        <% indexMap.each { it -> %>
-        <a href="#_${it.key}_">${it.key}</a>
-        <% } %>
-
-        <!-- ========== START OF NAVBAR ========== -->
-        <a name="navbar_bottom"><!-- --></a>
-        <div class="topNav">
-            <ul class="navList" title="Navigation">
-                <li><a href="overview-summary.html">Overview</a></li>
-                <li>Package</li>
-                <li>Class</li>
-                <li class="navBarCell1Rev">Index</li>
-            </ul>
-        </div>
-        <!-- =========== END OF NAVBAR =========== -->
-
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.overview-frame.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.overview-frame.html b/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.overview-frame.html
deleted file mode 100644
index 2504982..0000000
--- a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.overview-frame.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!--
-
-     Licensed to the Apache Software Foundation (ASF) under one
-     or more contributor license agreements.  See the NOTICE file
-     distributed with this work for additional information
-     regarding copyright ownership.  The ASF 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.
-
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<html>
-<head>
-    <title>Overview (${title})</title>
-    <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
-</head>
-
-<body class="left">
-
-<div class="indexHeader">
-    <a href="allclasses-frame.html" target="packageFrame">All Classes</a>
-</div>
-
-<div class="indexContainer">
-    <h2 title="Packages">Packages</h2>
-    <ul>
-        <li><a href="primitive-types/package-frame.html" title="Primitive types" target="packageFrame">Primitive types</a></li>
-        <% packages.grep().each { %>
-        <li><a href="${it.name.replaceAll('\\.', '/')}/package-frame.html" title="${it.name}" target="packageFrame">${it.name}</a></li>
-        <% } %>
-    </ul>
-</div>
-
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.package-frame.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.package-frame.html b/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.package-frame.html
deleted file mode 100644
index 92a6b75..0000000
--- a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.package-frame.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
-
-     Licensed to the Apache Software Foundation (ASF) under one
-     or more contributor license agreements.  See the NOTICE file
-     distributed with this work for additional information
-     regarding copyright ownership.  The ASF 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.
-
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-    <title>${docPackage.name} ($title)</title>
-    <%
-    int dotCount = docPackage.name.count('.')
-    String pathPref = '../' * (dotCount + 1)
-    %>
-    <link rel="stylesheet" type="text/css" href="${pathPref}stylesheet.css" title="Style">
-</head>
-
-<body class="left">
-
-<div class="indexHeader">
-    <b><a href="package-summary.html" target="classFrame">${docPackage.name}</a></b>
-</div>
-
-<% if (docPackage.docTypes.any { it.interface }) { %>
-<div class="indexContainer">
-    <h2 title="Interfaces">Interfaces</h2>
-    <ul>
-        <% docPackage.docTypes.findAll { it.interface }.each { docType -> %>
-        <li><a href="${docType.simpleClassName}.html" title="interface in ${docType.packageName}" target="classFrame"><i>${docType.simpleClassName}</i></a></li>
-        <% } %>
-    </ul>
-</div>
-<% } %>
-
-<% if (docPackage.docTypes.any { !it.interface }) { %>
-<div class="indexContainer">
-    <h2 title="Classes">Classes</h2>
-    <ul>
-        <% docPackage.docTypes.findAll { !it.interface }.each { docType -> %>
-        <li><a href="${docType.simpleClassName}.html" title="class in ${docType.packageName}" target="classFrame">${docType.simpleClassName}</a></li>
-        <% } %>
-    </ul>
-</div>
-<% } %>
-
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/groovy/blob/c8e8c7b6/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.package-summary.html
----------------------------------------------------------------------
diff --git a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.package-summary.html b/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.package-summary.html
deleted file mode 100644
index 0d922f0..0000000
--- a/subprojects/groovy-docgenerator/src/main/resources/org/codehaus/groovy/tools/template.package-summary.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!--
-
-     Licensed to the Apache Software Foundation (ASF) under one
-     or more contributor license agreements.  See the NOTICE file
-     distributed with this work for additional information
-     regarding copyright ownership.  The ASF 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.
-
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-    <title>${docPackage.name} ($title)</title>
-    <%
-    int dotCount = docPackage.name.count('.')
-    String pathPref = '../' * (dotCount + 1)
-    %>
-    <link rel="stylesheet" type="text/css" href="${pathPref}stylesheet.css" title="Style">
-    <script type="text/javascript">
-        function windowTitle() {
-            parent.document.title = document.title;
-        }
-    </script>
-</head>
-
-<body class="center" onload="windowTitle();">
-
-<!-- ========== START OF NAVBAR ========== -->
-<a name="navbar_top"><!-- --></a>
-
-<div class="topNav">
-    <ul class="navList" title="Navigation">
-        <li><a href="${pathPref}overview-summary.html">Overview</a></li>
-        <li class="navBarCell1Rev">Package</li>
-        <li>Class</li>
-        <li><a href="${pathPref}index-all.html">Index</a></li>
-    </ul>
-</div>
-<!-- =========== END OF NAVBAR =========== -->
-
-<div class="header">
-    <h1>Package ${docPackage.name}</h1>
-</div>
-
-<% if (docPackage.docTypes.any { it.interface }) { %>
-<div class="indexContainer">
-    <h2 title="Interfaces">Interfaces</h2>
-    <ul>
-        <% docPackage.docTypes.findAll { it.interface }.each { docType -> %>
-        <li><a href="${docType.simpleClassName}.html" title="interface in ${docType.packageName}" target="classFrame"><i>${docType.simpleClassName}</i></a></li>
-        <% } %>
-    </ul>
-</div>
-<% } %>
-
-<% if (docPackage.docTypes.any { !it.interface }) { %>
-<div class="indexContainer">
-    <h2 title="Classes">Classes</h2>
-    <ul>
-        <% docPackage.docTypes.findAll { !it.interface }.each { docType -> %>
-        <li><a href="${docType.simpleClassName}.html" title="class in ${docType.packageName}" target="classFrame">${docType.simpleClassName}</a></li>
-        <% } %>
-    </ul>
-</div>
-<% } %>
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<a name="navbar_bottom"><!-- --></a>
-<a href="#skip-navbar_bottom" title="Skip navigation links"></a>
-
-<div class="topNav">
-    <ul class="navList" title="Navigation">
-        <li><a href="${pathPref}overview-summary.html">Overview</a></li>
-        <li class="navBarCell1Rev">Package</li>
-        <li>Class</li>
-        <li><a href="${pathPref}index-all.html">Index</a></li>
-    </ul>
-</div>
-<!-- =========== END OF NAVBAR =========== -->
-
-</body>
-</html>