Skip to content

Commit

Permalink
Introduce workaround for map and legend tags with children clash inhe…
Browse files Browse the repository at this point in the history
…rited from different tag groups
  • Loading branch information
Sergey Mashkov committed Apr 14, 2015
1 parent 45f5426 commit 3ea5401
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 1 deletion.
5 changes: 4 additions & 1 deletion generate/src/main/kotlin/codegen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,17 @@ fun <O : Appendable> O.const(value : Const<*>) {
data class Var(val name : String, val type : String, val mutable : Boolean = false, val override : Boolean = false, val forceOmitValVar : Boolean = false, val defaultValue : String = "")
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)

fun <O : Appendable> O.variable(variable : Var, omitValVar : Boolean = false) : O {
fun <O : Appendable> O.variable(variable : Var, omitValVar : Boolean = false, receiver : String = "") : O {
if (!omitValVar && !variable.forceOmitValVar) {
if (variable.override) {
append("override ")
}
append(if (variable.mutable) "var " else "val ")
}

if (receiver.isNotEmpty()) {
receiverDot(receiver)
}
append(variable.name)
append(" : ")
append(variable.type)
Expand Down
15 changes: 15 additions & 0 deletions generate/src/main/kotlin/tagsgen.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package html4k.generate

import html4k.generate.humanize.humanize
import java.util.ArrayList
import java.util.LinkedList

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

if (parentElementTraits.size() > 1) {
val commons = tag.tagGroupNames.map {Repository.tagGroups[it].tags.toSet()}.reduce { a, b -> a.intersect(b) }
if (commons.isNotEmpty()) {
parentElementTraits.forEach { group ->
append("public ")
variable(Var(name = "as" + group.escapeUnsafeValues().capitalize(), type = group.escapeUnsafeValues().capitalize()), receiver = tag.safeName.toUpperCase())
appendln()
getter()
defineIs("this")
emptyLine()
}
}
}

emptyLine()
}

Expand Down
8 changes: 8 additions & 0 deletions jvm/src/main/kotlin/main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,14 @@ fun main(args : Array<String>) {
}
}

p {
p {
map {
asFlowContent.a ("") {
}
}
}
}
input(InputType.color) {

}
Expand Down
6 changes: 6 additions & 0 deletions shared/src/main/kotlin/generated/gen-tags-l.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ public class LABEL(initialAttributes : Map<String, String>, override val consume
public class LEGEND(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag("legend", consumer, initialAttributes), CommonEventsGroupFacade, CoreServerAttributeGroupFacade, CoreAttributeGroupFacade, FlowContent, PhrasingContent {

}
public val LEGEND.asFlowContent : FlowContent
get() = this

public val LEGEND.asPhrasingContent : PhrasingContent
get() = this


public class LI(initialAttributes : Map<String, String>, override val consumer : TagConsumer<*>) : HTMLTag("li", consumer, initialAttributes), CommonEventsGroupFacade, CoreServerAttributeGroupFacade, CoreAttributeGroupFacade, FlowContent {
var value : String
Expand Down
6 changes: 6 additions & 0 deletions shared/src/main/kotlin/generated/gen-tags-m.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ public class MAP(initialAttributes : Map<String, String>, override val consumer


}
public val MAP.asFlowContent : FlowContent
get() = this

public val MAP.asPhrasingContent : PhrasingContent
get() = this


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

Expand Down

0 comments on commit 3ea5401

Please sign in to comment.