Skip to content

Commit 3ea5401

Browse files
author
Sergey Mashkov
committed
Introduce workaround for map and legend tags with children clash inherited from different tag groups
1 parent 45f5426 commit 3ea5401

File tree

5 files changed

+39
-1
lines changed

5 files changed

+39
-1
lines changed

generate/src/main/kotlin/codegen.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,17 @@ fun <O : Appendable> O.const(value : Const<*>) {
5656
data class Var(val name : String, val type : String, val mutable : Boolean = false, val override : Boolean = false, val forceOmitValVar : Boolean = false, val defaultValue : String = "")
5757
data class Clazz(val name: String, val parameters: List<String> = listOf(), val variables: List<Var> = listOf(), val parents: List<String> = listOf(), val isPublic: Boolean = true, val isAbstract: Boolean = false, val isOpen: Boolean = false, val isObject: Boolean = false, val isTrait : Boolean = false)
5858

59-
fun <O : Appendable> O.variable(variable : Var, omitValVar : Boolean = false) : O {
59+
fun <O : Appendable> O.variable(variable : Var, omitValVar : Boolean = false, receiver : String = "") : O {
6060
if (!omitValVar && !variable.forceOmitValVar) {
6161
if (variable.override) {
6262
append("override ")
6363
}
6464
append(if (variable.mutable) "var " else "val ")
6565
}
6666

67+
if (receiver.isNotEmpty()) {
68+
receiverDot(receiver)
69+
}
6770
append(variable.name)
6871
append(" : ")
6972
append(variable.type)

generate/src/main/kotlin/tagsgen.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package html4k.generate
22

3+
import html4k.generate.humanize.humanize
34
import java.util.ArrayList
45
import java.util.LinkedList
56

@@ -33,6 +34,20 @@ fun <O : Appendable> O.tagClass(tag : TagInfo, excludeAttributes : Set<String>)
3334
htmlTagBuilders(tag.safeName.toUpperCase(), children)
3435
}
3536

37+
if (parentElementTraits.size() > 1) {
38+
val commons = tag.tagGroupNames.map {Repository.tagGroups[it].tags.toSet()}.reduce { a, b -> a.intersect(b) }
39+
if (commons.isNotEmpty()) {
40+
parentElementTraits.forEach { group ->
41+
append("public ")
42+
variable(Var(name = "as" + group.escapeUnsafeValues().capitalize(), type = group.escapeUnsafeValues().capitalize()), receiver = tag.safeName.toUpperCase())
43+
appendln()
44+
getter()
45+
defineIs("this")
46+
emptyLine()
47+
}
48+
}
49+
}
50+
3651
emptyLine()
3752
}
3853

jvm/src/main/kotlin/main.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,14 @@ fun main(args : Array<String>) {
109109
}
110110
}
111111

112+
p {
113+
p {
114+
map {
115+
asFlowContent.a ("") {
116+
}
117+
}
118+
}
119+
}
112120
input(InputType.color) {
113121

114122
}

shared/src/main/kotlin/generated/gen-tags-l.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ public class LABEL(initialAttributes : Map<String, String>, override val consume
2323
public class LEGEND(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag("legend", consumer, initialAttributes), CommonEventsGroupFacade, CoreServerAttributeGroupFacade, CoreAttributeGroupFacade, FlowContent, PhrasingContent {
2424

2525
}
26+
public val LEGEND.asFlowContent : FlowContent
27+
get() = this
28+
29+
public val LEGEND.asPhrasingContent : PhrasingContent
30+
get() = this
31+
2632

2733
public class LI(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag("li", consumer, initialAttributes), CommonEventsGroupFacade, CoreServerAttributeGroupFacade, CoreAttributeGroupFacade, FlowContent {
2834
var value : String

shared/src/main/kotlin/generated/gen-tags-m.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ public class MAP(initialAttributes : Map<String, String>, override val consumer
1515

1616

1717
}
18+
public val MAP.asFlowContent : FlowContent
19+
get() = this
20+
21+
public val MAP.asPhrasingContent : PhrasingContent
22+
get() = this
23+
1824

1925
public class MARK(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag("mark", consumer, initialAttributes), CommonEventsGroupFacade, CoreServerAttributeGroupFacade, CoreAttributeGroupFacade, PhrasingContent {
2026

0 commit comments

Comments
 (0)