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 }