diff --git a/Readme.md b/Readme.md
index 878eea8..f70829f 100644
--- a/Readme.md
+++ b/Readme.md
@@ -1,7 +1,7 @@
# HtmlFlow
[](https://sonarcloud.io/dashboard?id=com.github.xmlet%3Ahtmlflow)
-[](http://search.maven.org/#search%7Cga%7C1%7Cxmlet%20htmlflow)
+[](https://search.maven.org/artifact/com.github.xmlet/htmlflow)
[](https://sonarcloud.io/component_measures?id=com.github.xmlet%3Ahtmlflow&metric=Coverage)
[](https://javadoc.io/doc/com.github.xmlet/htmlApiFaster/latest/org/xmlet/htmlapifaster/package-summary.html)
[](https://javadoc.io/doc/com.github.xmlet/htmlflow)
@@ -9,7 +9,7 @@
[](https://github.com/xmlet/spring-petclinic)
[**HtmlFlow**](https://htmlflow.org/) is a Java DSL to write **typesafe HTML**
-in a fluent style.
+in a fluent style, in both **Java** or **Kotlin** (for Kotlin check the [examples](https://htmlflow.org/features#data-binding))
You may use the utility `Flowifier.fromHtml(String html)` if you need the HtmlFlow definition for an
existing HTML source:
@@ -125,10 +125,10 @@ Bonus points it also produces only valid HTML according to HTML 5.2.
## Installation
First, in order to include it to your Gradle project, simply add the following dependency,
-or use any other form provided in [Maven Central Repository](https://search.maven.org/artifact/com.github.xmlet/htmlflow/4.4/jar):
+or use any other form provided in [Maven Central Repository](https://search.maven.org/artifact/com.github.xmlet/htmlflow/4.6/jar):
```xml
-implementation 'com.github.xmlet:htmlflow:4.4'
+implementation 'com.github.xmlet:htmlflow:4.6'
```
You can also download the artifact directly from [Maven
diff --git a/pom.xml b/pom.xml
index 19dd89d..8f7e549 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.github.xmlet
htmlflow
- 4.6-SNAPSHOT
+ 4.7-SNAPSHOT
jar
${project.groupId}:${project.artifactId}
@@ -43,16 +43,16 @@
- org.slf4j
- slf4j-api
- 2.0.3
- test
+ org.slf4j
+ slf4j-api
+ 2.0.3
+ test
- org.slf4j
- slf4j-simple
- 2.0.3
- test
+ org.slf4j
+ slf4j-simple
+ 2.0.3
+ test
com.github.xmlet
@@ -118,6 +118,18 @@
guava
33.0.0-jre
+
+ com.squareup
+ kotlinpoet-jvm
+ 1.16.0
+ provided
+
+
+ org.jetbrains.kotlin
+ kotlin-reflect
+ ${kotlin.version}
+ provided
+
UTF-8
@@ -130,6 +142,25 @@
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.1.0
+
+ htmlflow.propertiesGenerator.ReflectionKt
+ true
+ compile
+
+
+
+ teste
+ process-classes
+
+ java
+
+
+
+
org.apache.maven.plugins
maven-surefire-plugin
@@ -206,7 +237,7 @@
org.jacoco
jacoco-maven-plugin
- 0.8.7
+ 0.8.12
default-prepare-agent
diff --git a/src/main/kotlin/htmlflow/HtmlFlowExtensionProperties.kt b/src/main/kotlin/htmlflow/HtmlFlowExtensionProperties.kt
new file mode 100644
index 0000000..a1fdaf5
--- /dev/null
+++ b/src/main/kotlin/htmlflow/HtmlFlowExtensionProperties.kt
@@ -0,0 +1,1156 @@
+package htmlflow
+
+import kotlin.Unit
+import org.xmlet.htmlapifaster.A
+import org.xmlet.htmlapifaster.Abbr
+import org.xmlet.htmlapifaster.Address
+import org.xmlet.htmlapifaster.Area
+import org.xmlet.htmlapifaster.Article
+import org.xmlet.htmlapifaster.Aside
+import org.xmlet.htmlapifaster.Audio
+import org.xmlet.htmlapifaster.B
+import org.xmlet.htmlapifaster.Base
+import org.xmlet.htmlapifaster.Bdi
+import org.xmlet.htmlapifaster.Bdo
+import org.xmlet.htmlapifaster.Blockquote
+import org.xmlet.htmlapifaster.Body
+import org.xmlet.htmlapifaster.Br
+import org.xmlet.htmlapifaster.Button
+import org.xmlet.htmlapifaster.Canvas
+import org.xmlet.htmlapifaster.Caption
+import org.xmlet.htmlapifaster.Cite
+import org.xmlet.htmlapifaster.Code
+import org.xmlet.htmlapifaster.Col
+import org.xmlet.htmlapifaster.Colgroup
+import org.xmlet.htmlapifaster.Data
+import org.xmlet.htmlapifaster.Datalist
+import org.xmlet.htmlapifaster.Dd
+import org.xmlet.htmlapifaster.Del
+import org.xmlet.htmlapifaster.Details
+import org.xmlet.htmlapifaster.DetailsComplete
+import org.xmlet.htmlapifaster.DetailsSummary
+import org.xmlet.htmlapifaster.Dfn
+import org.xmlet.htmlapifaster.Dialog
+import org.xmlet.htmlapifaster.Div
+import org.xmlet.htmlapifaster.Dl
+import org.xmlet.htmlapifaster.Dt
+import org.xmlet.htmlapifaster.Element
+import org.xmlet.htmlapifaster.Em
+import org.xmlet.htmlapifaster.Embed
+import org.xmlet.htmlapifaster.Fieldset
+import org.xmlet.htmlapifaster.Figcaption
+import org.xmlet.htmlapifaster.Figure
+import org.xmlet.htmlapifaster.Footer
+import org.xmlet.htmlapifaster.Form
+import org.xmlet.htmlapifaster.H1
+import org.xmlet.htmlapifaster.H2
+import org.xmlet.htmlapifaster.H3
+import org.xmlet.htmlapifaster.H4
+import org.xmlet.htmlapifaster.H5
+import org.xmlet.htmlapifaster.H6
+import org.xmlet.htmlapifaster.Head
+import org.xmlet.htmlapifaster.Header
+import org.xmlet.htmlapifaster.Hr
+import org.xmlet.htmlapifaster.I
+import org.xmlet.htmlapifaster.Iframe
+import org.xmlet.htmlapifaster.Img
+import org.xmlet.htmlapifaster.Input
+import org.xmlet.htmlapifaster.Ins
+import org.xmlet.htmlapifaster.Kbd
+import org.xmlet.htmlapifaster.Label
+import org.xmlet.htmlapifaster.Legend
+import org.xmlet.htmlapifaster.Li
+import org.xmlet.htmlapifaster.Link
+import org.xmlet.htmlapifaster.Main
+import org.xmlet.htmlapifaster.Map
+import org.xmlet.htmlapifaster.Mark
+import org.xmlet.htmlapifaster.Math
+import org.xmlet.htmlapifaster.Meta
+import org.xmlet.htmlapifaster.Meter
+import org.xmlet.htmlapifaster.Nav
+import org.xmlet.htmlapifaster.Noscript
+import org.xmlet.htmlapifaster.Object
+import org.xmlet.htmlapifaster.Ol
+import org.xmlet.htmlapifaster.Optgroup
+import org.xmlet.htmlapifaster.Option
+import org.xmlet.htmlapifaster.Output
+import org.xmlet.htmlapifaster.P
+import org.xmlet.htmlapifaster.Param
+import org.xmlet.htmlapifaster.Picture
+import org.xmlet.htmlapifaster.Pre
+import org.xmlet.htmlapifaster.Progress
+import org.xmlet.htmlapifaster.Q
+import org.xmlet.htmlapifaster.Rb
+import org.xmlet.htmlapifaster.Root
+import org.xmlet.htmlapifaster.Rp
+import org.xmlet.htmlapifaster.Rt
+import org.xmlet.htmlapifaster.Rtc
+import org.xmlet.htmlapifaster.Ruby
+import org.xmlet.htmlapifaster.S
+import org.xmlet.htmlapifaster.Samp
+import org.xmlet.htmlapifaster.Script
+import org.xmlet.htmlapifaster.Section
+import org.xmlet.htmlapifaster.Select
+import org.xmlet.htmlapifaster.Small
+import org.xmlet.htmlapifaster.Source
+import org.xmlet.htmlapifaster.Span
+import org.xmlet.htmlapifaster.Strong
+import org.xmlet.htmlapifaster.Style
+import org.xmlet.htmlapifaster.Sub
+import org.xmlet.htmlapifaster.Summary
+import org.xmlet.htmlapifaster.Sup
+import org.xmlet.htmlapifaster.Svg
+import org.xmlet.htmlapifaster.Table
+import org.xmlet.htmlapifaster.Tbody
+import org.xmlet.htmlapifaster.Td
+import org.xmlet.htmlapifaster.Template
+import org.xmlet.htmlapifaster.Textarea
+import org.xmlet.htmlapifaster.Tfoot
+import org.xmlet.htmlapifaster.Th
+import org.xmlet.htmlapifaster.Thead
+import org.xmlet.htmlapifaster.Time
+import org.xmlet.htmlapifaster.Title
+import org.xmlet.htmlapifaster.Tr
+import org.xmlet.htmlapifaster.Track
+import org.xmlet.htmlapifaster.U
+import org.xmlet.htmlapifaster.Ul
+import org.xmlet.htmlapifaster.Var
+import org.xmlet.htmlapifaster.Video
+import org.xmlet.htmlapifaster.Wbr
+
+public inline val , Z : Element<*,*>> T.h2: H2
+ get() = H2(this.self())
+
+public fun , Z : Element<*,*>> T.h2(block: H2.() -> Unit): T {
+ val elem = H2(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.mark: Mark
+ get() = Mark(this.self())
+
+public fun , Z : Element<*,*>> T.mark(block: Mark.() -> Unit): T {
+ val elem = Mark(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.i: I
+ get() = I(this.self())
+
+public fun , Z : Element<*,*>> T.i(block: I.() -> Unit): T {
+ val elem = I(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.th: Th
+ get() = Th(this.self())
+
+public fun , Z : Element<*,*>> T.th(block: Th.() -> Unit): T {
+ val elem = Th(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.strong: Strong
+ get() = Strong(this.self())
+
+public fun , Z : Element<*,*>> T.strong(block: Strong.() -> Unit): T {
+ val elem = Strong(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.col: Col
+ get() = Col(this.self())
+
+public fun , Z : Element<*,*>> T.col(block: Col.() -> Unit): T {
+ val elem = Col(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.math: Math
+ get() = Math(this.self())
+
+public fun , Z : Element<*,*>> T.math(block: Math.() -> Unit): T {
+ val elem = Math(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.tbody: Tbody
+ get() = Tbody(this.self())
+
+public fun , Z : Element<*,*>> T.tbody(block: Tbody.() -> Unit): T {
+ val elem = Tbody(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.textarea: Textarea
+ get() = Textarea(this.self())
+
+public fun , Z : Element<*,*>> T.textarea(block: Textarea.() -> Unit): T {
+ val elem = Textarea(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.source: Source
+ get() = Source(this.self())
+
+public fun , Z : Element<*,*>> T.source(block: Source.() -> Unit): T {
+ val elem = Source(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.rp: Rp
+ get() = Rp(this.self())
+
+public fun , Z : Element<*,*>> T.rp(block: Rp.() -> Unit): T {
+ val elem = Rp(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.picture: Picture
+ get() = Picture(this.self())
+
+public fun , Z : Element<*,*>> T.picture(block: Picture.() -> Unit): T {
+ val elem = Picture(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.p: P
+ get() = P(this.self())
+
+public fun , Z : Element<*,*>> T.p(block: P.() -> Unit): T {
+ val elem = P(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.dt: Dt
+ get() = Dt(this.self())
+
+public fun , Z : Element<*,*>> T.dt(block: Dt.() -> Unit): T {
+ val elem = Dt(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.label: Label
+ get() = Label(this.self())
+
+public fun , Z : Element<*,*>> T.label(block: Label.() -> Unit): T {
+ val elem = Label(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.embed: Embed
+ get() = Embed(this.self())
+
+public fun , Z : Element<*,*>> T.embed(block: Embed.() -> Unit): T {
+ val elem = Embed(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.rt: Rt
+ get() = Rt(this.self())
+
+public fun , Z : Element<*,*>> T.rt(block: Rt.() -> Unit): T {
+ val elem = Rt(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.address: Address
+ get() = Address(this.self())
+
+public fun , Z : Element<*,*>> T.address(block: Address.() -> Unit): T {
+ val elem = Address(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.h4: H4
+ get() = H4(this.self())
+
+public fun , Z : Element<*,*>> T.h4(block: H4.() -> Unit): T {
+ val elem = H4(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.`data`: Data
+ get() = Data(this.self())
+
+public fun , Z : Element<*,*>> T.`data`(block: Data.() -> Unit): T {
+ val elem = Data(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.legend: Legend
+ get() = Legend(this.self())
+
+public fun , Z : Element<*,*>> T.legend(block: Legend.() -> Unit): T {
+ val elem = Legend(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.option: Option
+ get() = Option(this.self())
+
+public fun , Z : Element<*,*>> T.option(block: Option.() -> Unit): T {
+ val elem = Option(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.detailssummary: DetailsSummary
+ get() = DetailsSummary(this.self())
+
+public fun , Z : Element<*,*>>
+ T.detailssummary(block: DetailsSummary.() -> Unit): T {
+ val elem = DetailsSummary(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.track: Track
+ get() = Track(this.self())
+
+public fun , Z : Element<*,*>> T.track(block: Track.() -> Unit): T {
+ val elem = Track(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.figcaption: Figcaption
+ get() = Figcaption(this.self())
+
+public fun , Z : Element<*,*>> T.figcaption(block: Figcaption.() -> Unit): T {
+ val elem = Figcaption(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.sub: Sub
+ get() = Sub(this.self())
+
+public fun , Z : Element<*,*>> T.sub(block: Sub.() -> Unit): T {
+ val elem = Sub(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.details: Details
+ get() = Details(this.self())
+
+public fun , Z : Element<*,*>> T.details(block: Details.() -> Unit): T {
+ val elem = Details(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.aside: Aside
+ get() = Aside(this.self())
+
+public fun , Z : Element<*,*>> T.aside(block: Aside.() -> Unit): T {
+ val elem = Aside(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.footer: Footer
+ get() = Footer(this.self())
+
+public fun , Z : Element<*,*>> T.footer(block: Footer.() -> Unit): T {
+ val elem = Footer(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.h6: H6
+ get() = H6(this.self())
+
+public fun , Z : Element<*,*>> T.h6(block: H6.() -> Unit): T {
+ val elem = H6(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.hr: Hr
+ get() = Hr(this.self())
+
+public fun , Z : Element<*,*>> T.hr(block: Hr.() -> Unit): T {
+ val elem = Hr(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.link: Link
+ get() = Link(this.self())
+
+public fun , Z : Element<*,*>> T.link(block: Link.() -> Unit): T {
+ val elem = Link(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.meta: Meta
+ get() = Meta(this.self())
+
+public fun , Z : Element<*,*>> T.meta(block: Meta.() -> Unit): T {
+ val elem = Meta(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.`var`: Var
+ get() = Var(this.self())
+
+public fun , Z : Element<*,*>> T.`var`(block: Var.() -> Unit): T {
+ val elem = Var(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.h1: H1
+ get() = H1(this.self())
+
+public fun , Z : Element<*,*>> T.h1(block: H1.() -> Unit): T {
+ val elem = H1(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.q: Q
+ get() = Q(this.self())
+
+public fun , Z : Element<*,*>> T.q(block: Q.() -> Unit): T {
+ val elem = Q(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.output: Output
+ get() = Output(this.self())
+
+public fun , Z : Element<*,*>> T.output(block: Output.() -> Unit): T {
+ val elem = Output(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.li: Li
+ get() = Li(this.self())
+
+public fun , Z : Element<*,*>> T.li(block: Li.() -> Unit): T {
+ val elem = Li(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.span: Span
+ get() = Span(this.self())
+
+public fun , Z : Element<*,*>> T.span(block: Span.() -> Unit): T {
+ val elem = Span(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.time: Time
+ get() = Time(this.self())
+
+public fun , Z : Element<*,*>> T.time(block: Time.() -> Unit): T {
+ val elem = Time(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.caption: Caption
+ get() = Caption(this.self())
+
+public fun , Z : Element<*,*>> T.caption(block: Caption.() -> Unit): T {
+ val elem = Caption(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.progress: Progress
+ get() = Progress(this.self())
+
+public fun , Z : Element<*,*>> T.progress(block: Progress.() -> Unit): T {
+ val elem = Progress(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.dl: Dl
+ get() = Dl(this.self())
+
+public fun , Z : Element<*,*>> T.dl(block: Dl.() -> Unit): T {
+ val elem = Dl(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.s: S
+ get() = S(this.self())
+
+public fun , Z : Element<*,*>> T.s(block: S.() -> Unit): T {
+ val elem = S(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.h3: H3
+ get() = H3(this.self())
+
+public fun , Z : Element<*,*>> T.h3(block: H3.() -> Unit): T {
+ val elem = H3(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.cite: Cite
+ get() = Cite(this.self())
+
+public fun , Z : Element<*,*>> T.cite(block: Cite.() -> Unit): T {
+ val elem = Cite(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.abbr: Abbr
+ get() = Abbr(this.self())
+
+public fun , Z : Element<*,*>> T.abbr(block: Abbr.() -> Unit): T {
+ val elem = Abbr(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.tr: Tr
+ get() = Tr(this.self())
+
+public fun , Z : Element<*,*>> T.tr(block: Tr.() -> Unit): T {
+ val elem = Tr(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.`param`: Param
+ get() = Param(this.self())
+
+public fun , Z : Element<*,*>> T.`param`(block: Param.() -> Unit): T {
+ val elem = Param(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.colgroup: Colgroup
+ get() = Colgroup(this.self())
+
+public fun , Z : Element<*,*>> T.colgroup(block: Colgroup.() -> Unit): T {
+ val elem = Colgroup(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.dfn: Dfn
+ get() = Dfn(this.self())
+
+public fun , Z : Element<*,*>> T.dfn(block: Dfn.() -> Unit): T {
+ val elem = Dfn(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.br: Br
+ get() = Br(this.self())
+
+public fun , Z : Element<*,*>> T.br(block: Br.() -> Unit): T {
+ val elem = Br(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.head: Head
+ get() = Head(this.self())
+
+public fun , Z : Element<*,*>> T.head(block: Head.() -> Unit): T {
+ val elem = Head(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.table: Table
+ get() = Table(this.self())
+
+public fun , Z : Element<*,*>> T.table(block: Table.() -> Unit): T {
+ val elem = Table(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.template: Template
+ get() = Template(this.self())
+
+public fun , Z : Element<*,*>> T.template(block: Template.() -> Unit): T {
+ val elem = Template(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.kbd: Kbd
+ get() = Kbd(this.self())
+
+public fun , Z : Element<*,*>> T.kbd(block: Kbd.() -> Unit): T {
+ val elem = Kbd(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.h5: H5
+ get() = H5(this.self())
+
+public fun , Z : Element<*,*>> T.h5(block: H5.() -> Unit): T {
+ val elem = H5(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.u: U
+ get() = U(this.self())
+
+public fun , Z : Element<*,*>> T.u(block: U.() -> Unit): T {
+ val elem = U(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.noscript: Noscript
+ get() = Noscript(this.self())
+
+public fun , Z : Element<*,*>> T.noscript(block: Noscript.() -> Unit): T {
+ val elem = Noscript(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.root: Root
+ get() = Root(this.self())
+
+public fun , Z : Element<*,*>> T.root(block: Root.() -> Unit): T {
+ val elem = Root(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.div: Div
+ get() = Div(this.self())
+
+public fun , Z : Element<*,*>> T.div(block: Div.() -> Unit): T {
+ val elem = Div(this)
+ elem.block()
+ return elem.l
+}
+
+public inline val , Z : Element<*,*>> T.select: Select
+ get() = Select(this.self())
+
+public fun , Z : Element<*,*>> T.select(block: Select