aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/base/src')
-rw-r--r--plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt18
-rw-r--r--plugins/base/src/test/kotlin/content/params/ContentForParamsTest.kt230
-rw-r--r--plugins/base/src/test/kotlin/content/seealso/ContentForSeeAlsoTest.kt169
-rw-r--r--plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt9
-rw-r--r--plugins/base/src/test/kotlin/renderers/html/DivergentTest.kt49
5 files changed, 261 insertions, 214 deletions
diff --git a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt
index 409b0d6f..847e9667 100644
--- a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt
+++ b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt
@@ -202,7 +202,7 @@ open class DefaultPageCreator(
protected open fun contentForDescription(
d: Documentable
- ): ContentNode {
+ ): List<ContentNode> {
val tags: GroupedTags = d.documentation.flatMap { (pd, doc) ->
doc.children.asSequence().map { pd to it }.toList()
}.groupBy { it.second::class }
@@ -224,17 +224,19 @@ open class DefaultPageCreator(
val unnamedTags: List<SourceSetDependent<TagWrapper>> =
tags.filterNot { (k, _) -> k.isSubclassOf(NamedTagWrapper::class) || k in specialTags }
.map { (_, v) -> v.mapNotNull { (k,v) -> k?.let { it to v } }.toMap() }
- platforms.forEach { platform ->
- unnamedTags.forEach { pdTag ->
- pdTag[platform]?.also { tag ->
- group(sourceSets = setOf(platform)) {
- header(4, tag.toHeaderString())
- comment(tag.root)
+ if(unnamedTags.isNotEmpty()){
+ platforms.forEach { platform ->
+ unnamedTags.forEach { pdTag ->
+ pdTag[platform]?.also { tag ->
+ group(sourceSets = setOf(platform)) {
+ header(4, tag.toHeaderString())
+ comment(tag.root)
+ }
}
}
}
}
- }
+ }.children
}
protected open fun contentForComments(
diff --git a/plugins/base/src/test/kotlin/content/params/ContentForParamsTest.kt b/plugins/base/src/test/kotlin/content/params/ContentForParamsTest.kt
index fbed41fc..15f70eae 100644
--- a/plugins/base/src/test/kotlin/content/params/ContentForParamsTest.kt
+++ b/plugins/base/src/test/kotlin/content/params/ContentForParamsTest.kt
@@ -33,7 +33,9 @@ class ContentForParamsTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
@@ -64,17 +66,16 @@ class ContentForParamsTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
bareSignature("function", null, "abc" to "String")
}
after {
- header(3) { +"Description" }
- platformHinted {
- pWrapped("comment to function")
- }
+ pWrapped("comment to function")
}
}
}
@@ -102,18 +103,17 @@ class ContentForParamsTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
bareSignature("function", null, "abc" to "String")
}
after {
- header(3) { +"Description" }
- platformHinted {
- unnamedTag("Author") { +"Kordyjan" }
- unnamedTag("Since") { +"0.11" }
- }
+ unnamedTag("Author") { +"Kordyjan" }
+ unnamedTag("Since") { +"0.11" }
}
}
}
@@ -142,19 +142,18 @@ class ContentForParamsTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
bareSignature("function", null, "abc" to "String")
}
after {
- header(3) { +"Description" }
- platformHinted {
- pWrapped("comment to function")
- unnamedTag("Author") { +"Kordyjan" }
- unnamedTag("Since") { +"0.11" }
- }
+ pWrapped("comment to function")
+ unnamedTag("Author") { +"Kordyjan" }
+ unnamedTag("Since") { +"0.11" }
}
}
}
@@ -182,21 +181,24 @@ class ContentForParamsTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
bareSignature("function", null, "abc" to "String")
}
after {
- header(3) { +"Description" }
- platformHinted {
- pWrapped("comment to function")
- header(4) { +"Parameters" }
- table {
- group {
- +"abc"
- group { +"comment to param" }
+ pWrapped("comment to function")
+ header(2) { +"Parameters" }
+ group {
+ platformHinted {
+ table {
+ group {
+ +"abc"
+ group { +"comment to param" }
+ }
}
}
}
@@ -229,7 +231,9 @@ class ContentForParamsTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
@@ -242,22 +246,23 @@ class ContentForParamsTest : AbstractCoreTest() {
)
}
after {
- header(3) { +"Description" }
- platformHinted {
- pWrapped("comment to function")
- header(4) { +"Parameters" }
- table {
- group {
- +"first"
- group { +"comment to first param" }
- }
- group {
- +"second"
- group { +"comment to second param" }
- }
- group {
- +"third"
- group { +"comment to third param" }
+ pWrapped("comment to function")
+ header(2) { +"Parameters" }
+ group {
+ platformHinted {
+ table {
+ group {
+ +"first"
+ group { +"comment to first param" }
+ }
+ group {
+ +"second"
+ group { +"comment to second param" }
+ }
+ group {
+ +"third"
+ group { +"comment to third param" }
+ }
}
}
}
@@ -289,7 +294,9 @@ class ContentForParamsTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
@@ -302,21 +309,22 @@ class ContentForParamsTest : AbstractCoreTest() {
)
}
after {
- header(3) { +"Description" }
- platformHinted {
- header(4) { +"Parameters" }
- table {
- group {
- +"first"
- group { +"comment to first param" }
- }
- group {
- +"second"
- group { +"comment to second param" }
- }
- group {
- +"third"
- group { +"comment to third param" }
+ header(2) { +"Parameters" }
+ group {
+ platformHinted {
+ table {
+ group {
+ +"first"
+ group { +"comment to first param" }
+ }
+ group {
+ +"second"
+ group { +"comment to second param" }
+ }
+ group {
+ +"third"
+ group { +"comment to third param" }
+ }
}
}
}
@@ -348,25 +356,28 @@ class ContentForParamsTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
bareSignatureWithReceiver("String", "function", null, "abc" to "String")
}
after {
- header(3) { +"Description" }
- platformHinted {
- pWrapped("comment to function")
- header(4) { +"Parameters" }
- table {
- group {
- +"<receiver>"
- group { +"comment to receiver" }
- }
- group {
- +"abc"
- group { +"comment to param" }
+ pWrapped("comment to function")
+ header(2) { +"Parameters" }
+ group {
+ platformHinted {
+ table {
+ group {
+ +"<receiver>"
+ group { +"comment to receiver" }
+ }
+ group {
+ +"abc"
+ group { +"comment to param" }
+ }
}
}
}
@@ -398,7 +409,9 @@ class ContentForParamsTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
@@ -411,18 +424,19 @@ class ContentForParamsTest : AbstractCoreTest() {
)
}
after {
- header(3) { +"Description" }
- platformHinted {
- pWrapped("comment to function")
- header(4) { +"Parameters" }
- table {
- group {
- +"first"
- group { +"comment to first param" }
- }
- group {
- +"third"
- group { +"comment to third param" }
+ pWrapped("comment to function")
+ header(2) { +"Parameters" }
+ group {
+ platformHinted {
+ table {
+ group {
+ +"first"
+ group { +"comment to first param" }
+ }
+ group {
+ +"third"
+ group { +"comment to third param" }
+ }
}
}
}
@@ -457,7 +471,9 @@ class ContentForParamsTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
@@ -470,26 +486,28 @@ class ContentForParamsTest : AbstractCoreTest() {
)
}
after {
- header(3) { +"Description" }
- platformHinted {
- pWrapped("comment to function")
- header(4) { +"Parameters" }
- table {
- group {
- +"first"
- group { +"comment to first param" }
- }
- group {
- +"second"
- group { +"comment to second param" }
- }
- group {
- +"third"
- group { +"comment to third param" }
+ pWrapped("comment to function")
+ unnamedTag("Author") { +"Kordyjan" }
+ unnamedTag("Since") { +"0.11" }
+ header(2) { +"Parameters" }
+
+ group {
+ platformHinted {
+ table {
+ group {
+ +"first"
+ group { +"comment to first param" }
+ }
+ group {
+ +"second"
+ group { +"comment to second param" }
+ }
+ group {
+ +"third"
+ group { +"comment to third param" }
+ }
}
}
- unnamedTag("Author") { +"Kordyjan" }
- unnamedTag("Since") { +"0.11" }
}
}
}
diff --git a/plugins/base/src/test/kotlin/content/seealso/ContentForSeeAlsoTest.kt b/plugins/base/src/test/kotlin/content/seealso/ContentForSeeAlsoTest.kt
index 8121543d..b5cb3b72 100644
--- a/plugins/base/src/test/kotlin/content/seealso/ContentForSeeAlsoTest.kt
+++ b/plugins/base/src/test/kotlin/content/seealso/ContentForSeeAlsoTest.kt
@@ -35,7 +35,9 @@ class ContentForSeeAlsoTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group{
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
@@ -66,21 +68,24 @@ class ContentForSeeAlsoTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
bareSignature("function", null, "abc" to "String")
}
after {
- header(3) { +"Description" }
- platformHinted {
- header(4) { +"See also" }
- table {
- group {
- //DRI should be "test//abc/#/-1/"
- link { +"abc" }
- group { }
+ header(2) { +"See also" }
+ group {
+ platformHinted {
+ table {
+ group {
+ //DRI should be "test//abc/#/-1/"
+ link { +"abc" }
+ group { }
+ }
}
}
}
@@ -110,21 +115,24 @@ class ContentForSeeAlsoTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
bareSignature("function", null, "abc" to "String")
}
after {
- header(3) { +"Description" }
- platformHinted {
- header(4) { +"See also" }
- table {
- group {
- //DRI should be "test//abc/#/-1/"
- link { +"abc" }
- group { +"Comment to abc" }
+ header(2) { +"See also" }
+ group {
+ platformHinted {
+ table {
+ group {
+ //DRI should be "test//abc/#/-1/"
+ link { +"abc" }
+ group { +"Comment to abc" }
+ }
}
}
}
@@ -154,21 +162,24 @@ class ContentForSeeAlsoTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
bareSignature("function", null, "abc" to "String")
}
after {
- header(3) { +"Description" }
- platformHinted {
- header(4) { +"See also" }
- table {
- group {
- //DRI should be "kotlin.collections/Collection////"
- link { +"Collection" }
- group { }
+ header(2) { +"See also" }
+ group {
+ platformHinted {
+ table {
+ group {
+ //DRI should be "kotlin.collections/Collection////"
+ link { +"Collection" }
+ group { }
+ }
}
}
}
@@ -198,25 +209,27 @@ class ContentForSeeAlsoTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
bareSignature("function", null, "abc" to "String")
}
after {
- header(3) { +"Description" }
- platformHinted {
- header(4) { +"See also" }
- table {
- group {
- //DRI should be "test//abc/#/-1/"
- link { +"Collection" }
- group { +"Comment to stdliblink" }
+ header(2) { +"See also" }
+ group {
+ platformHinted {
+ table {
+ group {
+ //DRI should be "test//abc/#/-1/"
+ link { +"Collection" }
+ group { +"Comment to stdliblink" }
+ }
}
}
}
-
}
}
}
@@ -246,24 +259,28 @@ class ContentForSeeAlsoTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
bareSignature("function", null, "abc" to "String")
}
after {
- header(3) { +"Description" }
- platformHinted {
- pWrapped("random comment")
- unnamedTag("Author") { +"pikinier20" }
- unnamedTag("Since") { +"0.11" }
- header(4) { +"See also" }
- table {
- group {
- //DRI should be "test//abc/#/-1/"
- link { +"Collection" }
- group { +"Comment to stdliblink" }
+ pWrapped("random comment")
+ unnamedTag("Author") { +"pikinier20" }
+ unnamedTag("Since") { +"0.11" }
+
+ header(2) { +"See also" }
+ group {
+ platformHinted {
+ table {
+ group {
+ //DRI should be "test//abc/#/-1/"
+ link { +"Collection" }
+ group { +"Comment to stdliblink" }
+ }
}
}
}
@@ -294,21 +311,24 @@ class ContentForSeeAlsoTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
bareSignature("function", null, "abc" to "String")
}
after {
- header(3) { +"Description" }
- platformHinted {
- header(4) { +"See also" }
- table {
- group {
- //DRI should be "test//abc/#/-1/"
- link { +"abc" }
- group { +"Comment to abc2" }
+ header(2) { +"See also" }
+ group {
+ platformHinted {
+ table {
+ group {
+ //DRI should be "test//abc/#/-1/"
+ link { +"abc" }
+ group { +"Comment to abc2" }
+ }
}
}
}
@@ -339,26 +359,29 @@ class ContentForSeeAlsoTest : AbstractCoreTest() {
val page = module.children.single { it.name == "test" }
.children.single { it.name == "function" } as ContentPage
page.content.assertNode {
- header(1) { +"function" }
+ group {
+ header(1) { +"function" }
+ }
divergentGroup {
divergentInstance {
divergent {
bareSignature("function", null, "abc" to "String")
}
after {
- header(3) { +"Description" }
- platformHinted {
- header(4) { +"See also" }
- table {
- group {
- //DRI should be "test//abc/#/-1/"
- link { +"abc" }
- group { +"Comment to abc1" }
- }
- group {
- //DRI should be "test//abc/#/-1/"
- link { +"Collection" }
- group { +"Comment to collection" }
+ header(2) { +"See also" }
+ group {
+ platformHinted {
+ table {
+ group {
+ //DRI should be "test//abc/#/-1/"
+ link { +"abc" }
+ group { +"Comment to abc1" }
+ }
+ group {
+ //DRI should be "test//abc/#/-1/"
+ link { +"Collection" }
+ group { +"Comment to collection" }
+ }
}
}
}
diff --git a/plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt b/plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt
index e7883bc1..b18c3a5a 100644
--- a/plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt
+++ b/plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt
@@ -112,8 +112,8 @@ class LinkableContentTest : AbstractCoreTest() {
packageChildren.forEach {
val name = it.name.substringBefore("Class")
val crl = it.safeAs<ClasslikePageNode>()?.content?.safeAs<ContentGroup>()?.children?.last()
- ?.safeAs<ContentGroup>()?.children?.last()?.safeAs<ContentTable>()?.children?.singleOrNull()
- ?.safeAs<ContentGroup>()?.children?.singleOrNull()?.safeAs<ContentResolvedLink>()
+ ?.safeAs<ContentGroup>()?.children?.last()?.safeAs<ContentGroup>()?.children?.lastOrNull()
+ ?.safeAs<ContentTable>()?.children?.singleOrNull()?.safeAs<ContentGroup>()?.children?.singleOrNull().safeAs<ContentResolvedLink>()
Assertions.assertEquals(
"https://github.com/user/repo/tree/master/src/${name.toLowerCase()}Main/kotlin/${name}Class.kt#L3",
crl?.address
@@ -166,8 +166,11 @@ class LinkableContentTest : AbstractCoreTest() {
.cast<ContentDivergentGroup>().children.single()
.cast<ContentDivergentInstance>().after
.cast<ContentGroup>().children.last()
+ .cast<ContentGroup>().children.last()
.cast<PlatformHintedContent>().children.single()
- .cast<ContentGroup>().children.single().cast<ContentGroup>().children.last()
+ .cast<ContentGroup>().children.single()
+ .cast<ContentTable>().children.single()
+ .cast<ContentGroup>().children.single()
.cast<ContentGroup>().children.single()
.cast<ContentCode>().children.single().cast<ContentText>().text
Assertions.assertEquals(
diff --git a/plugins/base/src/test/kotlin/renderers/html/DivergentTest.kt b/plugins/base/src/test/kotlin/renderers/html/DivergentTest.kt
index 1f310502..54bac755 100644
--- a/plugins/base/src/test/kotlin/renderers/html/DivergentTest.kt
+++ b/plugins/base/src/test/kotlin/renderers/html/DivergentTest.kt
@@ -30,7 +30,7 @@ class DivergentTest : RenderingOnlyTestBase() {
}
}
HtmlRenderer(context).render(page)
- renderedContent.match(Div(Div(Div("a"))))
+ renderedContent.match(Div(Div(Div(Div("a")))))
}
@Test
@@ -45,7 +45,7 @@ class DivergentTest : RenderingOnlyTestBase() {
}
}
HtmlRenderer(context).render(page)
- renderedContent.match(Div("a"))
+ renderedContent.match(Div(Div("a")))
}
@Test
@@ -71,7 +71,7 @@ class DivergentTest : RenderingOnlyTestBase() {
}
HtmlRenderer(context).render(page)
- renderedContent.match(Div(Div(Div("a"), Div("b"), Div("c"))))
+ renderedContent.match(Div(Div(Div(Div("a"), Div("b"), Div("c")))))
}
@Test
@@ -97,7 +97,7 @@ class DivergentTest : RenderingOnlyTestBase() {
}
HtmlRenderer(context).render(page)
- renderedContent.match(Div(Div(Div("abc"))))
+ renderedContent.match(Div(Div((Div(Div("abc"))))))
}
@Test
@@ -133,7 +133,7 @@ class DivergentTest : RenderingOnlyTestBase() {
}
HtmlRenderer(context).render(page)
- renderedContent.match(Div(Div(Div("ae"), Div("bd"), Div("c"))))
+ renderedContent.match(Div(Div(Div(Div("ae"), Div("bd"), Div("c")))))
}
@Test
@@ -182,13 +182,10 @@ class DivergentTest : RenderingOnlyTestBase() {
HtmlRenderer(context).render(page)
renderedContent.match(
- Div(Div(Div("a")), Div(Div())),
- "a+",
- Div(Div(Div("bd")), Div(Div())),
- "bd+",
- Div(Div(Div("c")), Div(Div())),
- Div(Div(Div("e")), Div(Div())),
- "e+"
+ Div(Div(Div(Div("a")), Div(Div())), "a+",),
+ Div(Div(Div(Div("bd")), Div(Div())), "bd+"),
+ Div(Div(Div(Div("c")), Div(Div()))),
+ Div(Div(Div(Div("e")), Div(Div())), "e+")
)
}
@@ -217,8 +214,10 @@ class DivergentTest : RenderingOnlyTestBase() {
HtmlRenderer(context).render(page)
renderedContent.match(
- "ab-",
- Div(Div(Div("ab")))
+ Div(
+ "ab-",
+ Div(Div(Div("ab")))
+ )
)
}
@@ -247,8 +246,10 @@ class DivergentTest : RenderingOnlyTestBase() {
HtmlRenderer(context).render(page)
renderedContent.match(
- Div(Div(Div("ab"))),
- "ab+"
+ Div(
+ Div(Div(Div("ab"))),
+ "ab+"
+ )
)
}
@@ -282,10 +283,13 @@ class DivergentTest : RenderingOnlyTestBase() {
}
HtmlRenderer(context).render(page)
+ val r = renderedContent
renderedContent.match(
- "ab-",
- Div(Div(Div("ab"))),
- "ab+"
+ Div(
+ "ab-",
+ Div(Div(Div("ab"))),
+ "ab+"
+ )
)
}
@@ -320,11 +324,8 @@ class DivergentTest : RenderingOnlyTestBase() {
HtmlRenderer(context).render(page)
renderedContent.match(
- "a-",
- Div(Div(Div("a")), Div(Div("NATIVE"))),
- "ab+b-",
- Div(Div(Div("b")), Div(Div("NATIVE"))),
- "ab+"
+ Div("a-", Div(Div(Div("a")), Div(Div("NATIVE"))), "ab+"),
+ Div("b-", Div(Div(Div("b")), Div(Div("NATIVE"))), "ab+")
)
}
} \ No newline at end of file