aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDmitry Jemerov <yole@jetbrains.com>2015-12-03 16:22:11 +0100
committerDmitry Jemerov <yole@jetbrains.com>2015-12-03 16:22:49 +0100
commit39631054c58df5841ea268b7002b820ec55f6e0a (patch)
treecefedd8411c859243bd181568e16fcdd372a38c8 /test
parent797cb4732c53bf1e3b2091add8cf731fc436607f (diff)
downloaddokka-39631054c58df5841ea268b7002b820ec55f6e0a.tar.gz
restructure Dokka build to use Gradle for everything except for the Maven plugin
Diffstat (limited to 'test')
-rw-r--r--test/data/classes/annotatedClass.kt1
-rw-r--r--test/data/classes/annotatedClassWithAnnotationParameters.kt1
-rw-r--r--test/data/classes/classWithCompanionObject.kt7
-rw-r--r--test/data/classes/classWithConstructor.kt1
-rw-r--r--test/data/classes/classWithFunction.kt4
-rw-r--r--test/data/classes/classWithProperty.kt3
-rw-r--r--test/data/classes/companionObjectExtension.kt10
-rw-r--r--test/data/classes/dataClass.kt1
-rw-r--r--test/data/classes/emptyClass.kt3
-rw-r--r--test/data/classes/emptyObject.kt3
-rw-r--r--test/data/classes/genericClass.kt3
-rw-r--r--test/data/classes/indirectOverride.kt9
-rw-r--r--test/data/classes/innerClass.kt5
-rw-r--r--test/data/classes/javaAnnotationClass.kt5
-rw-r--r--test/data/classes/notOpenClass.kt7
-rw-r--r--test/data/classes/sealedClass.kt1
-rw-r--r--test/data/classes/secondaryConstructor.kt5
-rw-r--r--test/data/comments/directive.kt35
-rw-r--r--test/data/comments/emptyDoc.kt1
-rw-r--r--test/data/comments/emptyDocButComment.kt2
-rw-r--r--test/data/comments/emptySection.kt6
-rw-r--r--test/data/comments/multilineDoc.kt7
-rw-r--r--test/data/comments/multilineDocWithComment.kt8
-rw-r--r--test/data/comments/multilineSection.kt7
-rw-r--r--test/data/comments/oneLineDoc.kt2
-rw-r--r--test/data/comments/oneLineDocWithComment.kt3
-rw-r--r--test/data/comments/oneLineDocWithEmptyLine.kt3
-rw-r--r--test/data/comments/section1.kt5
-rw-r--r--test/data/comments/section2.kt6
-rw-r--r--test/data/format/accessor.kt5
-rw-r--r--test/data/format/accessor.md18
-rw-r--r--test/data/format/annotatedTypeParameter.kt2
-rw-r--r--test/data/format/annotatedTypeParameter.md8
-rw-r--r--test/data/format/annotationClass.kt1
-rw-r--r--test/data/format/annotationClass.md14
-rw-r--r--test/data/format/annotationParams.kt1
-rw-r--r--test/data/format/annotationParams.md8
-rw-r--r--test/data/format/annotations.kt6
-rw-r--r--test/data/format/annotations.md26
-rw-r--r--test/data/format/bracket.html14
-rw-r--r--test/data/format/bracket.kt4
-rw-r--r--test/data/format/brokenLink.html14
-rw-r--r--test/data/format/brokenLink.kt4
-rw-r--r--test/data/format/classWithCompanionObject.html46
-rw-r--r--test/data/format/classWithCompanionObject.kt7
-rw-r--r--test/data/format/classWithCompanionObject.md26
-rw-r--r--test/data/format/codeSpan.html14
-rw-r--r--test/data/format/codeSpan.kt4
-rw-r--r--test/data/format/companionObjectExtension.kt10
-rw-r--r--test/data/format/companionObjectExtension.md23
-rw-r--r--test/data/format/crossLanguage/kotlinExtendsJava/Bar.html37
-rw-r--r--test/data/format/crossLanguage/kotlinExtendsJava/Bar.kt6
-rw-r--r--test/data/format/crossLanguage/kotlinExtendsJava/test/Foo.java6
-rw-r--r--test/data/format/deprecated.class.html41
-rw-r--r--test/data/format/deprecated.kt5
-rw-r--r--test/data/format/deprecated.package.html43
-rw-r--r--test/data/format/emptyDescription.kt5
-rw-r--r--test/data/format/emptyDescription.md11
-rw-r--r--test/data/format/entity.html26
-rw-r--r--test/data/format/entity.kt4
-rw-r--r--test/data/format/enumClass.kt4
-rw-r--r--test/data/format/enumClass.md15
-rw-r--r--test/data/format/enumClass.value.md8
-rw-r--r--test/data/format/extensionFunctionParameter.kt1
-rw-r--r--test/data/format/extensionFunctionParameter.md8
-rw-r--r--test/data/format/extensions.class.md16
-rw-r--r--test/data/format/extensions.kt19
-rw-r--r--test/data/format/extensions.package.md11
-rw-r--r--test/data/format/functionWithDefaultParameter.kt1
-rw-r--r--test/data/format/functionWithDefaultParameter.md8
-rw-r--r--test/data/format/htmlEscaping.html14
-rw-r--r--test/data/format/htmlEscaping.kt4
-rw-r--r--test/data/format/inheritedExtensions.kt11
-rw-r--r--test/data/format/inheritedExtensions.md21
-rw-r--r--test/data/format/inheritedMembers.kt12
-rw-r--r--test/data/format/inheritedMembers.md38
-rw-r--r--test/data/format/javaCodeInParam.java5
-rw-r--r--test/data/format/javaCodeInParam.md21
-rw-r--r--test/data/format/javaCodeLiteralTags.java6
-rw-r--r--test/data/format/javaCodeLiteralTags.md23
-rw-r--r--test/data/format/javaDeprecated.html14
-rw-r--r--test/data/format/javaDeprecated.java5
-rw-r--r--test/data/format/javaLinkTag.html36
-rw-r--r--test/data/format/javaLinkTag.java6
-rw-r--r--test/data/format/javaLinkTagWithLabel.html36
-rw-r--r--test/data/format/javaLinkTagWithLabel.java6
-rw-r--r--test/data/format/javaSeeTag.html38
-rw-r--r--test/data/format/javaSeeTag.java6
-rw-r--r--test/data/format/javaSpaceInAuthor.java5
-rw-r--r--test/data/format/javaSpaceInAuthor.md19
-rw-r--r--test/data/format/javaSupertype.html35
-rw-r--r--test/data/format/javaSupertype.java8
-rw-r--r--test/data/format/javadocHtml.java14
-rw-r--r--test/data/format/javadocHtml.md27
-rw-r--r--test/data/format/javadocOrderedList.java8
-rw-r--r--test/data/format/javadocOrderedList.md20
-rw-r--r--test/data/format/linkWithLabel.html37
-rw-r--r--test/data/format/linkWithLabel.kt6
-rw-r--r--test/data/format/nullability.kt5
-rw-r--r--test/data/format/nullability.md20
-rw-r--r--test/data/format/operatorOverloading.kt3
-rw-r--r--test/data/format/operatorOverloading.md8
-rw-r--r--test/data/format/orderedList.html30
-rw-r--r--test/data/format/orderedList.kt8
-rw-r--r--test/data/format/overloads.html23
-rw-r--r--test/data/format/overloads.kt5
-rw-r--r--test/data/format/overloadsWithDescription.html21
-rw-r--r--test/data/format/overloadsWithDescription.kt15
-rw-r--r--test/data/format/overloadsWithDifferentDescriptions.html30
-rw-r--r--test/data/format/overloadsWithDifferentDescriptions.kt15
-rw-r--r--test/data/format/overridingFunction.kt7
-rw-r--r--test/data/format/overridingFunction.md9
-rw-r--r--test/data/format/paramTag.kt6
-rw-r--r--test/data/format/paramTag.md14
-rw-r--r--test/data/format/parameterAnchor.html17
-rw-r--r--test/data/format/parameterAnchor.kt6
-rw-r--r--test/data/format/parenthesis.html14
-rw-r--r--test/data/format/parenthesis.kt4
-rw-r--r--test/data/format/propertyVar.kt1
-rw-r--r--test/data/format/propertyVar.md8
-rw-r--r--test/data/format/reifiedTypeParameter.kt3
-rw-r--r--test/data/format/reifiedTypeParameter.md8
-rw-r--r--test/data/format/see.html28
-rw-r--r--test/data/format/see.kt12
-rw-r--r--test/data/format/starProjection.kt3
-rw-r--r--test/data/format/starProjection.md8
-rw-r--r--test/data/format/summarizeSignatures.kt20
-rw-r--r--test/data/format/summarizeSignatures.md23
-rw-r--r--test/data/format/summarizeSignaturesProperty.kt20
-rw-r--r--test/data/format/summarizeSignaturesProperty.md23
-rw-r--r--test/data/format/throwsTag.kt5
-rw-r--r--test/data/format/throwsTag.md13
-rw-r--r--test/data/format/tripleBackticks.html16
-rw-r--r--test/data/format/tripleBackticks.kt7
-rw-r--r--test/data/format/typeLink.html24
-rw-r--r--test/data/format/typeLink.kt5
-rw-r--r--test/data/format/typeParameterBounds.kt6
-rw-r--r--test/data/format/typeParameterBounds.md11
-rw-r--r--test/data/format/typeParameterVariance.kt2
-rw-r--r--test/data/format/typeParameterVariance.md14
-rw-r--r--test/data/format/typeProjectionVariance.kt1
-rw-r--r--test/data/format/typeProjectionVariance.md8
-rw-r--r--test/data/format/varargsFunction.kt1
-rw-r--r--test/data/format/varargsFunction.md8
-rw-r--r--test/data/functions/annotatedFunction.kt2
-rw-r--r--test/data/functions/annotatedFunctionWithAnnotationParameters.kt7
-rw-r--r--test/data/functions/function.kt5
-rw-r--r--test/data/functions/functionWithAnnotatedParam.kt7
-rw-r--r--test/data/functions/functionWithDefaultParameter.kt1
-rw-r--r--test/data/functions/functionWithNoinlineParam.kt2
-rw-r--r--test/data/functions/functionWithNotDocumentedAnnotation.kt2
-rw-r--r--test/data/functions/functionWithParams.kt8
-rw-r--r--test/data/functions/functionWithReceiver.kt11
-rw-r--r--test/data/functions/genericFunction.kt5
-rw-r--r--test/data/functions/genericFunctionWithConstraints.kt6
-rw-r--r--test/data/functions/inlineFunction.kt2
-rw-r--r--test/data/java/annotatedAnnotation.java6
-rw-r--r--test/data/java/arrayType.java5
-rw-r--r--test/data/java/constructors.java5
-rw-r--r--test/data/java/deprecation.java6
-rw-r--r--test/data/java/enumValues.java3
-rw-r--r--test/data/java/field.java4
-rw-r--r--test/data/java/inheritorLinks.java7
-rw-r--r--test/data/java/innerClass.java4
-rw-r--r--test/data/java/javaLangObject.java3
-rw-r--r--test/data/java/member.java11
-rw-r--r--test/data/java/memberWithModifiers.java12
-rw-r--r--test/data/java/staticMethod.java4
-rw-r--r--test/data/java/superClass.java2
-rw-r--r--test/data/java/typeParameter.java3
-rw-r--r--test/data/java/varargs.java3
-rw-r--r--test/data/links/linkToJDK.kt0
-rw-r--r--test/data/links/linkToMember.kt6
-rw-r--r--test/data/links/linkToParam.kt5
-rw-r--r--test/data/links/linkToQualifiedMember.kt6
-rw-r--r--test/data/links/linkToSelf.kt6
-rw-r--r--test/data/markdown/spec.txt6150
-rw-r--r--test/data/packagedocs/stdlib.md11
-rw-r--r--test/data/packages/dottedNamePackage.kt1
-rw-r--r--test/data/packages/rootPackage.kt0
-rw-r--r--test/data/packages/simpleNamePackage.kt1
-rw-r--r--test/data/packages/simpleNamePackage2.kt1
-rw-r--r--test/data/properties/annotatedProperty.kt1
-rw-r--r--test/data/properties/propertyOverride.kt7
-rw-r--r--test/data/properties/propertyWithReceiver.kt2
-rw-r--r--test/data/properties/valueProperty.kt1
-rw-r--r--test/data/properties/valuePropertyWithGetter.kt2
-rw-r--r--test/data/properties/variableProperty.kt1
-rw-r--r--test/data/properties/variablePropertyWithAccessors.kt4
-rw-r--r--test/src/TestAPI.kt211
-rw-r--r--test/src/format/HtmlFormatTest.kt157
-rw-r--r--test/src/format/MarkdownFormatTest.kt218
-rw-r--r--test/src/format/PackageDocsTest.kt18
-rw-r--r--test/src/markdown/ParserTest.kt142
-rw-r--r--test/src/model/ClassTest.kt275
-rw-r--r--test/src/model/CommentTest.kt153
-rw-r--r--test/src/model/FunctionTest.kt227
-rw-r--r--test/src/model/JavaTest.kt197
-rw-r--r--test/src/model/KotlinAsJavaTest.kt40
-rw-r--r--test/src/model/LinkTest.kt48
-rw-r--r--test/src/model/PackageTest.kt86
-rw-r--r--test/src/model/PropertyTest.kt103
202 files changed, 0 insertions, 9919 deletions
diff --git a/test/data/classes/annotatedClass.kt b/test/data/classes/annotatedClass.kt
deleted file mode 100644
index 1b58f56c1..000000000
--- a/test/data/classes/annotatedClass.kt
+++ /dev/null
@@ -1 +0,0 @@
-@Strictfp class Foo() {}
diff --git a/test/data/classes/annotatedClassWithAnnotationParameters.kt b/test/data/classes/annotatedClassWithAnnotationParameters.kt
deleted file mode 100644
index 930d6a627..000000000
--- a/test/data/classes/annotatedClassWithAnnotationParameters.kt
+++ /dev/null
@@ -1 +0,0 @@
-@Deprecated("should no longer be used") class Foo() {}
diff --git a/test/data/classes/classWithCompanionObject.kt b/test/data/classes/classWithCompanionObject.kt
deleted file mode 100644
index fdbd915d6..000000000
--- a/test/data/classes/classWithCompanionObject.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-class Klass() {
- companion object {
- val x = 1
-
- fun foo() {}
- }
-}
diff --git a/test/data/classes/classWithConstructor.kt b/test/data/classes/classWithConstructor.kt
deleted file mode 100644
index 0751d570e..000000000
--- a/test/data/classes/classWithConstructor.kt
+++ /dev/null
@@ -1 +0,0 @@
-class Klass(name: String) \ No newline at end of file
diff --git a/test/data/classes/classWithFunction.kt b/test/data/classes/classWithFunction.kt
deleted file mode 100644
index a981cfb6a..000000000
--- a/test/data/classes/classWithFunction.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-class Klass {
- fun fn() {
- }
-}
diff --git a/test/data/classes/classWithProperty.kt b/test/data/classes/classWithProperty.kt
deleted file mode 100644
index 2a849572e..000000000
--- a/test/data/classes/classWithProperty.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-class Klass {
- val name: String = ""
-} \ No newline at end of file
diff --git a/test/data/classes/companionObjectExtension.kt b/test/data/classes/companionObjectExtension.kt
deleted file mode 100644
index 4b471376b..000000000
--- a/test/data/classes/companionObjectExtension.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-class Foo {
- companion object Default {
- }
-}
-
-
-/**
- * The def
- */
-val Foo.Default.x: Int get() = 1
diff --git a/test/data/classes/dataClass.kt b/test/data/classes/dataClass.kt
deleted file mode 100644
index 62c6f0ece..000000000
--- a/test/data/classes/dataClass.kt
+++ /dev/null
@@ -1 +0,0 @@
-data class Foo() {}
diff --git a/test/data/classes/emptyClass.kt b/test/data/classes/emptyClass.kt
deleted file mode 100644
index abd20cc8d..000000000
--- a/test/data/classes/emptyClass.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-class Klass {
-
-} \ No newline at end of file
diff --git a/test/data/classes/emptyObject.kt b/test/data/classes/emptyObject.kt
deleted file mode 100644
index 4138bf313..000000000
--- a/test/data/classes/emptyObject.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-object Obj {
-
-} \ No newline at end of file
diff --git a/test/data/classes/genericClass.kt b/test/data/classes/genericClass.kt
deleted file mode 100644
index db20ff7e5..000000000
--- a/test/data/classes/genericClass.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-class Klass<T> {
-
-} \ No newline at end of file
diff --git a/test/data/classes/indirectOverride.kt b/test/data/classes/indirectOverride.kt
deleted file mode 100644
index 8d091b801..000000000
--- a/test/data/classes/indirectOverride.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-abstract class C() {
- abstract fun foo()
-}
-
-abstract class D(): C()
-
-class E(): D() {
- override fun foo() {}
-}
diff --git a/test/data/classes/innerClass.kt b/test/data/classes/innerClass.kt
deleted file mode 100644
index 3c6e497df..000000000
--- a/test/data/classes/innerClass.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-class C {
- inner class D {
-
- }
-} \ No newline at end of file
diff --git a/test/data/classes/javaAnnotationClass.kt b/test/data/classes/javaAnnotationClass.kt
deleted file mode 100644
index 95600147f..000000000
--- a/test/data/classes/javaAnnotationClass.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-import java.lang.annotation.Retention
-import java.lang.annotation.RetentionPolicy
-
-@Retention(RetentionPolicy.SOURCE)
-public annotation class throws()
diff --git a/test/data/classes/notOpenClass.kt b/test/data/classes/notOpenClass.kt
deleted file mode 100644
index edee2c1af..000000000
--- a/test/data/classes/notOpenClass.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-open class C() {
- open fun f() {}
-}
-
-class D() : C() {
- override fun f() {}
-}
diff --git a/test/data/classes/sealedClass.kt b/test/data/classes/sealedClass.kt
deleted file mode 100644
index 933503936..000000000
--- a/test/data/classes/sealedClass.kt
+++ /dev/null
@@ -1 +0,0 @@
-sealed class Foo() {}
diff --git a/test/data/classes/secondaryConstructor.kt b/test/data/classes/secondaryConstructor.kt
deleted file mode 100644
index e5cb2557c..000000000
--- a/test/data/classes/secondaryConstructor.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-class C() {
- /** This is a secondary constructor. */
- constructor(s: String): this() {
- }
-}
diff --git a/test/data/comments/directive.kt b/test/data/comments/directive.kt
deleted file mode 100644
index b27f5a482..000000000
--- a/test/data/comments/directive.kt
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Summary
- *
- * @sample example1
- * @sample example2
- * @sample X.example3
- * @sample X.Y.example4
- */
-val property = "test"
-
-fun example1(node: String) = if (true) {
- println(property)
-}
-
-fun example2(node: String) {
- if (true) {
- println(property)
- }
-}
-
-class X {
- fun example3(node: String) {
- if (true) {
- println(property)
- }
- }
-
- class Y {
- fun example4(node: String) {
- if (true) {
- println(property)
- }
- }
- }
-}
diff --git a/test/data/comments/emptyDoc.kt b/test/data/comments/emptyDoc.kt
deleted file mode 100644
index b87cce575..000000000
--- a/test/data/comments/emptyDoc.kt
+++ /dev/null
@@ -1 +0,0 @@
-val property = "test" \ No newline at end of file
diff --git a/test/data/comments/emptyDocButComment.kt b/test/data/comments/emptyDocButComment.kt
deleted file mode 100644
index ceb247531..000000000
--- a/test/data/comments/emptyDocButComment.kt
+++ /dev/null
@@ -1,2 +0,0 @@
-/* comment */
-val property = "test" \ No newline at end of file
diff --git a/test/data/comments/emptySection.kt b/test/data/comments/emptySection.kt
deleted file mode 100644
index 47d6b1a58..000000000
--- a/test/data/comments/emptySection.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-
-/**
- * Summary
- * @one
- */
-val property = "test" \ No newline at end of file
diff --git a/test/data/comments/multilineDoc.kt b/test/data/comments/multilineDoc.kt
deleted file mode 100644
index 31cfa3a7e..000000000
--- a/test/data/comments/multilineDoc.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * doc1
- *
- * doc2
- * doc3
- */
-val property = "test" \ No newline at end of file
diff --git a/test/data/comments/multilineDocWithComment.kt b/test/data/comments/multilineDocWithComment.kt
deleted file mode 100644
index 88d226426..000000000
--- a/test/data/comments/multilineDocWithComment.kt
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * doc1
- *
- * doc2
- * doc3
- */
-// comment
-val property = "test" \ No newline at end of file
diff --git a/test/data/comments/multilineSection.kt b/test/data/comments/multilineSection.kt
deleted file mode 100644
index 6ef4df2cd..000000000
--- a/test/data/comments/multilineSection.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Summary
- * @one
- * line one
- * line two
- */
-val property = "test" \ No newline at end of file
diff --git a/test/data/comments/oneLineDoc.kt b/test/data/comments/oneLineDoc.kt
deleted file mode 100644
index 92a40c670..000000000
--- a/test/data/comments/oneLineDoc.kt
+++ /dev/null
@@ -1,2 +0,0 @@
-/** doc */
-val property = "test" \ No newline at end of file
diff --git a/test/data/comments/oneLineDocWithComment.kt b/test/data/comments/oneLineDocWithComment.kt
deleted file mode 100644
index c84679333..000000000
--- a/test/data/comments/oneLineDocWithComment.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-/** doc */
-// comment
-val property = "test" \ No newline at end of file
diff --git a/test/data/comments/oneLineDocWithEmptyLine.kt b/test/data/comments/oneLineDocWithEmptyLine.kt
deleted file mode 100644
index e364c4168..000000000
--- a/test/data/comments/oneLineDocWithEmptyLine.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-/** doc */
-
-val property = "test" \ No newline at end of file
diff --git a/test/data/comments/section1.kt b/test/data/comments/section1.kt
deleted file mode 100644
index 7c763b4c0..000000000
--- a/test/data/comments/section1.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * Summary
- * @one section one
- */
-val property = "test" \ No newline at end of file
diff --git a/test/data/comments/section2.kt b/test/data/comments/section2.kt
deleted file mode 100644
index e280793e8..000000000
--- a/test/data/comments/section2.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Summary
- * @one section one
- * @two section two
- */
-val property = "test" \ No newline at end of file
diff --git a/test/data/format/accessor.kt b/test/data/format/accessor.kt
deleted file mode 100644
index 5a4d1742a..000000000
--- a/test/data/format/accessor.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-class C() {
- var x: String
- /** The getter returns an empty string. */ get() = ""
- /** The setter does nothing. */ set(value) { }
-}
diff --git a/test/data/format/accessor.md b/test/data/format/accessor.md
deleted file mode 100644
index 8279f4524..000000000
--- a/test/data/format/accessor.md
+++ /dev/null
@@ -1,18 +0,0 @@
-[test](test/index) / [C](test/-c/index) / [x](test/-c/x)
-
-
-# x
-
-`var x: String`
-**Getter**
-
-The getter returns an empty string.
-
-
-**Setter**
-
-The setter does nothing.
-
-
-
-
diff --git a/test/data/format/annotatedTypeParameter.kt b/test/data/format/annotatedTypeParameter.kt
deleted file mode 100644
index cc3bfc1a8..000000000
--- a/test/data/format/annotatedTypeParameter.kt
+++ /dev/null
@@ -1,2 +0,0 @@
-public fun <E> containsAll(elements: Collection<@UnsafeVariance E>): @UnsafeVariance E {
-}
diff --git a/test/data/format/annotatedTypeParameter.md b/test/data/format/annotatedTypeParameter.md
deleted file mode 100644
index 7d26a1621..000000000
--- a/test/data/format/annotatedTypeParameter.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[test](test/index) / [containsAll](test/contains-all)
-
-
-# containsAll
-
-`fun &lt;E&gt; containsAll(elements:&nbsp;Collection&lt;@UnsafeVariance E&gt;): @UnsafeVariance E`
-
-
diff --git a/test/data/format/annotationClass.kt b/test/data/format/annotationClass.kt
deleted file mode 100644
index 89d494fb7..000000000
--- a/test/data/format/annotationClass.kt
+++ /dev/null
@@ -1 +0,0 @@
-annotation class fancy
diff --git a/test/data/format/annotationClass.md b/test/data/format/annotationClass.md
deleted file mode 100644
index 03548aa3f..000000000
--- a/test/data/format/annotationClass.md
+++ /dev/null
@@ -1,14 +0,0 @@
-[test](test/index) / [fancy](test/fancy/index)
-
-
-# fancy
-
-`annotation class fancy`
-
-
-
-### Constructors
-
-
-| [&lt;init&gt;](test/fancy/-init-) | `fancy()` |
-
diff --git a/test/data/format/annotationParams.kt b/test/data/format/annotationParams.kt
deleted file mode 100644
index f259a7407..000000000
--- a/test/data/format/annotationParams.kt
+++ /dev/null
@@ -1 +0,0 @@
-@JvmName("FFF") fun f() {}
diff --git a/test/data/format/annotationParams.md b/test/data/format/annotationParams.md
deleted file mode 100644
index 8cdd6e96d..000000000
--- a/test/data/format/annotationParams.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[test](test/index) / [f](test/f)
-
-
-# f
-
-`@JvmName("FFF") fun f(): Unit`
-
-
diff --git a/test/data/format/annotations.kt b/test/data/format/annotations.kt
deleted file mode 100644
index 57f76249b..000000000
--- a/test/data/format/annotations.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-data class Foo {
- inline fun bar(noinline notInlined: () -> Unit) {
- }
-
- inline val x: Int
-}
diff --git a/test/data/format/annotations.md b/test/data/format/annotations.md
deleted file mode 100644
index b898d55c0..000000000
--- a/test/data/format/annotations.md
+++ /dev/null
@@ -1,26 +0,0 @@
-[test](test/index) / [Foo](test/-foo/index)
-
-
-# Foo
-
-`data class Foo`
-
-
-
-### Constructors
-
-
-| [&lt;init&gt;](test/-foo/-init-) | `Foo()` |
-
-
-### Properties
-
-
-| [x](test/-foo/x) | `val x: Int` |
-
-
-### Functions
-
-
-| [bar](test/-foo/bar) | `fun bar(notInlined:&nbsp;()&nbsp;-&gt;&nbsp;Unit): Unit` |
-
diff --git a/test/data/format/bracket.html b/test/data/format/bracket.html
deleted file mode 100644
index 5630073d4..000000000
--- a/test/data/format/bracket.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / foo</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/foo">foo</a><br/>
-<br/>
-<h1>foo</h1>
-<code><span class="keyword">fun </span><span class="identifier">foo</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<p>bar[]</p>
-<br/>
-<br/>
-</BODY>
-</HTML>
diff --git a/test/data/format/bracket.kt b/test/data/format/bracket.kt
deleted file mode 100644
index d41b0073a..000000000
--- a/test/data/format/bracket.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * bar[]
- */
-fun foo() {}
diff --git a/test/data/format/brokenLink.html b/test/data/format/brokenLink.html
deleted file mode 100644
index 32135787f..000000000
--- a/test/data/format/brokenLink.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / f</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/f">f</a><br/>
-<br/>
-<h1>f</h1>
-<code><span class="keyword">fun </span><span class="identifier">f</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<p>This references <a href="#">noSuchIdentifier</a>.</p>
-<br/>
-<br/>
-</BODY>
-</HTML>
diff --git a/test/data/format/brokenLink.kt b/test/data/format/brokenLink.kt
deleted file mode 100644
index 268a986e4..000000000
--- a/test/data/format/brokenLink.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * This references [noSuchIdentifier].
- */
-fun f() { }
diff --git a/test/data/format/classWithCompanionObject.html b/test/data/format/classWithCompanionObject.html
deleted file mode 100644
index be9247eaa..000000000
--- a/test/data/format/classWithCompanionObject.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / Klass</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/-klass/index">Klass</a><br/>
-<br/>
-<h1>Klass</h1>
-<code><span class="keyword">class </span><span class="identifier">Klass</span></code><br/>
-<br/>
-<br/>
-<h3>Constructors</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-klass/-init-">&lt;init&gt;</a></td>
-<td>
-<code><span class="identifier">Klass</span><span class="symbol">(</span><span class="symbol">)</span></code></td>
-</tr>
-</tbody>
-</table>
-<h3>Companion Object Properties</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-klass/x">x</a></td>
-<td>
-<code><span class="keyword">val </span><span class="identifier">x</span><span class="symbol">: </span><span class="identifier">Int</span></code></td>
-</tr>
-</tbody>
-</table>
-<h3>Companion Object Functions</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-klass/foo">foo</a></td>
-<td>
-<code><span class="keyword">fun </span><span class="identifier">foo</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code></td>
-</tr>
-</tbody>
-</table>
-</BODY>
-</HTML>
diff --git a/test/data/format/classWithCompanionObject.kt b/test/data/format/classWithCompanionObject.kt
deleted file mode 100644
index fdbd915d6..000000000
--- a/test/data/format/classWithCompanionObject.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-class Klass() {
- companion object {
- val x = 1
-
- fun foo() {}
- }
-}
diff --git a/test/data/format/classWithCompanionObject.md b/test/data/format/classWithCompanionObject.md
deleted file mode 100644
index 9398c3d33..000000000
--- a/test/data/format/classWithCompanionObject.md
+++ /dev/null
@@ -1,26 +0,0 @@
-[test](test/index) / [Klass](test/-klass/index)
-
-
-# Klass
-
-`class Klass`
-
-
-
-### Constructors
-
-
-| [&lt;init&gt;](test/-klass/-init-) | `Klass()` |
-
-
-### Companion Object Properties
-
-
-| [x](test/-klass/x) | `val x: Int` |
-
-
-### Companion Object Functions
-
-
-| [foo](test/-klass/foo) | `fun foo(): Unit` |
-
diff --git a/test/data/format/codeSpan.html b/test/data/format/codeSpan.html
deleted file mode 100644
index cc5530438..000000000
--- a/test/data/format/codeSpan.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / foo</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/foo">foo</a><br/>
-<br/>
-<h1>foo</h1>
-<code><span class="keyword">fun </span><span class="identifier">foo</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<p>This is a <code>code span</code>.</p>
-<br/>
-<br/>
-</BODY>
-</HTML>
diff --git a/test/data/format/codeSpan.kt b/test/data/format/codeSpan.kt
deleted file mode 100644
index 645f454a7..000000000
--- a/test/data/format/codeSpan.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * This is a `code span`.
- */
-fun foo() {} \ No newline at end of file
diff --git a/test/data/format/companionObjectExtension.kt b/test/data/format/companionObjectExtension.kt
deleted file mode 100644
index f452de2c8..000000000
--- a/test/data/format/companionObjectExtension.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-class Foo {
- companion object Default {
- }
-}
-
-
-/**
- * The default object property.
- */
-val Foo.Default.x: Int get() = 1
diff --git a/test/data/format/companionObjectExtension.md b/test/data/format/companionObjectExtension.md
deleted file mode 100644
index 271da5b06..000000000
--- a/test/data/format/companionObjectExtension.md
+++ /dev/null
@@ -1,23 +0,0 @@
-[test](test/index) / [Foo](test/-foo/index)
-
-
-# Foo
-
-`class Foo`
-
-
-
-### Constructors
-
-
-| [&lt;init&gt;](test/-foo/-init-) | `Foo()` |
-
-
-### Companion Object Extension Properties
-
-
-| [x](test/x) | `val Foo.Default.x: Int`
-The default object property.
-
- |
-
diff --git a/test/data/format/crossLanguage/kotlinExtendsJava/Bar.html b/test/data/format/crossLanguage/kotlinExtendsJava/Bar.html
deleted file mode 100644
index e7b139d8e..000000000
--- a/test/data/format/crossLanguage/kotlinExtendsJava/Bar.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / test.Bar</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/test/index">test</a>&nbsp;/&nbsp;<a href="test/test/-bar/index">Bar</a><br/>
-<br/>
-<h1>Bar</h1>
-<code><span class="keyword">class </span><span class="identifier">Bar</span>&nbsp;<span class="symbol">:</span>&nbsp;<a href="test/test/-foo/index"><span class="identifier">Foo</span></a></code><br/>
-<p>See <a href="test/test/-foo/xyzzy">xyzzy</a></p>
-<br/>
-<br/>
-<h3>Constructors</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/test/-bar/-init-">&lt;init&gt;</a></td>
-<td>
-<code><span class="identifier">Bar</span><span class="symbol">(</span><span class="symbol">)</span></code><p>See <a href="test/test/-foo/xyzzy">xyzzy</a></p>
-</td>
-</tr>
-</tbody>
-</table>
-<h3>Inherited Functions</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/test/-foo/xyzzy">xyzzy</a></td>
-<td>
-<code><span class="keyword">open</span> <span class="keyword">fun </span><span class="identifier">xyzzy</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code></td>
-</tr>
-</tbody>
-</table>
-</BODY>
-</HTML>
diff --git a/test/data/format/crossLanguage/kotlinExtendsJava/Bar.kt b/test/data/format/crossLanguage/kotlinExtendsJava/Bar.kt
deleted file mode 100644
index 102782f95..000000000
--- a/test/data/format/crossLanguage/kotlinExtendsJava/Bar.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package test
-
-/**
- * See [xyzzy]
- */
-class Bar(): Foo()
diff --git a/test/data/format/crossLanguage/kotlinExtendsJava/test/Foo.java b/test/data/format/crossLanguage/kotlinExtendsJava/test/Foo.java
deleted file mode 100644
index 7c1430308..000000000
--- a/test/data/format/crossLanguage/kotlinExtendsJava/test/Foo.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package test;
-
-public class Foo {
- public void xyzzy() {
- }
-}
diff --git a/test/data/format/deprecated.class.html b/test/data/format/deprecated.class.html
deleted file mode 100644
index 69da63a1f..000000000
--- a/test/data/format/deprecated.class.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<HTML>
-<HEAD>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/-c/index">C</a><br/>
-<br/>
-<h1>C</h1>
-<code><span class="keyword">class </span><s><span class="identifier">C</span></s></code><br/>
-<strong>Deprecated:</strong> This class sucks<br/>
-<br/>
-<br/>
-<br/>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/f">f</a><br/>
-<br/>
-<h1>f</h1>
-<code><span class="keyword">fun </span><s><span class="identifier">f</span></s><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<strong>Deprecated:</strong> This function sucks<br/>
-<br/>
-<br/>
-<br/>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/p">p</a><br/>
-<br/>
-<h1>p</h1>
-<code><span class="keyword">val </span><s><span class="identifier">p</span></s><span class="symbol">: </span><span class="identifier">Int</span></code><br/>
-<strong>Deprecated:</strong> This property sucks<br/>
-<br/>
-<br/>
-<br/>
-<h3>Constructors</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-c/-init-">&lt;init&gt;</a></td>
-<td>
-<code><span class="identifier">C</span><span class="symbol">(</span><span class="symbol">)</span></code></td>
-</tr>
-</tbody>
-</table>
-</BODY>
-</HTML>
diff --git a/test/data/format/deprecated.kt b/test/data/format/deprecated.kt
deleted file mode 100644
index 4fc568c23..000000000
--- a/test/data/format/deprecated.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-@Deprecated("This class sucks") class C() { }
-
-@Deprecated("This function sucks") fun f() { }
-
-@Deprecated("This property sucks") val p: Int get() = 0
diff --git a/test/data/format/deprecated.package.html b/test/data/format/deprecated.package.html
deleted file mode 100644
index dd80471c7..000000000
--- a/test/data/format/deprecated.package.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / root package</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a><br/>
-<br/>
-<h2>Package </h2>
-<h3>Types</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-c/index">C</a></td>
-<td>
-<code><span class="keyword">class </span><s><span class="identifier">C</span></s></code></td>
-</tr>
-</tbody>
-</table>
-<h3>Properties</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/p">p</a></td>
-<td>
-<code><span class="keyword">val </span><s><span class="identifier">p</span></s><span class="symbol">: </span><span class="identifier">Int</span></code></td>
-</tr>
-</tbody>
-</table>
-<h3>Functions</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/f">f</a></td>
-<td>
-<code><span class="keyword">fun </span><s><span class="identifier">f</span></s><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code></td>
-</tr>
-</tbody>
-</table>
-</BODY>
-</HTML>
diff --git a/test/data/format/emptyDescription.kt b/test/data/format/emptyDescription.kt
deleted file mode 100644
index 3ed81dfa5..000000000
--- a/test/data/format/emptyDescription.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * Function fn
- */
-fun fn() {
-} \ No newline at end of file
diff --git a/test/data/format/emptyDescription.md b/test/data/format/emptyDescription.md
deleted file mode 100644
index e82e72288..000000000
--- a/test/data/format/emptyDescription.md
+++ /dev/null
@@ -1,11 +0,0 @@
-[test](test/index) / [fn](test/fn)
-
-
-# fn
-
-`fun fn(): Unit`
-
-Function fn
-
-
-
diff --git a/test/data/format/entity.html b/test/data/format/entity.html
deleted file mode 100644
index a939faadb..000000000
--- a/test/data/format/entity.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / Bar</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/-bar/index">Bar</a><br/>
-<br/>
-<h1>Bar</h1>
-<code><span class="keyword">class </span><span class="identifier">Bar</span></code><br/>
-<p>Copyright &copy; JetBrains 2015 &#x22;</p>
-<br/>
-<br/>
-<h3>Constructors</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-bar/-init-">&lt;init&gt;</a></td>
-<td>
-<code><span class="identifier">Bar</span><span class="symbol">(</span><span class="symbol">)</span></code><p>Copyright &copy; JetBrains 2015 &#x22;</p>
-</td>
-</tr>
-</tbody>
-</table>
-</BODY>
-</HTML>
diff --git a/test/data/format/entity.kt b/test/data/format/entity.kt
deleted file mode 100644
index 163d2ee6d..000000000
--- a/test/data/format/entity.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Copyright &copy; JetBrains 2015 &#x22;
- */
-class Bar {}
diff --git a/test/data/format/enumClass.kt b/test/data/format/enumClass.kt
deleted file mode 100644
index c1af69d8b..000000000
--- a/test/data/format/enumClass.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-public enum class InlineOption {
- LOCAL_CONTINUE_AND_BREAK,
- ONLY_LOCAL_RETURN
-}
diff --git a/test/data/format/enumClass.md b/test/data/format/enumClass.md
deleted file mode 100644
index 7a0e03ffe..000000000
--- a/test/data/format/enumClass.md
+++ /dev/null
@@ -1,15 +0,0 @@
-[test](test/index) / [InlineOption](test/-inline-option/index)
-
-
-# InlineOption
-
-`enum class InlineOption`
-
-
-
-### Enum Values
-
-
-| [LOCAL_CONTINUE_AND_BREAK](test/-inline-option/-l-o-c-a-l_-c-o-n-t-i-n-u-e_-a-n-d_-b-r-e-a-k) | |
-| [ONLY_LOCAL_RETURN](test/-inline-option/-o-n-l-y_-l-o-c-a-l_-r-e-t-u-r-n) | |
-
diff --git a/test/data/format/enumClass.value.md b/test/data/format/enumClass.value.md
deleted file mode 100644
index bcb685d13..000000000
--- a/test/data/format/enumClass.value.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[test](test/index) / [InlineOption](test/-inline-option/index) / [LOCAL_CONTINUE_AND_BREAK](test/-inline-option/-l-o-c-a-l_-c-o-n-t-i-n-u-e_-a-n-d_-b-r-e-a-k)
-
-
-# LOCAL_CONTINUE_AND_BREAK
-
-`LOCAL_CONTINUE_AND_BREAK`
-
-
diff --git a/test/data/format/extensionFunctionParameter.kt b/test/data/format/extensionFunctionParameter.kt
deleted file mode 100644
index bfb344b9a..000000000
--- a/test/data/format/extensionFunctionParameter.kt
+++ /dev/null
@@ -1 +0,0 @@
-public inline fun <T> T.apply(f: T.() -> Unit): T { f(); return this }
diff --git a/test/data/format/extensionFunctionParameter.md b/test/data/format/extensionFunctionParameter.md
deleted file mode 100644
index 6980912d4..000000000
--- a/test/data/format/extensionFunctionParameter.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[test](test/index) / [apply](test/apply)
-
-
-# apply
-
-`inline fun &lt;T&gt; T.apply(f:&nbsp;T.()&nbsp;-&gt;&nbsp;Unit): T`
-
-
diff --git a/test/data/format/extensions.class.md b/test/data/format/extensions.class.md
deleted file mode 100644
index c66cdb01a..000000000
--- a/test/data/format/extensions.class.md
+++ /dev/null
@@ -1,16 +0,0 @@
-[test](test/index) / [foo](test/foo/index) / [kotlin.String](test/foo/kotlin.-string/index)
-
-
-### Extensions for kotlin.String
-
-
-| [fn](test/foo/kotlin.-string/fn) | `fun String.fn(): Unit`
-`fun String.fn(x:&nbsp;Int): Unit`
-Function with receiver
-
- |
-| [foobar](test/foo/kotlin.-string/foobar) | `val String.foobar: Int`
-Property with receiver.
-
- |
-
diff --git a/test/data/format/extensions.kt b/test/data/format/extensions.kt
deleted file mode 100644
index 6f2eff9d2..000000000
--- a/test/data/format/extensions.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package foo
-
-/**
- * Function with receiver
- */
-fun String.fn() {
-}
-
-/**
- * Function with receiver
- */
-fun String.fn(x: Int) {
-}
-
-/**
- * Property with receiver.
- */
-val String.foobar: Int
- get() = size() * 2
diff --git a/test/data/format/extensions.package.md b/test/data/format/extensions.package.md
deleted file mode 100644
index 76ff3676e..000000000
--- a/test/data/format/extensions.package.md
+++ /dev/null
@@ -1,11 +0,0 @@
-[test](test/index) / [foo](test/foo/index)
-
-
-## Package foo
-
-
-### Extensions for External Classes
-
-
-| [kotlin.String](test/foo/kotlin.-string/index) | |
-
diff --git a/test/data/format/functionWithDefaultParameter.kt b/test/data/format/functionWithDefaultParameter.kt
deleted file mode 100644
index 3a3a102fb..000000000
--- a/test/data/format/functionWithDefaultParameter.kt
+++ /dev/null
@@ -1 +0,0 @@
-fun f(x: String = "") {}
diff --git a/test/data/format/functionWithDefaultParameter.md b/test/data/format/functionWithDefaultParameter.md
deleted file mode 100644
index 21e9eff70..000000000
--- a/test/data/format/functionWithDefaultParameter.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[test](test/index) / [f](test/f)
-
-
-# f
-
-`fun f(x:&nbsp;String&nbsp;=&nbsp;""): Unit`
-
-
diff --git a/test/data/format/htmlEscaping.html b/test/data/format/htmlEscaping.html
deleted file mode 100644
index a485c08ff..000000000
--- a/test/data/format/htmlEscaping.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / x</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/x">x</a><br/>
-<br/>
-<h1>x</h1>
-<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span> <span class="identifier">x</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">T</span><span class="symbol">?</span></code><br/>
-<p>Special characters: &lt; is "less than", &gt; is "greater than", &amp; is "ampersand"</p>
-<br/>
-<br/>
-</BODY>
-</HTML>
diff --git a/test/data/format/htmlEscaping.kt b/test/data/format/htmlEscaping.kt
deleted file mode 100644
index 8778d8a55..000000000
--- a/test/data/format/htmlEscaping.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Special characters: < is "less than", > is "greater than", & is "ampersand"
- */
-fun x<T>(): T? = null
diff --git a/test/data/format/inheritedExtensions.kt b/test/data/format/inheritedExtensions.kt
deleted file mode 100644
index e38fe00d3..000000000
--- a/test/data/format/inheritedExtensions.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-open class Foo
-
-class Bar : Foo()
-
-fun Foo.first() {
-
-}
-
-fun Bar.second() {
-
-}
diff --git a/test/data/format/inheritedExtensions.md b/test/data/format/inheritedExtensions.md
deleted file mode 100644
index 79137eac2..000000000
--- a/test/data/format/inheritedExtensions.md
+++ /dev/null
@@ -1,21 +0,0 @@
-[test](test/index) / [Bar](test/-bar/index)
-
-
-# Bar
-
-`class Bar&nbsp;:&nbsp;[Foo](test/-foo/index)`
-
-
-
-### Constructors
-
-
-| [&lt;init&gt;](test/-bar/-init-) | `Bar()` |
-
-
-### Extension Functions
-
-
-| [first](test/first) | `fun [Foo](test/-foo/index).first(): Unit` |
-| [second](test/second) | `fun [Bar](test/-bar/index).second(): Unit` |
-
diff --git a/test/data/format/inheritedMembers.kt b/test/data/format/inheritedMembers.kt
deleted file mode 100644
index 2d0c4ca12..000000000
--- a/test/data/format/inheritedMembers.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-open class Foo {
- fun first() {
- }
-
- val firstProp: Int = 0
-}
-
-class Bar : Foo() {
- fun second()
-
- val secondProp: Int = 1
-}
diff --git a/test/data/format/inheritedMembers.md b/test/data/format/inheritedMembers.md
deleted file mode 100644
index d58d39744..000000000
--- a/test/data/format/inheritedMembers.md
+++ /dev/null
@@ -1,38 +0,0 @@
-[test](test/index) / [Bar](test/-bar/index)
-
-
-# Bar
-
-`class Bar&nbsp;:&nbsp;[Foo](test/-foo/index)`
-
-
-
-### Constructors
-
-
-| [&lt;init&gt;](test/-bar/-init-) | `Bar()` |
-
-
-### Properties
-
-
-| [secondProp](test/-bar/second-prop) | `val secondProp: Int` |
-
-
-### Inherited Properties
-
-
-| [firstProp](test/-foo/first-prop) | `val firstProp: Int` |
-
-
-### Functions
-
-
-| [second](test/-bar/second) | `fun second(): Unit` |
-
-
-### Inherited Functions
-
-
-| [first](test/-foo/first) | `fun first(): Unit` |
-
diff --git a/test/data/format/javaCodeInParam.java b/test/data/format/javaCodeInParam.java
deleted file mode 100644
index 73025fcc9..000000000
--- a/test/data/format/javaCodeInParam.java
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * @param T this is {@code some code} and other text
- */
-class C<T> {
-}
diff --git a/test/data/format/javaCodeInParam.md b/test/data/format/javaCodeInParam.md
deleted file mode 100644
index b1d2d871a..000000000
--- a/test/data/format/javaCodeInParam.md
+++ /dev/null
@@ -1,21 +0,0 @@
-[test](test/index) / [C](test/-c/index)
-
-
-# C
-
-`protected open class C&lt;T&nbsp;:&nbsp;Any&gt;`
-
-
-
-
-### Parameters
-
-`T` - this is `some code` and other text
-
-
-
-### Constructors
-
-
-| [&lt;init&gt;](test/-c/-init-) | `C()` |
-
diff --git a/test/data/format/javaCodeLiteralTags.java b/test/data/format/javaCodeLiteralTags.java
deleted file mode 100644
index e71ddaa70..000000000
--- a/test/data/format/javaCodeLiteralTags.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * <p>{@code A<B>C}</p>
- * <p>{@literal A<B>C}</p>
- */
-class C {
-}
diff --git a/test/data/format/javaCodeLiteralTags.md b/test/data/format/javaCodeLiteralTags.md
deleted file mode 100644
index 83c9cc334..000000000
--- a/test/data/format/javaCodeLiteralTags.md
+++ /dev/null
@@ -1,23 +0,0 @@
-[test](test/index) / [C](test/-c/index)
-
-
-# C
-
-`protected open class C`
-
-
-`A&lt;B&gt;C`
-
-
-A&lt;B&gt;C
-
-
-
-
-
-
-### Constructors
-
-
-| [&lt;init&gt;](test/-c/-init-) | `C()` |
-
diff --git a/test/data/format/javaDeprecated.html b/test/data/format/javaDeprecated.html
deleted file mode 100644
index 236c6490c..000000000
--- a/test/data/format/javaDeprecated.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / Foo.foo</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/-foo/index">Foo</a>&nbsp;/&nbsp;<a href="test/-foo/foo">foo</a><br/>
-<br/>
-<h1>foo</h1>
-<code><span class="keyword">open</span> <span class="keyword">fun </span><s><span class="identifier">foo</span></s><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<strong>Deprecated:</strong> use <code><a href="test/-foo/bar">#bar</a></code> instead <p></p>
-<br/>
-<br/>
-</BODY>
-</HTML>
diff --git a/test/data/format/javaDeprecated.java b/test/data/format/javaDeprecated.java
deleted file mode 100644
index 9694a4441..000000000
--- a/test/data/format/javaDeprecated.java
+++ /dev/null
@@ -1,5 +0,0 @@
-class Foo {
- /** @deprecated use {@link #bar} instead */
- public void foo() {}
- public void bar() {}
-}
diff --git a/test/data/format/javaLinkTag.html b/test/data/format/javaLinkTag.html
deleted file mode 100644
index 1b6921ab1..000000000
--- a/test/data/format/javaLinkTag.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / Foo</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/-foo/index">Foo</a><br/>
-<br/>
-<h1>Foo</h1>
-<code><span class="keyword">protected</span> <span class="keyword">open</span> <span class="keyword">class </span><span class="identifier">Foo</span></code><br/>
-<p>Call <code><a href="test/-foo/bar">#bar()</a></code> to do the job. </p>
-<br/>
-<br/>
-<h3>Constructors</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-foo/-init-">&lt;init&gt;</a></td>
-<td>
-<code><span class="identifier">Foo</span><span class="symbol">(</span><span class="symbol">)</span></code></td>
-</tr>
-</tbody>
-</table>
-<h3>Functions</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-foo/bar">bar</a></td>
-<td>
-<code><span class="keyword">open</span> <span class="keyword">fun </span><span class="identifier">bar</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code></td>
-</tr>
-</tbody>
-</table>
-</BODY>
-</HTML>
diff --git a/test/data/format/javaLinkTag.java b/test/data/format/javaLinkTag.java
deleted file mode 100644
index 84f761c6f..000000000
--- a/test/data/format/javaLinkTag.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Call {@link #bar()} to do the job.
- */
-class Foo {
- public void bar()
-}
diff --git a/test/data/format/javaLinkTagWithLabel.html b/test/data/format/javaLinkTagWithLabel.html
deleted file mode 100644
index aabfbc585..000000000
--- a/test/data/format/javaLinkTagWithLabel.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / Foo</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/-foo/index">Foo</a><br/>
-<br/>
-<h1>Foo</h1>
-<code><span class="keyword">protected</span> <span class="keyword">open</span> <span class="keyword">class </span><span class="identifier">Foo</span></code><br/>
-<p>Call <code><a href="test/-foo/bar">this wonderful method</a></code> to do the job. </p>
-<br/>
-<br/>
-<h3>Constructors</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-foo/-init-">&lt;init&gt;</a></td>
-<td>
-<code><span class="identifier">Foo</span><span class="symbol">(</span><span class="symbol">)</span></code></td>
-</tr>
-</tbody>
-</table>
-<h3>Functions</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-foo/bar">bar</a></td>
-<td>
-<code><span class="keyword">open</span> <span class="keyword">fun </span><span class="identifier">bar</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code></td>
-</tr>
-</tbody>
-</table>
-</BODY>
-</HTML>
diff --git a/test/data/format/javaLinkTagWithLabel.java b/test/data/format/javaLinkTagWithLabel.java
deleted file mode 100644
index 1db5ad703..000000000
--- a/test/data/format/javaLinkTagWithLabel.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Call {@link #bar() this wonderful method} to do the job.
- */
-class Foo {
- public void bar()
-}
diff --git a/test/data/format/javaSeeTag.html b/test/data/format/javaSeeTag.html
deleted file mode 100644
index a6813df3f..000000000
--- a/test/data/format/javaSeeTag.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / Foo</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/-foo/index">Foo</a><br/>
-<br/>
-<h1>Foo</h1>
-<code><span class="keyword">open</span> <span class="keyword">class </span><span class="identifier">Foo</span></code><br/>
-<p></p>
-<strong>See Also</strong><br/>
-<a href="test/-foo/bar">#bar</a><br/>
-<br/>
-<br/>
-<h3>Constructors</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-foo/-init-">&lt;init&gt;</a></td>
-<td>
-<code><span class="identifier">Foo</span><span class="symbol">(</span><span class="symbol">)</span></code></td>
-</tr>
-</tbody>
-</table>
-<h3>Functions</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-foo/bar">bar</a></td>
-<td>
-<code><span class="keyword">open</span> <span class="keyword">fun </span><span class="identifier">bar</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code></td>
-</tr>
-</tbody>
-</table>
-</BODY>
-</HTML>
diff --git a/test/data/format/javaSeeTag.java b/test/data/format/javaSeeTag.java
deleted file mode 100644
index 94a24606d..000000000
--- a/test/data/format/javaSeeTag.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * @see #bar
- */
-public class Foo {
- public void bar() {}
-} \ No newline at end of file
diff --git a/test/data/format/javaSpaceInAuthor.java b/test/data/format/javaSpaceInAuthor.java
deleted file mode 100644
index f980ae07c..000000000
--- a/test/data/format/javaSpaceInAuthor.java
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * @author Dmitry Jemerov
- */
-class C {
-} \ No newline at end of file
diff --git a/test/data/format/javaSpaceInAuthor.md b/test/data/format/javaSpaceInAuthor.md
deleted file mode 100644
index 4d19ed01a..000000000
--- a/test/data/format/javaSpaceInAuthor.md
+++ /dev/null
@@ -1,19 +0,0 @@
-[test](test/index) / [C](test/-c/index)
-
-
-# C
-
-`protected open class C`
-
-
-
-**Author**
-Dmitry Jemerov
-
-
-
-### Constructors
-
-
-| [&lt;init&gt;](test/-c/-init-) | `C()` |
-
diff --git a/test/data/format/javaSupertype.html b/test/data/format/javaSupertype.html
deleted file mode 100644
index 4c8472815..000000000
--- a/test/data/format/javaSupertype.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / C.Bar</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/-c/index">C</a>&nbsp;/&nbsp;<a href="test/-c/-bar/index">Bar</a><br/>
-<br/>
-<h1>Bar</h1>
-<code><span class="keyword">open</span> <span class="keyword">class </span><span class="identifier">Bar</span>&nbsp;<span class="symbol">:</span>&nbsp;<a href="test/-c/-foo/index"><span class="identifier">Foo</span></a></code><br/>
-<br/>
-<br/>
-<h3>Constructors</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-c/-bar/-init-">&lt;init&gt;</a></td>
-<td>
-<code><span class="identifier">Bar</span><span class="symbol">(</span><span class="symbol">)</span></code></td>
-</tr>
-</tbody>
-</table>
-<h3>Functions</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-c/-bar/return-foo">returnFoo</a></td>
-<td>
-<code><span class="keyword">open</span> <span class="keyword">fun </span><span class="identifier">returnFoo</span><span class="symbol">(</span><span class="identifier">foo</span><span class="symbol">:</span>&nbsp;<a href="test/-c/-foo/index"><span class="identifier">Foo</span></a><span class="symbol">)</span><span class="symbol">: </span><a href="test/-c/-foo/index"><span class="identifier">Foo</span></a></code></td>
-</tr>
-</tbody>
-</table>
-</BODY>
-</HTML>
diff --git a/test/data/format/javaSupertype.java b/test/data/format/javaSupertype.java
deleted file mode 100644
index b3142ff64..000000000
--- a/test/data/format/javaSupertype.java
+++ /dev/null
@@ -1,8 +0,0 @@
-class C {
- public static class Foo {
- }
-
- public static class Bar extends Foo {
- public Foo returnFoo(Foo foo) { return foo; }
- }
-}
diff --git a/test/data/format/javadocHtml.java b/test/data/format/javadocHtml.java
deleted file mode 100644
index 622116b28..000000000
--- a/test/data/format/javadocHtml.java
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * <b>Bold</b>
- * <strong>Strong</strong>
- * <i>Italic</i>
- * <em>Emphasized</em>
- * <p>Paragraph</p>
- * <s>Strikethrough</s>
- * <del>Deleted</del>
- * <code>Code</code>
- * <pre>Block code</pre>
- * <ul><li>List Item</li></ul>
- */
-public class C {
-}
diff --git a/test/data/format/javadocHtml.md b/test/data/format/javadocHtml.md
deleted file mode 100644
index db71cc3b3..000000000
--- a/test/data/format/javadocHtml.md
+++ /dev/null
@@ -1,27 +0,0 @@
-[test](test/index) / [C](test/-c/index)
-
-
-# C
-
-`open class C`
-
-**Bold** **Strong** *Italic* *Emphasized*
-Paragraph
-
- ~~Strikethrough~~ ~~Deleted~~ `Code`
-```
-Block code
-```
-
- * List Item
-
-
-
-
-
-
-### Constructors
-
-
-| [&lt;init&gt;](test/-c/-init-) | `C()` |
-
diff --git a/test/data/format/javadocOrderedList.java b/test/data/format/javadocOrderedList.java
deleted file mode 100644
index c32d9032a..000000000
--- a/test/data/format/javadocOrderedList.java
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * <ol>
- * <li>Rinse</li>
- * <li>Repeat</li>
- * </ol>
- */
-public class Bar {
-}
diff --git a/test/data/format/javadocOrderedList.md b/test/data/format/javadocOrderedList.md
deleted file mode 100644
index 02a3c095c..000000000
--- a/test/data/format/javadocOrderedList.md
+++ /dev/null
@@ -1,20 +0,0 @@
-[test](test/index) / [Bar](test/-bar/index)
-
-
-# Bar
-
-`open class Bar`
-
- 1. Rinse
- 1. Repeat
-
-
-
-
-
-
-### Constructors
-
-
-| [&lt;init&gt;](test/-bar/-init-) | `Bar()` |
-
diff --git a/test/data/format/linkWithLabel.html b/test/data/format/linkWithLabel.html
deleted file mode 100644
index 75769ffdc..000000000
--- a/test/data/format/linkWithLabel.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / Bar</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/-bar/index">Bar</a><br/>
-<br/>
-<h1>Bar</h1>
-<code><span class="keyword">class </span><span class="identifier">Bar</span></code><br/>
-<p>Use <a href="test/-bar/foo">this method</a> for best results.</p>
-<br/>
-<br/>
-<h3>Constructors</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-bar/-init-">&lt;init&gt;</a></td>
-<td>
-<code><span class="identifier">Bar</span><span class="symbol">(</span><span class="symbol">)</span></code><p>Use <a href="test/-bar/foo">this method</a> for best results.</p>
-</td>
-</tr>
-</tbody>
-</table>
-<h3>Functions</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-bar/foo">foo</a></td>
-<td>
-<code><span class="keyword">fun </span><span class="identifier">foo</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code></td>
-</tr>
-</tbody>
-</table>
-</BODY>
-</HTML>
diff --git a/test/data/format/linkWithLabel.kt b/test/data/format/linkWithLabel.kt
deleted file mode 100644
index 4a85c505e..000000000
--- a/test/data/format/linkWithLabel.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Use [this method][Bar.foo] for best results.
- */
-class Bar {
- fun foo() {}
-}
diff --git a/test/data/format/nullability.kt b/test/data/format/nullability.kt
deleted file mode 100644
index d1d4545bf..000000000
--- a/test/data/format/nullability.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-class C<T> {
- fun foo(): Comparable<T>? {
- return null
- }
-}
diff --git a/test/data/format/nullability.md b/test/data/format/nullability.md
deleted file mode 100644
index ee50a0a50..000000000
--- a/test/data/format/nullability.md
+++ /dev/null
@@ -1,20 +0,0 @@
-[test](test/index) / [C](test/-c/index)
-
-
-# C
-
-`class C&lt;T&gt;`
-
-
-
-### Constructors
-
-
-| [&lt;init&gt;](test/-c/-init-) | `C()` |
-
-
-### Functions
-
-
-| [foo](test/-c/foo) | `fun foo(): Comparable&lt;T&gt;?` |
-
diff --git a/test/data/format/operatorOverloading.kt b/test/data/format/operatorOverloading.kt
deleted file mode 100644
index 6fe78e45f..000000000
--- a/test/data/format/operatorOverloading.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-class C {
- fun plus(other: C): C
-}
diff --git a/test/data/format/operatorOverloading.md b/test/data/format/operatorOverloading.md
deleted file mode 100644
index 05fe3206a..000000000
--- a/test/data/format/operatorOverloading.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[test](test/index) / [C](test/-c/index) / [plus](test/-c/plus)
-
-
-# plus
-
-`fun plus(other:&nbsp;[C](test/-c/index)): [C](test/-c/index)`
-
-
diff --git a/test/data/format/orderedList.html b/test/data/format/orderedList.html
deleted file mode 100644
index 9917568f5..000000000
--- a/test/data/format/orderedList.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / Bar</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/-bar/index">Bar</a><br/>
-<br/>
-<h1>Bar</h1>
-<code><span class="keyword">class </span><span class="identifier">Bar</span></code><br/>
-<p>Usage instructions:</p>
-<ol><li><p>Rinse</p>
-</li><li><p>Repeat</p>
-</li></ol><br/>
-<br/>
-<br/>
-<br/>
-<h3>Constructors</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-bar/-init-">&lt;init&gt;</a></td>
-<td>
-<code><span class="identifier">Bar</span><span class="symbol">(</span><span class="symbol">)</span></code><p>Usage instructions:</p>
-</td>
-</tr>
-</tbody>
-</table>
-</BODY>
-</HTML>
diff --git a/test/data/format/orderedList.kt b/test/data/format/orderedList.kt
deleted file mode 100644
index 03681c7a3..000000000
--- a/test/data/format/orderedList.kt
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Usage instructions:
- *
- * 1. Rinse
- * 1. Repeat
- */
-class Bar {
-}
diff --git a/test/data/format/overloads.html b/test/data/format/overloads.html
deleted file mode 100644
index 752f3989a..000000000
--- a/test/data/format/overloads.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / root package</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a><br/>
-<br/>
-<h2>Package </h2>
-<h3>Functions</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/f">f</a></td>
-<td>
-<code><span class="keyword">fun </span><span class="identifier">f</span><span class="symbol">(</span><span class="identifier">x</span><span class="symbol">:</span>&nbsp;<span class="identifier">Int</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<code><span class="keyword">fun </span><span class="identifier">f</span><span class="symbol">(</span><span class="identifier">x</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><p>Performs an action on x.</p>
-</td>
-</tr>
-</tbody>
-</table>
-</BODY>
-</HTML>
diff --git a/test/data/format/overloads.kt b/test/data/format/overloads.kt
deleted file mode 100644
index dcd2d097f..000000000
--- a/test/data/format/overloads.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-/** Performs an action on x. */
-fun f(x: Int) { }
-
-/** Performs an action on x. */
-fun f(x: String) { }
diff --git a/test/data/format/overloadsWithDescription.html b/test/data/format/overloadsWithDescription.html
deleted file mode 100644
index a0efb472e..000000000
--- a/test/data/format/overloadsWithDescription.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / f</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/f">f</a><br/>
-<br/>
-<h1>f</h1>
-<code><span class="keyword">fun </span><span class="identifier">f</span><span class="symbol">(</span><span class="identifier">x</span><span class="symbol">:</span>&nbsp;<span class="identifier">Int</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<code><span class="keyword">fun </span><span class="identifier">f</span><span class="symbol">(</span><span class="identifier">x</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<p>Performs an action on <a href="test/f#x">x</a>.</p>
-<p>This is a long description.</p>
-<br/>
-<br/>
-<h3>Parameters</h3>
-<a name="x"></a>
-<code>x</code> - the value to perform the action on.<br/>
-<br/>
-<br/>
-</BODY>
-</HTML>
diff --git a/test/data/format/overloadsWithDescription.kt b/test/data/format/overloadsWithDescription.kt
deleted file mode 100644
index 740e642f9..000000000
--- a/test/data/format/overloadsWithDescription.kt
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Performs an action on [x].
- *
- * This is a long description.
- * @param x the value to perform the action on.
- */
-fun f(x: Int) { }
-
-/**
- * Performs an action on [x].
- *
- * This is a long description.
- * @param x the value to perform the action on.
- */
-fun f(x: String) { }
diff --git a/test/data/format/overloadsWithDifferentDescriptions.html b/test/data/format/overloadsWithDifferentDescriptions.html
deleted file mode 100644
index 30a37e758..000000000
--- a/test/data/format/overloadsWithDifferentDescriptions.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / f</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/f">f</a><br/>
-<br/>
-<h1>f</h1>
-<code><span class="keyword">fun </span><span class="identifier">f</span><span class="symbol">(</span><span class="identifier">x</span><span class="symbol">:</span>&nbsp;<span class="identifier">Int</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<p>Performs an action on x.</p>
-<p>This is a long description.</p>
-<br/>
-<br/>
-<h3>Parameters</h3>
-<a name="x"></a>
-<code>x</code> - the int value to perform the action on.<br/>
-<br/>
-<br/>
-<code><span class="keyword">fun </span><span class="identifier">f</span><span class="symbol">(</span><span class="identifier">x</span><span class="symbol">:</span>&nbsp;<span class="identifier">String</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<p>Performs an action on x.</p>
-<p>This is a long description.</p>
-<br/>
-<br/>
-<h3>Parameters</h3>
-<a name="x"></a>
-<code>x</code> - the string value to perform the action on.<br/>
-<br/>
-<br/>
-</BODY>
-</HTML>
diff --git a/test/data/format/overloadsWithDifferentDescriptions.kt b/test/data/format/overloadsWithDifferentDescriptions.kt
deleted file mode 100644
index ad3169b0c..000000000
--- a/test/data/format/overloadsWithDifferentDescriptions.kt
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Performs an action on x.
- *
- * This is a long description.
- * @param x the int value to perform the action on.
- */
-fun f(x: Int) { }
-
-/**
- * Performs an action on x.
- *
- * This is a long description.
- * @param x the string value to perform the action on.
- */
-fun f(x: String) { }
diff --git a/test/data/format/overridingFunction.kt b/test/data/format/overridingFunction.kt
deleted file mode 100644
index d7329489a..000000000
--- a/test/data/format/overridingFunction.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-open class C() {
- open fun f() {}
-}
-
-class D(): C() {
- override fun f() {}
-}
diff --git a/test/data/format/overridingFunction.md b/test/data/format/overridingFunction.md
deleted file mode 100644
index 2c898b9cf..000000000
--- a/test/data/format/overridingFunction.md
+++ /dev/null
@@ -1,9 +0,0 @@
-[test](test/index) / [D](test/-d/index) / [f](test/-d/f)
-
-
-# f
-
-`fun f(): Unit`
-Overrides [C.f](test/-c/f)
-
-
diff --git a/test/data/format/paramTag.kt b/test/data/format/paramTag.kt
deleted file mode 100644
index 47e471f53..000000000
--- a/test/data/format/paramTag.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * @param x A string
- * @param y A number with a really long description that spans multiple lines and goes
- * on and on and is very interesting to read
- */
-fun f(x: String, y: Int) {}
diff --git a/test/data/format/paramTag.md b/test/data/format/paramTag.md
deleted file mode 100644
index 882083fe8..000000000
--- a/test/data/format/paramTag.md
+++ /dev/null
@@ -1,14 +0,0 @@
-[test](test/index) / [f](test/f)
-
-
-# f
-
-`fun f(x:&nbsp;String, y:&nbsp;Int): Unit`
-
-### Parameters
-
-`x` - A string
-`y` - A number with a really long description that spans multiple lines and goes
-on and on and is very interesting to read
-
-
diff --git a/test/data/format/parameterAnchor.html b/test/data/format/parameterAnchor.html
deleted file mode 100644
index c5920fb7e..000000000
--- a/test/data/format/parameterAnchor.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / processFiles</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/process-files">processFiles</a><br/>
-<br/>
-<h1>processFiles</h1>
-<code><span class="keyword">fun </span><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span> <span class="identifier">processFiles</span><span class="symbol">(</span><span class="identifier">processor</span><span class="symbol">:</span>&nbsp;<span class="symbol">(</span><span class="symbol">)</span>&nbsp;<span class="symbol">-&gt;</span>&nbsp;<span class="identifier">T</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">List</span><span class="symbol">&lt;</span><span class="identifier">T</span><span class="symbol">&gt;</span></code><br/>
-<p>Runs <a href="test/process-files#processor">processor</a> for each file and collects its results into single list</p>
-<h3>Parameters</h3>
-<a name="processor"></a>
-<code>processor</code> - function to receive context for symbol resolution and file for processing<br/>
-<br/>
-<br/>
-</BODY>
-</HTML>
diff --git a/test/data/format/parameterAnchor.kt b/test/data/format/parameterAnchor.kt
deleted file mode 100644
index ae36ee4c9..000000000
--- a/test/data/format/parameterAnchor.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Runs [processor] for each file and collects its results into single list
- * @param processor function to receive context for symbol resolution and file for processing
- */
-public fun processFiles<T>(processor: () -> T): List<T> {
-}
diff --git a/test/data/format/parenthesis.html b/test/data/format/parenthesis.html
deleted file mode 100644
index c36b311bd..000000000
--- a/test/data/format/parenthesis.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / foo</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/foo">foo</a><br/>
-<br/>
-<h1>foo</h1>
-<code><span class="keyword">fun </span><span class="identifier">foo</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<p>foo (bar)</p>
-<br/>
-<br/>
-</BODY>
-</HTML>
diff --git a/test/data/format/parenthesis.kt b/test/data/format/parenthesis.kt
deleted file mode 100644
index b906f64a9..000000000
--- a/test/data/format/parenthesis.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * foo (bar)
- */
-fun foo() {}
diff --git a/test/data/format/propertyVar.kt b/test/data/format/propertyVar.kt
deleted file mode 100644
index 88be1a7ae..000000000
--- a/test/data/format/propertyVar.kt
+++ /dev/null
@@ -1 +0,0 @@
-var x = 1 \ No newline at end of file
diff --git a/test/data/format/propertyVar.md b/test/data/format/propertyVar.md
deleted file mode 100644
index f2110992e..000000000
--- a/test/data/format/propertyVar.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[test](test/index) / [x](test/x)
-
-
-# x
-
-`var x: Int`
-
-
diff --git a/test/data/format/reifiedTypeParameter.kt b/test/data/format/reifiedTypeParameter.kt
deleted file mode 100644
index 00fa1dc92..000000000
--- a/test/data/format/reifiedTypeParameter.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-inline fun f<reified T>() {
-
-}
diff --git a/test/data/format/reifiedTypeParameter.md b/test/data/format/reifiedTypeParameter.md
deleted file mode 100644
index 2e96018e0..000000000
--- a/test/data/format/reifiedTypeParameter.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[test](test/index) / [f](test/f)
-
-
-# f
-
-`inline fun &lt;reified&nbsp;T&gt; f(): Unit`
-
-
diff --git a/test/data/format/see.html b/test/data/format/see.html
deleted file mode 100644
index b3ffb74b0..000000000
--- a/test/data/format/see.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<HTML>
-<HEAD>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/quux">quux</a><br/>
-<br/>
-<h1>quux</h1>
-<code><span class="keyword">fun </span><span class="identifier">quux</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<strong>See Also</strong><br/>
-<p><a href="test/foo">foo</a></p>
-<p><a href="test/bar">bar</a></p>
-<br/>
-<br/>
-<br/>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/foo">foo</a><br/>
-<br/>
-<h1>foo</h1>
-<code><span class="keyword">fun </span><span class="identifier">foo</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<br/>
-<br/>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/bar">bar</a><br/>
-<br/>
-<h1>bar</h1>
-<code><span class="keyword">fun </span><span class="identifier">bar</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<br/>
-<br/>
-</BODY>
-</HTML>
diff --git a/test/data/format/see.kt b/test/data/format/see.kt
deleted file mode 100644
index a0b153b02..000000000
--- a/test/data/format/see.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * @see foo
- * @see bar
- */
-fun quux() {
-}
-
-fun foo() {
-}
-
-fun bar() {
-} \ No newline at end of file
diff --git a/test/data/format/starProjection.kt b/test/data/format/starProjection.kt
deleted file mode 100644
index 48d53e47d..000000000
--- a/test/data/format/starProjection.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-public fun Iterable<*>.containsFoo(element: Any?): Boolean {
- return false
-}
diff --git a/test/data/format/starProjection.md b/test/data/format/starProjection.md
deleted file mode 100644
index c9be2f584..000000000
--- a/test/data/format/starProjection.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[test](test/index) / [kotlin.Iterable](test/kotlin.-iterable/index)
-
-
-### Extensions for kotlin.Iterable
-
-
-| [containsFoo](test/kotlin.-iterable/contains-foo) | `fun Iterable&lt;*&gt;.containsFoo(element:&nbsp;Any?): Boolean` |
-
diff --git a/test/data/format/summarizeSignatures.kt b/test/data/format/summarizeSignatures.kt
deleted file mode 100644
index 1d875a501..000000000
--- a/test/data/format/summarizeSignatures.kt
+++ /dev/null
@@ -1,20 +0,0 @@
-package kotlin
-
-class Array<T>
-class IntArray
-class CharArray
-
-/**
- * Returns true if foo.
- */
-fun IntArray.foo(predicate: (Int) -> Boolean): Boolean = false
-
-/**
- * Returns true if foo.
- */
-fun CharArray.foo(predicate: (Char) -> Boolean): Boolean = false
-
-/**
- * Returns true if foo.
- */
-fun <T> Array<T>.foo(predicate: (T) -> Boolean): Boolean = false
diff --git a/test/data/format/summarizeSignatures.md b/test/data/format/summarizeSignatures.md
deleted file mode 100644
index b1707f403..000000000
--- a/test/data/format/summarizeSignatures.md
+++ /dev/null
@@ -1,23 +0,0 @@
-[test](test/index) / [kotlin](test/kotlin/index)
-
-
-## Package kotlin
-
-
-### Types
-
-
-| [Array](test/kotlin/-array/index) | `class Array&lt;T&gt;` |
-| [CharArray](test/kotlin/-char-array/index) | `class CharArray` |
-| [IntArray](test/kotlin/-int-array/index) | `class IntArray` |
-
-
-### Functions
-
-
-| [foo](test/kotlin/foo) | `fun &lt;T&gt; any_array&lt;T&gt;.foo(predicate:&nbsp;(T)&nbsp;-&gt;&nbsp;Boolean): Boolean`
-
-Returns true if foo.
-
- |
-
diff --git a/test/data/format/summarizeSignaturesProperty.kt b/test/data/format/summarizeSignaturesProperty.kt
deleted file mode 100644
index fbbdd3288..000000000
--- a/test/data/format/summarizeSignaturesProperty.kt
+++ /dev/null
@@ -1,20 +0,0 @@
-package kotlin
-
-class Array<T>
-class IntArray
-class CharArray
-
-/**
- * Returns true if foo.
- */
-val IntArray.foo: Int = 0
-
-/**
- * Returns true if foo.
- */
-val CharArray.foo: Int = 0
-
-/**
- * Returns true if foo.
- */
-val <T> Array<T>.foo: Int = 0
diff --git a/test/data/format/summarizeSignaturesProperty.md b/test/data/format/summarizeSignaturesProperty.md
deleted file mode 100644
index 9646b0f18..000000000
--- a/test/data/format/summarizeSignaturesProperty.md
+++ /dev/null
@@ -1,23 +0,0 @@
-[test](test/index) / [kotlin](test/kotlin/index)
-
-
-## Package kotlin
-
-
-### Types
-
-
-| [Array](test/kotlin/-array/index) | `class Array&lt;T&gt;` |
-| [CharArray](test/kotlin/-char-array/index) | `class CharArray` |
-| [IntArray](test/kotlin/-int-array/index) | `class IntArray` |
-
-
-### Properties
-
-
-| [foo](test/kotlin/foo) | `val &lt;T&gt; any_array&lt;T&gt;.foo: Int`
-
-Returns true if foo.
-
- |
-
diff --git a/test/data/format/throwsTag.kt b/test/data/format/throwsTag.kt
deleted file mode 100644
index 29a9c3f7a..000000000
--- a/test/data/format/throwsTag.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * @throws IllegalArgumentException on Mondays
- * @exception NullPointerException on Tuesdays
- */
-fun f() {}
diff --git a/test/data/format/throwsTag.md b/test/data/format/throwsTag.md
deleted file mode 100644
index d0a4e610d..000000000
--- a/test/data/format/throwsTag.md
+++ /dev/null
@@ -1,13 +0,0 @@
-[test](test/index) / [f](test/f)
-
-
-# f
-
-`fun f(): Unit`
-
-### Exceptions
-
-`IllegalArgumentException` - on Mondays
-`NullPointerException` - on Tuesdays
-
-
diff --git a/test/data/format/tripleBackticks.html b/test/data/format/tripleBackticks.html
deleted file mode 100644
index 13954985a..000000000
--- a/test/data/format/tripleBackticks.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / f</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/f">f</a><br/>
-<br/>
-<h1>f</h1>
-<code><span class="keyword">fun </span><span class="identifier">f</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code><br/>
-<p>Description</p>
-<pre><code>code sample</code></pre><br/>
-<br/>
-<br/>
-<br/>
-</BODY>
-</HTML>
diff --git a/test/data/format/tripleBackticks.kt b/test/data/format/tripleBackticks.kt
deleted file mode 100644
index 54dfa6d51..000000000
--- a/test/data/format/tripleBackticks.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Description
- * ```
- * code sample
- * ```
- */
-fun f() {}
diff --git a/test/data/format/typeLink.html b/test/data/format/typeLink.html
deleted file mode 100644
index ff99090a2..000000000
--- a/test/data/format/typeLink.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<HTML>
-<HEAD>
-<title>test / Bar</title>
-</HEAD>
-<BODY>
-<a href="test/index">test</a>&nbsp;/&nbsp;<a href="test/-bar/index">Bar</a><br/>
-<br/>
-<h1>Bar</h1>
-<code><span class="keyword">class </span><span class="identifier">Bar</span>&nbsp;<span class="symbol">:</span>&nbsp;<a href="test/-foo/index"><span class="identifier">Foo</span></a></code><br/>
-<br/>
-<br/>
-<h3>Constructors</h3>
-<table>
-<tbody>
-<tr>
-<td>
-<a href="test/-bar/-init-">&lt;init&gt;</a></td>
-<td>
-<code><span class="identifier">Bar</span><span class="symbol">(</span><span class="symbol">)</span></code></td>
-</tr>
-</tbody>
-</table>
-</BODY>
-</HTML>
diff --git a/test/data/format/typeLink.kt b/test/data/format/typeLink.kt
deleted file mode 100644
index 966e020e6..000000000
--- a/test/data/format/typeLink.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-class Foo() {
-}
-
-class Bar(): Foo {
-}
diff --git a/test/data/format/typeParameterBounds.kt b/test/data/format/typeParameterBounds.kt
deleted file mode 100644
index 5f22f8c53..000000000
--- a/test/data/format/typeParameterBounds.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-
-/**
- * generic function
- */
-public fun <T : R, R> generic() {
-} \ No newline at end of file
diff --git a/test/data/format/typeParameterBounds.md b/test/data/format/typeParameterBounds.md
deleted file mode 100644
index fe5978782..000000000
--- a/test/data/format/typeParameterBounds.md
+++ /dev/null
@@ -1,11 +0,0 @@
-[test](test/index) / [generic](test/generic)
-
-
-# generic
-
-`fun &lt;T&nbsp;:&nbsp;R, R&gt; generic(): Unit`
-
-generic function
-
-
-
diff --git a/test/data/format/typeParameterVariance.kt b/test/data/format/typeParameterVariance.kt
deleted file mode 100644
index 28b29f4b0..000000000
--- a/test/data/format/typeParameterVariance.kt
+++ /dev/null
@@ -1,2 +0,0 @@
-class Foo<out T> {
-}
diff --git a/test/data/format/typeParameterVariance.md b/test/data/format/typeParameterVariance.md
deleted file mode 100644
index c0bfa6de8..000000000
--- a/test/data/format/typeParameterVariance.md
+++ /dev/null
@@ -1,14 +0,0 @@
-[test](test/index) / [Foo](test/-foo/index)
-
-
-# Foo
-
-`class Foo&lt;out&nbsp;T&gt;`
-
-
-
-### Constructors
-
-
-| [&lt;init&gt;](test/-foo/-init-) | `Foo()` |
-
diff --git a/test/data/format/typeProjectionVariance.kt b/test/data/format/typeProjectionVariance.kt
deleted file mode 100644
index 85ee344d0..000000000
--- a/test/data/format/typeProjectionVariance.kt
+++ /dev/null
@@ -1 +0,0 @@
-fun <T> Array<out T>.foo() {}
diff --git a/test/data/format/typeProjectionVariance.md b/test/data/format/typeProjectionVariance.md
deleted file mode 100644
index 7aa34593b..000000000
--- a/test/data/format/typeProjectionVariance.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[test](test/index) / [kotlin.Array](test/kotlin.-array/index)
-
-
-### Extensions for kotlin.Array
-
-
-| [foo](test/kotlin.-array/foo) | `fun &lt;T&gt; Array&lt;out&nbsp;T&gt;.foo(): Unit` |
-
diff --git a/test/data/format/varargsFunction.kt b/test/data/format/varargsFunction.kt
deleted file mode 100644
index deea127b1..000000000
--- a/test/data/format/varargsFunction.kt
+++ /dev/null
@@ -1 +0,0 @@
-fun f(vararg s: String) {}
diff --git a/test/data/format/varargsFunction.md b/test/data/format/varargsFunction.md
deleted file mode 100644
index 723437aa2..000000000
--- a/test/data/format/varargsFunction.md
+++ /dev/null
@@ -1,8 +0,0 @@
-[test](test/index) / [f](test/f)
-
-
-# f
-
-`fun f(vararg s:&nbsp;String): Unit`
-
-
diff --git a/test/data/functions/annotatedFunction.kt b/test/data/functions/annotatedFunction.kt
deleted file mode 100644
index f7abbf6c3..000000000
--- a/test/data/functions/annotatedFunction.kt
+++ /dev/null
@@ -1,2 +0,0 @@
-@Strictfp fun f() {
-}
diff --git a/test/data/functions/annotatedFunctionWithAnnotationParameters.kt b/test/data/functions/annotatedFunctionWithAnnotationParameters.kt
deleted file mode 100644
index e559713ab..000000000
--- a/test/data/functions/annotatedFunctionWithAnnotationParameters.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-@Target(AnnotationTarget.VALUE_PARAMETER)
-@Retention(AnnotationRetention.SOURCE)
-@MustBeDocumented
-public annotation class Fancy(val size: Int)
-
-
-@Fancy(1) fun f() {}
diff --git a/test/data/functions/function.kt b/test/data/functions/function.kt
deleted file mode 100644
index 3ed81dfa5..000000000
--- a/test/data/functions/function.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * Function fn
- */
-fun fn() {
-} \ No newline at end of file
diff --git a/test/data/functions/functionWithAnnotatedParam.kt b/test/data/functions/functionWithAnnotatedParam.kt
deleted file mode 100644
index f858e671f..000000000
--- a/test/data/functions/functionWithAnnotatedParam.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-@Target(AnnotationTarget.VALUE_PARAMETER)
-@Retention(AnnotationRetention.SOURCE)
-@MustBeDocumented
-public annotation class Fancy
-
-fun function(@Fancy notInlined: () -> Unit) {
-}
diff --git a/test/data/functions/functionWithDefaultParameter.kt b/test/data/functions/functionWithDefaultParameter.kt
deleted file mode 100644
index 3a3a102fb..000000000
--- a/test/data/functions/functionWithDefaultParameter.kt
+++ /dev/null
@@ -1 +0,0 @@
-fun f(x: String = "") {}
diff --git a/test/data/functions/functionWithNoinlineParam.kt b/test/data/functions/functionWithNoinlineParam.kt
deleted file mode 100644
index 640bec837..000000000
--- a/test/data/functions/functionWithNoinlineParam.kt
+++ /dev/null
@@ -1,2 +0,0 @@
-fun function(noinline notInlined: () -> Unit) {
-}
diff --git a/test/data/functions/functionWithNotDocumentedAnnotation.kt b/test/data/functions/functionWithNotDocumentedAnnotation.kt
deleted file mode 100644
index 3c7e2ff9b..000000000
--- a/test/data/functions/functionWithNotDocumentedAnnotation.kt
+++ /dev/null
@@ -1,2 +0,0 @@
-@Suppress("FOO") fun f() {
-}
diff --git a/test/data/functions/functionWithParams.kt b/test/data/functions/functionWithParams.kt
deleted file mode 100644
index 85c493689..000000000
--- a/test/data/functions/functionWithParams.kt
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Multiline
- *
- * Function
- * Documentation
- */
-fun function(/** parameter */ x: Int) {
-} \ No newline at end of file
diff --git a/test/data/functions/functionWithReceiver.kt b/test/data/functions/functionWithReceiver.kt
deleted file mode 100644
index c84732515..000000000
--- a/test/data/functions/functionWithReceiver.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * Function with receiver
- */
-fun String.fn() {
-}
-
-/**
- * Function with receiver
- */
-fun String.fn(x: Int) {
-}
diff --git a/test/data/functions/genericFunction.kt b/test/data/functions/genericFunction.kt
deleted file mode 100644
index 05a650707..000000000
--- a/test/data/functions/genericFunction.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-
-/**
- * generic function
- */
-private fun <T> generic() {} \ No newline at end of file
diff --git a/test/data/functions/genericFunctionWithConstraints.kt b/test/data/functions/genericFunctionWithConstraints.kt
deleted file mode 100644
index 5f22f8c53..000000000
--- a/test/data/functions/genericFunctionWithConstraints.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-
-/**
- * generic function
- */
-public fun <T : R, R> generic() {
-} \ No newline at end of file
diff --git a/test/data/functions/inlineFunction.kt b/test/data/functions/inlineFunction.kt
deleted file mode 100644
index 11c196721..000000000
--- a/test/data/functions/inlineFunction.kt
+++ /dev/null
@@ -1,2 +0,0 @@
-inline fun f() {
-}
diff --git a/test/data/java/annotatedAnnotation.java b/test/data/java/annotatedAnnotation.java
deleted file mode 100644
index 6296e4002..000000000
--- a/test/data/java/annotatedAnnotation.java
+++ /dev/null
@@ -1,6 +0,0 @@
-import java.lang.annotation.*;
-
-@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
-public @interface Attribute {
- String value() default "";
-}
diff --git a/test/data/java/arrayType.java b/test/data/java/arrayType.java
deleted file mode 100644
index dc42a2077..000000000
--- a/test/data/java/arrayType.java
+++ /dev/null
@@ -1,5 +0,0 @@
-class Test {
- public String[] arrayToString(int[] data) {
- return null;
- }
-}
diff --git a/test/data/java/constructors.java b/test/data/java/constructors.java
deleted file mode 100644
index 6f899d182..000000000
--- a/test/data/java/constructors.java
+++ /dev/null
@@ -1,5 +0,0 @@
-class Test {
- public Test() {}
-
- public Test(String s) {}
-}
diff --git a/test/data/java/deprecation.java b/test/data/java/deprecation.java
deleted file mode 100644
index be8decd6e..000000000
--- a/test/data/java/deprecation.java
+++ /dev/null
@@ -1,6 +0,0 @@
-class C {
- /**
- * @deprecated This should no longer be used
- */
- void fn() {}
-} \ No newline at end of file
diff --git a/test/data/java/enumValues.java b/test/data/java/enumValues.java
deleted file mode 100644
index d8dda934a..000000000
--- a/test/data/java/enumValues.java
+++ /dev/null
@@ -1,3 +0,0 @@
-enum E {
- Foo
-} \ No newline at end of file
diff --git a/test/data/java/field.java b/test/data/java/field.java
deleted file mode 100644
index d9ae75f90..000000000
--- a/test/data/java/field.java
+++ /dev/null
@@ -1,4 +0,0 @@
-class Test {
- public int i;
- public static final String s;
-}
diff --git a/test/data/java/inheritorLinks.java b/test/data/java/inheritorLinks.java
deleted file mode 100644
index 2378f5c6b..000000000
--- a/test/data/java/inheritorLinks.java
+++ /dev/null
@@ -1,7 +0,0 @@
-class C {
- public static class Foo {
- }
-
- public static class Bar extends Foo {
- }
-}
diff --git a/test/data/java/innerClass.java b/test/data/java/innerClass.java
deleted file mode 100644
index 0f1be9486..000000000
--- a/test/data/java/innerClass.java
+++ /dev/null
@@ -1,4 +0,0 @@
-class Test {
- public class D {
- }
-}
diff --git a/test/data/java/javaLangObject.java b/test/data/java/javaLangObject.java
deleted file mode 100644
index be3dd5708..000000000
--- a/test/data/java/javaLangObject.java
+++ /dev/null
@@ -1,3 +0,0 @@
-class Test {
- public Object fn() { return null; }
-}
diff --git a/test/data/java/member.java b/test/data/java/member.java
deleted file mode 100644
index d4f4b8d59..000000000
--- a/test/data/java/member.java
+++ /dev/null
@@ -1,11 +0,0 @@
-class Test {
- /**
- * Summary for Function
- * @param name is String parameter
- * @param value is int parameter
- * @author yole
- */
- public void fn(String name, int value) {
-
- }
-} \ No newline at end of file
diff --git a/test/data/java/memberWithModifiers.java b/test/data/java/memberWithModifiers.java
deleted file mode 100644
index ea645c218..000000000
--- a/test/data/java/memberWithModifiers.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public abstract class Test {
- /**
- * Summary for Function
- * @param name is String parameter
- * @param value is int parameter
- */
- protected final void fn(String name, int value) {
-
- }
-
- protected void openFn() {}
-} \ No newline at end of file
diff --git a/test/data/java/staticMethod.java b/test/data/java/staticMethod.java
deleted file mode 100644
index a2ecd7f11..000000000
--- a/test/data/java/staticMethod.java
+++ /dev/null
@@ -1,4 +0,0 @@
-class C {
- public static void foo() {
- }
-}
diff --git a/test/data/java/superClass.java b/test/data/java/superClass.java
deleted file mode 100644
index 31b5fa962..000000000
--- a/test/data/java/superClass.java
+++ /dev/null
@@ -1,2 +0,0 @@
-public class Foo extends Exception implements Cloneable {
-}
diff --git a/test/data/java/typeParameter.java b/test/data/java/typeParameter.java
deleted file mode 100644
index 5a24b30ac..000000000
--- a/test/data/java/typeParameter.java
+++ /dev/null
@@ -1,3 +0,0 @@
-class Foo<T extends Comparable<T>> {
- public <E> E foo();
-}
diff --git a/test/data/java/varargs.java b/test/data/java/varargs.java
deleted file mode 100644
index d184564e8..000000000
--- a/test/data/java/varargs.java
+++ /dev/null
@@ -1,3 +0,0 @@
-class Foo {
- public void bar(String... x);
-}
diff --git a/test/data/links/linkToJDK.kt b/test/data/links/linkToJDK.kt
deleted file mode 100644
index e69de29bb..000000000
--- a/test/data/links/linkToJDK.kt
+++ /dev/null
diff --git a/test/data/links/linkToMember.kt b/test/data/links/linkToMember.kt
deleted file mode 100644
index b60eaedbe..000000000
--- a/test/data/links/linkToMember.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * This is link to [member]
- */
-class Foo {
- fun member() {}
-} \ No newline at end of file
diff --git a/test/data/links/linkToParam.kt b/test/data/links/linkToParam.kt
deleted file mode 100644
index ca42a7428..000000000
--- a/test/data/links/linkToParam.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * This is link to [param]
- */
-fun Foo(param: String) {
-} \ No newline at end of file
diff --git a/test/data/links/linkToQualifiedMember.kt b/test/data/links/linkToQualifiedMember.kt
deleted file mode 100644
index 22c154fe8..000000000
--- a/test/data/links/linkToQualifiedMember.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * This is link to [Foo.member]
- */
-class Foo {
- fun member() {}
-} \ No newline at end of file
diff --git a/test/data/links/linkToSelf.kt b/test/data/links/linkToSelf.kt
deleted file mode 100644
index 74395f0ff..000000000
--- a/test/data/links/linkToSelf.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * This is link to [Foo]
- */
-class Foo {
-
-} \ No newline at end of file
diff --git a/test/data/markdown/spec.txt b/test/data/markdown/spec.txt
deleted file mode 100644
index fce879240..000000000
--- a/test/data/markdown/spec.txt
+++ /dev/null
@@ -1,6150 +0,0 @@
----
-title: CommonMark Spec
-author:
-- John MacFarlane
-version: 2
-date: 2014-09-19
-...
-
-# Introduction
-
-## What is Markdown?
-
-Markdown is a plain text format for writing structured documents,
-based on conventions used for indicating formatting in email and
-usenet posts. It was developed in 2004 by John Gruber, who wrote
-the first Markdown-to-HTML converter in perl, and it soon became
-widely used in websites. By 2014 there were dozens of
-implementations in many languages. Some of them extended basic
-Markdown syntax with conventions for footnotes, definition lists,
-tables, and other constructs, and some allowed output not just in
-HTML but in LaTeX and many other formats.
-
-## Why is a spec needed?
-
-John Gruber's [canonical description of Markdown's
-syntax](http://daringfireball.net/projects/markdown/syntax)
-does not specify the syntax unambiguously. Here are some examples of
-questions it does not answer:
-
-1. How much indentation is needed for a sublist? The spec says that
- continuation paragraphs need to be indented four spaces, but is
- not fully explicit about sublists. It is natural to think that
- they, too, must be indented four spaces, but `Markdown.pl` does
- not require that. This is hardly a "corner case," and divergences
- between implementations on this issue often lead to surprises for
- users in real documents. (See [this comment by John
- Gruber](http://article.gmane.org/gmane.text.markdown.general/1997).)
-
-2. Is a blank line needed before a block quote or header?
- Most implementations do not require the blank line. However,
- this can lead to unexpected results in hard-wrapped text, and
- also to ambiguities in parsing (note that some implementations
- put the header inside the blockquote, while others do not).
- (John Gruber has also spoken [in favor of requiring the blank
- lines](http://article.gmane.org/gmane.text.markdown.general/2146).)
-
-3. Is a blank line needed before an indented code block?
- (`Markdown.pl` requires it, but this is not mentioned in the
- documentation, and some implementations do not require it.)
-
- ``` markdown
- paragraph
- code?
- ```
-
-4. What is the exact rule for determining when list items get
- wrapped in `<p>` tags? Can a list be partially "loose" and partially
- "tight"? What should we do with a list like this?
-
- ``` markdown
- 1. one
-
- 2. two
- 3. three
- ```
-
- Or this?
-
- ``` markdown
- 1. one
- - a
-
- - b
- 2. two
- ```
-
- (There are some relevant comments by John Gruber
- [here](http://article.gmane.org/gmane.text.markdown.general/2554).)
-
-5. Can list markers be indented? Can ordered list markers be right-aligned?
-
- ``` markdown
- 8. item 1
- 9. item 2
- 10. item 2a
- ```
-
-6. Is this one list with a horizontal rule in its second item,
- or two lists separated by a horizontal rule?
-
- ``` markdown
- * a
- * * * * *
- * b
- ```
-
-7. When list markers change from numbers to bullets, do we have
- two lists or one? (The Markdown syntax description suggests two,
- but the perl scripts and many other implementations produce one.)
-
- ``` markdown
- 1. fee
- 2. fie
- - foe
- - fum
- ```
-
-8. What are the precedence rules for the markers of inline structure?
- For example, is the following a valid link, or does the code span
- take precedence ?
-
- ``` markdown
- [a backtick (`)](/url) and [another backtick (`)](/url).
- ```
-
-9. What are the precedence rules for markers of emphasis and strong
- emphasis? For example, how should the following be parsed?
-
- ``` markdown
- *foo *bar* baz*
- ```
-
-10. What are the precedence rules between block-level and inline-level
- structure? For example, how should the following be parsed?
-
- ``` markdown
- - `a long code span can contain a hyphen like this
- - and it can screw things up`
- ```
-
-11. Can list items include headers? (`Markdown.pl` does not allow this,
- but headers can occur in blockquotes.)
-
- ``` markdown
- - # Heading
- ```
-
-12. Can link references be defined inside block quotes or list items?
-
- ``` markdown
- > Blockquote [foo].
- >
- > [foo]: /url
- ```
-
-13. If there are multiple definitions for the same reference, which takes
- precedence?
-
- ``` markdown
- [foo]: /url1
- [foo]: /url2
-
- [foo][]
- ```
-
-In the absence of a spec, early implementers consulted `Markdown.pl`
-to resolve these ambiguities. But `Markdown.pl` was quite buggy, and
-gave manifestly bad results in many cases, so it was not a
-satisfactory replacement for a spec.
-
-Because there is no unambiguous spec, implementations have diverged
-considerably. As a result, users are often surprised to find that
-a document that renders one way on one system (say, a github wiki)
-renders differently on another (say, converting to docbook using
-pandoc). To make matters worse, because nothing in Markdown counts
-as a "syntax error," the divergence often isn't discovered right away.
-
-## About this document
-
-This document attempts to specify Markdown syntax unambiguously.
-It contains many examples with side-by-side Markdown and
-HTML. These are intended to double as conformance tests. An
-accompanying script `runtests.pl` can be used to run the tests
-against any Markdown program:
-
- perl runtests.pl spec.txt PROGRAM
-
-Since this document describes how Markdown is to be parsed into
-an abstract syntax tree, it would have made sense to use an abstract
-representation of the syntax tree instead of HTML. But HTML is capable
-of representing the structural distinctions we need to make, and the
-choice of HTML for the tests makes it possible to run the tests against
-an implementation without writing an abstract syntax tree renderer.
-
-This document is generated from a text file, `spec.txt`, written
-in Markdown with a small extension for the side-by-side tests.
-The script `spec2md.pl` can be used to turn `spec.txt` into pandoc
-Markdown, which can then be converted into other formats.
-
-In the examples, the `→` character is used to represent tabs.
-
-# Preprocessing
-
-A [line](#line) <a id="line"></a>
-is a sequence of zero or more characters followed by a line
-ending (CR, LF, or CRLF) or by the end of
-file.
-
-This spec does not specify an encoding; it thinks of lines as composed
-of characters rather than bytes. A conforming parser may be limited
-to a certain encoding.
-
-Tabs in lines are expanded to spaces, with a tab stop of 4 characters:
-
-.
-→foo→baz→→bim
-.
-<pre><code>foo baz bim
-</code></pre>
-.
-
-.
- a→a
- ὐ→a
-.
-<pre><code>a a
-ὐ a
-</code></pre>
-.
-
-Line endings are replaced by newline characters (LF).
-
-A line containing no characters, or a line containing only spaces (after
-tab expansion), is called a [blank line](#blank-line).
-<a id="blank-line"></a>
-
-# Blocks and inlines
-
-We can think of a document as a sequence of [blocks](#block)<a
-id="block"></a>---structural elements like paragraphs, block quotations,
-lists, headers, rules, and code blocks. Blocks can contain other
-blocks, or they can contain [inline](#inline)<a id="inline"></a> content:
-words, spaces, links, emphasized text, images, and inline code.
-
-## Precedence
-
-Indicators of block structure always take precedence over indicators
-of inline structure. So, for example, the following is a list with
-two items, not a list with one item containing a code span:
-
-.
-- `one
-- two`
-.
-<ul>
-<li>`one</li>
-<li>two`</li>
-</ul>
-.
-
-This means that parsing can proceed in two steps: first, the block
-structure of the document can be discerned; second, text lines inside
-paragraphs, headers, and other block constructs can be parsed for inline
-structure. The second step requires information about link reference
-definitions that will be available only at the end of the first
-step. Note that the first step requires processing lines in sequence,
-but the second can be parallelized, since the inline parsing of
-one block element does not affect the inline parsing of any other.
-
-## Container blocks and leaf blocks
-
-We can divide blocks into two types:
-[container blocks](#container-block), <a id="container-block"></a>
-which can contain other blocks, and [leaf blocks](#leaf-block),
-<a id="leaf-block"></a> which cannot.
-
-# Leaf blocks
-
-This section describes the different kinds of leaf block that make up a
-Markdown document.
-
-## Horizontal rules
-
-A line consisting of 0-3 spaces of indentation, followed by a sequence
-of three or more matching `-`, `_`, or `*` characters, each followed
-optionally by any number of spaces, forms a [horizontal
-rule](#horizontal-rule). <a id="horizontal-rule"></a>
-
-.
-***
----
-___
-.
-<hr />
-<hr />
-<hr />
-.
-
-Wrong characters:
-
-.
-+++
-.
-<p>+++</p>
-.
-
-.
-===
-.
-<p>===</p>
-.
-
-Not enough characters:
-
-.
---
-**
-__
-.
-<p>--
-**
-__</p>
-.
-
-One to three spaces indent are allowed:
-
-.
- ***
- ***
- ***
-.
-<hr />
-<hr />
-<hr />
-.
-
-Four spaces is too many:
-
-.
- ***
-.
-<pre><code>***
-</code></pre>
-.
-
-.
-Foo
- ***
-.
-<p>Foo
-***</p>
-.
-
-More than three characters may be used:
-
-.
-_____________________________________
-.
-<hr />
-.
-
-Spaces are allowed between the characters:
-
-.
- - - -
-.
-<hr />
-.
-
-.
- ** * ** * ** * **
-.
-<hr />
-.
-
-.
-- - - -
-.
-<hr />
-.
-
-Spaces are allowed at the end:
-
-.
-- - - -
-.
-<hr />
-.
-
-However, no other characters may occur at the end or the
-beginning:
-
-.
-_ _ _ _ a
-
-a------
-.
-<p>_ _ _ _ a</p>
-<p>a------</p>
-.
-
-It is required that all of the non-space characters be the same.
-So, this is not a horizontal rule:
-
-.
- *-*
-.
-<p><em>-</em></p>
-.
-
-Horizontal rules do not need blank lines before or after:
-
-.
-- foo
-***
-- bar
-.
-<ul>
-<li>foo</li>
-</ul>
-<hr />
-<ul>
-<li>bar</li>
-</ul>
-.
-
-Horizontal rules can interrupt a paragraph:
-
-.
-Foo
-***
-bar
-.
-<p>Foo</p>
-<hr />
-<p>bar</p>
-.
-
-Note, however, that this is a setext header, not a paragraph followed
-by a horizontal rule:
-
-.
-Foo
----
-bar
-.
-<h2>Foo</h2>
-<p>bar</p>
-.
-
-When both a horizontal rule and a list item are possible
-interpretations of a line, the horizontal rule is preferred:
-
-.
-* Foo
-* * *
-* Bar
-.
-<ul>
-<li>Foo</li>
-</ul>
-<hr />
-<ul>
-<li>Bar</li>
-</ul>
-.
-
-If you want a horizontal rule in a list item, use a different bullet:
-
-.
-- Foo
-- * * *
-.
-<ul>
-<li>Foo</li>
-<li><hr /></li>
-</ul>
-.
-
-## ATX headers
-
-An [ATX header](#atx-header) <a id="atx-header"></a>
-consists of a string of characters, parsed as inline content, between an
-opening sequence of 1--6 unescaped `#` characters and an optional
-closing sequence of any number of `#` characters. The opening sequence
-of `#` characters cannot be followed directly by a nonspace character.
-The closing `#` characters may be followed by spaces only. The opening
-`#` character may be indented 0-3 spaces. The raw contents of the
-header are stripped of leading and trailing spaces before being parsed
-as inline content. The header level is equal to the number of `#`
-characters in the opening sequence.
-
-Simple headers:
-
-.
-# foo
-## foo
-### foo
-#### foo
-##### foo
-###### foo
-.
-<h1>foo</h1>
-<h2>foo</h2>
-<h3>foo</h3>
-<h4>foo</h4>
-<h5>foo</h5>
-<h6>foo</h6>
-.
-
-More than six `#` characters is not a header:
-
-.
-####### foo
-.
-<p>####### foo</p>
-.
-
-A space is required between the `#` characters and the header's
-contents. Note that many implementations currently do not require
-the space. However, the space was required by the [original ATX
-implementation](http://www.aaronsw.com/2002/atx/atx.py), and it helps
-prevent things like the following from being parsed as headers:
-
-.
-#5 bolt
-.
-<p>#5 bolt</p>
-.
-
-This is not a header, because the first `#` is escaped:
-
-.
-\## foo
-.
-<p>## foo</p>
-.
-
-Contents are parsed as inlines:
-
-.
-# foo *bar* \*baz\*
-.
-<h1>foo <em>bar</em> *baz*</h1>
-.
-
-Leading and trailing blanks are ignored in parsing inline content:
-
-.
-# foo
-.
-<h1>foo</h1>
-.
-
-One to three spaces indentation are allowed:
-
-.
- ### foo
- ## foo
- # foo
-.
-<h3>foo</h3>
-<h2>foo</h2>
-<h1>foo</h1>
-.
-
-Four spaces are too much:
-
-.
- # foo
-.
-<pre><code># foo
-</code></pre>
-.
-
-.
-foo
- # bar
-.
-<p>foo
-# bar</p>
-.
-
-A closing sequence of `#` characters is optional:
-
-.
-## foo ##
- ### bar ###
-.
-<h2>foo</h2>
-<h3>bar</h3>
-.
-
-It need not be the same length as the opening sequence:
-
-.
-# foo ##################################
-##### foo ##
-.
-<h1>foo</h1>
-<h5>foo</h5>
-.
-
-Spaces are allowed after the closing sequence:
-
-.
-### foo ###
-.
-<h3>foo</h3>
-.
-
-A sequence of `#` characters with a nonspace character following it
-is not a closing sequence, but counts as part of the contents of the
-header:
-
-.
-### foo ### b
-.
-<h3>foo ### b</h3>
-.
-
-Backslash-escaped `#` characters do not count as part
-of the closing sequence:
-
-.
-### foo \###
-## foo \#\##
-# foo \#
-.
-<h3>foo #</h3>
-<h2>foo ##</h2>
-<h1>foo #</h1>
-.
-
-ATX headers need not be separated from surrounding content by blank
-lines, and they can interrupt paragraphs:
-
-.
-****
-## foo
-****
-.
-<hr />
-<h2>foo</h2>
-<hr />
-.
-
-.
-Foo bar
-# baz
-Bar foo
-.
-<p>Foo bar</p>
-<h1>baz</h1>
-<p>Bar foo</p>
-.
-
-ATX headers can be empty:
-
-.
-##
-#
-### ###
-.
-<h2></h2>
-<h1></h1>
-<h3></h3>
-.
-
-## Setext headers
-
-A [setext header](#setext-header) <a id="setext-header"></a>
-consists of a line of text, containing at least one nonspace character,
-with no more than 3 spaces indentation, followed by a [setext header
-underline](#setext-header-underline). A [setext header
-underline](#setext-header-underline) <a id="setext-header-underline"></a>
-is a sequence of `=` characters or a sequence of `-` characters, with no
-more than 3 spaces indentation and any number of trailing
-spaces. The header is a level 1 header if `=` characters are used, and
-a level 2 header if `-` characters are used. The contents of the header
-are the result of parsing the first line as Markdown inline content.
-
-In general, a setext header need not be preceded or followed by a
-blank line. However, it cannot interrupt a paragraph, so when a
-setext header comes after a paragraph, a blank line is needed between
-them.
-
-Simple examples:
-
-.
-Foo *bar*
-=========
-
-Foo *bar*
----------
-.
-<h1>Foo <em>bar</em></h1>
-<h2>Foo <em>bar</em></h2>
-.
-
-The underlining can be any length:
-
-.
-Foo
--------------------------
-
-Foo
-=
-.
-<h2>Foo</h2>
-<h1>Foo</h1>
-.
-
-The header content can be indented up to three spaces, and need
-not line up with the underlining:
-
-.
- Foo
----
-
- Foo
------
-
- Foo
- ===
-.
-<h2>Foo</h2>
-<h2>Foo</h2>
-<h1>Foo</h1>
-.
-
-Four spaces indent is too much:
-
-.
- Foo
- ---
-
- Foo
----
-.
-<pre><code>Foo
----
-
-Foo
-</code></pre>
-<hr />
-.
-
-The setext header underline can be indented up to three spaces, and
-may have trailing spaces:
-
-.
-Foo
- ----
-.
-<h2>Foo</h2>
-.
-
-Four spaces is too much:
-
-.
-Foo
- ---
-.
-<p>Foo
----</p>
-.
-
-The setext header underline cannot contain internal spaces:
-
-.
-Foo
-= =
-
-Foo
---- -
-.
-<p>Foo
-= =</p>
-<p>Foo</p>
-<hr />
-.
-
-Trailing spaces in the content line do not cause a line break:
-
-.
-Foo
------
-.
-<h2>Foo</h2>
-.
-
-Nor does a backslash at the end:
-
-.
-Foo\
-----
-.
-<h2>Foo\</h2>
-.
-
-Since indicators of block structure take precedence over
-indicators of inline structure, the following are setext headers:
-
-.
-`Foo
-----
-`
-
-<a title="a lot
----
-of dashes"/>
-.
-<h2>`Foo</h2>
-<p>`</p>
-<h2>&lt;a title=&quot;a lot</h2>
-<p>of dashes&quot;/&gt;</p>
-.
-
-The setext header underline cannot be a lazy line:
-
-.
-> Foo
----
-.
-<blockquote>
-<p>Foo</p>
-</blockquote>
-<hr />
-.
-
-A setext header cannot interrupt a paragraph:
-
-.
-Foo
-Bar
----
-
-Foo
-Bar
-===
-.
-<p>Foo
-Bar</p>
-<hr />
-<p>Foo
-Bar
-===</p>
-.
-
-But in general a blank line is not required before or after:
-
-.
----
-Foo
----
-Bar
----
-Baz
-.
-<hr />
-<h2>Foo</h2>
-<h2>Bar</h2>
-<p>Baz</p>
-.
-
-Setext headers cannot be empty:
-
-.
-
-====
-.
-<p>====</p>
-.
-
-
-## Indented code blocks
-
-An [indented code block](#indented-code-block)
-<a id="indented-code-block"></a> is composed of one or more
-[indented chunks](#indented-chunk) separated by blank lines.
-An [indented chunk](#indented-chunk) <a id="indented-chunk"></a>
-is a sequence of non-blank lines, each indented four or more
-spaces. An indented code block cannot interrupt a paragraph, so
-if it occurs before or after a paragraph, there must be an
-intervening blank line. The contents of the code block are
-the literal contents of the lines, including trailing newlines,
-minus four spaces of indentation. An indented code block has no
-attributes.
-
-.
- a simple
- indented code block
-.
-<pre><code>a simple
- indented code block
-</code></pre>
-.
-
-The contents are literal text, and do not get parsed as Markdown:
-
-.
- <a/>
- *hi*
-
- - one
-.
-<pre><code>&lt;a/&gt;
-*hi*
-
-- one
-</code></pre>
-.
-
-Here we have three chunks separated by blank lines:
-
-.
- chunk1
-
- chunk2
-
-
-
- chunk3
-.
-<pre><code>chunk1
-
-chunk2
-
-
-
-chunk3
-</code></pre>
-.
-
-Any initial spaces beyond four will be included in the content, even
-in interior blank lines:
-
-.
- chunk1
-
- chunk2
-.
-<pre><code>chunk1
-
- chunk2
-</code></pre>
-.
-
-An indented code block cannot interrupt a paragraph. (This
-allows hanging indents and the like.)
-
-.
-Foo
- bar
-
-.
-<p>Foo
-bar</p>
-.
-
-However, any non-blank line with fewer than four leading spaces ends
-the code block immediately. So a paragraph may occur immediately
-after indented code:
-
-.
- foo
-bar
-.
-<pre><code>foo
-</code></pre>
-<p>bar</p>
-.
-
-And indented code can occur immediately before and after other kinds of
-blocks:
-
-.
-# Header
- foo
-Header
-------
- foo
-----
-.
-<h1>Header</h1>
-<pre><code>foo
-</code></pre>
-<h2>Header</h2>
-<pre><code>foo
-</code></pre>
-<hr />
-.
-
-The first line can be indented more than four spaces:
-
-.
- foo
- bar
-.
-<pre><code> foo
-bar
-</code></pre>
-.
-
-Blank lines preceding or following an indented code block
-are not included in it:
-
-.
-
-
- foo
-
-
-.
-<pre><code>foo
-</code></pre>
-.
-
-Trailing spaces are included in the code block's content:
-
-.
- foo
-.
-<pre><code>foo
-</code></pre>
-.
-
-
-## Fenced code blocks
-
-A [code fence](#code-fence) <a id="code-fence"></a> is a sequence
-of at least three consecutive backtick characters (`` ` ``) or
-tildes (`~`). (Tildes and backticks cannot be mixed.)
-A [fenced code block](#fenced-code-block) <a id="fenced-code-block"></a>
-begins with a code fence, indented no more than three spaces.
-
-The line with the opening code fence may optionally contain some text
-following the code fence; this is trimmed of leading and trailing
-spaces and called the [info string](#info-string).
-<a id="info-string"></a> The info string may not contain any backtick
-characters. (The reason for this restriction is that otherwise
-some inline code would be incorrectly interpreted as the
-beginning of a fenced code block.)
-
-The content of the code block consists of all subsequent lines, until
-a closing [code fence](#code-fence) of the same type as the code block
-began with (backticks or tildes), and with at least as many backticks
-or tildes as the opening code fence. If the leading code fence is
-indented N spaces, then up to N spaces of indentation are removed from
-each line of the content (if present). (If a content line is not
-indented, it is preserved unchanged. If it is indented less than N
-spaces, all of the indentation is removed.)
-
-The closing code fence may be indented up to three spaces, and may be
-followed only by spaces, which are ignored. If the end of the
-containing block (or document) is reached and no closing code fence
-has been found, the code block contains all of the lines after the
-opening code fence until the end of the containing block (or
-document). (An alternative spec would require backtracking in the
-event that a closing code fence is not found. But this makes parsing
-much less efficient, and there seems to be no real down side to the
-behavior described here.)
-
-A fenced code block may interrupt a paragraph, and does not require
-a blank line either before or after.
-
-The content of a code fence is treated as literal text, not parsed
-as inlines. The first word of the info string is typically used to
-specify the language of the code sample, and rendered in the `class`
-attribute of the `code` tag. However, this spec does not mandate any
-particular treatment of the info string.
-
-Here is a simple example with backticks:
-
-.
-```
-<
- >
-```
-.
-<pre><code>&lt;
- &gt;
-</code></pre>
-.
-
-With tildes:
-
-.
-~~~
-<
- >
-~~~
-.
-<pre><code>&lt;
- &gt;
-</code></pre>
-.
-
-The closing code fence must use the same character as the opening
-fence:
-
-.
-```
-aaa
-~~~
-```
-.
-<pre><code>aaa
-~~~
-</code></pre>
-.
-
-.
-~~~
-aaa
-```
-~~~
-.
-<pre><code>aaa
-```
-</code></pre>
-.
-
-The closing code fence must be at least as long as the opening fence:
-
-.
-````
-aaa
-```
-``````
-.
-<pre><code>aaa
-```
-</code></pre>
-.
-
-.
-~~~~
-aaa
-~~~
-~~~~
-.
-<pre><code>aaa
-~~~
-</code></pre>
-.
-
-Unclosed code blocks are closed by the end of the document:
-
-.
-```
-.
-<pre><code></code></pre>
-.
-
-.
-`````
-
-```
-aaa
-.
-<pre><code>
-```
-aaa
-</code></pre>
-.
-
-A code block can have all empty lines as its content:
-
-.
-```
-
-
-```
-.
-<pre><code>
-
-</code></pre>
-.
-
-A code block can be empty:
-
-.
-```
-```
-.
-<pre><code></code></pre>
-.
-
-Fences can be indented. If the opening fence is indented,
-content lines will have equivalent opening indentation removed,
-if present:
-
-.
- ```
- aaa
-aaa
-```
-.
-<pre><code>aaa
-aaa
-</code></pre>
-.
-
-.
- ```
-aaa
- aaa
-aaa
- ```
-.
-<pre><code>aaa
-aaa
-aaa
-</code></pre>
-.
-
-.
- ```
- aaa
- aaa
- aaa
- ```
-.
-<pre><code>aaa
- aaa
-aaa
-</code></pre>
-.
-
-Four spaces indentation produces an indented code block:
-
-.
- ```
- aaa
- ```
-.
-<pre><code>```
-aaa
-```
-</code></pre>
-.
-
-Code fences (opening and closing) cannot contain internal spaces:
-
-.
-``` ```
-aaa
-.
-<p><code></code>
-aaa</p>
-.
-
-.
-~~~~~~
-aaa
-~~~ ~~
-.
-<pre><code>aaa
-~~~ ~~
-</code></pre>
-.
-
-Fenced code blocks can interrupt paragraphs, and can be followed
-directly by paragraphs, without a blank line between:
-
-.
-foo
-```
-bar
-```
-baz
-.
-<p>foo</p>
-<pre><code>bar
-</code></pre>
-<p>baz</p>
-.
-
-Other blocks can also occur before and after fenced code blocks
-without an intervening blank line:
-
-.
-foo
----
-~~~
-bar
-~~~
-# baz
-.
-<h2>foo</h2>
-<pre><code>bar
-</code></pre>
-<h1>baz</h1>
-.
-
-An [info string](#info-string) can be provided after the opening code fence.
-Opening and closing spaces will be stripped, and the first word, prefixed
-with `language-`, is used as the value for the `class` attribute of the
-`code` element within the enclosing `pre` element.
-
-.
-```ruby
-def foo(x)
- return 3
-end
-```
-.
-<pre><code class="language-ruby">def foo(x)
- return 3
-end
-</code></pre>
-.
-
-.
-~~~~ ruby startline=3 $%@#$
-def foo(x)
- return 3
-end
-~~~~~~~
-.
-<pre><code class="language-ruby">def foo(x)
- return 3
-end
-</code></pre>
-.
-
-.
-````;
-````
-.
-<pre><code class="language-;"></code></pre>
-.
-
-Info strings for backtick code blocks cannot contain backticks:
-
-.
-``` aa ```
-foo
-.
-<p><code>aa</code>
-foo</p>
-.
-
-Closing code fences cannot have info strings:
-
-.
-```
-``` aaa
-```
-.
-<pre><code>``` aaa
-</code></pre>
-.
-
-
-## HTML blocks
-
-An [HTML block tag](#html-block-tag) <a id="html-block-tag"></a> is
-an [open tag](#open-tag) or [closing tag](#closing-tag) whose tag
-name is one of the following (case-insensitive):
-`article`, `header`, `aside`, `hgroup`, `blockquote`, `hr`, `iframe`,
-`body`, `li`, `map`, `button`, `object`, `canvas`, `ol`, `caption`,
-`output`, `col`, `p`, `colgroup`, `pre`, `dd`, `progress`, `div`,
-`section`, `dl`, `table`, `td`, `dt`, `tbody`, `embed`, `textarea`,
-`fieldset`, `tfoot`, `figcaption`, `th`, `figure`, `thead`, `footer`,
-`footer`, `tr`, `form`, `ul`, `h1`, `h2`, `h3`, `h4`, `h5`, `h6`,
-`video`, `script`, `style`.
-
-An [HTML block](#html-block) <a id="html-block"></a> begins with an
-[HTML block tag](#html-block-tag), [HTML comment](#html-comment),
-[processing instruction](#processing-instruction),
-[declaration](#declaration), or [CDATA section](#cdata-section).
-It ends when a [blank line](#blank-line) or the end of the
-input is encountered. The initial line may be indented up to three
-spaces, and subsequent lines may have any indentation. The contents
-of the HTML block are interpreted as raw HTML, and will not be escaped
-in HTML output.
-
-Some simple examples:
-
-.
-<table>
- <tr>
- <td>
- hi
- </td>
- </tr>
-</table>
-
-okay.
-.
-<table>
- <tr>
- <td>
- hi
- </td>
- </tr>
-</table>
-<p>okay.</p>
-.
-
-.
- <div>
- *hello*
- <foo><a>
-.
- <div>
- *hello*
- <foo><a>
-.
-
-Here we have two code blocks with a Markdown paragraph between them:
-
-.
-<DIV CLASS="foo">
-
-*Markdown*
-
-</DIV>
-.
-<DIV CLASS="foo">
-<p><em>Markdown</em></p>
-</DIV>
-.
-
-In the following example, what looks like a Markdown code block
-is actually part of the HTML block, which continues until a blank
-line or the end of the document is reached:
-
-.
-<div></div>
-``` c
-int x = 33;
-```
-.
-<div></div>
-``` c
-int x = 33;
-```
-.
-
-A comment:
-
-.
-<!-- Foo
-bar
- baz -->
-.
-<!-- Foo
-bar
- baz -->
-.
-
-A processing instruction:
-
-.
-<?php
- echo 'foo'
-?>
-.
-<?php
- echo 'foo'
-?>
-.
-
-CDATA:
-
-.
-<![CDATA[
-function matchwo(a,b)
-{
-if (a < b && a < 0) then
- {
- return 1;
- }
-else
- {
- return 0;
- }
-}
-]]>
-.
-<![CDATA[
-function matchwo(a,b)
-{
-if (a < b && a < 0) then
- {
- return 1;
- }
-else
- {
- return 0;
- }
-}
-]]>
-.
-
-The opening tag can be indented 1-3 spaces, but not 4:
-
-.
- <!-- foo -->
-
- <!-- foo -->
-.
- <!-- foo -->
-<pre><code>&lt;!-- foo --&gt;
-</code></pre>
-.
-
-An HTML block can interrupt a paragraph, and need not be preceded
-by a blank line.
-
-.
-Foo
-<div>
-bar
-</div>
-.
-<p>Foo</p>
-<div>
-bar
-</div>
-.
-
-However, a following blank line is always needed, except at the end of
-a document:
-
-.
-<div>
-bar
-</div>
-*foo*
-.
-<div>
-bar
-</div>
-*foo*
-.
-
-An incomplete HTML block tag may also start an HTML block:
-
-.
-<div class
-foo
-.
-<div class
-foo
-.
-
-This rule differs from John Gruber's original Markdown syntax
-specification, which says:
-
-> The only restrictions are that block-level HTML elements —
-> e.g. `<div>`, `<table>`, `<pre>`, `<p>`, etc. — must be separated from
-> surrounding content by blank lines, and the start and end tags of the
-> block should not be indented with tabs or spaces.
-
-In some ways Gruber's rule is more restrictive than the one given
-here:
-
-- It requires that an HTML block be preceded by a blank line.
-- It does not allow the start tag to be indented.
-- It requires a matching end tag, which it also does not allow to
- be indented.
-
-Indeed, most Markdown implementations, including some of Gruber's
-own perl implementations, do not impose these restrictions.
-
-There is one respect, however, in which Gruber's rule is more liberal
-than the one given here, since it allows blank lines to occur inside
-an HTML block. There are two reasons for disallowing them here.
-First, it removes the need to parse balanced tags, which is
-expensive and can require backtracking from the end of the document
-if no matching end tag is found. Second, it provides a very simple
-and flexible way of including Markdown content inside HTML tags:
-simply separate the Markdown from the HTML using blank lines:
-
-.
-<div>
-
-*Emphasized* text.
-
-</div>
-.
-<div>
-<p><em>Emphasized</em> text.</p>
-</div>
-.
-
-Compare:
-
-.
-<div>
-*Emphasized* text.
-</div>
-.
-<div>
-*Emphasized* text.
-</div>
-.
-
-Some Markdown implementations have adopted a convention of
-interpreting content inside tags as text if the open tag has
-the attribute `markdown=1`. The rule given above seems a simpler and
-more elegant way of achieving the same expressive power, which is also
-much simpler to parse.
-
-The main potential drawback is that one can no longer paste HTML
-blocks into Markdown documents with 100% reliability. However,
-*in most cases* this will work fine, because the blank lines in
-HTML are usually followed by HTML block tags. For example:
-
-.
-<table>
-
-<tr>
-
-<td>
-Hi
-</td>
-
-</tr>
-
-</table>
-.
-<table>
-<tr>
-<td>
-Hi
-</td>
-</tr>
-</table>
-.
-
-Moreover, blank lines are usually not necessary and can be
-deleted. The exception is inside `<pre>` tags; here, one can
-replace the blank lines with `&#10;` entities.
-
-So there is no important loss of expressive power with the new rule.
-
-## Link reference definitions
-
-A [link reference definition](#link-reference-definition)
-<a id="link-reference-definition"></a> consists of a [link
-label](#link-label), indented up to three spaces, followed
-by a colon (`:`), optional blank space (including up to one
-newline), a [link destination](#link-destination), optional
-blank space (including up to one newline), and an optional [link
-title](#link-title), which if it is present must be separated
-from the [link destination](#link-destination) by whitespace.
-No further non-space characters may occur on the line.
-
-A [link reference-definition](#link-reference-definition)
-does not correspond to a structural element of a document. Instead, it
-defines a label which can be used in [reference links](#reference-link)
-and reference-style [images](#image) elsewhere in the document. [Link
-reference definitions] can come either before or after the links that use
-them.
-
-.
-[foo]: /url "title"
-
-[foo]
-.
-<p><a href="/url" title="title">foo</a></p>
-.
-
-.
- [foo]:
- /url
- 'the title'
-
-[foo]
-.
-<p><a href="/url" title="the title">foo</a></p>
-.
-
-.
-[Foo*bar\]]:my_(url) 'title (with parens)'
-
-[Foo*bar\]]
-.
-<p><a href="my_(url)" title="title (with parens)">Foo*bar]</a></p>
-.
-
-.
-[Foo bar]:
-<my url>
-'title'
-
-[Foo bar]
-.
-<p><a href="my%20url" title="title">Foo bar</a></p>
-.
-
-The title may be omitted:
-
-.
-[foo]:
-/url
-
-[foo]
-.
-<p><a href="/url">foo</a></p>
-.
-
-The link destination may not be omitted:
-
-.
-[foo]:
-
-[foo]
-.
-<p>[foo]:</p>
-<p>[foo]</p>
-.
-
-A link can come before its corresponding definition:
-
-.
-[foo]
-
-[foo]: url
-.
-<p><a href="url">foo</a></p>
-.
-
-If there are several matching definitions, the first one takes
-precedence:
-
-.
-[foo]
-
-[foo]: first
-[foo]: second
-.
-<p><a href="first">foo</a></p>
-.
-
-As noted in the section on [Links], matching of labels is
-case-insensitive (see [matches](#matches)).
-
-.
-[FOO]: /url
-
-[Foo]
-.
-<p><a href="/url">Foo</a></p>
-.
-
-.
-[ΑΓΩ]: /φου
-
-[αγω]
-.
-<p><a href="/%CF%86%CE%BF%CF%85">αγω</a></p>
-.
-
-Here is a link reference definition with no corresponding link.
-It contributes nothing to the document.
-
-.
-[foo]: /url
-.
-.
-
-This is not a link reference definition, because there are
-non-space characters after the title:
-
-.
-[foo]: /url "title" ok
-.
-<p>[foo]: /url &quot;title&quot; ok</p>
-.
-
-This is not a link reference definition, because it is indented
-four spaces:
-
-.
- [foo]: /url "title"
-
-[foo]
-.
-<pre><code>[foo]: /url &quot;title&quot;
-</code></pre>
-<p>[foo]</p>
-.
-
-This is not a link reference definition, because it occurs inside
-a code block:
-
-.
-```
-[foo]: /url
-```
-
-[foo]
-.
-<pre><code>[foo]: /url
-</code></pre>
-<p>[foo]</p>
-.
-
-A [link reference definition](#link-reference-definition) cannot
-interrupt a paragraph.
-
-.
-Foo
-[bar]: /baz
-
-[bar]
-.
-<p>Foo
-[bar]: /baz</p>
-<p>[bar]</p>
-.
-
-However, it can directly follow other block elements, such as headers
-and horizontal rules, and it need not be followed by a blank line.
-
-.
-# [Foo]
-[foo]: /url
-> bar
-.
-<h1><a href="/url">Foo</a></h1>
-<blockquote>
-<p>bar</p>
-</blockquote>
-.
-
-Several [link references](#link-reference) can occur one after another,
-without intervening blank lines.
-
-.
-[foo]: /foo-url "foo"
-[bar]: /bar-url
- "bar"
-[baz]: /baz-url
-
-[foo],
-[bar],
-[baz]
-.
-<p><a href="/foo-url" title="foo">foo</a>,
-<a href="/bar-url" title="bar">bar</a>,
-<a href="/baz-url">baz</a></p>
-.
-
-[Link reference definitions](#link-reference-definition) can occur
-inside block containers, like lists and block quotations. They
-affect the entire document, not just the container in which they
-are defined:
-
-.
-[foo]
-
-> [foo]: /url
-.
-<p><a href="/url">foo</a></p>
-<blockquote>
-</blockquote>
-.
-
-
-## Paragraphs
-
-A sequence of non-blank lines that cannot be interpreted as other
-kinds of blocks forms a [paragraph](#paragraph).<a id="paragraph"></a>
-The contents of the paragraph are the result of parsing the
-paragraph's raw content as inlines. The paragraph's raw content
-is formed by concatenating the lines and removing initial and final
-spaces.
-
-A simple example with two paragraphs:
-
-.
-aaa
-
-bbb
-.
-<p>aaa</p>
-<p>bbb</p>
-.
-
-Paragraphs can contain multiple lines, but no blank lines:
-
-.
-aaa
-bbb
-
-ccc
-ddd
-.
-<p>aaa
-bbb</p>
-<p>ccc
-ddd</p>
-.
-
-Multiple blank lines between paragraph have no effect:
-
-.
-aaa
-
-
-bbb
-.
-<p>aaa</p>
-<p>bbb</p>
-.
-
-Leading spaces are skipped:
-
-.
- aaa
- bbb
-.
-<p>aaa
-bbb</p>
-.
-
-Lines after the first may be indented any amount, since indented
-code blocks cannot interrupt paragraphs.
-
-.
-aaa
- bbb
- ccc
-.
-<p>aaa
-bbb
-ccc</p>
-.
-
-However, the first line may be indented at most three spaces,
-or an indented code block will be triggered:
-
-.
- aaa
-bbb
-.
-<p>aaa
-bbb</p>
-.
-
-.
- aaa
-bbb
-.
-<pre><code>aaa
-</code></pre>
-<p>bbb</p>
-.
-
-Final spaces are stripped before inline parsing, so a paragraph
-that ends with two or more spaces will not end with a hard line
-break:
-
-.
-aaa
-bbb
-.
-<p>aaa<br />
-bbb</p>
-.
-
-## Blank lines
-
-[Blank lines](#blank-line) between block-level elements are ignored,
-except for the role they play in determining whether a [list](#list)
-is [tight](#tight) or [loose](#loose).
-
-Blank lines at the beginning and end of the document are also ignored.
-
-.
-
-
-aaa
-
-
-# aaa
-
-
-.
-<p>aaa</p>
-<h1>aaa</h1>
-.
-
-
-# Container blocks
-
-A [container block](#container-block) is a block that has other
-blocks as its contents. There are two basic kinds of container blocks:
-[block quotes](#block-quote) and [list items](#list-item).
-[Lists](#list) are meta-containers for [list items](#list-item).
-
-We define the syntax for container blocks recursively. The general
-form of the definition is:
-
-> If X is a sequence of blocks, then the result of
-> transforming X in such-and-such a way is a container of type Y
-> with these blocks as its content.
-
-So, we explain what counts as a block quote or list item by explaining
-how these can be *generated* from their contents. This should suffice
-to define the syntax, although it does not give a recipe for *parsing*
-these constructions. (A recipe is provided below in the section entitled
-[A parsing strategy](#appendix-a-a-parsing-strategy).)
-
-## Block quotes
-
-A [block quote marker](#block-quote-marker) <a id="block-quote-marker"></a>
-consists of 0-3 spaces of initial indent, plus (a) the character `>` together
-with a following space, or (b) a single character `>` not followed by a space.
-
-The following rules define [block quotes](#block-quote):
-<a id="block-quote"></a>
-
-1. **Basic case.** If a string of lines *Ls* constitute a sequence
- of blocks *Bs*, then the result of appending a [block quote
- marker](#block-quote-marker) to the beginning of each line in *Ls*
- is a [block quote](#block-quote) containing *Bs*.
-
-2. **Laziness.** If a string of lines *Ls* constitute a [block
- quote](#block-quote) with contents *Bs*, then the result of deleting
- the initial [block quote marker](#block-quote-marker) from one or
- more lines in which the next non-space character after the [block
- quote marker](#block-quote-marker) is [paragraph continuation
- text](#paragraph-continuation-text) is a block quote with *Bs* as
- its content. <a id="paragraph-continuation-text"></a>
- [Paragraph continuation text](#paragraph-continuation-text) is text
- that will be parsed as part of the content of a paragraph, but does
- not occur at the beginning of the paragraph.
-
-3. **Consecutiveness.** A document cannot contain two [block
- quotes](#block-quote) in a row unless there is a [blank
- line](#blank-line) between them.
-
-Nothing else counts as a [block quote](#block-quote).
-
-Here is a simple example:
-
-.
-> # Foo
-> bar
-> baz
-.
-<blockquote>
-<h1>Foo</h1>
-<p>bar
-baz</p>
-</blockquote>
-.
-
-The spaces after the `>` characters can be omitted:
-
-.
-># Foo
->bar
-> baz
-.
-<blockquote>
-<h1>Foo</h1>
-<p>bar
-baz</p>
-</blockquote>
-.
-
-The `>` characters can be indented 1-3 spaces:
-
-.
- > # Foo
- > bar
- > baz
-.
-<blockquote>
-<h1>Foo</h1>
-<p>bar
-baz</p>
-</blockquote>
-.
-
-Four spaces gives us a code block:
-
-.
- > # Foo
- > bar
- > baz
-.
-<pre><code>&gt; # Foo
-&gt; bar
-&gt; baz
-</code></pre>
-.
-
-The Laziness clause allows us to omit the `>` before a
-paragraph continuation line:
-
-.
-> # Foo
-> bar
-baz
-.
-<blockquote>
-<h1>Foo</h1>
-<p>bar
-baz</p>
-</blockquote>
-.
-
-A block quote can contain some lazy and some non-lazy
-continuation lines:
-
-.
-> bar
-baz
-> foo
-.
-<blockquote>
-<p>bar
-baz
-foo</p>
-</blockquote>
-.
-
-Laziness only applies to lines that are continuations of
-paragraphs. Lines containing characters or indentation that indicate
-block structure cannot be lazy.
-
-.
-> foo
----
-.
-<blockquote>
-<p>foo</p>
-</blockquote>
-<hr />
-.
-
-.
-> - foo
-- bar
-.
-<blockquote>
-<ul>
-<li>foo</li>
-</ul>
-</blockquote>
-<ul>
-<li>bar</li>
-</ul>
-.
-
-.
-> foo
- bar
-.
-<blockquote>
-<pre><code>foo
-</code></pre>
-</blockquote>
-<pre><code>bar
-</code></pre>
-.
-
-.
-> ```
-foo
-```
-.
-<blockquote>
-<pre><code></code></pre>
-</blockquote>
-<p>foo</p>
-<pre><code></code></pre>
-.
-
-A block quote can be empty:
-
-.
->
-.
-<blockquote>
-</blockquote>
-.
-
-.
->
->
->
-.
-<blockquote>
-</blockquote>
-.
-
-A block quote can have initial or final blank lines:
-
-.
->
-> foo
->
-.
-<blockquote>
-<p>foo</p>
-</blockquote>
-.
-
-A blank line always separates block quotes:
-
-.
-> foo
-
-> bar
-.
-<blockquote>
-<p>foo</p>
-</blockquote>
-<blockquote>
-<p>bar</p>
-</blockquote>
-.
-
-(Most current Markdown implementations, including John Gruber's
-original `Markdown.pl`, will parse this example as a single block quote
-with two paragraphs. But it seems better to allow the author to decide
-whether two block quotes or one are wanted.)
-
-Consecutiveness means that if we put these block quotes together,
-we get a single block quote:
-
-.
-> foo
-> bar
-.
-<blockquote>
-<p>foo
-bar</p>
-</blockquote>
-.
-
-To get a block quote with two paragraphs, use:
-
-.
-> foo
->
-> bar
-.
-<blockquote>
-<p>foo</p>
-<p>bar</p>
-</blockquote>
-.
-
-Block quotes can interrupt paragraphs:
-
-.
-foo
-> bar
-.
-<p>foo</p>
-<blockquote>
-<p>bar</p>
-</blockquote>
-.
-
-In general, blank lines are not needed before or after block
-quotes:
-
-.
-> aaa
-***
-> bbb
-.
-<blockquote>
-<p>aaa</p>
-</blockquote>
-<hr />
-<blockquote>
-<p>bbb</p>
-</blockquote>
-.
-
-However, because of laziness, a blank line is needed between
-a block quote and a following paragraph:
-
-.
-> bar
-baz
-.
-<blockquote>
-<p>bar
-baz</p>
-</blockquote>
-.
-
-.
-> bar
-
-baz
-.
-<blockquote>
-<p>bar</p>
-</blockquote>
-<p>baz</p>
-.
-
-.
-> bar
->
-baz
-.
-<blockquote>
-<p>bar</p>
-</blockquote>
-<p>baz</p>
-.
-
-It is a consequence of the Laziness rule that any number
-of initial `>`s may be omitted on a continuation line of a
-nested block quote:
-
-.
-> > > foo
-bar
-.
-<blockquote>
-<blockquote>
-<blockquote>
-<p>foo
-bar</p>
-</blockquote>
-</blockquote>
-</blockquote>
-.
-
-.
->>> foo
-> bar
->>baz
-.
-<blockquote>
-<blockquote>
-<blockquote>
-<p>foo
-bar
-baz</p>
-</blockquote>
-</blockquote>
-</blockquote>
-.
-
-When including an indented code block in a block quote,
-remember that the [block quote marker](#block-quote-marker) includes
-both the `>` and a following space. So *five spaces* are needed after
-the `>`:
-
-.
-> code
-
-> not code
-.
-<blockquote>
-<pre><code>code
-</code></pre>
-</blockquote>
-<blockquote>
-<p>not code</p>
-</blockquote>
-.
-
-
-## List items
-
-A [list marker](#list-marker) <a id="list-marker"></a> is a
-[bullet list marker](#bullet-list-marker) or an [ordered list
-marker](#ordered-list-marker).
-
-A [bullet list marker](#bullet-list-marker) <a id="bullet-list-marker"></a>
-is a `-`, `+`, or `*` character.
-
-An [ordered list marker](#ordered-list-marker) <a id="ordered-list-marker"></a>
-is a sequence of one of more digits (`0-9`), followed by either a
-`.` character or a `)` character.
-
-The following rules define [list items](#list-item):
-
-1. **Basic case.** If a sequence of lines *Ls* constitute a sequence of
- blocks *Bs* starting with a non-space character and not separated
- from each other by more than one blank line, and *M* is a list
- marker *M* of width *W* followed by 0 < *N* < 5 spaces, then the result
- of prepending *M* and the following spaces to the first line of
- *Ls*, and indenting subsequent lines of *Ls* by *W + N* spaces, is a
- list item with *Bs* as its contents. The type of the list item
- (bullet or ordered) is determined by the type of its list marker.
- If the list item is ordered, then it is also assigned a start
- number, based on the ordered list marker.
-
-For example, let *Ls* be the lines
-
-.
-A paragraph
-with two lines.
-
- indented code
-
-> A block quote.
-.
-<p>A paragraph
-with two lines.</p>
-<pre><code>indented code
-</code></pre>
-<blockquote>
-<p>A block quote.</p>
-</blockquote>
-.
-
-And let *M* be the marker `1.`, and *N* = 2. Then rule #1 says
-that the following is an ordered list item with start number 1,
-and the same contents as *Ls*:
-
-.
-1. A paragraph
- with two lines.
-
- indented code
-
- > A block quote.
-.
-<ol>
-<li><p>A paragraph
-with two lines.</p>
-<pre><code>indented code
-</code></pre>
-<blockquote>
-<p>A block quote.</p>
-</blockquote></li>
-</ol>
-.
-
-The most important thing to notice is that the position of
-the text after the list marker determines how much indentation
-is needed in subsequent blocks in the list item. If the list
-marker takes up two spaces, and there are three spaces between
-the list marker and the next nonspace character, then blocks
-must be indented five spaces in order to fall under the list
-item.
-
-Here are some examples showing how far content must be indented to be
-put under the list item:
-
-.
-- one
-
- two
-.
-<ul>
-<li>one</li>
-</ul>
-<p>two</p>
-.
-
-.
-- one
-
- two
-.
-<ul>
-<li><p>one</p>
-<p>two</p></li>
-</ul>
-.
-
-.
- - one
-
- two
-.
-<ul>
-<li>one</li>
-</ul>
-<pre><code> two
-</code></pre>
-.
-
-.
- - one
-
- two
-.
-<ul>
-<li><p>one</p>
-<p>two</p></li>
-</ul>
-.
-
-It is tempting to think of this in terms of columns: the continuation
-blocks must be indented at least to the column of the first nonspace
-character after the list marker. However, that is not quite right.
-The spaces after the list marker determine how much relative indentation
-is needed. Which column this indentation reaches will depend on
-how the list item is embedded in other constructions, as shown by
-this example:
-
-.
- > > 1. one
->>
->> two
-.
-<blockquote>
-<blockquote>
-<ol>
-<li><p>one</p>
-<p>two</p></li>
-</ol>
-</blockquote>
-</blockquote>
-.
-
-Here `two` occurs in the same column as the list marker `1.`,
-but is actually contained in the list item, because there is
-sufficent indentation after the last containing blockquote marker.
-
-The converse is also possible. In the following example, the word `two`
-occurs far to the right of the initial text of the list item, `one`, but
-it is not considered part of the list item, because it is not indented
-far enough past the blockquote marker:
-
-.
->>- one
->>
- > > two
-.
-<blockquote>
-<blockquote>
-<ul>
-<li>one</li>
-</ul>
-<p>two</p>
-</blockquote>
-</blockquote>
-.
-
-A list item may not contain blocks that are separated by more than
-one blank line. Thus, two blank lines will end a list, unless the
-two blanks are contained in a [fenced code block](#fenced-code-block).
-
-.
-- foo
-
- bar
-
-- foo
-
-
- bar
-
-- ```
- foo
-
-
- bar
- ```
-.
-<ul>
-<li><p>foo</p>
-<p>bar</p></li>
-<li><p>foo</p></li>
-</ul>
-<p>bar</p>
-<ul>
-<li><pre><code>foo
-
-
-bar
-</code></pre></li>
-</ul>
-.
-
-A list item may contain any kind of block:
-
-.
-1. foo
-
- ```
- bar
- ```
-
- baz
-
- > bam
-.
-<ol>
-<li><p>foo</p>
-<pre><code>bar
-</code></pre>
-<p>baz</p>
-<blockquote>
-<p>bam</p>
-</blockquote></li>
-</ol>
-.
-
-2. **Item starting with indented code.** If a sequence of lines *Ls*
- constitute a sequence of blocks *Bs* starting with an indented code
- block and not separated from each other by more than one blank line,
- and *M* is a list marker *M* of width *W* followed by
- one space, then the result of prepending *M* and the following
- space to the first line of *Ls*, and indenting subsequent lines of
- *Ls* by *W + 1* spaces, is a list item with *Bs* as its contents.
- If a line is empty, then it need not be indented. The type of the
- list item (bullet or ordered) is determined by the type of its list
- marker. If the list item is ordered, then it is also assigned a
- start number, based on the ordered list marker.
-
-An indented code block will have to be indented four spaces beyond
-the edge of the region where text will be included in the list item.
-In the following case that is 6 spaces:
-
-.
-- foo
-
- bar
-.
-<ul>
-<li><p>foo</p>
-<pre><code>bar
-</code></pre></li>
-</ul>
-.
-
-And in this case it is 11 spaces:
-
-.
- 10. foo
-
- bar
-.
-<ol start="10">
-<li><p>foo</p>
-<pre><code>bar
-</code></pre></li>
-</ol>
-.
-
-If the *first* block in the list item is an indented code block,
-then by rule #2, the contents must be indented *one* space after the
-list marker:
-
-.
- indented code
-
-paragraph
-
- more code
-.
-<pre><code>indented code
-</code></pre>
-<p>paragraph</p>
-<pre><code>more code
-</code></pre>
-.
-
-.
-1. indented code
-
- paragraph
-
- more code
-.
-<ol>
-<li><pre><code>indented code
-</code></pre>
-<p>paragraph</p>
-<pre><code>more code
-</code></pre></li>
-</ol>
-.
-
-Note that an additional space indent is interpreted as space
-inside the code block:
-
-.
-1. indented code
-
- paragraph
-
- more code
-.
-<ol>
-<li><pre><code> indented code
-</code></pre>
-<p>paragraph</p>
-<pre><code>more code
-</code></pre></li>
-</ol>
-.
-
-Note that rules #1 and #2 only apply to two cases: (a) cases
-in which the lines to be included in a list item begin with a nonspace
-character, and (b) cases in which they begin with an indented code
-block. In a case like the following, where the first block begins with
-a three-space indent, the rules do not allow us to form a list item by
-indenting the whole thing and prepending a list marker:
-
-.
- foo
-
-bar
-.
-<p>foo</p>
-<p>bar</p>
-.
-
-.
-- foo
-
- bar
-.
-<ul>
-<li>foo</li>
-</ul>
-<p>bar</p>
-.
-
-This is not a significant restriction, because when a block begins
-with 1-3 spaces indent, the indentation can always be removed without
-a change in interpretation, allowing rule #1 to be applied. So, in
-the above case:
-
-.
-- foo
-
- bar
-.
-<ul>
-<li><p>foo</p>
-<p>bar</p></li>
-</ul>
-.
-
-
-3. **Indentation.** If a sequence of lines *Ls* constitutes a list item
- according to rule #1 or #2, then the result of indenting each line
- of *L* by 1-3 spaces (the same for each line) also constitutes a
- list item with the same contents and attributes. If a line is
- empty, then it need not be indented.
-
-Indented one space:
-
-.
- 1. A paragraph
- with two lines.
-
- indented code
-
- > A block quote.
-.
-<ol>
-<li><p>A paragraph
-with two lines.</p>
-<pre><code>indented code
-</code></pre>
-<blockquote>
-<p>A block quote.</p>
-</blockquote></li>
-</ol>
-.
-
-Indented two spaces:
-
-.
- 1. A paragraph
- with two lines.
-
- indented code
-
- > A block quote.
-.
-<ol>
-<li><p>A paragraph
-with two lines.</p>
-<pre><code>indented code
-</code></pre>
-<blockquote>
-<p>A block quote.</p>
-</blockquote></li>
-</ol>
-.
-
-Indented three spaces:
-
-.
- 1. A paragraph
- with two lines.
-
- indented code
-
- > A block quote.
-.
-<ol>
-<li><p>A paragraph
-with two lines.</p>
-<pre><code>indented code
-</code></pre>
-<blockquote>
-<p>A block quote.</p>
-</blockquote></li>
-</ol>
-.
-
-Four spaces indent gives a code block:
-
-.
- 1. A paragraph
- with two lines.
-
- indented code
-
- > A block quote.
-.
-<pre><code>1. A paragraph
- with two lines.
-
- indented code
-
- &gt; A block quote.
-</code></pre>
-.
-
-
-4. **Laziness.** If a string of lines *Ls* constitute a [list
- item](#list-item) with contents *Bs*, then the result of deleting
- some or all of the indentation from one or more lines in which the
- next non-space character after the indentation is
- [paragraph continuation text](#paragraph-continuation-text) is a
- list item with the same contents and attributes.
-
-Here is an example with lazy continuation lines:
-
-.
- 1. A paragraph
-with two lines.
-
- indented code
-
- > A block quote.
-.
-<ol>
-<li><p>A paragraph
-with two lines.</p>
-<pre><code>indented code
-</code></pre>
-<blockquote>
-<p>A block quote.</p>
-</blockquote></li>
-</ol>
-.
-
-Indentation can be partially deleted:
-
-.
- 1. A paragraph
- with two lines.
-.
-<ol>
-<li>A paragraph
-with two lines.</li>
-</ol>
-.
-
-These examples show how laziness can work in nested structures:
-
-.
-> 1. > Blockquote
-continued here.
-.
-<blockquote>
-<ol>
-<li><blockquote>
-<p>Blockquote
-continued here.</p>
-</blockquote></li>
-</ol>
-</blockquote>
-.
-
-.
-> 1. > Blockquote
-> continued here.
-.
-<blockquote>
-<ol>
-<li><blockquote>
-<p>Blockquote
-continued here.</p>
-</blockquote></li>
-</ol>
-</blockquote>
-.
-
-
-5. **That's all.** Nothing that is not counted as a list item by rules
- #1--4 counts as a [list item](#list-item).
-
-The rules for sublists follow from the general rules above. A sublist
-must be indented the same number of spaces a paragraph would need to be
-in order to be included in the list item.
-
-So, in this case we need two spaces indent:
-
-.
-- foo
- - bar
- - baz
-.
-<ul>
-<li>foo
-<ul>
-<li>bar
-<ul>
-<li>baz</li>
-</ul></li>
-</ul></li>
-</ul>
-.
-
-One is not enough:
-
-.
-- foo
- - bar
- - baz
-.
-<ul>
-<li>foo</li>
-<li>bar</li>
-<li>baz</li>
-</ul>
-.
-
-Here we need four, because the list marker is wider:
-
-.
-10) foo
- - bar
-.
-<ol start="10">
-<li>foo
-<ul>
-<li>bar</li>
-</ul></li>
-</ol>
-.
-
-Three is not enough:
-
-.
-10) foo
- - bar
-.
-<ol start="10">
-<li>foo</li>
-</ol>
-<ul>
-<li>bar</li>
-</ul>
-.
-
-A list may be the first block in a list item:
-
-.
-- - foo
-.
-<ul>
-<li><ul>
-<li>foo</li>
-</ul></li>
-</ul>
-.
-
-.
-1. - 2. foo
-.
-<ol>
-<li><ul>
-<li><ol start="2">
-<li>foo</li>
-</ol></li>
-</ul></li>
-</ol>
-.
-
-A list item may be empty:
-
-.
-- foo
--
-- bar
-.
-<ul>
-<li>foo</li>
-<li></li>
-<li>bar</li>
-</ul>
-.
-
-.
--
-.
-<ul>
-<li></li>
-</ul>
-.
-
-### Motivation
-
-John Gruber's Markdown spec says the following about list items:
-
-1. "List markers typically start at the left margin, but may be indented
- by up to three spaces. List markers must be followed by one or more
- spaces or a tab."
-
-2. "To make lists look nice, you can wrap items with hanging indents....
- But if you don't want to, you don't have to."
-
-3. "List items may consist of multiple paragraphs. Each subsequent
- paragraph in a list item must be indented by either 4 spaces or one
- tab."
-
-4. "It looks nice if you indent every line of the subsequent paragraphs,
- but here again, Markdown will allow you to be lazy."
-
-5. "To put a blockquote within a list item, the blockquote's `>`
- delimiters need to be indented."
-
-6. "To put a code block within a list item, the code block needs to be
- indented twice — 8 spaces or two tabs."
-
-These rules specify that a paragraph under a list item must be indented
-four spaces (presumably, from the left margin, rather than the start of
-the list marker, but this is not said), and that code under a list item
-must be indented eight spaces instead of the usual four. They also say
-that a block quote must be indented, but not by how much; however, the
-example given has four spaces indentation. Although nothing is said
-about other kinds of block-level content, it is certainly reasonable to
-infer that *all* block elements under a list item, including other
-lists, must be indented four spaces. This principle has been called the
-*four-space rule*.
-
-The four-space rule is clear and principled, and if the reference
-implementation `Markdown.pl` had followed it, it probably would have
-become the standard. However, `Markdown.pl` allowed paragraphs and
-sublists to start with only two spaces indentation, at least on the
-outer level. Worse, its behavior was inconsistent: a sublist of an
-outer-level list needed two spaces indentation, but a sublist of this
-sublist needed three spaces. It is not surprising, then, that different
-implementations of Markdown have developed very different rules for
-determining what comes under a list item. (Pandoc and python-Markdown,
-for example, stuck with Gruber's syntax description and the four-space
-rule, while discount, redcarpet, marked, PHP Markdown, and others
-followed `Markdown.pl`'s behavior more closely.)
-
-Unfortunately, given the divergences between implementations, there
-is no way to give a spec for list items that will be guaranteed not
-to break any existing documents. However, the spec given here should
-correctly handle lists formatted with either the four-space rule or
-the more forgiving `Markdown.pl` behavior, provided they are laid out
-in a way that is natural for a human to read.
-
-The strategy here is to let the width and indentation of the list marker
-determine the indentation necessary for blocks to fall under the list
-item, rather than having a fixed and arbitrary number. The writer can
-think of the body of the list item as a unit which gets indented to the
-right enough to fit the list marker (and any indentation on the list
-marker). (The laziness rule, #4, then allows continuation lines to be
-unindented if needed.)
-
-This rule is superior, we claim, to any rule requiring a fixed level of
-indentation from the margin. The four-space rule is clear but
-unnatural. It is quite unintuitive that
-
-``` markdown
-- foo
-
- bar
-
- - baz
-```
-
-should be parsed as two lists with an intervening paragraph,
-
-``` html
-<ul>
-<li>foo</li>
-</ul>
-<p>bar</p>
-<ul>
-<li>baz</li>
-</ul>
-```
-
-as the four-space rule demands, rather than a single list,
-
-``` html
-<ul>
-<li><p>foo</p>
-<p>bar</p>
-<ul>
-<li>baz</li>
-</ul></li>
-</ul>
-```
-
-The choice of four spaces is arbitrary. It can be learned, but it is
-not likely to be guessed, and it trips up beginners regularly.
-
-Would it help to adopt a two-space rule? The problem is that such
-a rule, together with the rule allowing 1--3 spaces indentation of the
-initial list marker, allows text that is indented *less than* the
-original list marker to be included in the list item. For example,
-`Markdown.pl` parses
-
-``` markdown
- - one
-
- two
-```
-
-as a single list item, with `two` a continuation paragraph:
-
-``` html
-<ul>
-<li><p>one</p>
-<p>two</p></li>
-</ul>
-```
-
-and similarly
-
-``` markdown
-> - one
->
-> two
-```
-
-as
-
-``` html
-<blockquote>
-<ul>
-<li><p>one</p>
-<p>two</p></li>
-</ul>
-</blockquote>
-```
-
-This is extremely unintuitive.
-
-Rather than requiring a fixed indent from the margin, we could require
-a fixed indent (say, two spaces, or even one space) from the list marker (which
-may itself be indented). This proposal would remove the last anomaly
-discussed. Unlike the spec presented above, it would count the following
-as a list item with a subparagraph, even though the paragraph `bar`
-is not indented as far as the first paragraph `foo`:
-
-``` markdown
- 10. foo
-
- bar
-```
-
-Arguably this text does read like a list item with `bar` as a subparagraph,
-which may count in favor of the proposal. However, on this proposal indented
-code would have to be indented six spaces after the list marker. And this
-would break a lot of existing Markdown, which has the pattern:
-
-``` markdown
-1. foo
-
- indented code
-```
-
-where the code is indented eight spaces. The spec above, by contrast, will
-parse this text as expected, since the code block's indentation is measured
-from the beginning of `foo`.
-
-The one case that needs special treatment is a list item that *starts*
-with indented code. How much indentation is required in that case, since
-we don't have a "first paragraph" to measure from? Rule #2 simply stipulates
-that in such cases, we require one space indentation from the list marker
-(and then the normal four spaces for the indented code). This will match the
-four-space rule in cases where the list marker plus its initial indentation
-takes four spaces (a common case), but diverge in other cases.
-
-## Lists
-
-A [list](#list) <a id="list"></a> is a sequence of one or more
-list items [of the same type](#of-the-same-type). The list items
-may be separated by single [blank lines](#blank-line), but two
-blank lines end all containing lists.
-
-Two list items are [of the same type](#of-the-same-type)
-<a id="of-the-same-type"></a> if they begin with a [list
-marker](#list-marker) of the same type. Two list markers are of the
-same type if (a) they are bullet list markers using the same character
-(`-`, `+`, or `*`) or (b) they are ordered list numbers with the same
-delimiter (either `.` or `)`).
-
-A list is an [ordered list](#ordered-list) <a id="ordered-list"></a>
-if its constituent list items begin with
-[ordered list markers](#ordered-list-marker), and a [bullet
-list](#bullet-list) <a id="bullet-list"></a> if its constituent list
-items begin with [bullet list markers](#bullet-list-marker).
-
-The [start number](#start-number) <a id="start-number"></a>
-of an [ordered list](#ordered-list) is determined by the list number of
-its initial list item. The numbers of subsequent list items are
-disregarded.
-
-A list is [loose](#loose) if it any of its constituent list items are
-separated by blank lines, or if any of its constituent list items
-directly contain two block-level elements with a blank line between
-them. Otherwise a list is [tight](#tight). (The difference in HTML output
-is that paragraphs in a loose with are wrapped in `<p>` tags, while
-paragraphs in a tight list are not.)
-
-Changing the bullet or ordered list delimiter starts a new list:
-
-.
-- foo
-- bar
-+ baz
-.
-<ul>
-<li>foo</li>
-<li>bar</li>
-</ul>
-<ul>
-<li>baz</li>
-</ul>
-.
-
-.
-1. foo
-2. bar
-3) baz
-.
-<ol>
-<li>foo</li>
-<li>bar</li>
-</ol>
-<ol start="3">
-<li>baz</li>
-</ol>
-.
-
-There can be blank lines between items, but two blank lines end
-a list:
-
-.
-- foo
-
-- bar
-
-
-- baz
-.
-<ul>
-<li><p>foo</p></li>
-<li><p>bar</p></li>
-</ul>
-<ul>
-<li>baz</li>
-</ul>
-.
-
-As illustrated above in the section on [list items](#list-item),
-two blank lines between blocks *within* a list item will also end a
-list:
-
-.
-- foo
-
-
- bar
-- baz
-.
-<ul>
-<li>foo</li>
-</ul>
-<p>bar</p>
-<ul>
-<li>baz</li>
-</ul>
-.
-
-Indeed, two blank lines will end *all* containing lists:
-
-.
-- foo
- - bar
- - baz
-
-
- bim
-.
-<ul>
-<li>foo
-<ul>
-<li>bar
-<ul>
-<li>baz</li>
-</ul></li>
-</ul></li>
-</ul>
-<pre><code> bim
-</code></pre>
-.
-
-Thus, two blank lines can be used to separate consecutive lists of
-the same type, or to separate a list from an indented code block
-that would otherwise be parsed as a subparagraph of the final list
-item:
-
-.
-- foo
-- bar
-
-
-- baz
-- bim
-.
-<ul>
-<li>foo</li>
-<li>bar</li>
-</ul>
-<ul>
-<li>baz</li>
-<li>bim</li>
-</ul>
-.
-
-.
-- foo
-
- notcode
-
-- foo
-
-
- code
-.
-<ul>
-<li><p>foo</p>
-<p>notcode</p></li>
-<li><p>foo</p></li>
-</ul>
-<pre><code>code
-</code></pre>
-.
-
-List items need not be indented to the same level. The following
-list items will be treated as items at the same list level,
-since none is indented enough to belong to the previous list
-item:
-
-.
-- a
- - b
- - c
- - d
- - e
- - f
-- g
-.
-<ul>
-<li>a</li>
-<li>b</li>
-<li>c</li>
-<li>d</li>
-<li>e</li>
-<li>f</li>
-<li>g</li>
-</ul>
-.
-
-This is a loose list, because there is a blank line between
-two of the list items:
-
-.
-- a
-- b
-
-- c
-.
-<ul>
-<li><p>a</p></li>
-<li><p>b</p></li>
-<li><p>c</p></li>
-</ul>
-.
-
-So is this, with a empty second item:
-
-.
-* a
-*
-
-* c
-.
-<ul>
-<li><p>a</p></li>
-<li></li>
-<li><p>c</p></li>
-</ul>
-.
-
-These are loose lists, even though there is no space between the items,
-because one of the items directly contains two block-level elements
-with a blank line between them:
-
-.
-- a
-- b
-
- c
-- d
-.
-<ul>
-<li><p>a</p></li>
-<li><p>b</p>
-<p>c</p></li>
-<li><p>d</p></li>
-</ul>
-.
-
-.
-- a
-- b
-
- [ref]: /url
-- d
-.
-<ul>
-<li><p>a</p></li>
-<li><p>b</p></li>
-<li><p>d</p></li>
-</ul>
-.
-
-This is a tight list, because the blank lines are in a code block:
-
-.
-- a
-- ```
- b
-
-
- ```
-- c
-.
-<ul>
-<li>a</li>
-<li><pre><code>b
-
-
-</code></pre></li>
-<li>c</li>
-</ul>
-.
-
-This is a tight list, because the blank line is between two
-paragraphs of a sublist. So the inner list is loose while
-the other list is tight:
-
-.
-- a
- - b
-
- c
-- d
-.
-<ul>
-<li>a
-<ul>
-<li><p>b</p>
-<p>c</p></li>
-</ul></li>
-<li>d</li>
-</ul>
-.
-
-This is a tight list, because the blank line is inside the
-block quote:
-
-.
-* a
- > b
- >
-* c
-.
-<ul>
-<li>a
-<blockquote>
-<p>b</p>
-</blockquote></li>
-<li>c</li>
-</ul>
-.
-
-This list is tight, because the consecutive block elements
-are not separated by blank lines:
-
-.
-- a
- > b
- ```
- c
- ```
-- d
-.
-<ul>
-<li>a
-<blockquote>
-<p>b</p>
-</blockquote>
-<pre><code>c
-</code></pre></li>
-<li>d</li>
-</ul>
-.
-
-A single-paragraph list is tight:
-
-.
-- a
-.
-<ul>
-<li>a</li>
-</ul>
-.
-
-.
-- a
- - b
-.
-<ul>
-<li>a
-<ul>
-<li>b</li>
-</ul></li>
-</ul>
-.
-
-Here the outer list is loose, the inner list tight:
-
-.
-* foo
- * bar
-
- baz
-.
-<ul>
-<li><p>foo</p>
-<ul>
-<li>bar</li>
-</ul>
-<p>baz</p></li>
-</ul>
-.
-
-.
-- a
- - b
- - c
-
-- d
- - e
- - f
-.
-<ul>
-<li><p>a</p>
-<ul>
-<li>b</li>
-<li>c</li>
-</ul></li>
-<li><p>d</p>
-<ul>
-<li>e</li>
-<li>f</li>
-</ul></li>
-</ul>
-.
-
-# Inlines
-
-Inlines are parsed sequentially from the beginning of the character
-stream to the end (left to right, in left-to-right languages).
-Thus, for example, in
-
-.
-`hi`lo`
-.
-<p><code>hi</code>lo`</p>
-.
-
-`hi` is parsed as code, leaving the backtick at the end as a literal
-backtick.
-
-## Backslash escapes
-
-Any ASCII punctuation character may be backslash-escaped:
-
-.
-\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~
-.
-<p>!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^_`{|}~</p>
-.
-
-Backslashes before other characters are treated as literal
-backslashes:
-
-.
-\→\A\a\ \3\φ\«
-.
-<p>\ \A\a\ \3\φ\«</p>
-.
-
-Escaped characters are treated as regular characters and do
-not have their usual Markdown meanings:
-
-.
-\*not emphasized*
-\<br/> not a tag
-\[not a link](/foo)
-\`not code`
-1\. not a list
-\* not a list
-\# not a header
-\[foo]: /url "not a reference"
-.
-<p>*not emphasized*
-&lt;br/&gt; not a tag
-[not a link](/foo)
-`not code`
-1. not a list
-* not a list
-# not a header
-[foo]: /url &quot;not a reference&quot;</p>
-.
-
-If a backslash is itself escaped, the following character is not:
-
-.
-\\*emphasis*
-.
-<p>\<em>emphasis</em></p>
-.
-
-A backslash at the end of the line is a hard line break:
-
-.
-foo\
-bar
-.
-<p>foo<br />
-bar</p>
-.
-
-Backslash escapes do not work in code blocks, code spans, autolinks, or
-raw HTML:
-
-.
-`` \[\` ``
-.
-<p><code>\[\`</code></p>
-.
-
-.
- \[\]
-.
-<pre><code>\[\]
-</code></pre>
-.
-
-.
-~~~
-\[\]
-~~~
-.
-<pre><code>\[\]
-</code></pre>
-.
-
-.
-<http://google.com?find=\*>
-.
-<p><a href="http://google.com?find=%5C*">http://google.com?find=\*</a></p>
-.
-
-.
-<a href="/bar\/)">
-.
-<p><a href="/bar\/)"></p>
-.
-
-But they work in all other contexts, including URLs and link titles,
-link references, and info strings in [fenced code
-blocks](#fenced-code-block):
-
-.
-[foo](/bar\* "ti\*tle")
-.
-<p><a href="/bar*" title="ti*tle">foo</a></p>
-.
-
-.
-[foo]
-
-[foo]: /bar\* "ti\*tle"
-.
-<p><a href="/bar*" title="ti*tle">foo</a></p>
-.
-
-.
-``` foo\+bar
-foo
-```
-.
-<pre><code class="language-foo+bar">foo
-</code></pre>
-.
-
-
-## Entities
-
-With the goal of making this standard as HTML-agnostic as possible, all HTML valid HTML Entities in any
-context are recognized as such and converted into their actual values (i.e. the UTF8 characters representing
-the entity itself) before they are stored in the AST.
-
-This allows implementations that target HTML output to trivially escape the entities when generating HTML,
-and simplifies the job of implementations targetting other languages, as these will only need to handle the
-UTF8 chars and need not be HTML-entity aware.
-
-[Named entities](#name-entities) <a id="named-entities"></a> consist of `&`
-+ any of the valid HTML5 entity names + `;`. The [following document](http://www.whatwg.org/specs/web-apps/current-work/multipage/entities.json)
-is used as an authoritative source of the valid entity names and their corresponding codepoints.
-
-Conforming implementations that target Markdown don't need to generate entities for all the valid
-named entities that exist, with the exception of `"` (`&quot;`), `&` (`&amp;`), `<` (`&lt;`) and `>` (`&gt;`),
-which always need to be written as entities for security reasons.
-
-.
-&nbsp; &amp; &copy; &AElig; &Dcaron; &frac34; &HilbertSpace; &DifferentialD; &ClockwiseContourIntegral;
-.
-<p>  &amp; © Æ Ď ¾ ℋ ⅆ ∲</p>
-.
-
-[Decimal entities](#decimal-entities) <a id="decimal-entities"></a>
-consist of `&#` + a string of 1--8 arabic digits + `;`. Again, these entities need to be recognised
-and tranformed into their corresponding UTF8 codepoints. Invalid Unicode codepoints will be written
-as the "unknown codepoint" character (`0xFFFD`)
-
-.
-&#35; &#1234; &#992; &#98765432;
-.
-<p># Ӓ Ϡ �</p>
-.
-
-[Hexadecimal entities](#hexadecimal-entities) <a id="hexadecimal-entities"></a>
-consist of `&#` + either `X` or `x` + a string of 1-8 hexadecimal digits
-+ `;`. They will also be parsed and turned into their corresponding UTF8 values in the AST.
-
-.
-&#X22; &#XD06; &#xcab;
-.
-<p>&quot; ആ ಫ</p>
-.
-
-Here are some nonentities:
-
-.
-&nbsp &x; &#; &#x; &ThisIsWayTooLongToBeAnEntityIsntIt; &hi?;
-.
-<p>&amp;nbsp &amp;x; &amp;#; &amp;#x; &amp;ThisIsWayTooLongToBeAnEntityIsntIt; &amp;hi?;</p>
-.
-
-Although HTML5 does accept some entities without a trailing semicolon
-(such as `&copy`), these are not recognized as entities here, because it makes the grammar too ambiguous:
-
-.
-&copy
-.
-<p>&amp;copy</p>
-.
-
-Strings that are not on the list of HTML5 named entities are not recognized as entities either:
-
-.
-&MadeUpEntity;
-.
-<p>&amp;MadeUpEntity;</p>
-.
-
-Entities are recognized in any context besides code spans or
-code blocks, including raw HTML, URLs, [link titles](#link-title), and
-[fenced code block](#fenced-code-block) info strings:
-
-.
-<a href="&ouml;&ouml;.html">
-.
-<p><a href="&ouml;&ouml;.html"></p>
-.
-
-.
-[foo](/f&ouml;&ouml; "f&ouml;&ouml;")
-.
-<p><a href="/f%C3%B6%C3%B6" title="föö">foo</a></p>
-.
-
-.
-[foo]
-
-[foo]: /f&ouml;&ouml; "f&ouml;&ouml;"
-.
-<p><a href="/f%C3%B6%C3%B6" title="föö">foo</a></p>
-.
-
-.
-``` f&ouml;&ouml;
-foo
-```
-.
-<pre><code class="language-föö">foo
-</code></pre>
-.
-
-Entities are treated as literal text in code spans and code blocks:
-
-.
-`f&ouml;&ouml;`
-.
-<p><code>f&amp;ouml;&amp;ouml;</code></p>
-.
-
-.
- f&ouml;f&ouml;
-.
-<pre><code>f&amp;ouml;f&amp;ouml;
-</code></pre>
-.
-
-## Code span
-
-A [backtick string](#backtick-string) <a id="backtick-string"></a>
-is a string of one or more backtick characters (`` ` ``) that is neither
-preceded nor followed by a backtick.
-
-A code span begins with a backtick string and ends with a backtick
-string of equal length. The contents of the code span are the
-characters between the two backtick strings, with leading and trailing
-spaces and newlines removed, and consecutive spaces and newlines
-collapsed to single spaces.
-
-This is a simple code span:
-
-.
-`foo`
-.
-<p><code>foo</code></p>
-.
-
-Here two backticks are used, because the code contains a backtick.
-This example also illustrates stripping of leading and trailing spaces:
-
-.
-`` foo ` bar ``
-.
-<p><code>foo ` bar</code></p>
-.
-
-This example shows the motivation for stripping leading and trailing
-spaces:
-
-.
-` `` `
-.
-<p><code>``</code></p>
-.
-
-Newlines are treated like spaces:
-
-.
-``
-foo
-``
-.
-<p><code>foo</code></p>
-.
-
-Interior spaces and newlines are collapsed into single spaces, just
-as they would be by a browser:
-
-.
-`foo bar
- baz`
-.
-<p><code>foo bar baz</code></p>
-.
-
-Q: Why not just leave the spaces, since browsers will collapse them
-anyway? A: Because we might be targeting a non-HTML format, and we
-shouldn't rely on HTML-specific rendering assumptions.
-
-(Existing implementations differ in their treatment of internal
-spaces and newlines. Some, including `Markdown.pl` and
-`showdown`, convert an internal newline into a `<br />` tag.
-But this makes things difficult for those who like to hard-wrap
-their paragraphs, since a line break in the midst of a code
-span will cause an unintended line break in the output. Others
-just leave internal spaces as they are, which is fine if only
-HTML is being targeted.)
-
-.
-`foo `` bar`
-.
-<p><code>foo `` bar</code></p>
-.
-
-Note that backslash escapes do not work in code spans. All backslashes
-are treated literally:
-
-.
-`foo\`bar`
-.
-<p><code>foo\</code>bar`</p>
-.
-
-Backslash escapes are never needed, because one can always choose a
-string of *n* backtick characters as delimiters, where the code does
-not contain any strings of exactly *n* backtick characters.
-
-Code span backticks have higher precedence than any other inline
-constructs except HTML tags and autolinks. Thus, for example, this is
-not parsed as emphasized text, since the second `*` is part of a code
-span:
-
-.
-*foo`*`
-.
-<p>*foo<code>*</code></p>
-.
-
-And this is not parsed as a link:
-
-.
-[not a `link](/foo`)
-.
-<p>[not a <code>link](/foo</code>)</p>
-.
-
-But this is a link:
-
-.
-<http://foo.bar.`baz>`
-.
-<p><a href="http://foo.bar.%60baz">http://foo.bar.`baz</a>`</p>
-.
-
-And this is an HTML tag:
-
-.
-<a href="`">`
-.
-<p><a href="`">`</p>
-.
-
-When a backtick string is not closed by a matching backtick string,
-we just have literal backticks:
-
-.
-```foo``
-.
-<p>```foo``</p>
-.
-
-.
-`foo
-.
-<p>`foo</p>
-.
-
-## Emphasis and strong emphasis
-
-John Gruber's original [Markdown syntax
-description](http://daringfireball.net/projects/markdown/syntax#em) says:
-
-> Markdown treats asterisks (`*`) and underscores (`_`) as indicators of
-> emphasis. Text wrapped with one `*` or `_` will be wrapped with an HTML
-> `<em>` tag; double `*`'s or `_`'s will be wrapped with an HTML `<strong>`
-> tag.
-
-This is enough for most users, but these rules leave much undecided,
-especially when it comes to nested emphasis. The original
-`Markdown.pl` test suite makes it clear that triple `***` and
-`___` delimiters can be used for strong emphasis, and most
-implementations have also allowed the following patterns:
-
-``` markdown
-***strong emph***
-***strong** in emph*
-***emph* in strong**
-**in strong *emph***
-*in emph **strong***
-```
-
-The following patterns are less widely supported, but the intent
-is clear and they are useful (especially in contexts like bibliography
-entries):
-
-``` markdown
-*emph *with emph* in it*
-**strong **with strong** in it**
-```
-
-Many implementations have also restricted intraword emphasis to
-the `*` forms, to avoid unwanted emphasis in words containing
-internal underscores. (It is best practice to put these in code
-spans, but users often do not.)
-
-``` markdown
-internal emphasis: foo*bar*baz
-no emphasis: foo_bar_baz
-```
-
-The following rules capture all of these patterns, while allowing
-for efficient parsing strategies that do not backtrack:
-
-1. A single `*` character [can open emphasis](#can-open-emphasis)
- <a id="can-open-emphasis"></a> iff
-
- (a) it is not part of a sequence of four or more unescaped `*`s,
- (b) it is not followed by whitespace, and
- (c) either it is not followed by a `*` character or it is
- followed immediately by strong emphasis.
-
-2. A single `_` character [can open emphasis](#can-open-emphasis) iff
-
- (a) it is not part of a sequence of four or more unescaped `_`s,
- (b) it is not followed by whitespace,
- (c) it is not preceded by an ASCII alphanumeric character, and
- (d) either it is not followed by a `_` character or it is
- followed immediately by strong emphasis.
-
-3. A single `*` character [can close emphasis](#can-close-emphasis)
- <a id="can-close-emphasis"></a> iff
-
- (a) it is not part of a sequence of four or more unescaped `*`s, and
- (b) it is not preceded by whitespace.
-
-4. A single `_` character [can close emphasis](#can-close-emphasis) iff
-
- (a) it is not part of a sequence of four or more unescaped `_`s,
- (b) it is not preceded by whitespace, and
- (c) it is not followed by an ASCII alphanumeric character.
-
-5. A double `**` [can open strong emphasis](#can-open-strong-emphasis)
- <a id="can-open-strong-emphasis" ></a> iff
-
- (a) it is not part of a sequence of four or more unescaped `*`s,
- (b) it is not followed by whitespace, and
- (c) either it is not followed by a `*` character or it is
- followed immediately by emphasis.
-
-6. A double `__` [can open strong emphasis](#can-open-strong-emphasis)
- iff
-
- (a) it is not part of a sequence of four or more unescaped `_`s,
- (b) it is not followed by whitespace, and
- (c) it is not preceded by an ASCII alphanumeric character, and
- (d) either it is not followed by a `_` character or it is
- followed immediately by emphasis.
-
-7. A double `**` [can close strong emphasis](#can-close-strong-emphasis)
- <a id="can-close-strong-emphasis" ></a> iff
-
- (a) it is not part of a sequence of four or more unescaped `*`s, and
- (b) it is not preceded by whitespace.
-
-8. A double `__` [can close strong emphasis](#can-close-strong-emphasis)
- iff
-
- (a) it is not part of a sequence of four or more unescaped `_`s,
- (b) it is not preceded by whitespace, and
- (c) it is not followed by an ASCII alphanumeric character.
-
-9. Emphasis begins with a delimiter that [can open
- emphasis](#can-open-emphasis) and includes inlines parsed
- sequentially until a delimiter that [can close
- emphasis](#can-close-emphasis), and that uses the same
- character (`_` or `*`) as the opening delimiter, is reached.
-
-10. Strong emphasis begins with a delimiter that [can open strong
- emphasis](#can-open-strong-emphasis) and includes inlines parsed
- sequentially until a delimiter that [can close strong
- emphasis](#can-close-strong-emphasis), and that uses the
- same character (`_` or `*`) as the opening delimiter, is reached.
-
-These rules can be illustrated through a series of examples.
-
-Simple emphasis:
-
-.
-*foo bar*
-.
-<p><em>foo bar</em></p>
-.
-
-.
-_foo bar_
-.
-<p><em>foo bar</em></p>
-.
-
-Simple strong emphasis:
-
-.
-**foo bar**
-.
-<p><strong>foo bar</strong></p>
-.
-
-.
-__foo bar__
-.
-<p><strong>foo bar</strong></p>
-.
-
-Emphasis can continue over line breaks:
-
-.
-*foo
-bar*
-.
-<p><em>foo
-bar</em></p>
-.
-
-.
-_foo
-bar_
-.
-<p><em>foo
-bar</em></p>
-.
-
-.
-**foo
-bar**
-.
-<p><strong>foo
-bar</strong></p>
-.
-
-.
-__foo
-bar__
-.
-<p><strong>foo
-bar</strong></p>
-.
-
-Emphasis can contain other inline constructs:
-
-.
-*foo [bar](/url)*
-.
-<p><em>foo <a href="/url">bar</a></em></p>
-.
-
-.
-_foo [bar](/url)_
-.
-<p><em>foo <a href="/url">bar</a></em></p>
-.
-
-.
-**foo [bar](/url)**
-.
-<p><strong>foo <a href="/url">bar</a></strong></p>
-.
-
-.
-__foo [bar](/url)__
-.
-<p><strong>foo <a href="/url">bar</a></strong></p>
-.
-
-Symbols contained in other inline constructs will not
-close emphasis:
-
-.
-*foo [bar*](/url)
-.
-<p>*foo <a href="/url">bar*</a></p>
-.
-
-.
-_foo [bar_](/url)
-.
-<p>_foo <a href="/url">bar_</a></p>
-.
-
-.
-**<a href="**">
-.
-<p>**<a href="**"></p>
-.
-
-.
-__<a href="__">
-.
-<p>__<a href="__"></p>
-.
-
-.
-*a `*`*
-.
-<p><em>a <code>*</code></em></p>
-.
-
-.
-_a `_`_
-.
-<p><em>a <code>_</code></em></p>
-.
-
-.
-**a<http://foo.bar?q=**>
-.
-<p>**a<a href="http://foo.bar?q=**">http://foo.bar?q=**</a></p>
-.
-
-.
-__a<http://foo.bar?q=__>
-.
-<p>__a<a href="http://foo.bar?q=__">http://foo.bar?q=__</a></p>
-.
-
-This is not emphasis, because the opening delimiter is
-followed by white space:
-
-.
-and * foo bar*
-.
-<p>and * foo bar*</p>
-.
-
-.
-_ foo bar_
-.
-<p>_ foo bar_</p>
-.
-
-.
-and ** foo bar**
-.
-<p>and ** foo bar**</p>
-.
-
-.
-__ foo bar__
-.
-<p>__ foo bar__</p>
-.
-
-This is not emphasis, because the closing delimiter is
-preceded by white space:
-
-.
-and *foo bar *
-.
-<p>and *foo bar *</p>
-.
-
-.
-and _foo bar _
-.
-<p>and _foo bar _</p>
-.
-
-.
-and **foo bar **
-.
-<p>and **foo bar **</p>
-.
-
-.
-and __foo bar __
-.
-<p>and __foo bar __</p>
-.
-
-The rules imply that a sequence of four or more unescaped `*` or
-`_` characters will always be parsed as a literal string:
-
-.
-****hi****
-.
-<p>****hi****</p>
-.
-
-.
-_____hi_____
-.
-<p>_____hi_____</p>
-.
-
-.
-Sign here: _________
-.
-<p>Sign here: _________</p>
-.
-
-The rules also imply that there can be no empty emphasis or strong
-emphasis:
-
-.
-** is not an empty emphasis
-.
-<p>** is not an empty emphasis</p>
-.
-
-.
-**** is not an empty strong emphasis
-.
-<p>**** is not an empty strong emphasis</p>
-.
-
-To include `*` or `_` in emphasized sections, use backslash escapes
-or code spans:
-
-.
-*here is a \**
-.
-<p><em>here is a *</em></p>
-.
-
-.
-__this is a double underscore (`__`)__
-.
-<p><strong>this is a double underscore (<code>__</code>)</strong></p>
-.
-
-`*` delimiters allow intra-word emphasis; `_` delimiters do not:
-
-.
-foo*bar*baz
-.
-<p>foo<em>bar</em>baz</p>
-.
-
-.
-foo_bar_baz
-.
-<p>foo_bar_baz</p>
-.
-
-.
-foo__bar__baz
-.
-<p>foo__bar__baz</p>
-.
-
-.
-_foo_bar_baz_
-.
-<p><em>foo_bar_baz</em></p>
-.
-
-.
-11*15*32
-.
-<p>11<em>15</em>32</p>
-.
-
-.
-11_15_32
-.
-<p>11_15_32</p>
-.
-
-Internal underscores will be ignored in underscore-delimited
-emphasis:
-
-.
-_foo_bar_baz_
-.
-<p><em>foo_bar_baz</em></p>
-.
-
-.
-__foo__bar__baz__
-.
-<p><strong>foo__bar__baz</strong></p>
-.
-
-The rules are sufficient for the following nesting patterns:
-
-.
-***foo bar***
-.
-<p><strong><em>foo bar</em></strong></p>
-.
-
-.
-___foo bar___
-.
-<p><strong><em>foo bar</em></strong></p>
-.
-
-.
-***foo** bar*
-.
-<p><em><strong>foo</strong> bar</em></p>
-.
-
-.
-___foo__ bar_
-.
-<p><em><strong>foo</strong> bar</em></p>
-.
-
-.
-***foo* bar**
-.
-<p><strong><em>foo</em> bar</strong></p>
-.
-
-.
-___foo_ bar__
-.
-<p><strong><em>foo</em> bar</strong></p>
-.
-
-.
-*foo **bar***
-.
-<p><em>foo <strong>bar</strong></em></p>
-.
-
-.
-_foo __bar___
-.
-<p><em>foo <strong>bar</strong></em></p>
-.
-
-.
-**foo *bar***
-.
-<p><strong>foo <em>bar</em></strong></p>
-.
-
-.
-__foo _bar___
-.
-<p><strong>foo <em>bar</em></strong></p>
-.
-
-.
-*foo **bar***
-.
-<p><em>foo <strong>bar</strong></em></p>
-.
-
-.
-_foo __bar___
-.
-<p><em>foo <strong>bar</strong></em></p>
-.
-
-.
-*foo *bar* baz*
-.
-<p><em>foo <em>bar</em> baz</em></p>
-.
-
-.
-_foo _bar_ baz_
-.
-<p><em>foo <em>bar</em> baz</em></p>
-.
-
-.
-**foo **bar** baz**
-.
-<p><strong>foo <strong>bar</strong> baz</strong></p>
-.
-
-.
-__foo __bar__ baz__
-.
-<p><strong>foo <strong>bar</strong> baz</strong></p>
-.
-
-.
-*foo **bar** baz*
-.
-<p><em>foo <strong>bar</strong> baz</em></p>
-.
-
-.
-_foo __bar__ baz_
-.
-<p><em>foo <strong>bar</strong> baz</em></p>
-.
-
-.
-**foo *bar* baz**
-.
-<p><strong>foo <em>bar</em> baz</strong></p>
-.
-
-.
-__foo _bar_ baz__
-.
-<p><strong>foo <em>bar</em> baz</strong></p>
-.
-
-Note that you cannot nest emphasis directly inside emphasis
-using the same delimeter, or strong emphasis directly inside
-strong emphasis:
-
-.
-**foo**
-.
-<p><strong>foo</strong></p>
-.
-
-.
-****foo****
-.
-<p>****foo****</p>
-.
-
-For these nestings, you need to switch delimiters:
-
-.
-*_foo_*
-.
-<p><em><em>foo</em></em></p>
-.
-
-.
-**__foo__**
-.
-<p><strong><strong>foo</strong></strong></p>
-.
-
-Note that a `*` followed by a `*` can close emphasis, and
-a `**` followed by a `*` can close strong emphasis (and
-similarly for `_` and `__`):
-
-.
-*foo**
-.
-<p><em>foo</em>*</p>
-.
-
-.
-*foo *bar**
-.
-<p><em>foo <em>bar</em></em></p>
-.
-
-.
-**foo***
-.
-<p><strong>foo</strong>*</p>
-.
-
-.
-***foo* bar***
-.
-<p><strong><em>foo</em> bar</strong>*</p>
-.
-
-.
-***foo** bar***
-.
-<p><em><strong>foo</strong> bar</em>**</p>
-.
-
-The following contains no strong emphasis, because the opening
-delimiter is closed by the first `*` before `bar`:
-
-.
-*foo**bar***
-.
-<p><em>foo</em><em>bar</em>**</p>
-.
-
-However, a string of four or more `****` can never close emphasis:
-
-.
-*foo****
-.
-<p>*foo****</p>
-.
-
-Note that there are some asymmetries here:
-
-.
-*foo**
-
-**foo*
-.
-<p><em>foo</em>*</p>
-<p>**foo*</p>
-.
-
-.
-*foo *bar**
-
-**foo* bar*
-.
-<p><em>foo <em>bar</em></em></p>
-<p>**foo* bar*</p>
-.
-
-More cases with mismatched delimiters:
-
-.
-**foo* bar*
-.
-<p>**foo* bar*</p>
-.
-
-.
-*bar***
-.
-<p><em>bar</em>**</p>
-.
-
-.
-***foo*
-.
-<p>***foo*</p>
-.
-
-.
-**bar***
-.
-<p><strong>bar</strong>*</p>
-.
-
-.
-***foo**
-.
-<p>***foo**</p>
-.
-
-.
-***foo *bar*
-.
-<p>***foo <em>bar</em></p>
-.
-
-## Links
-
-A link contains a [link label](#link-label) (the visible text),
-a [destination](#destination) (the URI that is the link destination),
-and optionally a [link title](#link-title). There are two basic kinds
-of links in Markdown. In [inline links](#inline-links) the destination
-and title are given immediately after the label. In [reference
-links](#reference-links) the destination and title are defined elsewhere
-in the document.
-
-A [link label](#link-label) <a id="link-label"></a> consists of
-
-- an opening `[`, followed by
-- zero or more backtick code spans, autolinks, HTML tags, link labels,
- backslash-escaped ASCII punctuation characters, or non-`]` characters,
- followed by
-- a closing `]`.
-
-These rules are motivated by the following intuitive ideas:
-
-- A link label is a container for inline elements.
-- The square brackets bind more tightly than emphasis markers,
- but less tightly than `<>` or `` ` ``.
-- Link labels may contain material in matching square brackets.
-
-A [link destination](#link-destination) <a id="link-destination"></a>
-consists of either
-
-- a sequence of zero or more characters between an opening `<` and a
- closing `>` that contains no line breaks or unescaped `<` or `>`
- characters, or
-
-- a nonempty sequence of characters that does not include
- ASCII space or control characters, and includes parentheses
- only if (a) they are backslash-escaped or (b) they are part of
- a balanced pair of unescaped parentheses that is not itself
- inside a balanced pair of unescaped paretheses.
-
-A [link title](#link-title) <a id="link-title"></a> consists of either
-
-- a sequence of zero or more characters between straight double-quote
- characters (`"`), including a `"` character only if it is
- backslash-escaped, or
-
-- a sequence of zero or more characters between straight single-quote
- characters (`'`), including a `'` character only if it is
- backslash-escaped, or
-
-- a sequence of zero or more characters between matching parentheses
- (`(...)`), including a `)` character only if it is backslash-escaped.
-
-An [inline link](#inline-link) <a id="inline-link"></a>
-consists of a [link label](#link-label) followed immediately
-by a left parenthesis `(`, optional whitespace,
-an optional [link destination](#link-destination),
-an optional [link title](#link-title) separated from the link
-destination by whitespace, optional whitespace, and a right
-parenthesis `)`. The link's text consists of the label (excluding
-the enclosing square brackets) parsed as inlines. The link's
-URI consists of the link destination, excluding enclosing `<...>` if
-present, with backslash-escapes in effect as described above. The
-link's title consists of the link title, excluding its enclosing
-delimiters, with backslash-escapes in effect as described above.
-
-Here is a simple inline link:
-
-.
-[link](/uri "title")
-.
-<p><a href="/uri" title="title">link</a></p>
-.
-
-The title may be omitted:
-
-.
-[link](/uri)
-.
-<p><a href="/uri">link</a></p>
-.
-
-Both the title and the destination may be omitted:
-
-.
-[link]()
-.
-<p><a href="">link</a></p>
-.
-
-.
-[link](<>)
-.
-<p><a href="">link</a></p>
-.
-
-
-If the destination contains spaces, it must be enclosed in pointy
-braces:
-
-.
-[link](/my uri)
-.
-<p>[link](/my uri)</p>
-.
-
-.
-[link](</my uri>)
-.
-<p><a href="/my%20uri">link</a></p>
-.
-
-The destination cannot contain line breaks, even with pointy braces:
-
-.
-[link](foo
-bar)
-.
-<p>[link](foo
-bar)</p>
-.
-
-One level of balanced parentheses is allowed without escaping:
-
-.
-[link]((foo)and(bar))
-.
-<p><a href="(foo)and(bar)">link</a></p>
-.
-
-However, if you have parentheses within parentheses, you need to escape
-or use the `<...>` form:
-
-.
-[link](foo(and(bar)))
-.
-<p>[link](foo(and(bar)))</p>
-.
-
-.
-[link](foo(and\(bar\)))
-.
-<p><a href="foo(and(bar))">link</a></p>
-.
-
-.
-[link](<foo(and(bar))>)
-.
-<p><a href="foo(and(bar))">link</a></p>
-.
-
-Parentheses and other symbols can also be escaped, as usual
-in Markdown:
-
-.
-[link](foo\)\:)
-.
-<p><a href="foo):">link</a></p>
-.
-
-URL-escaping and should be left alone inside the destination, as all URL-escaped characters
-are also valid URL characters. HTML entities in the destination will be parsed into their UTF8
-codepoints, as usual, and optionally URL-escaped when written as HTML.
-
-.
-[link](foo%20b&auml;)
-.
-<p><a href="foo%20b%C3%A4">link</a></p>
-.
-
-Note that, because titles can often be parsed as destinations,
-if you try to omit the destination and keep the title, you'll
-get unexpected results:
-
-.
-[link]("title")
-.
-<p><a href="%22title%22">link</a></p>
-.
-
-Titles may be in single quotes, double quotes, or parentheses:
-
-.
-[link](/url "title")
-[link](/url 'title')
-[link](/url (title))
-.
-<p><a href="/url" title="title">link</a>
-<a href="/url" title="title">link</a>
-<a href="/url" title="title">link</a></p>
-.
-
-Backslash escapes and entities may be used in titles:
-
-.
-[link](/url "title \"&quot;")
-.
-<p><a href="/url" title="title &quot;&quot;">link</a></p>
-.
-
-Nested balanced quotes are not allowed without escaping:
-
-.
-[link](/url "title "and" title")
-.
-<p>[link](/url &quot;title &quot;and&quot; title&quot;)</p>
-.
-
-But it is easy to work around this by using a different quote type:
-
-.
-[link](/url 'title "and" title')
-.
-<p><a href="/url" title="title &quot;and&quot; title">link</a></p>
-.
-
-(Note: `Markdown.pl` did allow double quotes inside a double-quoted
-title, and its test suite included a test demonstrating this.
-But it is hard to see a good rationale for the extra complexity this
-brings, since there are already many ways---backslash escaping,
-entities, or using a different quote type for the enclosing title---to
-write titles containing double quotes. `Markdown.pl`'s handling of
-titles has a number of other strange features. For example, it allows
-single-quoted titles in inline links, but not reference links. And, in
-reference links but not inline links, it allows a title to begin with
-`"` and end with `)`. `Markdown.pl` 1.0.1 even allows titles with no closing
-quotation mark, though 1.0.2b8 does not. It seems preferable to adopt
-a simple, rational rule that works the same way in inline links and
-link reference definitions.)
-
-Whitespace is allowed around the destination and title:
-
-.
-[link]( /uri
- "title" )
-.
-<p><a href="/uri" title="title">link</a></p>
-.
-
-But it is not allowed between the link label and the
-following parenthesis:
-
-.
-[link] (/uri)
-.
-<p>[link] (/uri)</p>
-.
-
-Note that this is not a link, because the closing `]` occurs in
-an HTML tag:
-
-.
-[foo <bar attr="](baz)">
-.
-<p>[foo <bar attr="](baz)"></p>
-.
-
-
-There are three kinds of [reference links](#reference-link):
-<a id="reference-link"></a>
-
-A [full reference link](#full-reference-link) <a id="full-reference-link"></a>
-consists of a [link label](#link-label), optional whitespace, and
-another [link label](#link-label) that [matches](#matches) a
-[link reference definition](#link-reference-definition) elsewhere in the
-document.
-
-One label [matches](#matches) <a id="matches"></a>
-another just in case their normalized forms are equal. To normalize a
-label, perform the *unicode case fold* and collapse consecutive internal
-whitespace to a single space. If there are multiple matching reference
-link definitions, the one that comes first in the document is used. (It
-is desirable in such cases to emit a warning.)
-
-The contents of the first link label are parsed as inlines, which are
-used as the link's text. The link's URI and title are provided by the
-matching [link reference definition](#link-reference-definition).
-
-Here is a simple example:
-
-.
-[foo][bar]
-
-[bar]: /url "title"
-.
-<p><a href="/url" title="title">foo</a></p>
-.
-
-The first label can contain inline content:
-
-.
-[*foo\!*][bar]
-
-[bar]: /url "title"
-.
-<p><a href="/url" title="title"><em>foo!</em></a></p>
-.
-
-Matching is case-insensitive:
-
-.
-[foo][BaR]
-
-[bar]: /url "title"
-.
-<p><a href="/url" title="title">foo</a></p>
-.
-
-Unicode case fold is used:
-
-.
-[Толпой][Толпой] is a Russian word.
-
-[ТОЛПОЙ]: /url
-.
-<p><a href="/url">Толпой</a> is a Russian word.</p>
-.
-
-Consecutive internal whitespace is treated as one space for
-purposes of determining matching:
-
-.
-[Foo
- bar]: /url
-
-[Baz][Foo bar]
-.
-<p><a href="/url">Baz</a></p>
-.
-
-There can be whitespace between the two labels:
-
-.
-[foo] [bar]
-
-[bar]: /url "title"
-.
-<p><a href="/url" title="title">foo</a></p>
-.
-
-.
-[foo]
-[bar]
-
-[bar]: /url "title"
-.
-<p><a href="/url" title="title">foo</a></p>
-.
-
-When there are multiple matching [link reference
-definitions](#link-reference-definition), the first is used:
-
-.
-[foo]: /url1
-
-[foo]: /url2
-
-[bar][foo]
-.
-<p><a href="/url1">bar</a></p>
-.
-
-Note that matching is performed on normalized strings, not parsed
-inline content. So the following does not match, even though the
-labels define equivalent inline content:
-
-.
-[bar][foo\!]
-
-[foo!]: /url
-.
-<p>[bar][foo!]</p>
-.
-
-A [collapsed reference link](#collapsed-reference-link)
-<a id="collapsed-reference-link"></a> consists of a [link
-label](#link-label) that [matches](#matches) a [link reference
-definition](#link-reference-definition) elsewhere in the
-document, optional whitespace, and the string `[]`. The contents of the
-first link label are parsed as inlines, which are used as the link's
-text. The link's URI and title are provided by the matching reference
-link definition. Thus, `[foo][]` is equivalent to `[foo][foo]`.
-
-.
-[foo][]
-
-[foo]: /url "title"
-.
-<p><a href="/url" title="title">foo</a></p>
-.
-
-.
-[*foo* bar][]
-
-[*foo* bar]: /url "title"
-.
-<p><a href="/url" title="title"><em>foo</em> bar</a></p>
-.
-
-The link labels are case-insensitive:
-
-.
-[Foo][]
-
-[foo]: /url "title"
-.
-<p><a href="/url" title="title">Foo</a></p>
-.
-
-
-As with full reference links, whitespace is allowed
-between the two sets of brackets:
-
-.
-[foo]
-[]
-
-[foo]: /url "title"
-.
-<p><a href="/url" title="title">foo</a></p>
-.
-
-A [shortcut reference link](#shortcut-reference-link)
-<a id="shortcut-reference-link"></a> consists of a [link
-label](#link-label) that [matches](#matches) a [link reference
-definition](#link-reference-definition) elsewhere in the
-document and is not followed by `[]` or a link label.
-The contents of the first link label are parsed as inlines,
-which are used as the link's text. the link's URI and title
-are provided by the matching link reference definition.
-Thus, `[foo]` is equivalent to `[foo][]`.
-
-.
-[foo]
-
-[foo]: /url "title"
-.
-<p><a href="/url" title="title">foo</a></p>
-.
-
-.
-[*foo* bar]
-
-[*foo* bar]: /url "title"
-.
-<p><a href="/url" title="title"><em>foo</em> bar</a></p>
-.
-
-.
-[[*foo* bar]]
-
-[*foo* bar]: /url "title"
-.
-<p>[<a href="/url" title="title"><em>foo</em> bar</a>]</p>
-.
-
-The link labels are case-insensitive:
-
-.
-[Foo]
-
-[foo]: /url "title"
-.
-<p><a href="/url" title="title">Foo</a></p>
-.
-
-If you just want bracketed text, you can backslash-escape the
-opening bracket to avoid links:
-
-.
-\[foo]
-
-[foo]: /url "title"
-.
-<p>[foo]</p>
-.
-
-Note that this is a link, because link labels bind more tightly
-than emphasis:
-
-.
-[foo*]: /url
-
-*[foo*]
-.
-<p>*<a href="/url">foo*</a></p>
-.
-
-However, this is not, because link labels bind less
-tightly than code backticks:
-
-.
-[foo`]: /url
-
-[foo`]`
-.
-<p>[foo<code>]</code></p>
-.
-
-Link labels can contain matched square brackets:
-
-.
-[[[foo]]]
-
-[[[foo]]]: /url
-.
-<p><a href="/url">[[foo]]</a></p>
-.
-
-.
-[[[foo]]]
-
-[[[foo]]]: /url1
-[foo]: /url2
-.
-<p><a href="/url1">[[foo]]</a></p>
-.
-
-For non-matching brackets, use backslash escapes:
-
-.
-[\[foo]
-
-[\[foo]: /url
-.
-<p><a href="/url">[foo</a></p>
-.
-
-Full references take precedence over shortcut references:
-
-.
-[foo][bar]
-
-[foo]: /url1
-[bar]: /url2
-.
-<p><a href="/url2">foo</a></p>
-.
-
-In the following case `[bar][baz]` is parsed as a reference,
-`[foo]` as normal text:
-
-.
-[foo][bar][baz]
-
-[baz]: /url
-.
-<p>[foo]<a href="/url">bar</a></p>
-.
-
-Here, though, `[foo][bar]` is parsed as a reference, since
-`[bar]` is defined:
-
-.
-[foo][bar][baz]
-
-[baz]: /url1
-[bar]: /url2
-.
-<p><a href="/url2">foo</a><a href="/url1">baz</a></p>
-.
-
-Here `[foo]` is not parsed as a shortcut reference, because it
-is followed by a link label (even though `[bar]` is not defined):
-
-.
-[foo][bar][baz]
-
-[baz]: /url1
-[foo]: /url2
-.
-<p>[foo]<a href="/url1">bar</a></p>
-.
-
-
-## Images
-
-An (unescaped) exclamation mark (`!`) followed by a reference or
-inline link will be parsed as an image. The link label will be
-used as the image's alt text, and the link title, if any, will
-be used as the image's title.
-
-.
-![foo](/url "title")
-.
-<p><img src="/url" alt="foo" title="title" /></p>
-.
-
-.
-![foo *bar*]
-
-[foo *bar*]: train.jpg "train & tracks"
-.
-<p><img src="train.jpg" alt="foo &lt;em&gt;bar&lt;/em&gt;" title="train &amp; tracks" /></p>
-.
-
-.
-![foo *bar*][]
-
-[foo *bar*]: train.jpg "train & tracks"
-.
-<p><img src="train.jpg" alt="foo &lt;em&gt;bar&lt;/em&gt;" title="train &amp; tracks" /></p>
-.
-
-.
-![foo *bar*][foobar]
-
-[FOOBAR]: train.jpg "train & tracks"
-.
-<p><img src="train.jpg" alt="foo &lt;em&gt;bar&lt;/em&gt;" title="train &amp; tracks" /></p>
-.
-
-.
-![foo](train.jpg)
-.
-<p><img src="train.jpg" alt="foo" /></p>
-.
-
-.
-My ![foo bar](/path/to/train.jpg "title" )
-.
-<p>My <img src="/path/to/train.jpg" alt="foo bar" title="title" /></p>
-.
-
-.
-![foo](<url>)
-.
-<p><img src="url" alt="foo" /></p>
-.
-
-.
-![](/url)
-.
-<p><img src="/url" alt="" /></p>
-.
-
-Reference-style:
-
-.
-![foo] [bar]
-
-[bar]: /url
-.
-<p><img src="/url" alt="foo" /></p>
-.
-
-.
-![foo] [bar]
-
-[BAR]: /url
-.
-<p><img src="/url" alt="foo" /></p>
-.
-
-Collapsed:
-
-.
-![foo][]
-
-[foo]: /url "title"
-.
-<p><img src="/url" alt="foo" title="title" /></p>
-.
-
-.
-![*foo* bar][]
-
-[*foo* bar]: /url "title"
-.
-<p><img src="/url" alt="&lt;em&gt;foo&lt;/em&gt; bar" title="title" /></p>
-.
-
-The labels are case-insensitive:
-
-.
-![Foo][]
-
-[foo]: /url "title"
-.
-<p><img src="/url" alt="Foo" title="title" /></p>
-.
-
-As with full reference links, whitespace is allowed
-between the two sets of brackets:
-
-.
-![foo]
-[]
-
-[foo]: /url "title"
-.
-<p><img src="/url" alt="foo" title="title" /></p>
-.
-
-Shortcut:
-
-.
-![foo]
-
-[foo]: /url "title"
-.
-<p><img src="/url" alt="foo" title="title" /></p>
-.
-
-.
-![*foo* bar]
-
-[*foo* bar]: /url "title"
-.
-<p><img src="/url" alt="&lt;em&gt;foo&lt;/em&gt; bar" title="title" /></p>
-.
-
-.
-![[foo]]
-
-[[foo]]: /url "title"
-.
-<p><img src="/url" alt="[foo]" title="title" /></p>
-.
-
-The link labels are case-insensitive:
-
-.
-![Foo]
-
-[foo]: /url "title"
-.
-<p><img src="/url" alt="Foo" title="title" /></p>
-.
-
-If you just want bracketed text, you can backslash-escape the
-opening `!` and `[`:
-
-.
-\!\[foo]
-
-[foo]: /url "title"
-.
-<p>![foo]</p>
-.
-
-If you want a link after a literal `!`, backslash-escape the
-`!`:
-
-.
-\![foo]
-
-[foo]: /url "title"
-.
-<p>!<a href="/url" title="title">foo</a></p>
-.
-
-## Autolinks
-
-Autolinks are absolute URIs and email addresses inside `<` and `>`.
-They are parsed as links, with the URL or email address as the link
-label.
-
-A [URI autolink](#uri-autolink) <a id="uri-autolink"></a>
-consists of `<`, followed by an [absolute
-URI](#absolute-uri) not containing `<`, followed by `>`. It is parsed
-as a link to the URI, with the URI as the link's label.
-
-An [absolute URI](#absolute-uri), <a id="absolute-uri"></a>
-for these purposes, consists of a [scheme](#scheme) followed by a colon (`:`)
-followed by zero or more characters other than ASCII whitespace and
-control characters, `<`, and `>`. If the URI includes these characters,
-you must use percent-encoding (e.g. `%20` for a space).
-
-The following [schemes](#scheme) <a id="scheme"></a>
-are recognized (case-insensitive):
-`coap`, `doi`, `javascript`, `aaa`, `aaas`, `about`, `acap`, `cap`,
-`cid`, `crid`, `data`, `dav`, `dict`, `dns`, `file`, `ftp`, `geo`, `go`,
-`gopher`, `h323`, `http`, `https`, `iax`, `icap`, `im`, `imap`, `info`,
-`ipp`, `iris`, `iris.beep`, `iris.xpc`, `iris.xpcs`, `iris.lwz`, `ldap`,
-`mailto`, `mid`, `msrp`, `msrps`, `mtqp`, `mupdate`, `news`, `nfs`,
-`ni`, `nih`, `nntp`, `opaquelocktoken`, `pop`, `pres`, `rtsp`,
-`service`, `session`, `shttp`, `sieve`, `sip`, `sips`, `sms`, `snmp`,`
-soap.beep`, `soap.beeps`, `tag`, `tel`, `telnet`, `tftp`, `thismessage`,
-`tn3270`, `tip`, `tv`, `urn`, `vemmi`, `ws`, `wss`, `xcon`,
-`xcon-userid`, `xmlrpc.beep`, `xmlrpc.beeps`, `xmpp`, `z39.50r`,
-`z39.50s`, `adiumxtra`, `afp`, `afs`, `aim`, `apt`,` attachment`, `aw`,
-`beshare`, `bitcoin`, `bolo`, `callto`, `chrome`,` chrome-extension`,
-`com-eventbrite-attendee`, `content`, `cvs`,` dlna-playsingle`,
-`dlna-playcontainer`, `dtn`, `dvb`, `ed2k`, `facetime`, `feed`,
-`finger`, `fish`, `gg`, `git`, `gizmoproject`, `gtalk`, `hcp`, `icon`,
-`ipn`, `irc`, `irc6`, `ircs`, `itms`, `jar`, `jms`, `keyparc`, `lastfm`,
-`ldaps`, `magnet`, `maps`, `market`,` message`, `mms`, `ms-help`,
-`msnim`, `mumble`, `mvn`, `notes`, `oid`, `palm`, `paparazzi`,
-`platform`, `proxy`, `psyc`, `query`, `res`, `resource`, `rmi`, `rsync`,
-`rtmp`, `secondlife`, `sftp`, `sgn`, `skype`, `smb`, `soldat`,
-`spotify`, `ssh`, `steam`, `svn`, `teamspeak`, `things`, `udp`,
-`unreal`, `ut2004`, `ventrilo`, `view-source`, `webcal`, `wtai`,
-`wyciwyg`, `xfire`, `xri`, `ymsgr`.
-
-Here are some valid autolinks:
-
-.
-<http://foo.bar.baz>
-.
-<p><a href="http://foo.bar.baz">http://foo.bar.baz</a></p>
-.
-
-.
-<http://foo.bar.baz?q=hello&id=22&boolean>
-.
-<p><a href="http://foo.bar.baz?q=hello&amp;id=22&amp;boolean">http://foo.bar.baz?q=hello&amp;id=22&amp;boolean</a></p>
-.
-
-.
-<irc://foo.bar:2233/baz>
-.
-<p><a href="irc://foo.bar:2233/baz">irc://foo.bar:2233/baz</a></p>
-.
-
-Uppercase is also fine:
-
-.
-<MAILTO:FOO@BAR.BAZ>
-.
-<p><a href="MAILTO:FOO@BAR.BAZ">MAILTO:FOO@BAR.BAZ</a></p>
-.
-
-Spaces are not allowed in autolinks:
-
-.
-<http://foo.bar/baz bim>
-.
-<p>&lt;http://foo.bar/baz bim&gt;</p>
-.
-
-An [email autolink](#email-autolink) <a id="email-autolink"></a>
-consists of `<`, followed by an [email address](#email-address),
-followed by `>`. The link's label is the email address,
-and the URL is `mailto:` followed by the email address.
-
-An [email address](#email-address), <a id="email-address"></a>
-for these purposes, is anything that matches
-the [non-normative regex from the HTML5
-spec](http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#e-mail-state-%28type=email%29):
-
- /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?
- (?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
-
-Examples of email autolinks:
-
-.
-<foo@bar.baz.com>
-.
-<p><a href="mailto:foo@bar.baz.com">foo@bar.baz.com</a></p>
-.
-
-.
-<foo+special@Bar.baz-bar0.com>
-.
-<p><a href="mailto:foo+special@Bar.baz-bar0.com">foo+special@Bar.baz-bar0.com</a></p>
-.
-
-These are not autolinks:
-
-.
-<>
-.
-<p>&lt;&gt;</p>
-.
-
-.
-<heck://bing.bong>
-.
-<p>&lt;heck://bing.bong&gt;</p>
-.
-
-.
-< http://foo.bar >
-.
-<p>&lt; http://foo.bar &gt;</p>
-.
-
-.
-<foo.bar.baz>
-.
-<p>&lt;foo.bar.baz&gt;</p>
-.
-
-.
-<localhost:5001/foo>
-.
-<p>&lt;localhost:5001/foo&gt;</p>
-.
-
-.
-http://google.com
-.
-<p>http://google.com</p>
-.
-
-.
-foo@bar.baz.com
-.
-<p>foo@bar.baz.com</p>
-.
-
-## Raw HTML
-
-Text between `<` and `>` that looks like an HTML tag is parsed as a
-raw HTML tag and will be rendered in HTML without escaping.
-Tag and attribute names are not limited to current HTML tags,
-so custom tags (and even, say, DocBook tags) may be used.
-
-Here is the grammar for tags:
-
-A [tag name](#tag-name) <a id="tag-name"></a> consists of an ASCII letter
-followed by zero or more ASCII letters or digits.
-
-An [attribute](#attribute) <a id="attribute"></a> consists of whitespace,
-an **attribute name**, and an optional **attribute value
-specification**.
-
-An [attribute name](#attribute-name) <a id="attribute-name"></a>
-consists of an ASCII letter, `_`, or `:`, followed by zero or more ASCII
-letters, digits, `_`, `.`, `:`, or `-`. (Note: This is the XML
-specification restricted to ASCII. HTML5 is laxer.)
-
-An [attribute value specification](#attribute-value-specification)
-<a id="attribute-value-specification"></a> consists of optional whitespace,
-a `=` character, optional whitespace, and an [attribute
-value](#attribute-value).
-
-An [attribute value](#attribute-value) <a id="attribute-value"></a>
-consists of an [unquoted attribute value](#unquoted-attribute-value),
-a [single-quoted attribute value](#single-quoted-attribute-value),
-or a [double-quoted attribute value](#double-quoted-attribute-value).
-
-An [unquoted attribute value](#unquoted-attribute-value)
-<a id="unquoted-attribute-value"></a> is a nonempty string of characters not
-including spaces, `"`, `'`, `=`, `<`, `>`, or `` ` ``.
-
-A [single-quoted attribute value](#single-quoted-attribute-value)
-<a id="single-quoted-attribute-value"></a> consists of `'`, zero or more
-characters not including `'`, and a final `'`.
-
-A [double-quoted attribute value](#double-quoted-attribute-value)
-<a id="double-quoted-attribute-value"></a> consists of `"`, zero or more
-characters not including `"`, and a final `"`.
-
-An [open tag](#open-tag) <a id="open-tag"></a> consists of a `<` character,
-a [tag name](#tag-name), zero or more [attributes](#attribute),
-optional whitespace, an optional `/` character, and a `>` character.
-
-A [closing tag](#closing-tag) <a id="closing-tag"></a> consists of the
-string `</`, a [tag name](#tag-name), optional whitespace, and the
-character `>`.
-
-An [HTML comment](#html-comment) <a id="html-comment"></a> consists of the
-string `<!--`, a string of characters not including the string `--`, and
-the string `-->`.
-
-A [processing instruction](#processing-instruction)
-<a id="processing-instruction"></a> consists of the string `<?`, a string
-of characters not including the string `?>`, and the string
-`?>`.
-
-A [declaration](#declaration) <a id="declaration"></a> consists of the
-string `<!`, a name consisting of one or more uppercase ASCII letters,
-whitespace, a string of characters not including the character `>`, and
-the character `>`.
-
-A [CDATA section](#cdata-section) <a id="cdata-section"></a> consists of
-the string `<![CDATA[`, a string of characters not including the string
-`]]>`, and the string `]]>`.
-
-An [HTML tag](#html-tag) <a id="html-tag"></a> consists of an [open
-tag](#open-tag), a [closing tag](#closing-tag), an [HTML
-comment](#html-comment), a [processing
-instruction](#processing-instruction), an [element type
-declaration](#element-type-declaration), or a [CDATA
-section](#cdata-section).
-
-Here are some simple open tags:
-
-.
-<a><bab><c2c>
-.
-<p><a><bab><c2c></p>
-.
-
-Empty elements:
-
-.
-<a/><b2/>
-.
-<p><a/><b2/></p>
-.
-
-Whitespace is allowed:
-
-.
-<a /><b2
-data="foo" >
-.
-<p><a /><b2
-data="foo" ></p>
-.
-
-With attributes:
-
-.
-<a foo="bar" bam = 'baz <em>"</em>'
-_boolean zoop:33=zoop:33 />
-.
-<p><a foo="bar" bam = 'baz <em>"</em>'
-_boolean zoop:33=zoop:33 /></p>
-.
-
-Illegal tag names, not parsed as HTML:
-
-.
-<33> <__>
-.
-<p>&lt;33&gt; &lt;__&gt;</p>
-.
-
-Illegal attribute names:
-
-.
-<a h*#ref="hi">
-.
-<p>&lt;a h*#ref=&quot;hi&quot;&gt;</p>
-.
-
-Illegal attribute values:
-
-.
-<a href="hi'> <a href=hi'>
-.
-<p>&lt;a href=&quot;hi'&gt; &lt;a href=hi'&gt;</p>
-.
-
-Illegal whitespace:
-
-.
-< a><
-foo><bar/ >
-.
-<p>&lt; a&gt;&lt;
-foo&gt;&lt;bar/ &gt;</p>
-.
-
-Missing whitespace:
-
-.
-<a href='bar'title=title>
-.
-<p>&lt;a href='bar'title=title&gt;</p>
-.
-
-Closing tags:
-
-.
-</a>
-</foo >
-.
-<p></a>
-</foo ></p>
-.
-
-Illegal attributes in closing tag:
-
-.
-</a href="foo">
-.
-<p>&lt;/a href=&quot;foo&quot;&gt;</p>
-.
-
-Comments:
-
-.
-foo <!-- this is a
-comment - with hyphen -->
-.
-<p>foo <!-- this is a
-comment - with hyphen --></p>
-.
-
-.
-foo <!-- not a comment -- two hyphens -->
-.
-<p>foo &lt;!-- not a comment -- two hyphens --&gt;</p>
-.
-
-Processing instructions:
-
-.
-foo <?php echo $a; ?>
-.
-<p>foo <?php echo $a; ?></p>
-.
-
-Declarations:
-
-.
-foo <!ELEMENT br EMPTY>
-.
-<p>foo <!ELEMENT br EMPTY></p>
-.
-
-CDATA sections:
-
-.
-foo <![CDATA[>&<]]>
-.
-<p>foo <![CDATA[>&<]]></p>
-.
-
-Entities are preserved in HTML attributes:
-
-.
-<a href="&ouml;">
-.
-<p><a href="&ouml;"></p>
-.
-
-Backslash escapes do not work in HTML attributes:
-
-.
-<a href="\*">
-.
-<p><a href="\*"></p>
-.
-
-.
-<a href="\"">
-.
-<p>&lt;a href=&quot;&quot;&quot;&gt;</p>
-.
-
-## Hard line breaks
-
-A line break (not in a code span or HTML tag) that is preceded
-by two or more spaces is parsed as a linebreak (rendered
-in HTML as a `<br />` tag):
-
-.
-foo
-baz
-.
-<p>foo<br />
-baz</p>
-.
-
-For a more visible alternative, a backslash before the newline may be
-used instead of two spaces:
-
-.
-foo\
-baz
-.
-<p>foo<br />
-baz</p>
-.
-
-More than two spaces can be used:
-
-.
-foo
-baz
-.
-<p>foo<br />
-baz</p>
-.
-
-Leading spaces at the beginning of the next line are ignored:
-
-.
-foo
- bar
-.
-<p>foo<br />
-bar</p>
-.
-
-.
-foo\
- bar
-.
-<p>foo<br />
-bar</p>
-.
-
-Line breaks can occur inside emphasis, links, and other constructs
-that allow inline content:
-
-.
-*foo
-bar*
-.
-<p><em>foo<br />
-bar</em></p>
-.
-
-.
-*foo\
-bar*
-.
-<p><em>foo<br />
-bar</em></p>
-.
-
-Line breaks do not occur inside code spans
-
-.
-`code
-span`
-.
-<p><code>code span</code></p>
-.
-
-.
-`code\
-span`
-.
-<p><code>code\ span</code></p>
-.
-
-or HTML tags:
-
-.
-<a href="foo
-bar">
-.
-<p><a href="foo
-bar"></p>
-.
-
-.
-<a href="foo\
-bar">
-.
-<p><a href="foo\
-bar"></p>
-.
-
-## Soft line breaks
-
-A regular line break (not in a code span or HTML tag) that is not
-preceded by two or more spaces is parsed as a softbreak. (A
-softbreak may be rendered in HTML either as a newline or as a space.
-The result will be the same in browsers. In the examples here, a
-newline will be used.)
-
-.
-foo
-baz
-.
-<p>foo
-baz</p>
-.
-
-Spaces at the end of the line and beginning of the next line are
-removed:
-
-.
-foo
- baz
-.
-<p>foo
-baz</p>
-.
-
-A conforming parser may render a soft line break in HTML either as a
-line break or as a space.
-
-A renderer may also provide an option to render soft line breaks
-as hard line breaks.
-
-## Strings
-
-Any characters not given an interpretation by the above rules will
-be parsed as string content.
-
-.
-hello $.;'there
-.
-<p>hello $.;'there</p>
-.
-
-.
-Foo χρῆν
-.
-<p>Foo χρῆν</p>
-.
-
-Internal spaces are preserved verbatim:
-
-.
-Multiple spaces
-.
-<p>Multiple spaces</p>
-.
-
-<!-- END TESTS -->
-
-# Appendix A: A parsing strategy {-}
-
-## Overview {-}
-
-Parsing has two phases:
-
-1. In the first phase, lines of input are consumed and the block
-structure of the document---its division into paragraphs, block quotes,
-list items, and so on---is constructed. Text is assigned to these
-blocks but not parsed. Link reference definitions are parsed and a
-map of links is constructed.
-
-2. In the second phase, the raw text contents of paragraphs and headers
-are parsed into sequences of Markdown inline elements (strings,
-code spans, links, emphasis, and so on), using the map of link
-references constructed in phase 1.
-
-## The document tree {-}
-
-At each point in processing, the document is represented as a tree of
-**blocks**. The root of the tree is a `document` block. The `document`
-may have any number of other blocks as **children**. These children
-may, in turn, have other blocks as children. The last child of a block
-is normally considered **open**, meaning that subsequent lines of input
-can alter its contents. (Blocks that are not open are **closed**.)
-Here, for example, is a possible document tree, with the open blocks
-marked by arrows:
-
-``` tree
--> document
- -> block_quote
- paragraph
- "Lorem ipsum dolor\nsit amet."
- -> list (type=bullet tight=true bullet_char=-)
- list_item
- paragraph
- "Qui *quodsi iracundia*"
- -> list_item
- -> paragraph
- "aliquando id"
-```
-
-## How source lines alter the document tree {-}
-
-Each line that is processed has an effect on this tree. The line is
-analyzed and, depending on its contents, the document may be altered
-in one or more of the following ways:
-
-1. One or more open blocks may be closed.
-2. One or more new blocks may be created as children of the
- last open block.
-3. Text may be added to the last (deepest) open block remaining
- on the tree.
-
-Once a line has been incorporated into the tree in this way,
-it can be discarded, so input can be read in a stream.
-
-We can see how this works by considering how the tree above is
-generated by four lines of Markdown:
-
-``` markdown
-> Lorem ipsum dolor
-sit amet.
-> - Qui *quodsi iracundia*
-> - aliquando id
-```
-
-At the outset, our document model is just
-
-``` tree
--> document
-```
-
-The first line of our text,
-
-``` markdown
-> Lorem ipsum dolor
-```
-
-causes a `block_quote` block to be created as a child of our
-open `document` block, and a `paragraph` block as a child of
-the `block_quote`. Then the text is added to the last open
-block, the `paragraph`:
-
-``` tree
--> document
- -> block_quote
- -> paragraph
- "Lorem ipsum dolor"
-```
-
-The next line,
-
-``` markdown
-sit amet.
-```
-
-is a "lazy continuation" of the open `paragraph`, so it gets added
-to the paragraph's text:
-
-``` tree
--> document
- -> block_quote
- -> paragraph
- "Lorem ipsum dolor\nsit amet."
-```
-
-The third line,
-
-``` markdown
-> - Qui *quodsi iracundia*
-```
-
-causes the `paragraph` block to be closed, and a new `list` block
-opened as a child of the `block_quote`. A `list_item` is also
-added as a child of the `list`, and a `paragraph` as a child of
-the `list_item`. The text is then added to the new `paragraph`:
-
-``` tree
--> document
- -> block_quote
- paragraph
- "Lorem ipsum dolor\nsit amet."
- -> list (type=bullet tight=true bullet_char=-)
- -> list_item
- -> paragraph
- "Qui *quodsi iracundia*"
-```
-
-The fourth line,
-
-``` markdown
-> - aliquando id
-```
-
-causes the `list_item` (and its child the `paragraph`) to be closed,
-and a new `list_item` opened up as child of the `list`. A `paragraph`
-is added as a child of the new `list_item`, to contain the text.
-We thus obtain the final tree:
-
-``` tree
--> document
- -> block_quote
- paragraph
- "Lorem ipsum dolor\nsit amet."
- -> list (type=bullet tight=true bullet_char=-)
- list_item
- paragraph
- "Qui *quodsi iracundia*"
- -> list_item
- -> paragraph
- "aliquando id"
-```
-
-## From block structure to the final document {-}
-
-Once all of the input has been parsed, all open blocks are closed.
-
-We then "walk the tree," visiting every node, and parse raw
-string contents of paragraphs and headers as inlines. At this
-point we have seen all the link reference definitions, so we can
-resolve reference links as we go.
-
-``` tree
-document
- block_quote
- paragraph
- str "Lorem ipsum dolor"
- softbreak
- str "sit amet."
- list (type=bullet tight=true bullet_char=-)
- list_item
- paragraph
- str "Qui "
- emph
- str "quodsi iracundia"
- list_item
- paragraph
- str "aliquando id"
-```
-
-Notice how the newline in the first paragraph has been parsed as
-a `softbreak`, and the asterisks in the first list item have become
-an `emph`.
-
-The document can be rendered as HTML, or in any other format, given
-an appropriate renderer.
-
-
diff --git a/test/data/packagedocs/stdlib.md b/test/data/packagedocs/stdlib.md
deleted file mode 100644
index 5d7432b50..000000000
--- a/test/data/packagedocs/stdlib.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Module stdlib
-
-## Kotlin Standard Library
-
-The Kotlin standard library is a set of functions and types implementing idiomatic patterns when working with collections,
-text and files.
-
-# Package kotlin
-
-Core functions and types
-
diff --git a/test/data/packages/dottedNamePackage.kt b/test/data/packages/dottedNamePackage.kt
deleted file mode 100644
index 386193104..000000000
--- a/test/data/packages/dottedNamePackage.kt
+++ /dev/null
@@ -1 +0,0 @@
-package dot.name \ No newline at end of file
diff --git a/test/data/packages/rootPackage.kt b/test/data/packages/rootPackage.kt
deleted file mode 100644
index e69de29bb..000000000
--- a/test/data/packages/rootPackage.kt
+++ /dev/null
diff --git a/test/data/packages/simpleNamePackage.kt b/test/data/packages/simpleNamePackage.kt
deleted file mode 100644
index 2c29f4c70..000000000
--- a/test/data/packages/simpleNamePackage.kt
+++ /dev/null
@@ -1 +0,0 @@
-package simple
diff --git a/test/data/packages/simpleNamePackage2.kt b/test/data/packages/simpleNamePackage2.kt
deleted file mode 100644
index 2c29f4c70..000000000
--- a/test/data/packages/simpleNamePackage2.kt
+++ /dev/null
@@ -1 +0,0 @@
-package simple
diff --git a/test/data/properties/annotatedProperty.kt b/test/data/properties/annotatedProperty.kt
deleted file mode 100644
index 8990af29c..000000000
--- a/test/data/properties/annotatedProperty.kt
+++ /dev/null
@@ -1 +0,0 @@
-@Volatile var property = "test" \ No newline at end of file
diff --git a/test/data/properties/propertyOverride.kt b/test/data/properties/propertyOverride.kt
deleted file mode 100644
index 625d1da0b..000000000
--- a/test/data/properties/propertyOverride.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-open class Foo() {
- open val xyzzy: Int get() = 0
-}
-
-class Bar(): Foo() {
- override val xyzzy: Int get() = 1
-}
diff --git a/test/data/properties/propertyWithReceiver.kt b/test/data/properties/propertyWithReceiver.kt
deleted file mode 100644
index e282f6bd9..000000000
--- a/test/data/properties/propertyWithReceiver.kt
+++ /dev/null
@@ -1,2 +0,0 @@
-val String.foobar: Int
- get() = size() * 2
diff --git a/test/data/properties/valueProperty.kt b/test/data/properties/valueProperty.kt
deleted file mode 100644
index b87cce575..000000000
--- a/test/data/properties/valueProperty.kt
+++ /dev/null
@@ -1 +0,0 @@
-val property = "test" \ No newline at end of file
diff --git a/test/data/properties/valuePropertyWithGetter.kt b/test/data/properties/valuePropertyWithGetter.kt
deleted file mode 100644
index 64d3848c5..000000000
--- a/test/data/properties/valuePropertyWithGetter.kt
+++ /dev/null
@@ -1,2 +0,0 @@
-val property: String
- get() = "test" \ No newline at end of file
diff --git a/test/data/properties/variableProperty.kt b/test/data/properties/variableProperty.kt
deleted file mode 100644
index 54ab45959..000000000
--- a/test/data/properties/variableProperty.kt
+++ /dev/null
@@ -1 +0,0 @@
-var property = "test" \ No newline at end of file
diff --git a/test/data/properties/variablePropertyWithAccessors.kt b/test/data/properties/variablePropertyWithAccessors.kt
deleted file mode 100644
index 152fb7d0a..000000000
--- a/test/data/properties/variablePropertyWithAccessors.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-var property: String
- get() = "test"
- set(value) {
- } \ No newline at end of file
diff --git a/test/src/TestAPI.kt b/test/src/TestAPI.kt
deleted file mode 100644
index 6b21b7da3..000000000
--- a/test/src/TestAPI.kt
+++ /dev/null
@@ -1,211 +0,0 @@
-package org.jetbrains.dokka.tests
-
-import com.google.inject.Guice
-import com.intellij.openapi.application.PathManager
-import com.intellij.openapi.util.Disposer
-import com.intellij.openapi.util.io.FileUtil
-import org.jetbrains.dokka.*
-import org.jetbrains.dokka.Utilities.DokkaModule
-import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
-import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
-import org.jetbrains.kotlin.cli.common.messages.MessageCollector
-import org.jetbrains.kotlin.cli.jvm.config.JavaSourceRoot
-import org.jetbrains.kotlin.config.ContentRoot
-import org.jetbrains.kotlin.config.KotlinSourceRoot
-import org.junit.Assert
-import java.io.File
-import kotlin.test.fail
-
-public fun verifyModel(vararg roots: ContentRoot,
- withJdk: Boolean = false,
- withKotlinRuntime: Boolean = false,
- format: String = "html",
- verifier: (DocumentationModule) -> Unit) {
- val messageCollector = object : MessageCollector {
- override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation) {
- when (severity) {
- CompilerMessageSeverity.WARNING,
- CompilerMessageSeverity.LOGGING,
- CompilerMessageSeverity.OUTPUT,
- CompilerMessageSeverity.INFO,
- CompilerMessageSeverity.ERROR -> {
- println("$severity: $message at $location")
- }
- CompilerMessageSeverity.EXCEPTION -> {
- fail("$severity: $message at $location")
- }
- }
- }
- }
-
- val environment = AnalysisEnvironment(messageCollector)
- environment.apply {
- if (withJdk || withKotlinRuntime) {
- val stringRoot = PathManager.getResourceRoot(String::class.java, "/java/lang/String.class")
- addClasspath(File(stringRoot))
- }
- if (withKotlinRuntime) {
- val kotlinPairRoot = PathManager.getResourceRoot(Pair::class.java, "/kotlin/Pair.class")
- addClasspath(File(kotlinPairRoot))
- }
- addRoots(roots.toList())
- }
- val options = DocumentationOptions("", format, includeNonPublic = true, skipEmptyPackages = false, sourceLinks = listOf<SourceLinkDefinition>())
- val injector = Guice.createInjector(DokkaModule(environment, options, DokkaConsoleLogger))
- val documentation = buildDocumentationModule(injector, "test")
- verifier(documentation)
- Disposer.dispose(environment)
-}
-
-public fun verifyModel(source: String,
- withJdk: Boolean = false,
- withKotlinRuntime: Boolean = false,
- format: String = "html",
- verifier: (DocumentationModule) -> Unit) {
- if (!File(source).exists()) {
- throw IllegalArgumentException("Can't find test data file $source")
- }
- verifyModel(contentRootFromPath(source),
- withJdk = withJdk,
- withKotlinRuntime = withKotlinRuntime,
- format = format,
- verifier = verifier)
-}
-
-public fun verifyPackageMember(source: String,
- withJdk: Boolean = false,
- withKotlinRuntime: Boolean = false,
- verifier: (DocumentationNode) -> Unit) {
- verifyModel(source, withJdk = withJdk, withKotlinRuntime = withKotlinRuntime) { model ->
- val pkg = model.members.single()
- verifier(pkg.members.single())
- }
-}
-
-public fun verifyJavaModel(source: String,
- withKotlinRuntime: Boolean = false,
- verifier: (DocumentationModule) -> Unit) {
- val tempDir = FileUtil.createTempDirectory("dokka", "")
- try {
- val sourceFile = File(source)
- FileUtil.copy(sourceFile, File(tempDir, sourceFile.name))
- verifyModel(JavaSourceRoot(tempDir, null), withJdk = true, withKotlinRuntime = withKotlinRuntime, verifier = verifier)
- }
- finally {
- FileUtil.delete(tempDir)
- }
-}
-
-public fun verifyJavaPackageMember(source: String,
- withKotlinRuntime: Boolean = false,
- verifier: (DocumentationNode) -> Unit) {
- verifyJavaModel(source, withKotlinRuntime) { model ->
- val pkg = model.members.single()
- verifier(pkg.members.single())
- }
-}
-
-public fun verifyOutput(roots: Array<ContentRoot>,
- outputExtension: String,
- withJdk: Boolean = false,
- withKotlinRuntime: Boolean = false,
- outputGenerator: (DocumentationModule, StringBuilder) -> Unit) {
- verifyModel(*roots, withJdk = withJdk, withKotlinRuntime = withKotlinRuntime) {
- verifyModelOutput(it, outputExtension, outputGenerator, roots.first().path)
- }
-}
-
-private fun verifyModelOutput(it: DocumentationModule,
- outputExtension: String,
- outputGenerator: (DocumentationModule, StringBuilder) -> Unit,
- sourcePath: String) {
- val output = StringBuilder()
- outputGenerator(it, output)
- val ext = outputExtension.removePrefix(".")
- val path = sourcePath
- val expectedOutput = File(path.replaceAfterLast(".", ext, path + "." + ext)).readText()
- assertEqualsIgnoringSeparators(expectedOutput, output.toString())
-}
-
-public fun verifyOutput(path: String,
- outputExtension: String,
- withJdk: Boolean = false,
- withKotlinRuntime: Boolean = false,
- outputGenerator: (DocumentationModule, StringBuilder) -> Unit) {
- verifyOutput(arrayOf(contentRootFromPath(path)), outputExtension, withJdk, withKotlinRuntime, outputGenerator)
-}
-
-public fun verifyJavaOutput(path: String,
- outputExtension: String,
- withKotlinRuntime: Boolean = false,
- outputGenerator: (DocumentationModule, StringBuilder) -> Unit) {
- verifyJavaModel(path, withKotlinRuntime) { model ->
- verifyModelOutput(model, outputExtension, outputGenerator, path)
- }
-}
-
-public fun assertEqualsIgnoringSeparators(expectedOutput: String, output: String) {
- Assert.assertEquals(expectedOutput.replace("\r\n", "\n"), output.replace("\r\n", "\n"))
-}
-
-fun StringBuilder.appendChildren(node: ContentBlock): StringBuilder {
- for (child in node.children) {
- val childText = child.toTestString()
- append(childText)
- }
- return this
-}
-
-fun StringBuilder.appendNode(node: ContentNode): StringBuilder {
- when (node) {
- is ContentText -> {
- append(node.text)
- }
- is ContentEmphasis -> append("*").appendChildren(node).append("*")
- is ContentBlockCode -> {
- appendln("[code]")
- appendChildren(node)
- appendln()
- appendln("[/code]")
- }
- is ContentNodeLink -> {
- append("[")
- appendChildren(node)
- append(" -> ")
- append(node.node.toString())
- append("]")
- }
- is ContentBlock -> {
- appendChildren(node)
- }
- is ContentEmpty -> { /* nothing */ }
- else -> throw IllegalStateException("Don't know how to format node $node")
- }
- return this
-}
-
-fun ContentNode.toTestString(): String {
- val node = this
- return StringBuilder().apply {
- appendNode(node)
- }.toString()
-}
-
-class InMemoryLocation(override val path: String): Location {
- override fun relativePathTo(other: Location, anchor: String?): String =
- if (anchor != null) other.path + "#" + anchor else other.path
-}
-
-object InMemoryLocationService: LocationService {
- override fun location(qualifiedName: List<String>, hasMembers: Boolean) =
- InMemoryLocation(relativePathToNode(qualifiedName, hasMembers))
-}
-
-val tempLocation = InMemoryLocation("")
-
-val ContentRoot.path: String
- get() = when(this) {
- is KotlinSourceRoot -> path
- is JavaSourceRoot -> file.path
- else -> throw UnsupportedOperationException()
- }
diff --git a/test/src/format/HtmlFormatTest.kt b/test/src/format/HtmlFormatTest.kt
deleted file mode 100644
index 90291bff4..000000000
--- a/test/src/format/HtmlFormatTest.kt
+++ /dev/null
@@ -1,157 +0,0 @@
-package org.jetbrains.dokka.tests
-
-import org.jetbrains.dokka.HtmlFormatService
-import org.jetbrains.dokka.HtmlTemplateService
-import org.jetbrains.dokka.KotlinLanguageService
-import org.jetbrains.kotlin.cli.jvm.config.JavaSourceRoot
-import org.jetbrains.kotlin.config.KotlinSourceRoot
-import org.junit.Test
-import java.io.File
-
-public class HtmlFormatTest {
- private val htmlService = HtmlFormatService(InMemoryLocationService, KotlinLanguageService(), HtmlTemplateService.default())
-
- @Test fun classWithCompanionObject() {
- verifyOutput("test/data/format/classWithCompanionObject.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun htmlEscaping() {
- verifyOutput("test/data/format/htmlEscaping.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun overloads() {
- verifyOutput("test/data/format/overloads.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members)
- }
- }
-
- @Test fun overloadsWithDescription() {
- verifyOutput("test/data/format/overloadsWithDescription.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun overloadsWithDifferentDescriptions() {
- verifyOutput("test/data/format/overloadsWithDifferentDescriptions.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun deprecated() {
- verifyOutput("test/data/format/deprecated.kt", ".package.html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members)
- }
- verifyOutput("test/data/format/deprecated.kt", ".class.html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun brokenLink() {
- verifyOutput("test/data/format/brokenLink.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun codeSpan() {
- verifyOutput("test/data/format/codeSpan.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun parenthesis() {
- verifyOutput("test/data/format/parenthesis.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun bracket() {
- verifyOutput("test/data/format/bracket.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun see() {
- verifyOutput("test/data/format/see.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun tripleBackticks() {
- verifyOutput("test/data/format/tripleBackticks.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun typeLink() {
- verifyOutput("test/data/format/typeLink.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members.filter { it.name == "Bar"} )
- }
- }
-
- @Test fun parameterAnchor() {
- verifyOutput("test/data/format/parameterAnchor.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun javaSupertypeLink() {
- verifyJavaOutput("test/data/format/javaSupertype.java", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members.single { it.name == "C"}.members.filter { it.name == "Bar"} )
- }
- }
-
- @Test fun javaLinkTag() {
- verifyJavaOutput("test/data/format/javaLinkTag.java", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun javaLinkTagWithLabel() {
- verifyJavaOutput("test/data/format/javaLinkTagWithLabel.java", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun javaSeeTag() {
- verifyJavaOutput("test/data/format/javaSeeTag.java", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun javaDeprecated() {
- verifyJavaOutput("test/data/format/javaDeprecated.java", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members.single { it.name == "Foo" }.members.filter { it.name == "foo" })
- }
- }
-
- @Test fun crossLanguageKotlinExtendsJava() {
- verifyOutput(arrayOf(KotlinSourceRoot("test/data/format/crossLanguage/kotlinExtendsJava/Bar.kt"),
- JavaSourceRoot(File("test/data/format/crossLanguage/kotlinExtendsJava"), null)),
- ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members.filter { it.name == "Bar" })
- }
- }
-
- @Test fun orderedList() {
- verifyOutput("test/data/format/orderedList.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members.filter { it.name == "Bar" })
- }
- }
-
- @Test fun linkWithLabel() {
- verifyOutput("test/data/format/linkWithLabel.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members.filter { it.name == "Bar" })
- }
- }
-
- @Test fun entity() {
- verifyOutput("test/data/format/entity.kt", ".html") { model, output ->
- htmlService.appendNodes(tempLocation, output, model.members.single().members.filter { it.name == "Bar" })
- }
- }
-}
-
diff --git a/test/src/format/MarkdownFormatTest.kt b/test/src/format/MarkdownFormatTest.kt
deleted file mode 100644
index 1a09ae602..000000000
--- a/test/src/format/MarkdownFormatTest.kt
+++ /dev/null
@@ -1,218 +0,0 @@
-package org.jetbrains.dokka.tests
-
-import org.jetbrains.dokka.KotlinLanguageService
-import org.jetbrains.dokka.MarkdownFormatService
-import org.junit.Test
-
-public class MarkdownFormatTest {
- private val markdownService = MarkdownFormatService(InMemoryLocationService, KotlinLanguageService())
-
- @Test fun emptyDescription() {
- verifyOutput("test/data/format/emptyDescription.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun classWithCompanionObject() {
- verifyOutput("test/data/format/classWithCompanionObject.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun annotations() {
- verifyOutput("test/data/format/annotations.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun annotationClass() {
- verifyOutput("test/data/format/annotationClass.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun annotationParams() {
- verifyOutput("test/data/format/annotationParams.kt", ".md", withKotlinRuntime = true) { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun extensions() {
- verifyOutput("test/data/format/extensions.kt", ".package.md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members)
- }
- verifyOutput("test/data/format/extensions.kt", ".class.md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun enumClass() {
- verifyOutput("test/data/format/enumClass.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- verifyOutput("test/data/format/enumClass.kt", ".value.md") { model, output ->
- val enumClassNode = model.members.single().members[0]
- markdownService.appendNodes(tempLocation, output,
- enumClassNode.members.filter { it.name == "LOCAL_CONTINUE_AND_BREAK" })
- }
- }
-
- @Test fun varargsFunction() {
- verifyOutput("test/data/format/varargsFunction.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun overridingFunction() {
- verifyOutput("test/data/format/overridingFunction.kt", ".md") { model, output ->
- val classMembers = model.members.single().members.first { it.name == "D" }.members
- markdownService.appendNodes(tempLocation, output, classMembers.filter { it.name == "f" })
- }
-
- }
-
- @Test fun propertyVar() {
- verifyOutput("test/data/format/propertyVar.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun functionWithDefaultParameter() {
- verifyOutput("test/data/format/functionWithDefaultParameter.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun accessor() {
- verifyOutput("test/data/format/accessor.kt", ".md") { model, output ->
- val propertyNode = model.members.single().members.first { it.name == "C" }.members.filter { it.name == "x" }
- markdownService.appendNodes(tempLocation, output, propertyNode)
- }
- }
-
- @Test fun paramTag() {
- verifyOutput("test/data/format/paramTag.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun throwsTag() {
- verifyOutput("test/data/format/throwsTag.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun typeParameterBounds() {
- verifyOutput("test/data/format/typeParameterBounds.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun typeParameterVariance() {
- verifyOutput("test/data/format/typeParameterVariance.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun typeProjectionVariance() {
- verifyOutput("test/data/format/typeProjectionVariance.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun javadocHtml() {
- verifyJavaOutput("test/data/format/javadocHtml.java", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun javaCodeLiteralTags() {
- verifyJavaOutput("test/data/format/javaCodeLiteralTags.java", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun javaCodeInParam() {
- verifyJavaOutput("test/data/format/javaCodeInParam.java", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun javaSpaceInAuthor() {
- verifyJavaOutput("test/data/format/javaSpaceInAuthor.java", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun nullability() {
- verifyOutput("test/data/format/nullability.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun operatorOverloading() {
- verifyOutput("test/data/format/operatorOverloading.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members.single { it.name == "C" }.members.filter { it.name == "plus" })
- }
- }
-
- @Test fun javadocOrderedList() {
- verifyJavaOutput("test/data/format/javadocOrderedList.java", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members.filter { it.name == "Bar" })
- }
- }
-
- @Test fun companionObjectExtension() {
- verifyOutput("test/data/format/companionObjectExtension.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members.filter { it.name == "Foo" })
- }
- }
-
- @Test fun starProjection() {
- verifyOutput("test/data/format/starProjection.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun extensionFunctionParameter() {
- verifyOutput("test/data/format/extensionFunctionParameter.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun summarizeSignatures() {
- verifyOutput("test/data/format/summarizeSignatures.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members)
- }
- }
-
- @Test fun summarizeSignaturesProperty() {
- verifyOutput("test/data/format/summarizeSignaturesProperty.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members)
- }
- }
-
- @Test fun reifiedTypeParameter() {
- verifyOutput("test/data/format/reifiedTypeParameter.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun annotatedTypeParameter() {
- verifyOutput("test/data/format/annotatedTypeParameter.kt", ".md", withKotlinRuntime = true) { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members)
- }
- }
-
- @Test fun inheritedMembers() {
- verifyOutput("test/data/format/inheritedMembers.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members.filter { it.name == "Bar" })
- }
- }
-
- @Test fun inheritedExtensions() {
- verifyOutput("test/data/format/inheritedExtensions.kt", ".md") { model, output ->
- markdownService.appendNodes(tempLocation, output, model.members.single().members.filter { it.name == "Bar" })
- }
- }
-}
diff --git a/test/src/format/PackageDocsTest.kt b/test/src/format/PackageDocsTest.kt
deleted file mode 100644
index 57a08563c..000000000
--- a/test/src/format/PackageDocsTest.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.jetbrains.dokka.tests.format
-
-import org.jetbrains.dokka.ContentBlock
-import org.jetbrains.dokka.ContentText
-import org.jetbrains.dokka.DokkaConsoleLogger
-import org.jetbrains.dokka.PackageDocs
-import org.junit.Test
-import kotlin.test.assertEquals
-
-public class PackageDocsTest {
- @Test fun verifyParse() {
- val docs = PackageDocs(null, DokkaConsoleLogger)
- docs.parse("test/data/packagedocs/stdlib.md", null)
- val packageContent = docs.packageContent["kotlin"]!!
- val block = (packageContent.children.single() as ContentBlock).children.first() as ContentText
- assertEquals("Core functions and types", block.text)
- }
-}
diff --git a/test/src/markdown/ParserTest.kt b/test/src/markdown/ParserTest.kt
deleted file mode 100644
index 5a7adf059..000000000
--- a/test/src/markdown/ParserTest.kt
+++ /dev/null
@@ -1,142 +0,0 @@
-package org.jetbrains.dokka.tests
-
-import org.junit.Test
-import org.jetbrains.dokka.toTestString
-import org.jetbrains.dokka.parseMarkdown
-import org.junit.Ignore
-
-@Ignore public class ParserTest {
- fun runTestFor(text : String) {
- println("MD: ---")
- println(text)
- val markdownTree = parseMarkdown(text)
- println("AST: ---")
- println(markdownTree.toTestString())
- println()
- }
-
- @Test fun text() {
- runTestFor("text")
- }
-
- @Test fun textWithSpaces() {
- runTestFor("text and string")
- }
-
- @Test fun textWithColon() {
- runTestFor("text and string: cool!")
- }
-
- @Test fun link() {
- runTestFor("text [links]")
- }
-
- @Test fun linkWithHref() {
- runTestFor("text [links](http://google.com)")
- }
-
- @Test fun multiline() {
- runTestFor(
- """
-text
-and
-string
-""")
- }
-
- @Test fun para() {
- runTestFor(
- """
-paragraph number
-one
-
-paragraph
-number two
-""")
- }
-
- @Test fun bulletList() {
- runTestFor(
- """* list item 1
-* list item 2
-""")
- }
-
- @Test fun bulletListWithLines() {
- runTestFor(
- """
-* list item 1
- continue 1
-* list item 2
- continue 2
- """)
- }
-
- @Test fun bulletListStrong() {
- runTestFor(
- """
-* list *item* 1
- continue 1
-* list *item* 2
- continue 2
- """)
- }
-
- @Test fun emph() {
- runTestFor("*text*")
- }
-
- @Test fun directive() {
- runTestFor("A text \${code with.another.value} with directive")
- }
-
- @Test fun emphAndEmptySection() {
- runTestFor("*text*\n\$sec:\n")
- }
-
- @Test fun emphAndSection() {
- runTestFor("*text*\n\$sec: some text\n")
- }
-
- @Test fun emphAndBracedSection() {
- runTestFor("Text *bold* text \n\${sec}: some text")
- }
-
- @Test fun section() {
- runTestFor(
- "Plain text \n\$one: Summary \n\${two}: Description with *emphasis* \n\${An example of a section}: Example")
- }
-
- @Test fun anonymousSection() {
- runTestFor("Summary\n\nDescription\n")
- }
-
- @Test fun specialSection() {
- runTestFor(
- "Plain text \n\$\$summary: Summary \n\${\$description}: Description \n\${\$An example of a section}: Example")
- }
-
- @Test fun emptySection() {
- runTestFor(
- "Plain text \n\$summary:")
- }
-
- val b = "$"
- @Test fun pair() {
- runTestFor(
- """Represents a generic pair of two values.
-
-There is no meaning attached to values in this class, it can be used for any purpose.
-Pair exhibits value semantics, i.e. two pairs are equal if both components are equal.
-
-An example of decomposing it into values:
-${b}{code test.tuples.PairTest.pairMultiAssignment}
-
-${b}constructor: Creates new instance of [Pair]
-${b}first: First value
-${b}second: Second value""""
- )
- }
-
-}
-
diff --git a/test/src/model/ClassTest.kt b/test/src/model/ClassTest.kt
deleted file mode 100644
index ce4b4683c..000000000
--- a/test/src/model/ClassTest.kt
+++ /dev/null
@@ -1,275 +0,0 @@
-package org.jetbrains.dokka.tests
-
-import org.jetbrains.dokka.Content
-import org.jetbrains.dokka.DocumentationNode
-import org.jetbrains.dokka.DocumentationReference
-import org.junit.Test
-import kotlin.test.assertEquals
-import kotlin.test.assertTrue
-
-public class ClassTest {
- @Test fun emptyClass() {
- verifyModel("test/data/classes/emptyClass.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals(DocumentationNode.Kind.Class, kind)
- assertEquals("Klass", name)
- assertEquals(Content.Empty, content)
- assertEquals("<init>", members.single().name)
- assertTrue(links.none())
- }
- }
- }
-
- @Test fun emptyObject() {
- verifyModel("test/data/classes/emptyObject.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals(DocumentationNode.Kind.Object, kind)
- assertEquals("Obj", name)
- assertEquals(Content.Empty, content)
- assertTrue(members.none())
- assertTrue(links.none())
- }
- }
- }
-
- @Test fun classWithConstructor() {
- verifyModel("test/data/classes/classWithConstructor.kt") { model ->
- with (model.members.single().members.single()) {
- assertEquals(DocumentationNode.Kind.Class, kind)
- assertEquals("Klass", name)
- assertEquals(Content.Empty, content)
- assertTrue(links.none())
-
- assertEquals(1, members.count())
- with(members.elementAt(0)) {
- assertEquals("<init>", name)
- assertEquals(Content.Empty, content)
- assertEquals(DocumentationNode.Kind.Constructor, kind)
- assertEquals(2, details.count())
- assertEquals("public", details.elementAt(0).name)
- with(details.elementAt(1)) {
- assertEquals("name", name)
- assertEquals(DocumentationNode.Kind.Parameter, kind)
- assertEquals(Content.Empty, content)
- assertEquals("String", details.single().name)
- assertTrue(links.none())
- assertTrue(members.none())
- }
- assertTrue(links.none())
- assertTrue(members.none())
- }
- }
- }
- }
-
- @Test fun classWithFunction() {
- verifyModel("test/data/classes/classWithFunction.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals(DocumentationNode.Kind.Class, kind)
- assertEquals("Klass", name)
- assertEquals(Content.Empty, content)
- assertTrue(links.none())
-
- assertEquals(2, members.count())
- with(members.elementAt(0)) {
- assertEquals("<init>", name)
- assertEquals(Content.Empty, content)
- assertEquals(DocumentationNode.Kind.Constructor, kind)
- assertEquals(1, details.count())
- assertEquals("public", details.elementAt(0).name)
- assertTrue(links.none())
- assertTrue(members.none())
- }
- with(members.elementAt(1)) {
- assertEquals("fn", name)
- assertEquals(Content.Empty, content)
- assertEquals(DocumentationNode.Kind.Function, kind)
- assertEquals("Unit", detail(DocumentationNode.Kind.Type).name)
- assertTrue(links.none())
- assertTrue(members.none())
- }
- }
- }
- }
-
- @Test fun classWithProperty() {
- verifyModel("test/data/classes/classWithProperty.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals(DocumentationNode.Kind.Class, kind)
- assertEquals("Klass", name)
- assertEquals(Content.Empty, content)
- assertTrue(links.none())
-
- assertEquals(2, members.count())
- with(members.elementAt(0)) {
- assertEquals("<init>", name)
- assertEquals(Content.Empty, content)
- assertEquals(DocumentationNode.Kind.Constructor, kind)
- assertEquals(1, details.count())
- assertEquals("public", details.elementAt(0).name)
- assertTrue(members.none())
- assertTrue(links.none())
- }
- with(members.elementAt(1)) {
- assertEquals("name", name)
- assertEquals(Content.Empty, content)
- assertEquals(DocumentationNode.Kind.Property, kind)
- assertEquals("String", detail(DocumentationNode.Kind.Type).name)
- assertTrue(members.none())
- assertTrue(links.none())
- }
- }
- }
- }
-
- @Test fun classWithCompanionObject() {
- verifyModel("test/data/classes/classWithCompanionObject.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals(DocumentationNode.Kind.Class, kind)
- assertEquals("Klass", name)
- assertEquals(Content.Empty, content)
- assertTrue(links.none())
-
- assertEquals(3, members.count())
- with(members.elementAt(0)) {
- assertEquals("<init>", name)
- assertEquals(Content.Empty, content)
- }
- with(members.elementAt(1)) {
- assertEquals("x", name)
- assertEquals(DocumentationNode.Kind.CompanionObjectProperty, kind)
- assertTrue(members.none())
- assertTrue(links.none())
- }
- with(members.elementAt(2)) {
- assertEquals("foo", name)
- assertEquals(DocumentationNode.Kind.CompanionObjectFunction, kind)
- assertTrue(members.none())
- assertTrue(links.none())
- }
- }
- }
- }
-
- @Test fun annotatedClass() {
- verifyPackageMember("test/data/classes/annotatedClass.kt", withKotlinRuntime = true) { cls ->
- assertEquals(1, cls.annotations.count())
- with(cls.annotations[0]) {
- assertEquals("Strictfp", name)
- assertEquals(Content.Empty, content)
- assertEquals(DocumentationNode.Kind.Annotation, kind)
- }
- }
- }
-
- @Test fun dataClass() {
- verifyPackageMember("test/data/classes/dataClass.kt") { cls ->
- val modifiers = cls.details(DocumentationNode.Kind.Modifier).map { it.name }
- assertTrue("data" in modifiers)
- }
- }
-
- @Test fun sealedClass() {
- verifyPackageMember("test/data/classes/sealedClass.kt") { cls ->
- val modifiers = cls.details(DocumentationNode.Kind.Modifier).map { it.name }
- assertEquals(1, modifiers.count { it == "sealed" })
- }
- }
-
- @Test fun annotatedClassWithAnnotationParameters() {
- verifyModel("test/data/classes/annotatedClassWithAnnotationParameters.kt") { model ->
- with(model.members.single().members.single()) {
- with(deprecation!!) {
- assertEquals("Deprecated", name)
- assertEquals(Content.Empty, content)
- assertEquals(DocumentationNode.Kind.Annotation, kind)
- assertEquals(1, details.count())
- with(details[0]) {
- assertEquals(DocumentationNode.Kind.Parameter, kind)
- assertEquals(1, details.count())
- with(details[0]) {
- assertEquals(DocumentationNode.Kind.Value, kind)
- assertEquals("\"should no longer be used\"", name)
- }
- }
- }
- }
- }
- }
-
- @Test fun javaAnnotationClass() {
- verifyModel("test/data/classes/javaAnnotationClass.kt", withJdk = true) { model ->
- with(model.members.single().members.single()) {
- assertEquals(1, annotations.count())
- with(annotations[0]) {
- assertEquals("Retention", name)
- assertEquals(Content.Empty, content)
- assertEquals(DocumentationNode.Kind.Annotation, kind)
- with(details[0]) {
- assertEquals(DocumentationNode.Kind.Parameter, kind)
- assertEquals(1, details.count())
- with(details[0]) {
- assertEquals(DocumentationNode.Kind.Value, kind)
- assertEquals("RetentionPolicy.SOURCE", name)
- }
- }
- }
- }
- }
- }
-
- @Test fun notOpenClass() {
- verifyModel("test/data/classes/notOpenClass.kt") { model ->
- with(model.members.single().members.first { it.name == "D"}.members.first { it.name == "f" }) {
- val modifiers = details(DocumentationNode.Kind.Modifier)
- assertEquals(2, modifiers.size)
- assertEquals("final", modifiers[1].name)
-
- val overrideReferences = references(DocumentationReference.Kind.Override)
- assertEquals(1, overrideReferences.size)
- }
- }
- }
-
- @Test fun indirectOverride() {
- verifyModel("test/data/classes/indirectOverride.kt") { model ->
- with(model.members.single().members.first { it.name == "E"}.members.first { it.name == "foo" }) {
- val modifiers = details(DocumentationNode.Kind.Modifier)
- assertEquals(2, modifiers.size)
- assertEquals("final", modifiers[1].name)
-
- val overrideReferences = references(DocumentationReference.Kind.Override)
- assertEquals(1, overrideReferences.size)
- }
- }
- }
-
- @Test fun innerClass() {
- verifyPackageMember("test/data/classes/innerClass.kt") { cls ->
- val innerClass = cls.members.single { it.name == "D" }
- val modifiers = innerClass.details(DocumentationNode.Kind.Modifier)
- assertEquals(3, modifiers.size)
- assertEquals("inner", modifiers[2].name)
- }
- }
-
- @Test fun companionObjectExtension() {
- verifyModel("test/data/classes/companionObjectExtension.kt") { model ->
- val pkg = model.members.single()
- val cls = pkg.members.single { it.name == "Foo" }
- val extensions = cls.extensions.filter { it.kind == DocumentationNode.Kind.CompanionObjectProperty }
- assertEquals(1, extensions.size)
- }
- }
-
- @Test fun secondaryConstructor() {
- verifyPackageMember("test/data/classes/secondaryConstructor.kt") { cls ->
- val constructors = cls.members(DocumentationNode.Kind.Constructor)
- assertEquals(2, constructors.size)
- with (constructors.first { it.details(DocumentationNode.Kind.Parameter).size == 1}) {
- assertEquals("<init>", name)
- assertEquals("This is a secondary constructor.", summary.toTestString())
- }
- }
- }
-}
diff --git a/test/src/model/CommentTest.kt b/test/src/model/CommentTest.kt
deleted file mode 100644
index c4d867fbb..000000000
--- a/test/src/model/CommentTest.kt
+++ /dev/null
@@ -1,153 +0,0 @@
-package org.jetbrains.dokka.tests
-
-import org.junit.Test
-import kotlin.test.*
-import org.jetbrains.dokka.*
-
-public class CommentTest {
- @Test fun emptyDoc() {
- verifyModel("test/data/comments/emptyDoc.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals(Content.Empty, content)
- }
- }
- }
-
- @Test fun emptyDocButComment() {
- verifyModel("test/data/comments/emptyDocButComment.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals(Content.Empty, content)
- }
- }
- }
-
- @Test fun multilineDoc() {
- verifyModel("test/data/comments/multilineDoc.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("doc1", content.summary.toTestString())
- assertEquals("doc2\ndoc3", content.description.toTestString())
- }
- }
- }
-
- @Test fun multilineDocWithComment() {
- verifyModel("test/data/comments/multilineDocWithComment.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("doc1", content.summary.toTestString())
- assertEquals("doc2\ndoc3", content.description.toTestString())
- }
- }
- }
-
- @Test fun oneLineDoc() {
- verifyModel("test/data/comments/oneLineDoc.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("doc", content.summary.toTestString())
- }
- }
- }
-
- @Test fun oneLineDocWithComment() {
- verifyModel("test/data/comments/oneLineDocWithComment.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("doc", content.summary.toTestString())
- }
- }
- }
-
- @Test fun oneLineDocWithEmptyLine() {
- verifyModel("test/data/comments/oneLineDocWithEmptyLine.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("doc", content.summary.toTestString())
- }
- }
- }
-
- @Test fun emptySection() {
- verifyModel("test/data/comments/emptySection.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("Summary", content.summary.toTestString())
- assertEquals(1, content.sections.count())
- with (content.findSectionByTag("one")!!) {
- assertEquals("One", tag)
- assertEquals("", toTestString())
- }
- }
- }
- }
-
- @Test fun section1() {
- verifyModel("test/data/comments/section1.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("Summary", content.summary.toTestString())
- assertEquals(1, content.sections.count())
- with (content.findSectionByTag("one")!!) {
- assertEquals("One", tag)
- assertEquals("section one", toTestString())
- }
- }
- }
- }
-
- @Test fun section2() {
- verifyModel("test/data/comments/section2.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("Summary", content.summary.toTestString())
- assertEquals(2, content.sections.count())
- with (content.findSectionByTag("one")!!) {
- assertEquals("One", tag)
- assertEquals("section one", toTestString())
- }
- with (content.findSectionByTag("two")!!) {
- assertEquals("Two", tag)
- assertEquals("section two", toTestString())
- }
- }
- }
- }
-
- @Test fun multilineSection() {
- verifyModel("test/data/comments/multilineSection.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("Summary", content.summary.toTestString())
- assertEquals(1, content.sections.count())
- with (content.findSectionByTag("one")!!) {
- assertEquals("One", tag)
- assertEquals("""line one
-line two""", toTestString())
- }
- }
- }
- }
-
- @Test fun directive() {
- verifyModel("test/data/comments/directive.kt") { model ->
- with(model.members.single().members.first()) {
- assertEquals("Summary", content.summary.toTestString())
- with (content.description) {
- assertEqualsIgnoringSeparators("""[code]
-if (true) {
- println(property)
-}
-[/code]
-[code]
-if (true) {
- println(property)
-}
-[/code]
-[code]
-if (true) {
- println(property)
-}
-[/code]
-[code]
-if (true) {
- println(property)
-}
-[/code]
-""", toTestString())
- }
- }
- }
- }
-}
diff --git a/test/src/model/FunctionTest.kt b/test/src/model/FunctionTest.kt
deleted file mode 100644
index 8d1cf6099..000000000
--- a/test/src/model/FunctionTest.kt
+++ /dev/null
@@ -1,227 +0,0 @@
-package org.jetbrains.dokka.tests
-
-import org.jetbrains.dokka.Content
-import org.jetbrains.dokka.DocumentationNode
-import org.junit.Test
-import kotlin.test.assertEquals
-import kotlin.test.assertTrue
-
-public class FunctionTest {
- @Test fun function() {
- verifyModel("test/data/functions/function.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("fn", name)
- assertEquals(DocumentationNode.Kind.Function, kind)
- assertEquals("Function fn", content.summary.toTestString())
- assertEquals("Unit", detail(DocumentationNode.Kind.Type).name)
- assertTrue(members.none())
- assertTrue(links.none())
- }
- }
- }
-
- @Test fun functionWithReceiver() {
- verifyModel("test/data/functions/functionWithReceiver.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("kotlin.String", name)
- assertEquals(DocumentationNode.Kind.ExternalClass, kind)
- assertEquals(2, members.count())
- with(members[0]) {
- assertEquals("fn", name)
- assertEquals(DocumentationNode.Kind.Function, kind)
- assertEquals("Function with receiver", content.summary.toTestString())
- assertEquals("public", details.elementAt(0).name)
- assertEquals("final", details.elementAt(1).name)
- with(details.elementAt(2)) {
- assertEquals("<this>", name)
- assertEquals(DocumentationNode.Kind.Receiver, kind)
- assertEquals(Content.Empty, content)
- assertEquals("String", details.single().name)
- assertTrue(members.none())
- assertTrue(links.none())
- }
- assertEquals("Unit", details.elementAt(3).name)
- assertTrue(members.none())
- assertTrue(links.none())
- }
- with(members[1]) {
- assertEquals("fn", name)
- assertEquals(DocumentationNode.Kind.Function, kind)
- }
- }
- }
- }
-
- @Test fun genericFunction() {
- verifyModel("test/data/functions/genericFunction.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("generic", name)
- assertEquals(DocumentationNode.Kind.Function, kind)
- assertEquals("generic function", content.summary.toTestString())
-
- assertEquals("private", details.elementAt(0).name)
- assertEquals("final", details.elementAt(1).name)
- with(details.elementAt(2)) {
- assertEquals("T", name)
- assertEquals(DocumentationNode.Kind.TypeParameter, kind)
- assertEquals(Content.Empty, content)
- assertTrue(details.none())
- assertTrue(members.none())
- assertTrue(links.none())
- }
- assertEquals("Unit", details.elementAt(3).name)
-
- assertTrue(members.none())
- assertTrue(links.none())
- }
- }
- }
- @Test fun genericFunctionWithConstraints() {
- verifyModel("test/data/functions/genericFunctionWithConstraints.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("generic", name)
- assertEquals(DocumentationNode.Kind.Function, kind)
- assertEquals("generic function", content.summary.toTestString())
-
- assertEquals("public", details.elementAt(0).name)
- assertEquals("final", details.elementAt(1).name)
- with(details.elementAt(2)) {
- assertEquals("T", name)
- assertEquals(DocumentationNode.Kind.TypeParameter, kind)
- assertEquals(Content.Empty, content)
- with(details.single()) {
- assertEquals("R", name)
- assertEquals(DocumentationNode.Kind.UpperBound, kind)
- assertEquals(Content.Empty, content)
- assertTrue(details.none())
- assertTrue(members.none())
- assertTrue(links.none())
- }
- assertTrue(members.none())
- assertTrue(links.none())
- }
- with(details.elementAt(3)) {
- assertEquals("R", name)
- assertEquals(DocumentationNode.Kind.TypeParameter, kind)
- assertEquals(Content.Empty, content)
- assertTrue(members.none())
- assertTrue(links.none())
- }
- assertEquals("Unit", details.elementAt(4).name)
-
- assertTrue(members.none())
- assertTrue(links.none())
- }
- }
- }
-
- @Test fun functionWithParams() {
- verifyModel("test/data/functions/functionWithParams.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("function", name)
- assertEquals(DocumentationNode.Kind.Function, kind)
- assertEquals("Multiline", content.summary.toTestString())
- assertEquals("""Function
-Documentation""", content.description.toTestString())
-
- assertEquals("public", details.elementAt(0).name)
- assertEquals("final", details.elementAt(1).name)
- with(details.elementAt(2)) {
- assertEquals("x", name)
- assertEquals(DocumentationNode.Kind.Parameter, kind)
- assertEquals("parameter", content.summary.toTestString())
- assertEquals("Int", details.single().name)
- assertTrue(members.none())
- assertTrue(links.none())
- }
- assertEquals("Unit", details.elementAt(3).name)
- assertTrue(members.none())
- assertTrue(links.none())
- }
- }
- }
-
- @Test fun annotatedFunction() {
- verifyPackageMember("test/data/functions/annotatedFunction.kt", withKotlinRuntime = true) { func ->
- assertEquals(1, func.annotations.count())
- with(func.annotations[0]) {
- assertEquals("Strictfp", name)
- assertEquals(Content.Empty, content)
- assertEquals(DocumentationNode.Kind.Annotation, kind)
- }
- }
- }
-
- @Test fun functionWithNotDocumentedAnnotation() {
- verifyPackageMember("test/data/functions/functionWithNotDocumentedAnnotation.kt") { func ->
- assertEquals(0, func.annotations.count())
- }
- }
-
- @Test fun inlineFunction() {
- verifyPackageMember("test/data/functions/inlineFunction.kt") { func ->
- val modifiers = func.details(DocumentationNode.Kind.Modifier).map { it.name }
- assertTrue("inline" in modifiers)
- }
- }
-
- @Test fun functionWithAnnotatedParam() {
- verifyModel("test/data/functions/functionWithAnnotatedParam.kt") { model ->
- with(model.members.single().members.single { it.name == "function"} ) {
- with(details.elementAt(2)) {
- assertEquals(1, annotations.count())
- with(annotations[0]) {
- assertEquals("Fancy", name)
- assertEquals(Content.Empty, content)
- assertEquals(DocumentationNode.Kind.Annotation, kind)
- }
- }
- }
- }
- }
-
- @Test fun functionWithNoinlineParam() {
- verifyPackageMember("test/data/functions/functionWithNoinlineParam.kt") { func ->
- with(func.details.elementAt(2)) {
- val modifiers = details(DocumentationNode.Kind.Modifier).map { it.name }
- assertTrue("noinline" in modifiers)
- }
- }
- }
-
- @Test fun annotatedFunctionWithAnnotationParameters() {
- verifyModel("test/data/functions/annotatedFunctionWithAnnotationParameters.kt") { model ->
- with(model.members.single().members.single { it.name == "f"}) {
- assertEquals(1, annotations.count())
- with(annotations[0]) {
- assertEquals("Fancy", name)
- assertEquals(Content.Empty, content)
- assertEquals(DocumentationNode.Kind.Annotation, kind)
- assertEquals(1, details.count())
- with(details[0]) {
- assertEquals(DocumentationNode.Kind.Parameter, kind)
- assertEquals(1, details.count())
- with(details[0]) {
- assertEquals(DocumentationNode.Kind.Value, kind)
- assertEquals("1", name)
- }
- }
- }
- }
- }
- }
-
- @Test fun functionWithDefaultParameter() {
- verifyModel("test/data/functions/functionWithDefaultParameter.kt") { model ->
- with(model.members.single().members.single()) {
- with(details.elementAt(2)) {
- val value = details(DocumentationNode.Kind.Value)
- assertEquals(1, value.count())
- with(value[0]) {
- assertEquals("\"\"", name)
- }
- }
- }
- }
- }
-}
diff --git a/test/src/model/JavaTest.kt b/test/src/model/JavaTest.kt
deleted file mode 100644
index 0633a5cc3..000000000
--- a/test/src/model/JavaTest.kt
+++ /dev/null
@@ -1,197 +0,0 @@
-package org.jetbrains.dokka.tests
-
-import org.jetbrains.dokka.DocumentationNode
-import org.jetbrains.dokka.DocumentationReference
-import org.junit.Test
-import kotlin.test.assertEquals
-import kotlin.test.assertFalse
-import kotlin.test.assertTrue
-
-public class JavaTest {
- @Test fun function() {
- verifyJavaPackageMember("test/data/java/member.java") { cls ->
- assertEquals("Test", cls.name)
- assertEquals(DocumentationNode.Kind.Class, cls.kind)
- with(cls.members(DocumentationNode.Kind.Function).single()) {
- assertEquals("fn", name)
- assertEquals("Summary for Function", content.summary.toTestString().trimEnd())
- assertEquals(3, content.sections.size)
- with(content.sections[0]) {
- assertEquals("Parameters", tag)
- assertEquals("name", subjectName)
- assertEquals("is String parameter ", toTestString())
- }
- with(content.sections[1]) {
- assertEquals("Parameters", tag)
- assertEquals("value", subjectName)
- assertEquals("is int parameter ", toTestString())
- }
- with(content.sections[2]) {
- assertEquals("Author", tag)
- assertEquals("yole", toTestString())
- }
- assertEquals("Unit", detail(DocumentationNode.Kind.Type).name)
- assertTrue(members.none())
- assertTrue(links.none())
- with(details.first { it.name == "name" }) {
- assertEquals(DocumentationNode.Kind.Parameter, kind)
- assertEquals("String", detail(DocumentationNode.Kind.Type).name)
- }
- with(details.first { it.name == "value" }) {
- assertEquals(DocumentationNode.Kind.Parameter, kind)
- assertEquals("Int", detail(DocumentationNode.Kind.Type).name)
- }
- }
- }
- }
-
- @Test fun memberWithModifiers() {
- verifyJavaPackageMember("test/data/java/memberWithModifiers.java") { cls ->
- val modifiers = cls.details(DocumentationNode.Kind.Modifier).map { it.name }
- assertTrue("abstract" in modifiers)
- with(cls.members.single { it.name == "fn" }) {
- assertEquals("protected", details[0].name)
- }
- with(cls.members.single { it.name == "openFn" }) {
- assertEquals("open", details[1].name)
- }
- }
- }
-
- @Test fun superClass() {
- verifyJavaPackageMember("test/data/java/superClass.java") { cls ->
- val superTypes = cls.details(DocumentationNode.Kind.Supertype)
- assertEquals(2, superTypes.size)
- assertEquals("Exception", superTypes[0].name)
- assertEquals("Cloneable", superTypes[1].name)
- }
- }
-
- @Test fun arrayType() {
- verifyJavaPackageMember("test/data/java/arrayType.java") { cls ->
- with(cls.members(DocumentationNode.Kind.Function).single()) {
- val type = detail(DocumentationNode.Kind.Type)
- assertEquals("Array", type.name)
- assertEquals("String", type.detail(DocumentationNode.Kind.Type).name)
- with(details(DocumentationNode.Kind.Parameter).single()) {
- val parameterType = detail(DocumentationNode.Kind.Type)
- assertEquals("IntArray", parameterType.name)
- }
- }
- }
- }
-
- @Test fun typeParameter() {
- verifyJavaPackageMember("test/data/java/typeParameter.java") { cls ->
- val typeParameters = cls.details(DocumentationNode.Kind.TypeParameter)
- with(typeParameters.single()) {
- assertEquals("T", name)
- with(detail(DocumentationNode.Kind.UpperBound)) {
- assertEquals("Comparable", name)
- assertEquals("T", detail(DocumentationNode.Kind.Type).name)
- }
- }
- with(cls.members(DocumentationNode.Kind.Function).single()) {
- val methodTypeParameters = details(DocumentationNode.Kind.TypeParameter)
- with(methodTypeParameters.single()) {
- assertEquals("E", name)
- }
- }
- }
- }
-
- @Test fun constructors() {
- verifyJavaPackageMember("test/data/java/constructors.java") { cls ->
- val constructors = cls.members(DocumentationNode.Kind.Constructor)
- assertEquals(2, constructors.size)
- with(constructors[0]) {
- assertEquals("<init>", name)
- }
- }
- }
-
- @Test fun innerClass() {
- verifyJavaPackageMember("test/data/java/innerClass.java") { cls ->
- val innerClass = cls.members(DocumentationNode.Kind.Class).single()
- assertEquals("D", innerClass.name)
- }
- }
-
- @Test fun varargs() {
- verifyJavaPackageMember("test/data/java/varargs.java") { cls ->
- val fn = cls.members(DocumentationNode.Kind.Function).single()
- val param = fn.detail(DocumentationNode.Kind.Parameter)
- assertEquals("vararg", param.details(DocumentationNode.Kind.Modifier).first().name)
- val psiType = param.detail(DocumentationNode.Kind.Type)
- assertEquals("String", psiType.name)
- assertTrue(psiType.details(DocumentationNode.Kind.Type).isEmpty())
- }
- }
-
- @Test fun fields() {
- verifyJavaPackageMember("test/data/java/field.java") { cls ->
- val i = cls.members(DocumentationNode.Kind.Property).single { it.name == "i" }
- assertEquals("Int", i.detail(DocumentationNode.Kind.Type).name)
- assertTrue("var" in i.details(DocumentationNode.Kind.Modifier).map { it.name })
-
- val s = cls.members(DocumentationNode.Kind.Property).single { it.name == "s" }
- assertEquals("String", s.detail(DocumentationNode.Kind.Type).name)
- assertFalse("var" in s.details(DocumentationNode.Kind.Modifier).map { it.name })
- assertTrue("static" in s.details(DocumentationNode.Kind.Modifier).map { it.name })
- }
- }
-
- @Test fun staticMethod() {
- verifyJavaPackageMember("test/data/java/staticMethod.java") { cls ->
- val m = cls.members(DocumentationNode.Kind.Function).single { it.name == "foo" }
- assertTrue("static" in m.details(DocumentationNode.Kind.Modifier).map { it.name })
- }
- }
-
- @Test fun annotatedAnnotation() {
- verifyJavaPackageMember("test/data/java/annotatedAnnotation.java") { cls ->
- assertEquals(1, cls.annotations.size)
- with(cls.annotations[0]) {
- assertEquals(1, details.count())
- with(details[0]) {
- assertEquals(DocumentationNode.Kind.Parameter, kind)
- assertEquals(1, details.count())
- with(details[0]) {
- assertEquals(DocumentationNode.Kind.Value, kind)
- assertEquals("[AnnotationTarget.FIELD, AnnotationTarget.CLASS, AnnotationTarget.FILE, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER]", name)
- }
- }
- }
- }
- }
-
- @Test fun deprecation() {
- verifyJavaPackageMember("test/data/java/deprecation.java") { cls ->
- val fn = cls.members(DocumentationNode.Kind.Function).single()
- assertEquals("This should no longer be used", fn.deprecation!!.content.toTestString())
- }
- }
-
- @Test fun javaLangObject() {
- verifyJavaPackageMember("test/data/java/javaLangObject.java") { cls ->
- val fn = cls.members(DocumentationNode.Kind.Function).single()
- assertEquals("Any", fn.detail(DocumentationNode.Kind.Type).name)
- }
- }
-
- @Test fun enumValues() {
- verifyJavaPackageMember("test/data/java/enumValues.java") { cls ->
- val superTypes = cls.details(DocumentationNode.Kind.Supertype)
- assertEquals(0, superTypes.size)
- assertEquals(1, cls.members(DocumentationNode.Kind.EnumItem).size)
- }
- }
-
- @Test fun inheritorLinks() {
- verifyJavaPackageMember("test/data/java/inheritorLinks.java") { cls ->
- val fooClass = cls.members.single { it.name == "Foo" }
- val inheritors = fooClass.references(DocumentationReference.Kind.Inheritor)
- assertEquals(1, inheritors.size)
- }
- }
-}
diff --git a/test/src/model/KotlinAsJavaTest.kt b/test/src/model/KotlinAsJavaTest.kt
deleted file mode 100644
index 18a1cfefe..000000000
--- a/test/src/model/KotlinAsJavaTest.kt
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.jetbrains.dokka.tests
-
-import org.jetbrains.dokka.DocumentationModule
-import org.jetbrains.dokka.DocumentationNode
-import org.junit.Test
-import kotlin.test.assertEquals
-
-class KotlinAsJavaTest {
- @Test fun function() {
- verifyModelAsJava("test/data/functions/function.kt") { model ->
- val pkg = model.members.single()
-
- val facadeClass = pkg.members.single { it.name == "FunctionKt" }
- assertEquals(DocumentationNode.Kind.Class, facadeClass.kind)
-
- val fn = facadeClass.members.single()
- assertEquals("fn", fn.name)
- assertEquals(DocumentationNode.Kind.Function, fn.kind)
- }
- }
-
- @Test fun propertyWithComment() {
- verifyModelAsJava("test/data/comments/oneLineDoc.kt") { model ->
- val facadeClass = model.members.single().members.single { it.name == "OneLineDocKt" }
- val getter = facadeClass.members.single { it.name == "getProperty" }
- assertEquals(DocumentationNode.Kind.Function, getter.kind)
- assertEquals("doc", getter.content.summary.toTestString())
- }
- }
-}
-
-fun verifyModelAsJava(source: String,
- withJdk: Boolean = false,
- withKotlinRuntime: Boolean = false,
- verifier: (DocumentationModule) -> Unit) {
- verifyModel(source,
- withJdk = withJdk, withKotlinRuntime = withKotlinRuntime,
- format = "html-as-java",
- verifier = verifier)
-}
diff --git a/test/src/model/LinkTest.kt b/test/src/model/LinkTest.kt
deleted file mode 100644
index a80043670..000000000
--- a/test/src/model/LinkTest.kt
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.jetbrains.dokka.tests
-
-import org.junit.Test
-import kotlin.test.*
-import org.jetbrains.dokka.*
-
-public class LinkTest {
- @Test fun linkToSelf() {
- verifyModel("test/data/links/linkToSelf.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("Foo", name)
- assertEquals(DocumentationNode.Kind.Class, kind)
- assertEquals("This is link to [Foo -> Class:Foo]", content.summary.toTestString())
- }
- }
- }
-
- @Test fun linkToMember() {
- verifyModel("test/data/links/linkToMember.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("Foo", name)
- assertEquals(DocumentationNode.Kind.Class, kind)
- assertEquals("This is link to [member -> Function:member]", content.summary.toTestString())
- }
- }
- }
-
- @Test fun linkToQualifiedMember() {
- verifyModel("test/data/links/linkToQualifiedMember.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("Foo", name)
- assertEquals(DocumentationNode.Kind.Class, kind)
- assertEquals("This is link to [Foo.member -> Function:member]", content.summary.toTestString())
- }
- }
- }
-
- @Test fun linkToParam() {
- verifyModel("test/data/links/linkToParam.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("Foo", name)
- assertEquals(DocumentationNode.Kind.Function, kind)
- assertEquals("This is link to [param -> Parameter:param]", content.summary.toTestString())
- }
- }
- }
-
-} \ No newline at end of file
diff --git a/test/src/model/PackageTest.kt b/test/src/model/PackageTest.kt
deleted file mode 100644
index 52324f1dc..000000000
--- a/test/src/model/PackageTest.kt
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.jetbrains.dokka.tests
-
-import org.jetbrains.dokka.Content
-import org.jetbrains.dokka.DocumentationNode
-import org.jetbrains.kotlin.config.KotlinSourceRoot
-import org.junit.Test
-import kotlin.test.assertEquals
-import kotlin.test.assertTrue
-
-public class PackageTest {
- @Test fun rootPackage() {
- verifyModel("test/data/packages/rootPackage.kt") { model ->
- with(model.members.single()) {
- assertEquals(DocumentationNode.Kind.Package, kind)
- assertEquals("", name)
- assertEquals(Content.Empty, content)
- assertTrue(details.none())
- assertTrue(members.none())
- assertTrue(links.none())
- }
- }
- }
-
- @Test fun simpleNamePackage() {
- verifyModel("test/data/packages/simpleNamePackage.kt") { model ->
- with(model.members.single()) {
- assertEquals(DocumentationNode.Kind.Package, kind)
- assertEquals("simple", name)
- assertEquals(Content.Empty, content)
- assertTrue(details.none())
- assertTrue(members.none())
- assertTrue(links.none())
- }
- }
- }
-
- @Test fun dottedNamePackage() {
- verifyModel("test/data/packages/dottedNamePackage.kt") { model ->
- with(model.members.single()) {
- assertEquals(DocumentationNode.Kind.Package, kind)
- assertEquals("dot.name", name)
- assertEquals(Content.Empty, content)
- assertTrue(details.none())
- assertTrue(members.none())
- assertTrue(links.none())
- }
- }
- }
-
- @Test fun multipleFiles() {
- verifyModel(KotlinSourceRoot("test/data/packages/dottedNamePackage.kt"),
- KotlinSourceRoot("test/data/packages/simpleNamePackage.kt")) { model ->
- assertEquals(2, model.members.count())
- with(model.members.single { it.name == "simple" }) {
- assertEquals(DocumentationNode.Kind.Package, kind)
- assertEquals("simple", name)
- assertEquals(Content.Empty, content)
- assertTrue(details.none())
- assertTrue(members.none())
- assertTrue(links.none())
- }
- with(model.members.single { it.name == "dot.name" }) {
- assertEquals(DocumentationNode.Kind.Package, kind)
- assertEquals(Content.Empty, content)
- assertTrue(details.none())
- assertTrue(members.none())
- assertTrue(links.none())
- }
- }
- }
-
- @Test fun multipleFilesSamePackage() {
- verifyModel(KotlinSourceRoot("test/data/packages/simpleNamePackage.kt"),
- KotlinSourceRoot("test/data/packages/simpleNamePackage2.kt")) { model ->
- assertEquals(1, model.members.count())
- with(model.members.elementAt(0)) {
- assertEquals(DocumentationNode.Kind.Package, kind)
- assertEquals("simple", name)
- assertEquals(Content.Empty, content)
- assertTrue(details.none())
- assertTrue(members.none())
- assertTrue(links.none())
- }
- }
- }
-} \ No newline at end of file
diff --git a/test/src/model/PropertyTest.kt b/test/src/model/PropertyTest.kt
deleted file mode 100644
index 093772b4c..000000000
--- a/test/src/model/PropertyTest.kt
+++ /dev/null
@@ -1,103 +0,0 @@
-package org.jetbrains.dokka.tests
-
-import org.jetbrains.dokka.Content
-import org.jetbrains.dokka.DocumentationNode
-import org.jetbrains.dokka.DocumentationReference
-import org.junit.Test
-import kotlin.test.assertEquals
-import kotlin.test.assertTrue
-
-public class PropertyTest {
- @Test fun valueProperty() {
- verifyModel("test/data/properties/valueProperty.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("property", name)
- assertEquals(DocumentationNode.Kind.Property, kind)
- assertEquals(Content.Empty, content)
- assertEquals("String", detail(DocumentationNode.Kind.Type).name)
- assertTrue(members.none())
- assertTrue(links.none())
- }
- }
- }
-
- @Test fun variableProperty() {
- verifyModel("test/data/properties/variableProperty.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("property", name)
- assertEquals(DocumentationNode.Kind.Property, kind)
- assertEquals(Content.Empty, content)
- assertEquals("String", detail(DocumentationNode.Kind.Type).name)
- assertTrue(members.none())
- assertTrue(links.none())
- }
- }
- }
-
- @Test fun valuePropertyWithGetter() {
- verifyModel("test/data/properties/valuePropertyWithGetter.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("property", name)
- assertEquals(DocumentationNode.Kind.Property, kind)
- assertEquals(Content.Empty, content)
- assertEquals("String", detail(DocumentationNode.Kind.Type).name)
- assertTrue(links.none())
- assertTrue(members.none())
- }
- }
- }
-
- @Test fun variablePropertyWithAccessors() {
- verifyModel("test/data/properties/variablePropertyWithAccessors.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("property", name)
- assertEquals(DocumentationNode.Kind.Property, kind)
- assertEquals(Content.Empty, content)
- assertEquals("String", detail(DocumentationNode.Kind.Type).name)
- val modifiers = details(DocumentationNode.Kind.Modifier).map { it.name }
- assertTrue("final" in modifiers)
- assertTrue("public" in modifiers)
- assertTrue("var" in modifiers)
- assertTrue(links.none())
- assertTrue(members.none())
- }
- }
- }
-
- @Test fun annotatedProperty() {
- verifyModel("test/data/properties/annotatedProperty.kt", withKotlinRuntime = true) { model ->
- with(model.members.single().members.single()) {
- assertEquals(1, annotations.count())
- with(annotations[0]) {
- assertEquals("Volatile", name)
- assertEquals(Content.Empty, content)
- assertEquals(DocumentationNode.Kind.Annotation, kind)
- }
- }
- }
- }
-
- @Test fun propertyWithReceiver() {
- verifyModel("test/data/properties/propertyWithReceiver.kt") { model ->
- with(model.members.single().members.single()) {
- assertEquals("kotlin.String", name)
- assertEquals(DocumentationNode.Kind.ExternalClass, kind)
- with(members.single()) {
- assertEquals("foobar", name)
- assertEquals(DocumentationNode.Kind.Property, kind)
- }
- }
- }
- }
-
- @Test fun propertyOverride() {
- verifyModel("test/data/properties/propertyOverride.kt") { model ->
- with(model.members.single().members.single { it.name == "Bar" }.members.single { it.name == "xyzzy"}) {
- assertEquals("xyzzy", name)
- val override = references(DocumentationReference.Kind.Override).single().to
- assertEquals("xyzzy", override.name)
- assertEquals("Foo", override.owner!!.name)
- }
- }
- }
-}