diff --git a/buildSrc/src/main/kotlin/kotlinx/html/generate/humanizer.kt b/buildSrc/src/main/kotlin/kotlinx/html/generate/humanizer.kt
index 9deed078..a9f8ab25 100644
--- a/buildSrc/src/main/kotlin/kotlinx/html/generate/humanizer.kt
+++ b/buildSrc/src/main/kotlin/kotlinx/html/generate/humanizer.kt
@@ -57,8 +57,9 @@ fun humanizeJoin(parts: Iterable, separator: String): String {
}
private fun String.replaceMistakesAndUglyWords() : String =
- replace("dbl", "double")
+ replace("dbl", "double")
.replace("Dbl", "Double")
+ .replace("EnDO", "enDo")
private fun String.replaceHyphensToCamelCase() : String =
diff --git a/buildSrc/src/main/kotlin/kotlinx/html/generate/rules.kt b/buildSrc/src/main/kotlin/kotlinx/html/generate/rules.kt
index 19b484ce..27796506 100644
--- a/buildSrc/src/main/kotlin/kotlinx/html/generate/rules.kt
+++ b/buildSrc/src/main/kotlin/kotlinx/html/generate/rules.kt
@@ -58,16 +58,52 @@ val specialTypes = listOf(
fun specialTypeFor(tagName: String, attributeName: String): AttributeType? =
specialTypes["$tagName.$attributeName"] ?: specialTypes["*.$attributeName"]
-val wellKnownWords = listOf("span", "class", "enabled?", "edit(able)?",
- "^on", "encoded?", "form", "type",
- "run", "href", "drag(gable)?",
- "over", "mouse",
- "start(ed)?", "legend", "end(ed)?", "stop", "key", "load(ed)?", "check(ed)?",
- "time", "ready", "content", "changed?",
- "click", "play(ing)?", "context",
- "rows?", "cols?", "group(ed)?", "auto",
- "list", "field", "data", "block", "scripts?",
- "item", "area", "length", "colors?", "suspend", "focus", "touch", "loading"
+val wellKnownWords = listOf(
+ "span",
+ "class",
+ "enabled?",
+ "edit(able)?",
+ "^on",
+ "encoded?",
+ "form",
+ "type",
+ "run",
+ "href",
+ "drag(gable)?",
+ "over",
+ "mouse",
+ "start(ed)?",
+ "legend",
+ "end(ed)?",
+ "stop",
+ "key",
+ "load(ed)?",
+ "check(ed)?",
+ "time",
+ "ready",
+ "content",
+ "changed?",
+ "click",
+ "play(ing)?",
+ "context",
+ "rows?",
+ "cols?",
+ "group(ed)?",
+ "auto",
+ "list",
+ "field",
+ "data",
+ "block",
+ "scripts?",
+ "item",
+ "area",
+ "length",
+ "colors?",
+ "suspend",
+ "focus",
+ "touch",
+ "loading",
+ "referrer",
).map { it.toRegex(RegexOption.IGNORE_CASE) }
val excludeAttributes = listOf("^item$").map { Pattern.compile(it, Pattern.CASE_INSENSITIVE) }
diff --git a/buildSrc/src/main/resources/html_5.xsd b/buildSrc/src/main/resources/html_5.xsd
index 1f47791a..8c4373aa 100644
--- a/buildSrc/src/main/resources/html_5.xsd
+++ b/buildSrc/src/main/resources/html_5.xsd
@@ -854,6 +854,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/commonMain/kotlin/generated/gen-attributes.kt b/src/commonMain/kotlin/generated/gen-attributes.kt
index a342c1d6..3bd039d2 100644
--- a/src/commonMain/kotlin/generated/gen-attributes.kt
+++ b/src/commonMain/kotlin/generated/gen-attributes.kt
@@ -18,6 +18,8 @@ internal val attributeBooleanBooleanOnOff : Attribute = BooleanAttribut
internal val attributeBooleanTicker : Attribute = TickerAttribute()
+internal val attributeAReferrerPolicyEnumAReferrerPolicyValues : Attribute = EnumAttribute(aReferrerPolicyValues)
+
internal val attributeButtonFormEncTypeEnumButtonFormEncTypeValues : Attribute = EnumAttribute(buttonFormEncTypeValues)
internal val attributeButtonFormMethodEnumButtonFormMethodValues : Attribute = EnumAttribute(buttonFormMethodValues)
diff --git a/src/commonMain/kotlin/generated/gen-consumer-tags.kt b/src/commonMain/kotlin/generated/gen-consumer-tags.kt
index f4d27e49..0c9bc079 100644
--- a/src/commonMain/kotlin/generated/gen-consumer-tags.kt
+++ b/src/commonMain/kotlin/generated/gen-consumer-tags.kt
@@ -19,6 +19,7 @@ import kotlinx.html.ABBR
import kotlinx.html.ADDRESS
import kotlinx.html.AREA
import kotlinx.html.ARTICLE
+import kotlinx.html.AReferrerPolicy
import kotlinx.html.ASIDE
import kotlinx.html.AUDIO
import kotlinx.html.AreaShape
@@ -155,11 +156,13 @@ import kotlinx.html.VIDEO
public inline fun > C.a(
href: String? = null,
target: String? = null,
+ referrerPolicy: AReferrerPolicy? = null,
classes: String? = null,
crossinline block: A.() -> Unit = {},
): T {
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
- return A(attributesMapOf("href", href,"target", target,"class", classes), this)
+ return A(attributesMapOf("href", href,"target", target,"referrerpolicy",
+ referrerPolicy?.enumEncode(),"class", classes), this)
.visitAndFinalize(this, block)
}
diff --git a/src/commonMain/kotlin/generated/gen-enums.kt b/src/commonMain/kotlin/generated/gen-enums.kt
index 26084241..881a69f5 100644
--- a/src/commonMain/kotlin/generated/gen-enums.kt
+++ b/src/commonMain/kotlin/generated/gen-enums.kt
@@ -75,6 +75,18 @@ object AType {
val values : List = listOf("textAsp", "textAsa", "textCss", "textHtml", "textJavaScript", "textPlain", "textScriptLet", "textXComponent", "textXHtmlInsertion", "textXml")
}
+@Suppress("unused", "EnumEntryName")
+enum class AReferrerPolicy(override val realValue : String) : AttributeEnum {
+ noReferrer("no-referrer"),
+ noReferrerWhenDowngrade("no-referrer-when-downgrade"),
+ origin("origin"),
+ originWhenCrossOrigin("origin-when-cross-origin"),
+ sameOrigin("same-origin"),
+ strictOriginWhenCrossOrigin("strict-origin-when-cross-origin"),
+ unsafeUrl("unsafe-url")
+}
+
+internal val aReferrerPolicyValues : Map = AReferrerPolicy.entries.associateBy { it.realValue }
@Suppress("unused", "EnumEntryName")
enum class AreaShape(override val realValue : String) : AttributeEnum {
rect("rect"),
diff --git a/src/commonMain/kotlin/generated/gen-tag-unions.kt b/src/commonMain/kotlin/generated/gen-tag-unions.kt
index 0cd2bc89..61f7d9ef 100644
--- a/src/commonMain/kotlin/generated/gen-tag-unions.kt
+++ b/src/commonMain/kotlin/generated/gen-tag-unions.kt
@@ -707,9 +707,51 @@ inline fun SectioningOrFlowContent.section(classes : String? = null, crossinline
*/
@HtmlTagMarker
@OptIn(ExperimentalContracts::class)
-inline fun FlowOrInteractiveOrPhrasingContent.a(href : String? = null, target : String? = null, classes : String? = null, crossinline block : A.() -> Unit = {}) : Unit {
+inline fun FlowOrInteractiveOrPhrasingContent.a(href : String? = null, target : String? = null, referrerPolicy : AReferrerPolicy? = null, classes : String? = null, crossinline block : A.() -> Unit = {}) : Unit {
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
- A(attributesMapOf("href", href,"target", target,"class", classes), consumer).visit(block)
+ A(attributesMapOf("href", href,"target", target,"referrerpolicy", referrerPolicy?.enumEncode(),"class", classes), consumer).visit(block)
+}
+@HtmlTagMarker
+@OptIn(ExperimentalContracts::class)
+inline fun FlowOrInteractiveOrPhrasingContent.noReferrerA(href : String? = null, target : String? = null, classes : String? = null, crossinline block : A.() -> Unit = {}) : Unit {
+ contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
+ A(attributesMapOf("href", href,"target", target,"referrerpolicy", AReferrerPolicy.noReferrer.realValue,"class", classes), consumer).visit(block)
+}
+@HtmlTagMarker
+@OptIn(ExperimentalContracts::class)
+inline fun FlowOrInteractiveOrPhrasingContent.noReferrerWhenDowngradeA(href : String? = null, target : String? = null, classes : String? = null, crossinline block : A.() -> Unit = {}) : Unit {
+ contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
+ A(attributesMapOf("href", href,"target", target,"referrerpolicy", AReferrerPolicy.noReferrerWhenDowngrade.realValue,"class", classes), consumer).visit(block)
+}
+@HtmlTagMarker
+@OptIn(ExperimentalContracts::class)
+inline fun FlowOrInteractiveOrPhrasingContent.originA(href : String? = null, target : String? = null, classes : String? = null, crossinline block : A.() -> Unit = {}) : Unit {
+ contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
+ A(attributesMapOf("href", href,"target", target,"referrerpolicy", AReferrerPolicy.origin.realValue,"class", classes), consumer).visit(block)
+}
+@HtmlTagMarker
+@OptIn(ExperimentalContracts::class)
+inline fun FlowOrInteractiveOrPhrasingContent.originWhenCrossOriginA(href : String? = null, target : String? = null, classes : String? = null, crossinline block : A.() -> Unit = {}) : Unit {
+ contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
+ A(attributesMapOf("href", href,"target", target,"referrerpolicy", AReferrerPolicy.originWhenCrossOrigin.realValue,"class", classes), consumer).visit(block)
+}
+@HtmlTagMarker
+@OptIn(ExperimentalContracts::class)
+inline fun FlowOrInteractiveOrPhrasingContent.sameOriginA(href : String? = null, target : String? = null, classes : String? = null, crossinline block : A.() -> Unit = {}) : Unit {
+ contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
+ A(attributesMapOf("href", href,"target", target,"referrerpolicy", AReferrerPolicy.sameOrigin.realValue,"class", classes), consumer).visit(block)
+}
+@HtmlTagMarker
+@OptIn(ExperimentalContracts::class)
+inline fun FlowOrInteractiveOrPhrasingContent.strictOriginWhenCrossOriginA(href : String? = null, target : String? = null, classes : String? = null, crossinline block : A.() -> Unit = {}) : Unit {
+ contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
+ A(attributesMapOf("href", href,"target", target,"referrerpolicy", AReferrerPolicy.strictOriginWhenCrossOrigin.realValue,"class", classes), consumer).visit(block)
+}
+@HtmlTagMarker
+@OptIn(ExperimentalContracts::class)
+inline fun FlowOrInteractiveOrPhrasingContent.unsafeUrlA(href : String? = null, target : String? = null, classes : String? = null, crossinline block : A.() -> Unit = {}) : Unit {
+ contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
+ A(attributesMapOf("href", href,"target", target,"referrerpolicy", AReferrerPolicy.unsafeUrl.realValue,"class", classes), consumer).visit(block)
}
/**
diff --git a/src/commonMain/kotlin/generated/gen-tags-a.kt b/src/commonMain/kotlin/generated/gen-tags-a.kt
index 120c7576..54fb403e 100644
--- a/src/commonMain/kotlin/generated/gen-tags-a.kt
+++ b/src/commonMain/kotlin/generated/gen-tags-a.kt
@@ -38,6 +38,18 @@ open class A(initialAttributes : Map, override val consumer : Ta
get() = attributeStringString.get(this, "type")
set(newValue) {attributeStringString.set(this, "type", newValue)}
+ var referrerPolicy : AReferrerPolicy
+ get() = attributeAReferrerPolicyEnumAReferrerPolicyValues.get(this, "referrerpolicy")
+ set(newValue) {attributeAReferrerPolicyEnumAReferrerPolicyValues.set(this, "referrerpolicy", newValue)}
+
+ var media : String
+ get() = attributeStringString.get(this, "media")
+ set(newValue) {attributeStringString.set(this, "media", newValue)}
+
+ var downLoad : String
+ get() = attributeStringString.get(this, "download")
+ set(newValue) {attributeStringString.set(this, "download", newValue)}
+
}
val A.asFlowContent : FlowContent
diff --git a/src/jsMain/kotlin/generated/gen-consumer-tags-js.kt b/src/jsMain/kotlin/generated/gen-consumer-tags-js.kt
index 51ec3641..0bee8a47 100644
--- a/src/jsMain/kotlin/generated/gen-consumer-tags-js.kt
+++ b/src/jsMain/kotlin/generated/gen-consumer-tags-js.kt
@@ -19,6 +19,7 @@ import kotlinx.html.ABBR
import kotlinx.html.ADDRESS
import kotlinx.html.AREA
import kotlinx.html.ARTICLE
+import kotlinx.html.AReferrerPolicy
import kotlinx.html.ASIDE
import kotlinx.html.AUDIO
import kotlinx.html.AreaShape
@@ -207,11 +208,13 @@ import org.w3c.dom.HTMLVideoElement
public inline fun TagConsumer.a(
href: String? = null,
target: String? = null,
+ referrerPolicy: AReferrerPolicy? = null,
classes: String? = null,
crossinline block: A.() -> Unit = {},
): HTMLAnchorElement {
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
- return A(attributesMapOf("href", href,"target", target,"class", classes), this)
+ return A(attributesMapOf("href", href,"target", target,"referrerpolicy",
+ referrerPolicy?.enumEncode(),"class", classes), this)
.visitAndFinalize(this, block) as HTMLAnchorElement
}
diff --git a/src/wasmJsMain/kotlin/generated/gen-consumer-tags-wasm-js.kt b/src/wasmJsMain/kotlin/generated/gen-consumer-tags-wasm-js.kt
index 03acc713..6b9e9391 100644
--- a/src/wasmJsMain/kotlin/generated/gen-consumer-tags-wasm-js.kt
+++ b/src/wasmJsMain/kotlin/generated/gen-consumer-tags-wasm-js.kt
@@ -19,6 +19,7 @@ import kotlinx.html.ABBR
import kotlinx.html.ADDRESS
import kotlinx.html.AREA
import kotlinx.html.ARTICLE
+import kotlinx.html.AReferrerPolicy
import kotlinx.html.ASIDE
import kotlinx.html.AUDIO
import kotlinx.html.AreaShape
@@ -207,11 +208,13 @@ import org.w3c.dom.HTMLVideoElement
public inline fun TagConsumer.a(
href: String? = null,
target: String? = null,
+ referrerPolicy: AReferrerPolicy? = null,
classes: String? = null,
crossinline block: A.() -> Unit = {},
): HTMLAnchorElement {
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
- return A(attributesMapOf("href", href,"target", target,"class", classes), this)
+ return A(attributesMapOf("href", href,"target", target,"referrerpolicy",
+ referrerPolicy?.enumEncode(),"class", classes), this)
.visitAndFinalize(this, block) as HTMLAnchorElement
}