dioxus_html/
elements.rs

1#![allow(non_upper_case_globals)]
2
3use dioxus_core::prelude::IntoAttributeValue;
4use dioxus_core::HasAttributes;
5#[cfg(feature = "hot-reload-context")]
6use dioxus_core_types::HotReloadingContext;
7use dioxus_html_internal_macro::impl_extension_attributes;
8
9#[cfg(feature = "hot-reload-context")]
10use crate::{map_global_attributes, map_svg_attributes};
11
12pub type AttributeDescription = (&'static str, Option<&'static str>, bool);
13
14macro_rules! impl_attribute {
15    (
16        $element:ident {
17            $(#[$attr_method:meta])*
18            $fil:ident: $vil:ident (DEFAULT),
19        }
20    ) => {
21        $(#[$attr_method])*
22        ///
23        /// ## Usage in rsx
24        ///
25        /// ```rust, no_run
26        /// # use dioxus::prelude::*;
27        #[doc = concat!("let ", stringify!($fil), " = \"value\";")]
28        ///
29        /// rsx! {
30        ///     // Attributes need to be under the element they modify
31        #[doc = concat!("    ", stringify!($element), " {")]
32        ///         // Attributes are followed by a colon and then the value of the attribute
33        #[doc = concat!("        ", stringify!($fil), ": \"value\"")]
34        ///     }
35        #[doc = concat!("    ", stringify!($element), " {")]
36        ///         // Or you can use the shorthand syntax if you have a variable in scope that has the same name as the attribute
37        #[doc = concat!("        ", stringify!($fil), ",")]
38        ///     }
39        /// };
40        /// ```
41        pub const $fil: AttributeDescription = (stringify!($fil), None, false);
42    };
43
44    (
45        $element:ident {
46            $(#[$attr_method:meta])*
47            $fil:ident: $vil:ident ($name:literal),
48        }
49    ) => {
50        $(#[$attr_method])*
51        ///
52        /// ## Usage in rsx
53        ///
54        /// ```rust, no_run
55        /// # use dioxus::prelude::*;
56        #[doc = concat!("let ", stringify!($fil), " = \"value\";")]
57        ///
58        /// rsx! {
59        ///     // Attributes need to be under the element they modify
60        #[doc = concat!("    ", stringify!($element), " {")]
61        ///         // Attributes are followed by a colon and then the value of the attribute
62        #[doc = concat!("        ", stringify!($fil), ": \"value\"")]
63        ///     }
64        #[doc = concat!("    ", stringify!($element), " {")]
65        ///         // Or you can use the shorthand syntax if you have a variable in scope that has the same name as the attribute
66        #[doc = concat!("        ", stringify!($fil), ",")]
67        ///     }
68        /// };
69        /// ```
70        pub const $fil: AttributeDescription = ($name, None, false);
71    };
72
73    (
74        $element:ident {
75            $(#[$attr_method:meta])*
76            $fil:ident: $vil:ident (volatile),
77        }
78    ) => {
79        $(#[$attr_method])*
80        ///
81        /// ## Usage in rsx
82        ///
83        /// ```rust, no_run
84        /// # use dioxus::prelude::*;
85        #[doc = concat!("let ", stringify!($fil), " = \"value\";")]
86        ///
87        /// rsx! {
88        ///     // Attributes need to be under the element they modify
89        #[doc = concat!("    ", stringify!($element), " {")]
90        ///         // Attributes are followed by a colon and then the value of the attribute
91        #[doc = concat!("        ", stringify!($fil), ": \"value\"")]
92        ///     }
93        #[doc = concat!("    ", stringify!($element), " {")]
94        ///         // Or you can use the shorthand syntax if you have a variable in scope that has the same name as the attribute
95        #[doc = concat!("        ", stringify!($fil), ",")]
96        ///     }
97        /// };
98        /// ```
99        pub const $fil: AttributeDescription = (stringify!($fil), None, true);
100    };
101
102    (
103        $element:ident {
104            $(#[$attr_method:meta])*
105            $fil:ident: $vil:ident (in $ns:literal),
106        }
107    ) => {
108        $(#[$attr_method])*
109        ///
110        /// ## Usage in rsx
111        ///
112        /// ```rust, no_run
113        /// # use dioxus::prelude::*;
114        #[doc = concat!("let ", stringify!($fil), " = \"value\";")]
115        ///
116        /// rsx! {
117        ///     // Attributes need to be under the element they modify
118        #[doc = concat!("    ", stringify!($element), " {")]
119        ///         // Attributes are followed by a colon and then the value of the attribute
120        #[doc = concat!("        ", stringify!($fil), ": \"value\"")]
121        ///     }
122        #[doc = concat!("    ", stringify!($element), " {")]
123        ///         // Or you can use the shorthand syntax if you have a variable in scope that has the same name as the attribute
124        #[doc = concat!("        ", stringify!($fil), ",")]
125        ///     }
126        /// };
127        /// ```
128        pub const $fil: AttributeDescription = (stringify!($fil), Some($ns), false)
129    };
130
131    (
132        $element:ident {
133            $(#[$attr_method:meta])*
134            $fil:ident: $vil:ident (in $ns:literal : volatile),
135        }
136    ) => {
137        $(#[$attr_method])*
138        ///
139        /// ## Usage in rsx
140        ///
141        /// ```rust, no_run
142        /// # use dioxus::prelude::*;
143        #[doc = concat!("let ", stringify!($fil), " = \"value\";")]
144        ///
145        /// rsx! {
146        ///     // Attributes need to be under the element they modify
147        #[doc = concat!("    ", stringify!($element), " {")]
148        ///         // Attributes are followed by a colon and then the value of the attribute
149        #[doc = concat!("        ", stringify!($fil), ": \"value\"")]
150        ///     }
151        #[doc = concat!("    ", stringify!($element), " {")]
152        ///         // Or you can use the shorthand syntax if you have a variable in scope that has the same name as the attribute
153        #[doc = concat!("        ", stringify!($fil), ",")]
154        ///     }
155        /// };
156        /// ```
157        pub const $fil: AttributeDescription = (stringify!($fil), Some($ns), true)
158    };
159}
160
161#[cfg(feature = "hot-reload-context")]
162macro_rules! impl_attribute_match {
163    (
164        $attr:ident $fil:ident: $vil:ident (DEFAULT),
165    ) => {
166        if $attr == stringify!($fil) {
167            return Some((stringify!($fil), None));
168        }
169    };
170
171    (
172        $attr:ident $fil:ident: $vil:ident (volatile),
173    ) => {
174        if $attr == stringify!($fil) {
175            return Some((stringify!($fil), None));
176        }
177    };
178
179    (
180        $attr:ident $fil:ident: $vil:ident ($name:literal),
181    ) => {
182        if $attr == stringify!($fil) {
183            return Some(($name, None));
184        }
185    };
186
187    (
188        $attr:ident $fil:ident: $vil:ident (in $ns:literal),
189    ) => {
190        if $attr == stringify!($fil) {
191            return Some((stringify!($fil), Some($ns)));
192        }
193    };
194}
195
196#[cfg(feature = "html-to-rsx")]
197macro_rules! impl_html_to_rsx_attribute_match {
198    (
199        $attr:ident $fil:ident $name:literal
200    ) => {
201        if $attr == $name {
202            return Some(stringify!($fil));
203        }
204    };
205
206    (
207        $attr:ident $fil:ident $_:tt
208    ) => {
209        if $attr == stringify!($fil) {
210            return Some(stringify!($fil));
211        }
212    };
213}
214
215macro_rules! impl_element {
216    (
217        $(#[$attr:meta])*
218        $name:ident None {
219            $(
220                $(#[$attr_method:meta])*
221                $fil:ident: $vil:ident $extra:tt,
222            )*
223        }
224    ) => {
225        #[allow(non_camel_case_types)]
226        $(#[$attr])*
227        ///
228        /// ## Usage in rsx
229        ///
230        /// ```rust, no_run
231        /// # use dioxus::prelude::*;
232        /// # let attributes = vec![];
233        /// # fn ChildComponent() -> Element { unimplemented!() }
234        /// # let raw_expression: Element = rsx! {};
235        /// rsx! {
236        ///     // Elements are followed by braces that surround any attributes and children for that element
237        #[doc = concat!("    ", stringify!($name), " {")]
238        ///         // Add any attributes first
239        ///         class: "my-class",
240        ///         "custom-attribute-name": "value",
241        ///         // Then add any attributes you are spreading into this element
242        ///         ..attributes,
243        ///         // Then add any children elements, components, text nodes, or raw expressions
244        ///         div {}
245        ///         ChildComponent {}
246        ///         "child text"
247        ///         {raw_expression}
248        ///     }
249        /// };
250        /// ```
251        pub mod $name {
252            #[allow(unused)]
253            use super::*;
254            pub use crate::attribute_groups::global_attributes::*;
255
256            pub const TAG_NAME: &'static str = stringify!($name);
257            pub const NAME_SPACE: Option<&'static str> = None;
258
259            $(
260                impl_attribute!(
261                    $name {
262                        $(#[$attr_method])*
263                        $fil: $vil ($extra),
264                    }
265                );
266            )*
267        }
268    };
269
270    (
271        $(#[$attr:meta])*
272        $name:ident $namespace:literal {
273            $(
274                $(#[$attr_method:meta])*
275                $fil:ident: $vil:ident $extra:tt,
276            )*
277        }
278    ) => {
279        $(#[$attr])*
280        ///
281        /// ## Usage in rsx
282        ///
283        /// ```rust, no_run
284        /// # use dioxus::prelude::*;
285        /// # let attributes = vec![];
286        /// # fn ChildComponent() -> Element { unimplemented!() }
287        /// # let raw_expression: Element = rsx! {};
288        /// rsx! {
289        ///     // Elements are followed by braces that surround any attributes and children for that element
290        #[doc = concat!("    ", stringify!($name), " {")]
291        ///         // Add any attributes first
292        ///         color: "red",
293        ///         "custom-attribute-name": "value",
294        ///         // Then add any attributes you are spreading into this element
295        ///         ..attributes,
296        ///         // Then add any children elements, components, text nodes, or raw expressions
297        ///         circle { cx: "10", cy: "10", r: "2", fill: "red" }
298        ///         ChildComponent {}
299        ///         "child text"
300        ///         {raw_expression}
301        ///     }
302        /// };
303        /// ```
304        pub mod $name {
305            #[allow(unused)]
306            use super::*;
307            pub use crate::attribute_groups::svg_attributes::*;
308
309            pub const TAG_NAME: &'static str = stringify!($name);
310            pub const NAME_SPACE: Option<&'static str> = Some($namespace);
311
312            $(
313                impl_attribute!(
314                    $name {
315                        $(#[$attr_method])*
316                        $fil: $vil ($extra),
317                    }
318                );
319            )*
320        }
321    };
322
323    (
324        $(#[$attr:meta])*
325        $element:ident [$name:literal, $namespace:tt] {
326            $(
327                $(#[$attr_method:meta])*
328                $fil:ident: $vil:ident $extra:tt,
329            )*
330        }
331    ) => {
332        #[allow(non_camel_case_types)]
333        $(#[$attr])*
334        ///
335        /// ## Usage in rsx
336        ///
337        /// ```rust, no_run
338        /// # use dioxus::prelude::*;
339        /// # let attributes = vec![];
340        /// # fn ChildComponent() -> Element { unimplemented!() }
341        /// # let raw_expression: Element = rsx! {};
342        /// rsx! {
343        ///     // Elements are followed by braces that surround any attributes and children for that element
344        #[doc = concat!("    ", stringify!($element), " {")]
345        ///         // Add any attributes first
346        ///         color: "red",
347        ///         "custom-attribute-name": "value",
348        ///         // Then add any attributes you are spreading into this element
349        ///         ..attributes,
350        ///         // Then add any children elements, components, text nodes, or raw expressions
351        ///         circle { cx: "10", cy: "10", r: "2", fill: "red" }
352        ///         ChildComponent {}
353        ///         "child text"
354        ///         {raw_expression}
355        ///     }
356        /// };
357        /// ```
358        pub mod $element {
359            #[allow(unused)]
360            use super::*;
361            pub use crate::attribute_groups::svg_attributes::*;
362
363            pub const TAG_NAME: &'static str = $name;
364            pub const NAME_SPACE: Option<&'static str> = Some($namespace);
365
366            $(
367                impl_attribute!(
368                    $element {
369                        $(#[$attr_method])*
370                        $fil: $vil ($extra),
371                    }
372                );
373            )*
374        }
375    }
376}
377
378#[cfg(feature = "hot-reload-context")]
379macro_rules! impl_element_match {
380    (
381        $el:ident $name:ident None {
382            $(
383                $fil:ident: $vil:ident $extra:tt,
384            )*
385        }
386    ) => {
387        if $el == stringify!($name) {
388            return Some((stringify!($name), None));
389        }
390    };
391
392    (
393        $el:ident $name:ident $namespace:literal {
394            $(
395                $fil:ident: $vil:ident $extra:tt,
396            )*
397        }
398    ) => {
399        if $el == stringify!($name) {
400            return Some((stringify!($name), Some($namespace)));
401        }
402    };
403
404    (
405        $el:ident $name:ident [$_:literal, $namespace:tt] {
406            $(
407                $fil:ident: $vil:ident $extra:tt,
408            )*
409        }
410    ) => {
411        if $el == stringify!($name) {
412            return Some((stringify!($name), Some($namespace)));
413        }
414    };
415}
416
417#[cfg(feature = "hot-reload-context")]
418macro_rules! impl_element_match_attributes {
419    (
420        $el:ident $attr:ident $name:ident None {
421            $(
422                $fil:ident: $vil:ident $extra:tt,
423            )*
424        }
425    ) => {
426        if $el == stringify!($name) {
427            $(
428                impl_attribute_match!(
429                    $attr $fil: $vil ($extra),
430                );
431            )*
432
433            return impl_map_global_attributes!($el $attr $name None);
434        }
435    };
436
437    (
438        $el:ident $attr:ident $name:ident $namespace:tt {
439            $(
440                $fil:ident: $vil:ident $extra:tt,
441            )*
442        }
443    ) => {
444        if $el == stringify!($name) {
445            $(
446                impl_attribute_match!(
447                    $attr $fil: $vil ($extra),
448                );
449            )*
450
451            return impl_map_global_attributes!($el $attr $name $namespace);
452        }
453    }
454}
455
456#[cfg(feature = "hot-reload-context")]
457macro_rules! impl_map_global_attributes {
458    (
459        $el:ident $attr:ident $element:ident None
460    ) => {
461        map_global_attributes($attr)
462    };
463
464    (
465        $el:ident $attr:ident $element:ident $namespace:literal
466    ) => {
467        if $namespace == "http://www.w3.org/2000/svg" {
468            map_svg_attributes($attr)
469        } else {
470            map_global_attributes($attr)
471        }
472    };
473
474    (
475        $el:ident $attr:ident $element:ident [$name:literal, $namespace:tt]
476    ) => {
477        if $namespace == "http://www.w3.org/2000/svg" {
478            map_svg_attributes($attr)
479        } else {
480            map_global_attributes($attr)
481        }
482    };
483}
484
485macro_rules! builder_constructors {
486    (
487        $(
488            $(#[$attr:meta])*
489            $name:ident $namespace:tt {
490                $(
491                    $(#[$attr_method:meta])*
492                    $fil:ident: $vil:ident $extra:tt,
493                )*
494            };
495         )*
496        ) => {
497        #[cfg(feature = "hot-reload-context")]
498        pub struct HtmlCtx;
499
500        #[cfg(feature = "hot-reload-context")]
501        impl HotReloadingContext for HtmlCtx {
502            fn map_attribute(element: &str, attribute: &str) -> Option<(&'static str, Option<&'static str>)> {
503                $(
504                    impl_element_match_attributes!(
505                        element attribute $name $namespace {
506                            $(
507                                $fil: $vil $extra,
508                            )*
509                        }
510                    );
511                )*
512                None
513            }
514
515            fn map_element(element: &str) -> Option<(&'static str, Option<&'static str>)> {
516                $(
517                    impl_element_match!(
518                        element $name $namespace {
519                            $(
520                                $fil: $vil $extra,
521                            )*
522                        }
523                    );
524                )*
525                None
526            }
527        }
528
529        #[cfg(feature = "html-to-rsx")]
530        pub fn map_html_attribute_to_rsx(html: &str) -> Option<&'static str> {
531            $(
532                $(
533                    impl_html_to_rsx_attribute_match!(
534                        html $fil $extra
535                    );
536                )*
537            )*
538
539            if let Some(name) = crate::map_html_global_attributes_to_rsx(html) {
540                return Some(name);
541            }
542
543            if let Some(name) = crate::map_html_svg_attributes_to_rsx(html) {
544                return Some(name);
545            }
546
547            None
548        }
549
550        #[cfg(feature = "html-to-rsx")]
551        pub fn map_html_element_to_rsx(html: &str) -> Option<&'static str> {
552            $(
553                if html == stringify!($name) {
554                    return Some(stringify!($name));
555                }
556            )*
557
558            None
559        }
560
561        $(
562            impl_element!(
563                $(#[$attr])*
564                $name $namespace {
565                    $(
566                        $(#[$attr_method])*
567                        $fil: $vil $extra,
568                    )*
569                }
570            );
571        )*
572
573        /// This module contains helpers for rust analyzer autocompletion
574        #[doc(hidden)]
575        pub mod completions {
576            /// This helper tells rust analyzer that it should autocomplete the element name with braces.
577            #[allow(non_camel_case_types)]
578            pub enum CompleteWithBraces {
579                $(
580                    $(#[$attr])*
581                    ///
582                    /// ## Usage in rsx
583                    ///
584                    /// ```rust, no_run
585                    /// # use dioxus::prelude::*;
586                    /// # let attributes = vec![];
587                    /// # fn ChildComponent() -> Element { unimplemented!() }
588                    /// # let raw_expression: Element = rsx! {};
589                    /// rsx! {
590                    ///     // Elements are followed by braces that surround any attributes and children for that element
591                    #[doc = concat!("    ", stringify!($name), " {")]
592                    ///         // Add any attributes first
593                    ///         class: "my-class",
594                    ///         "custom-attribute-name": "value",
595                    ///         // Then add any attributes you are spreading into this element
596                    ///         ..attributes,
597                    ///         // Then add any children elements, components, text nodes, or raw expressions
598                    ///         div {}
599                    ///         ChildComponent {}
600                    ///         "child text"
601                    ///         {raw_expression}
602                    ///     }
603                    /// };
604                    /// ```
605                    $name {}
606                ),*
607            }
608        }
609
610        pub(crate) mod extensions {
611            use super::*;
612            $(
613                impl_extension_attributes![$name { $($fil,)* }];
614            )*
615        }
616    };
617}
618
619// Organized in the same order as
620// https://developer.mozilla.org/en-US/docs/Web/HTML/Element
621//
622// Does not include obsolete elements.
623//
624// This namespace represents a collection of modern HTML-5 compatible elements.
625//
626// This list does not include obsolete, deprecated, experimental, or poorly supported elements.
627builder_constructors! {
628    // Document metadata
629
630    /// Build a
631    /// [`<base>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base)
632    /// element.
633    ///
634    base None {
635        href: Uri DEFAULT,
636        target: Target DEFAULT,
637    };
638
639    /// Build a
640    /// [`<head>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head)
641    /// element.
642    head None {};
643
644    /// Build a
645    /// [`<link>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link)
646    /// element.
647    link None {
648        // as: Mime,
649        crossorigin: CrossOrigin DEFAULT,
650        href: Uri DEFAULT,
651        hreflang: LanguageTag DEFAULT,
652        media: String DEFAULT, // FIXME media query
653        rel: LinkType DEFAULT,
654        sizes: String DEFAULT, // FIXME
655        title: String DEFAULT, // FIXME
656        r#type: Mime "type",
657        integrity: String DEFAULT,
658        disabled: Bool DEFAULT,
659        referrerpolicy: ReferrerPolicy DEFAULT,
660        fetchpriority: FetchPriority DEFAULT,
661        blocking: Blocking DEFAULT,
662        r#as: As "as",
663    };
664
665    /// Build a
666    /// [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta)
667    /// element.
668    meta None {
669        charset: String DEFAULT, // FIXME IANA standard names
670        content: String DEFAULT,
671        http_equiv: String "http-equiv",
672        name: Metadata DEFAULT,
673        property: Metadata DEFAULT,
674    };
675
676    /// Build a
677    /// [`<style>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style)
678    /// element.
679    style None {
680        r#type: Mime "type",
681        media: String DEFAULT, // FIXME media query
682        nonce: Nonce DEFAULT,
683        title: String DEFAULT, // FIXME
684    };
685
686    /// Build a
687    /// [`<title>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title)
688    /// element.
689    title None { };
690
691    // Sectioning root
692
693    /// Build a
694    /// [`<body>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/body)
695    /// element.
696    body None {};
697
698    // ------------------
699    // Content sectioning
700    // ------------------
701
702    /// Build a
703    /// [`<address>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/address)
704    /// element.
705    address None {};
706
707    /// Build a
708    /// [`<article>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/article)
709    /// element.
710    article None {};
711
712    /// Build a
713    /// [`<aside>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/aside)
714    /// element.
715    aside None {};
716
717    /// Build a
718    /// [`<footer>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/footer)
719    /// element.
720    footer None {};
721
722    /// Build a
723    /// [`<header>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/header)
724    /// element.
725    header None {};
726
727    /// Build a
728    /// [`<hgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hgroup)
729    /// element.
730    hgroup None {};
731
732    /// Build a
733    /// [`<h1>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h1)
734    /// element.
735    ///
736    /// # About
737    /// - The HTML `<h1>` element is found within the `<body>` tag.
738    /// - Headings can range from `<h1>` to `<h6>`.
739    /// - The most important heading is `<h1>` and the least important heading is `<h6>`.
740    /// - The `<h1>` heading is the first heading in the document.
741    /// - The `<h1>` heading is usually a large bolded font.
742    h1 None {};
743
744    /// Build a
745    /// [`<h2>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h2)
746    /// element.
747    ///
748    /// # About
749    /// - The HTML `<h2>` element is found within the `<body>` tag.
750    /// - Headings can range from `<h1>` to `<h6>`.
751    /// - The most important heading is `<h1>` and the least important heading is `<h6>`.
752    /// - The `<h2>` heading is the second heading in the document.
753    /// - The `<h2>` heading is usually a large bolded font.
754    h2 None {};
755
756    /// Build a
757    /// [`<h3>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h3)
758    /// element.
759    ///
760    /// # About
761    /// - The HTML <h1> element is found within the <body> tag.
762    /// - Headings can range from `<h1>` to `<h6>`.
763    /// - The most important heading is `<h1>`` and the least important heading is `<h6>`.
764    /// - The `<h1>` heading is the first heading in the document.
765    /// - The `<h1>` heading is usually a large bolded font.
766    h3 None {};
767
768    /// Build a
769    /// [`<h4>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h4)
770    /// element.
771    h4 None {};
772
773    /// Build a
774    /// [`<h5>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h5)
775    /// element.
776    h5 None {};
777
778    /// Build a
779    /// [`<h6>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h6)
780    /// element.
781    h6 None {};
782
783    /// Build a
784    /// [`<main>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/main)
785    /// element.
786    main None {};
787
788    /// Build a
789    /// [`<nav>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/nav)
790    /// element.
791    nav None {};
792
793    /// Build a
794    /// [`<section>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/section)
795    /// element.
796    section None {};
797
798    // Text content
799
800    /// Build a
801    /// [`<blockquote>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote)
802    /// element.
803    blockquote None {
804        cite: Uri DEFAULT,
805    };
806    /// Build a
807    /// [`<dd>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dd)
808    /// element.
809    dd None {};
810
811    /// Build a
812    /// [`<div>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div)
813    /// element.
814    ///
815    /// Part of the HTML namespace. Only works in HTML-compatible renderers
816    ///
817    /// ## Definition and Usage
818    /// - The `<div>` tag defines a division or a section in an HTML document.
819    /// - The `<div>` tag is used as a container for HTML elements - which is then styled with CSS or manipulated with  JavaScript.
820    /// - The `<div>` tag is easily styled by using the class or id attribute.
821    /// - Any sort of content can be put inside the `<div>` tag!
822    ///
823    /// Note: By default, browsers always place a line break before and after the <div> element.
824    ///
825    /// ## References:
826    /// - <https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div>
827    /// - <https://www.w3schools.com/tags/tag_div.asp>
828    div None {};
829
830    /// Build a
831    /// [`<dl>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dl)
832    /// element.
833    dl None {};
834
835    /// Build a
836    /// [`<dt>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dt)
837    /// element.
838    dt None {};
839
840    /// Build a
841    /// [`<figcaption>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figcaption)
842    /// element.
843    figcaption None {};
844
845    /// Build a
846    /// [`<figure>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure)
847    /// element.
848    figure None {};
849
850    /// Build a
851    /// [`<hr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hr)
852    /// element.
853    hr None {};
854
855    /// Build a
856    /// [`<li>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li)
857    /// element.
858    li None {
859        value: isize DEFAULT,
860    };
861
862    /// Build a
863    /// [`<ol>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol)
864    /// element.
865    ol None {
866        reversed: Bool DEFAULT,
867        start: isize DEFAULT,
868        r#type: OrderedListType "type",
869    };
870
871    /// Build a
872    /// [`<p>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/p)
873    /// element.
874    p None {};
875
876    /// Build a
877    /// [`<pre>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre)
878    /// element.
879    pre None {};
880
881    /// Build a
882    /// [`<ul>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul)
883    /// element.
884    ul None {};
885
886
887    // Inline text semantics
888
889    /// Build a
890    /// [`<a>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a)
891    /// element.
892    a None {
893        download: String DEFAULT,
894        href: Uri DEFAULT,
895        hreflang: LanguageTag DEFAULT,
896        target: Target DEFAULT,
897        r#type: Mime "type",
898        // ping: SpacedList<Uri>,
899        // rel: SpacedList<LinkType>,
900        ping: SpacedList DEFAULT,
901        rel: SpacedList DEFAULT,
902    };
903
904    /// Build a
905    /// [`<abbr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/abbr)
906    /// element.
907    abbr None {};
908
909    /// Build a
910    /// [`<b>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/b)
911    /// element.
912    b None {};
913
914    /// Build a
915    /// [`<bdi>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdi)
916    /// element.
917    bdi None {};
918
919    /// Build a
920    /// [`<bdo>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdo)
921    /// element.
922    bdo None {};
923
924    /// Build a
925    /// [`<br>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/br)
926    /// element.
927    br None {};
928
929    /// Build a
930    /// [`<cite>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/cite)
931    /// element.
932    cite None {};
933
934    /// Build a
935    /// [`<code>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/code)
936    /// element.
937    code None {
938        language: String DEFAULT,
939    };
940
941    /// Build a
942    /// [`<data>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/data)
943    /// element.
944    data None {
945        value: String DEFAULT,
946    };
947
948    /// Build a
949    /// [`<dfn>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dfn)
950    /// element.
951    dfn None {};
952
953    /// Build a
954    /// [`<em>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/em)
955    /// element.
956    em None {};
957
958    /// Build a
959    /// [`<i>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/i)
960    /// element.
961    i None {};
962
963    /// Build a
964    /// [`<kbd>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/kbd)
965    /// element.
966    kbd None {};
967
968    /// Build a
969    /// [`<mark>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/mark)
970    /// element.
971    mark None {};
972
973    /// Build a
974    /// [`<menu>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/menu)
975    /// element.
976    menu None {};
977
978    /// Build a
979    /// [`<q>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/q)
980    /// element.
981    q None {
982        cite: Uri DEFAULT,
983    };
984
985
986    /// Build a
987    /// [`<rp>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rp)
988    /// element.
989    rp None {};
990
991
992    /// Build a
993    /// [`<rt>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rt)
994    /// element.
995    rt None {};
996
997
998    /// Build a
999    /// [`<ruby>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ruby)
1000    /// element.
1001    ruby None {};
1002
1003    /// Build a
1004    /// [`<s>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/s)
1005    /// element.
1006    s None {};
1007
1008    /// Build a
1009    /// [`<samp>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/samp)
1010    /// element.
1011    samp None {};
1012
1013    /// Build a
1014    /// [`<small>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/small)
1015    /// element.
1016    small None {};
1017
1018    /// Build a
1019    /// [`<span>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/span)
1020    /// element.
1021    span None {};
1022
1023    /// Build a
1024    /// [`<strong>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/strong)
1025    /// element.
1026    strong None {};
1027
1028    /// Build a
1029    /// [`<sub>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sub)
1030    /// element.
1031    sub None {};
1032
1033    /// Build a
1034    /// [`<sup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sup)
1035    /// element.
1036    sup None {};
1037
1038    /// Build a
1039    /// [`<time>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/time)
1040    /// element.
1041    time None {
1042        datetime: Datetime DEFAULT,
1043    };
1044
1045    /// Build a
1046    /// [`<u>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/u)
1047    /// element.
1048    u None {};
1049
1050    /// Build a
1051    /// [`<var>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/var)
1052    /// element.
1053    var None {};
1054
1055    /// Build a
1056    /// [`<wbr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/wbr)
1057    /// element.
1058    wbr None {};
1059
1060
1061    // Image and multimedia
1062
1063    /// Build a
1064    /// [`<area>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/area)
1065    /// element.
1066    area None {
1067        alt: String DEFAULT,
1068        coords: String DEFAULT, // TODO could perhaps be validated
1069        download: Bool DEFAULT,
1070        href: Uri DEFAULT,
1071        hreflang: LanguageTag DEFAULT,
1072        shape: AreaShape DEFAULT,
1073        target: Target DEFAULT,
1074        // ping: SpacedList<Uri>,
1075        // rel: SpacedSet<LinkType>,
1076    };
1077
1078    /// Build a
1079    /// [`<audio>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio)
1080    /// element.
1081    audio None {
1082        autoplay: Bool DEFAULT,
1083        controls: Bool DEFAULT,
1084        crossorigin: CrossOrigin DEFAULT,
1085        muted: Bool DEFAULT,
1086        preload: Preload DEFAULT,
1087        src: Uri DEFAULT,
1088        r#loop: Bool "loop",
1089    };
1090
1091    /// Build a
1092    /// [`<img>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img)
1093    /// element.
1094    img None {
1095        alt: String DEFAULT,
1096        crossorigin: CrossOrigin DEFAULT,
1097        decoding: ImageDecoding DEFAULT,
1098        height: usize DEFAULT,
1099        ismap: Bool DEFAULT,
1100        loading: String DEFAULT,
1101        src: Uri DEFAULT,
1102        srcset: String DEFAULT, // FIXME this is much more complicated
1103        usemap: String DEFAULT, // FIXME should be a fragment starting with '#'
1104        width: usize DEFAULT,
1105        referrerpolicy: String DEFAULT,
1106        // sizes: SpacedList<String>, // FIXME it's not really just a string
1107    };
1108
1109    /// Build a
1110    /// [`<map>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map)
1111    /// element.
1112    map None {
1113        name: Id DEFAULT,
1114    };
1115
1116    /// Build a
1117    /// [`<track>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/track)
1118    /// element.
1119    track None {
1120        default: Bool DEFAULT,
1121        kind: VideoKind DEFAULT,
1122        label: String DEFAULT,
1123        src: Uri DEFAULT,
1124        srclang: LanguageTag DEFAULT,
1125    };
1126
1127    /// Build a
1128    /// [`<video>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video)
1129    /// element.
1130    video None {
1131        autoplay: Bool DEFAULT,
1132        controls: Bool DEFAULT,
1133        crossorigin: CrossOrigin DEFAULT,
1134        height: usize DEFAULT,
1135        r#loop: Bool "loop",
1136        muted: Bool DEFAULT,
1137        preload: Preload DEFAULT,
1138        playsinline: Bool DEFAULT,
1139        poster: Uri DEFAULT,
1140        src: Uri DEFAULT,
1141        width: usize DEFAULT,
1142    };
1143
1144
1145    // Embedded content
1146
1147    /// Build a
1148    /// [`<embed>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/embed)
1149    /// element.
1150    embed None {
1151        height: usize DEFAULT,
1152        src: Uri DEFAULT,
1153        r#type: Mime "type",
1154        width: usize DEFAULT,
1155    };
1156
1157    /// Build a
1158    /// [`<iframe>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe)
1159    /// element.
1160    iframe None {
1161        allow: FeaturePolicy DEFAULT,
1162        allowfullscreen: Bool DEFAULT,
1163        allowpaymentrequest: Bool DEFAULT,
1164        height: usize DEFAULT,
1165        name: Id DEFAULT,
1166        referrerpolicy: ReferrerPolicy DEFAULT,
1167        src: Uri DEFAULT,
1168        srcdoc: Uri DEFAULT,
1169        width: usize DEFAULT,
1170
1171        margin_width: String "marginWidth",
1172        align: String DEFAULT,
1173        longdesc: String DEFAULT,
1174
1175        scrolling: String DEFAULT,
1176        margin_height: String "marginHeight",
1177        frame_border: String "frameBorder",
1178        // sandbox: SpacedSet<Sandbox>,
1179    };
1180
1181    /// Build a
1182    /// [`<object>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object)
1183    /// element.
1184    object None {
1185        data: Uri DEFAULT,
1186        form: Id DEFAULT,
1187        height: usize DEFAULT,
1188        name: Id DEFAULT,
1189        r#type: Mime "type",
1190        typemustmatch: Bool DEFAULT,
1191        usemap: String DEFAULT, // TODO should be a fragment starting with '#'
1192        width: usize DEFAULT,
1193    };
1194
1195    /// Build a
1196    /// [`<param>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/param)
1197    /// element.
1198    param None {
1199        name: String DEFAULT,
1200        value: String DEFAULT,
1201    };
1202
1203    /// Build a
1204    /// [`<picture>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture)
1205    /// element.
1206    picture None {};
1207
1208    /// Build a
1209    /// [`<source>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source)
1210    /// element.
1211    source None {
1212        src: Uri DEFAULT,
1213        r#type: Mime "type",
1214    };
1215
1216
1217    // Scripting
1218
1219    /// Build a
1220    /// [`<canvas>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas)
1221    /// element.
1222    canvas None {
1223        height: usize DEFAULT,
1224        width: usize DEFAULT,
1225    };
1226
1227    /// Build a
1228    /// [`<noscript>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript)
1229    /// element.
1230    noscript None {};
1231
1232    /// Build a
1233    /// [`<script>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script)
1234    /// element.
1235    ///
1236    /// The [`script`] HTML element is used to embed executable code or data; this is typically used to embed or refer to
1237    /// JavaScript code. The [`script`] element can also be used with other languages, such as WebGL's GLSL shader
1238    /// programming language and JSON.
1239    script None {
1240        /// Normal script elements pass minimal information to the window.onerror for scripts which do not pass the
1241        /// standard CORS checks. To allow error logging for sites which use a separate domain for static media, use
1242        /// this attribute. See CORS settings attributes for a more descriptive explanation of its valid arguments.
1243        crossorigin: CrossOrigin DEFAULT,
1244
1245        /// This Boolean attribute is set to indicate to a browser that the script is meant to be executed after the
1246        /// document has been parsed, but before firing DOMContentLoaded.
1247        ///
1248        /// Scripts with the defer attribute will prevent the DOMContentLoaded event from firing until the script has
1249        /// loaded and finished evaluating.
1250        ///
1251        /// ----
1252        /// ### Warning:
1253        ///
1254        /// This attribute must not be used if the src attribute is absent (i.e. for inline scripts), in this
1255        /// case it would have no effect.
1256        ///
1257        /// ----
1258        ///
1259        /// The defer attribute has no effect on module scripts — they defer by default.
1260        /// Scripts with the defer attribute will execute in the order in which they appear in the document.
1261        ///
1262        /// This attribute allows the elimination of parser-blocking JavaScript where the browser would have to load and
1263        /// evaluate scripts before continuing to parse. async has a similar effect in this case.
1264        defer: Bool DEFAULT,
1265        integrity: Integrity DEFAULT,
1266        nomodule: Bool DEFAULT,
1267        nonce: Nonce DEFAULT,
1268        src: Uri DEFAULT,
1269        text: String DEFAULT,
1270        fetchpriority: String DEFAULT,
1271        referrerpolicy: String DEFAULT,
1272
1273        r#async: Bool "async",
1274        r#type: String "type", // TODO could be an enum
1275        r#script: String "script",
1276    };
1277
1278
1279    // Demarcating edits
1280
1281    /// Build a
1282    /// [`<del>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/del)
1283    /// element.
1284    del None {
1285        cite: Uri DEFAULT,
1286        datetime: Datetime DEFAULT,
1287    };
1288
1289    /// Build a
1290    /// [`<ins>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ins)
1291    /// element.
1292    ins None {
1293        cite: Uri DEFAULT,
1294        datetime: Datetime DEFAULT,
1295    };
1296
1297
1298    // Table content
1299
1300    /// Build a
1301    /// [`<caption>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption)
1302    /// element.
1303    caption None {};
1304
1305    /// Build a
1306    /// [`<col>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col)
1307    /// element.
1308    col None {
1309        span: usize DEFAULT,
1310    };
1311
1312    /// Build a
1313    /// [`<colgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup)
1314    /// element.
1315    colgroup None {
1316        span: usize DEFAULT,
1317    };
1318
1319    /// Build a
1320    /// [`<table>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table)
1321    /// element.
1322    table None {};
1323
1324    /// Build a
1325    /// [`<tbody>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody)
1326    /// element.
1327    tbody None {};
1328
1329    /// Build a
1330    /// [`<td>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td)
1331    /// element.
1332    td None {
1333        colspan: usize DEFAULT,
1334        rowspan: usize DEFAULT,
1335        // headers: SpacedSet<Id>,
1336    };
1337
1338    /// Build a
1339    /// [`<tfoot>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tfoot)
1340    /// element.
1341    tfoot None {};
1342
1343    /// Build a
1344    /// [`<th>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th)
1345    /// element.
1346    th None {
1347        abbr: String DEFAULT,
1348        colspan: usize DEFAULT,
1349        rowspan: usize DEFAULT,
1350        scope: TableHeaderScope DEFAULT,
1351        // headers: SpacedSet<Id>,
1352    };
1353
1354    /// Build a
1355    /// [`<thead>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/thead)
1356    /// element.
1357    thead None {};
1358
1359    /// Build a
1360    /// [`<tr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr)
1361    /// element.
1362    tr None {};
1363
1364
1365    // Forms
1366
1367    /// Build a
1368    /// [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button)
1369    /// element.
1370    button None {
1371        autofocus: Bool DEFAULT,
1372        disabled: Bool DEFAULT,
1373        form: Id DEFAULT,
1374        formaction: Uri DEFAULT,
1375        formenctype: FormEncodingType DEFAULT,
1376        formmethod: FormMethod DEFAULT,
1377        formnovalidate: Bool DEFAULT,
1378        formtarget: Target DEFAULT,
1379        name: Id DEFAULT,
1380        popovertarget: String DEFAULT,
1381        popovertargetaction: String DEFAULT,
1382        value: String DEFAULT,
1383        r#type: String "type",
1384    };
1385
1386    /// Build a
1387    /// [`<datalist>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist)
1388    /// element.
1389    datalist None {};
1390
1391    /// Build a
1392    /// [`<fieldset>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset)
1393    /// element.
1394    fieldset None {
1395        disabled: Bool DEFAULT,
1396        form: Id DEFAULT,
1397        name: Id DEFAULT,
1398    };
1399
1400    /// Build a
1401    /// [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form)
1402    /// element.
1403    form None {
1404        // accept-charset: SpacedList<CharacterEncoding>,
1405        action: Uri DEFAULT,
1406        autocomplete: OnOff DEFAULT,
1407        enctype: FormEncodingType DEFAULT,
1408        method: FormMethod DEFAULT,
1409        name: Id DEFAULT,
1410        novalidate: Bool DEFAULT,
1411        target: Target DEFAULT,
1412    };
1413
1414    /// Build a
1415    /// [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input)
1416    /// element.
1417    input None {
1418        accept: String DEFAULT,
1419        alt: String DEFAULT,
1420        autocomplete: String DEFAULT,
1421        autofocus: Bool DEFAULT,
1422        capture: String DEFAULT,
1423        checked: Bool DEFAULT,
1424        directory: Bool "webkitdirectory",
1425        disabled: Bool DEFAULT,
1426        form: Id DEFAULT,
1427        formaction: Uri DEFAULT,
1428        formenctype: FormEncodingType DEFAULT,
1429        formmethod: FormDialogMethod DEFAULT,
1430        formnovalidate: Bool DEFAULT,
1431        formtarget: Target DEFAULT,
1432        height: isize DEFAULT,
1433        initial_checked: Bool DEFAULT,
1434        list: Id DEFAULT,
1435        max: String DEFAULT,
1436        maxlength: usize DEFAULT,
1437        min: String DEFAULT,
1438        minlength: usize DEFAULT,
1439        multiple: Bool DEFAULT,
1440        name: Id DEFAULT,
1441        pattern: String DEFAULT,
1442        popovertarget: String DEFAULT,
1443        popovertargetaction: String DEFAULT,
1444        placeholder: String DEFAULT,
1445        readonly: Bool DEFAULT,
1446        required: Bool DEFAULT,
1447        size: usize DEFAULT,
1448        spellcheck: Bool DEFAULT,
1449        src: Uri DEFAULT,
1450        step: String DEFAULT,
1451        tabindex: usize DEFAULT,
1452        width: isize DEFAULT,
1453
1454        /// The type of input
1455        ///
1456        /// Here are the different input types you can use in HTML:
1457        ///
1458        /// - `button`
1459        /// - `checkbox`
1460        /// - `color`
1461        /// - `date`
1462        /// - `datetime-local`
1463        /// - `email`
1464        /// - `file`
1465        /// - `hidden`
1466        /// - `image`
1467        /// - `month`
1468        /// - `number`
1469        /// - `password`
1470        /// - `radio`
1471        /// - `range`
1472        /// - `reset`
1473        /// - `search`
1474        /// - `submit`
1475        /// - `tel`
1476        /// - `text`
1477        /// - `time`
1478        /// - `url`
1479        /// - `week`
1480
1481        r#type: InputType "type",
1482        // value: String,
1483        value: String volatile,
1484        initial_value: String DEFAULT,
1485    };
1486
1487    /// Build a
1488    /// [`<label>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label)
1489    /// element.
1490    label None {
1491        form: Id DEFAULT,
1492        r#for: Id "for",
1493    };
1494
1495    /// Build a
1496    /// [`<legend>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend)
1497    /// element.
1498    legend None {};
1499
1500    /// Build a
1501    /// [`<meter>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meter)
1502    /// element.
1503    meter None {
1504        value: isize DEFAULT,
1505        min: isize DEFAULT,
1506        max: isize DEFAULT,
1507        low: isize DEFAULT,
1508        high: isize DEFAULT,
1509        optimum: isize DEFAULT,
1510        form: Id DEFAULT,
1511    };
1512
1513    /// Build a
1514    /// [`<optgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup)
1515    /// element.
1516    optgroup None {
1517        disabled: Bool DEFAULT,
1518        label: String DEFAULT,
1519    };
1520
1521    /// Build a
1522    /// [`<option>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option)
1523    /// element.
1524    option None {
1525        disabled: Bool DEFAULT,
1526        label: String DEFAULT,
1527
1528
1529        value: String DEFAULT,
1530
1531        selected: Bool volatile,
1532        initial_selected: Bool DEFAULT,
1533    };
1534
1535    /// Build a
1536    /// [`<output>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/output)
1537    /// element.
1538    output None {
1539        form: Id DEFAULT,
1540        name: Id DEFAULT,
1541        // r#for: SpacedSet<Id>,
1542    };
1543
1544    /// Build a
1545    /// [`<progress>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress)
1546    /// element.
1547    progress None {
1548        max: f64 DEFAULT,
1549        value: f64 DEFAULT,
1550    };
1551
1552    /// Build a
1553    /// [`<select>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select)
1554    /// element.
1555    select None {
1556        // defined below
1557        // value: String,
1558        autocomplete: String DEFAULT,
1559        autofocus: Bool DEFAULT,
1560        disabled: Bool DEFAULT,
1561        form: Id DEFAULT,
1562        multiple: Bool DEFAULT,
1563        name: Id DEFAULT,
1564        required: Bool DEFAULT,
1565        size: usize DEFAULT,
1566        value: String volatile,
1567    };
1568
1569    /// Build a
1570    /// [`<textarea>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea)
1571    /// element.
1572    textarea None {
1573        autocomplete: OnOff DEFAULT,
1574        autofocus: Bool DEFAULT,
1575        cols: usize DEFAULT,
1576        disabled: Bool DEFAULT,
1577        form: Id DEFAULT,
1578        maxlength: usize DEFAULT,
1579        minlength: usize DEFAULT,
1580        name: Id DEFAULT,
1581        placeholder: String DEFAULT,
1582        readonly: Bool DEFAULT,
1583        required: Bool DEFAULT,
1584        rows: usize DEFAULT,
1585        spellcheck: BoolOrDefault DEFAULT,
1586        wrap: Wrap DEFAULT,
1587        value: String volatile,
1588
1589        initial_value: String DEFAULT,
1590    };
1591
1592
1593    // Interactive elements
1594
1595    /// Build a
1596    /// [`<details>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details)
1597    /// element.
1598    details None {
1599        open: Bool DEFAULT,
1600    };
1601
1602    /// Build dialog
1603    /// [`<dialog>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog)
1604    /// element.
1605    dialog None {
1606        open: Bool DEFAULT,
1607    };
1608
1609    /// Build a
1610    /// [`<summary>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/summary)
1611    /// element.
1612    summary None {};
1613
1614    // Web components
1615
1616    /// Build a
1617    /// [`<slot>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot)
1618    /// element.
1619    slot None {
1620        name: String DEFAULT,
1621    };
1622
1623    /// Build a
1624    /// [`<template>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template)
1625    /// element.
1626    template None {};
1627
1628    // SVG components
1629    /// Build a
1630    /// [`<svg>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/svg)
1631    /// element.
1632    svg "http://www.w3.org/2000/svg" { };
1633
1634
1635    // /// Build a
1636    // /// [`<a>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/a)
1637    // /// element.
1638    // a "http://www.w3.org/2000/svg" {};
1639
1640    /// Build a
1641    /// [`<animate>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animate)
1642    /// element.
1643    animate "http://www.w3.org/2000/svg" {};
1644
1645    /// Build a
1646    /// [`<animateMotion>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animateMotion)
1647    /// element.
1648    animateMotion "http://www.w3.org/2000/svg" {};
1649
1650    /// Build a
1651    /// [`<animateTransform>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animateTransform)
1652    /// element.
1653    animateTransform "http://www.w3.org/2000/svg" {};
1654
1655    /// Build a
1656    /// [`<circle>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/circle)
1657    /// element.
1658    circle "http://www.w3.org/2000/svg" {};
1659
1660    /// Build a
1661    /// [`<clipPath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/clipPath)
1662    /// element.
1663    clipPath "http://www.w3.org/2000/svg" {};
1664
1665    /// Build a
1666    /// [`<defs>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/defs)
1667    /// element.
1668    defs "http://www.w3.org/2000/svg" {};
1669
1670    /// Build a
1671    /// [`<desc>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/desc)
1672    /// element.
1673    desc "http://www.w3.org/2000/svg" {};
1674
1675    /// Build a
1676    /// [`<discard>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/discard)
1677    /// element.
1678    discard "http://www.w3.org/2000/svg" {};
1679
1680    /// Build a
1681    /// [`<ellipse>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/ellipse)
1682    /// element.
1683    ellipse "http://www.w3.org/2000/svg" {};
1684
1685    /// Build a
1686    /// [`<feBlend>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feBlend)
1687    /// element.
1688    feBlend "http://www.w3.org/2000/svg" {};
1689
1690    /// Build a
1691    /// [`<feColorMatrix>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feColorMatrix)
1692    /// element.
1693    feColorMatrix "http://www.w3.org/2000/svg" {};
1694
1695    /// Build a
1696    /// [`<feComponentTransfer>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feComponentTransfer)
1697    /// element.
1698    feComponentTransfer "http://www.w3.org/2000/svg" {};
1699
1700    /// Build a
1701    /// [`<feComposite>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feComposite)
1702    /// element.
1703    feComposite "http://www.w3.org/2000/svg" {};
1704
1705    /// Build a
1706    /// [`<feConvolveMatrix>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feConvolveMatrix)
1707    /// element.
1708    feConvolveMatrix "http://www.w3.org/2000/svg" {};
1709
1710    /// Build a
1711    /// [`<feDiffuseLighting>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDiffuseLighting)
1712    /// element.
1713    feDiffuseLighting "http://www.w3.org/2000/svg" {};
1714
1715    /// Build a
1716    /// [`<feDisplacementMap>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDisplacementMap)
1717    /// element.
1718    feDisplacementMap "http://www.w3.org/2000/svg" {};
1719
1720    /// Build a
1721    /// [`<feDistantLight>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDistantLight)
1722    /// element.
1723    feDistantLight "http://www.w3.org/2000/svg" {};
1724
1725    /// Build a
1726    /// [`<feDropShadow>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDropShadow)
1727    /// element.
1728    feDropShadow "http://www.w3.org/2000/svg" {};
1729
1730    /// Build a
1731    /// [`<feFlood>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFlood)
1732    /// element.
1733    feFlood "http://www.w3.org/2000/svg" {};
1734
1735    /// Build a
1736    /// [`<feFuncA>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncA)
1737    /// element.
1738    feFuncA "http://www.w3.org/2000/svg" {};
1739
1740    /// Build a
1741    /// [`<feFuncB>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncB)
1742    /// element.
1743    feFuncB "http://www.w3.org/2000/svg" {};
1744
1745    /// Build a
1746    /// [`<feFuncG>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncG)
1747    /// element.
1748    feFuncG "http://www.w3.org/2000/svg" {};
1749
1750    /// Build a
1751    /// [`<feFuncR>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncR)
1752    /// element.
1753    feFuncR "http://www.w3.org/2000/svg" {};
1754
1755    /// Build a
1756    /// [`<feGaussianBlur>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feGaussianBlur)
1757    /// element.
1758    feGaussianBlur "http://www.w3.org/2000/svg" {};
1759
1760    /// Build a
1761    /// [`<feImage>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feImage)
1762    /// element.
1763    feImage "http://www.w3.org/2000/svg" {};
1764
1765    /// Build a
1766    /// [`<feMerge>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feMerge)
1767    /// element.
1768    feMerge "http://www.w3.org/2000/svg" {};
1769
1770    /// Build a
1771    /// [`<feMergeNode>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feMergeNode)
1772    /// element.
1773    feMergeNode "http://www.w3.org/2000/svg" {};
1774
1775    /// Build a
1776    /// [`<feMorphology>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feMorphology)
1777    /// element.
1778    feMorphology "http://www.w3.org/2000/svg" {};
1779
1780    /// Build a
1781    /// [`<feOffset>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feOffset)
1782    /// element.
1783    feOffset "http://www.w3.org/2000/svg" {};
1784
1785    /// Build a
1786    /// [`<fePointLight>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/fePointLight)
1787    /// element.
1788    fePointLight "http://www.w3.org/2000/svg" {};
1789
1790    /// Build a
1791    /// [`<feSpecularLighting>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feSpecularLighting)
1792    /// element.
1793    feSpecularLighting "http://www.w3.org/2000/svg" {};
1794
1795    /// Build a
1796    /// [`<feSpotLight>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feSpotLight)
1797    /// element.
1798    feSpotLight "http://www.w3.org/2000/svg" {};
1799
1800    /// Build a
1801    /// [`<feTile>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feTile)
1802    /// element.
1803    feTile "http://www.w3.org/2000/svg" {};
1804
1805    /// Build a
1806    /// [`<feTurbulence>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feTurbulence)
1807    /// element.
1808    feTurbulence "http://www.w3.org/2000/svg" {};
1809
1810    /// Build a
1811    /// [`<filter>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/filter)
1812    /// element.
1813    filter "http://www.w3.org/2000/svg" {};
1814
1815    /// Build a
1816    /// [`<foreignObject>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/foreignObject)
1817    /// element.
1818    foreignObject "http://www.w3.org/2000/svg" {};
1819
1820    /// Build a
1821    /// [`<g>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/g)
1822    /// element.
1823    g "http://www.w3.org/2000/svg" {};
1824
1825    /// Build a
1826    /// [`<hatch>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/hatch)
1827    /// element.
1828    hatch "http://www.w3.org/2000/svg" {};
1829
1830    /// Build a
1831    /// [`<hatchpath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/hatchpath)
1832    /// element.
1833    hatchpath "http://www.w3.org/2000/svg" {};
1834
1835    /// Build a
1836    /// [`<image>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/image)
1837    /// element.
1838    image "http://www.w3.org/2000/svg" {};
1839
1840    /// Build a
1841    /// [`<line>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/line)
1842    /// element.
1843    line "http://www.w3.org/2000/svg" {};
1844
1845    /// Build a
1846    /// [`<linearGradient>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/linearGradient)
1847    /// element.
1848    linearGradient "http://www.w3.org/2000/svg" {};
1849
1850    /// Build a
1851    /// [`<marker>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/marker)
1852    /// element.
1853    marker "http://www.w3.org/2000/svg" {};
1854
1855    /// Build a
1856    /// [`<mask>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/mask)
1857    /// element.
1858    mask "http://www.w3.org/2000/svg" {};
1859
1860    /// Build a
1861    /// [`<metadata>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/metadata)
1862    /// element.
1863    metadata "http://www.w3.org/2000/svg" {};
1864
1865    /// Build a
1866    /// [`<mpath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/mpath)
1867    /// element.
1868    mpath "http://www.w3.org/2000/svg" {};
1869
1870    /// Build a
1871    /// [`<path>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/path)
1872    /// element.
1873    path "http://www.w3.org/2000/svg" {};
1874
1875    /// Build a
1876    /// [`<pattern>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/pattern)
1877    /// element.
1878    pattern "http://www.w3.org/2000/svg" {};
1879
1880    /// Build a
1881    /// [`<polygon>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polygon)
1882    /// element.
1883    polygon "http://www.w3.org/2000/svg" {};
1884
1885    /// Build a
1886    /// [`<polyline>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polyline)
1887    /// element.
1888    polyline "http://www.w3.org/2000/svg" {};
1889
1890    /// Build a
1891    /// [`<radialGradient>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/radialGradient)
1892    /// element.
1893    radialGradient "http://www.w3.org/2000/svg" {};
1894
1895    /// Build a
1896    /// [`<rect>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/rect)
1897    /// element.
1898    rect "http://www.w3.org/2000/svg" {};
1899
1900    // /// Build a
1901    // /// [`<script>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/script)
1902    // /// element.
1903    // script "http://www.w3.org/2000/svg" {};
1904
1905    /// Build a
1906    /// [`<set>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/set)
1907    /// element.
1908    set "http://www.w3.org/2000/svg" {};
1909
1910    /// Build a
1911    /// [`<stop>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/stop)
1912    /// element.
1913    stop "http://www.w3.org/2000/svg" {};
1914
1915    // /// Build a
1916    // /// [`<style>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/style)
1917    // /// element.
1918    // style "http://www.w3.org/2000/svg" {};
1919
1920    // /// Build a
1921    // /// [`<svg>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/svg)
1922    // /// element.
1923    // svg "http://www.w3.org/2000/svg" {};
1924
1925    /// Build a
1926    /// [`<switch>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/switch)
1927    /// element.
1928    switch "http://www.w3.org/2000/svg" {};
1929
1930    /// Build a
1931    /// [`<symbol>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/symbol)
1932    /// element.
1933    symbol "http://www.w3.org/2000/svg" {};
1934
1935    /// Build a
1936    /// [`<text>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/text)
1937    /// element.
1938    text "http://www.w3.org/2000/svg" {};
1939
1940    /// Build a
1941    /// [`<textPath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/textPath)
1942    /// element.
1943    textPath "http://www.w3.org/2000/svg" {};
1944
1945    // /// Build a
1946    // /// [`<title>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title)
1947    // /// element.
1948    // title "http://www.w3.org/2000/svg" {};
1949
1950    /// Build a
1951    /// [`<tspan>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/tspan)
1952    /// element.
1953    tspan "http://www.w3.org/2000/svg" {};
1954
1955    /// Build a
1956    /// [`<view>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/view)
1957    /// element.
1958    view "http://www.w3.org/2000/svg" {};
1959
1960    // /// Build a
1961    // /// [`<use>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/use)
1962    // /// element.
1963    r#use ["use", "http://www.w3.org/2000/svg"] {
1964        href: String DEFAULT,
1965    };
1966
1967    // MathML elements
1968
1969    /// Build a
1970    /// [`<annotation>`](https://w3c.github.io/mathml-core/#dfn-annotation)
1971    /// element.
1972    annotation "http://www.w3.org/1998/Math/MathML" {
1973            encoding: String DEFAULT,
1974    };
1975
1976    /// Build a
1977    /// [`<annotation-xml>`](https://w3c.github.io/mathml-core/#dfn-annotation-xml)
1978    /// element.
1979    annotationXml ["annotation-xml", "http://www.w3.org/1998/Math/MathML"] {
1980            encoding: String DEFAULT,
1981    };
1982
1983    /// Build a
1984    /// [`<merror>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/merror)
1985    /// element.
1986    merror "http://www.w3.org/1998/Math/MathML" {};
1987
1988    /// Build a
1989    /// [`<math>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/math)
1990    /// element.
1991    math "http://www.w3.org/1998/Math/MathML" {
1992        display: String DEFAULT,
1993    };
1994
1995    /// Build a
1996    /// [`<mfrac>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mfrac)
1997    /// element.
1998    mfrac "http://www.w3.org/1998/Math/MathML" {
1999        linethickness: usize DEFAULT,
2000    };
2001
2002    /// Build a
2003    /// [`<mi>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mi)
2004    /// element.
2005    mi "http://www.w3.org/1998/Math/MathML" {
2006        mathvariant: String DEFAULT,
2007    };
2008
2009    /// Build a
2010    /// [`<mmultiscripts>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mmultiscripts)
2011    /// element.
2012    mmultiscripts "http://www.w3.org/1998/math/mathml" {};
2013
2014    /// Build a
2015    /// [`<mn>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mn)
2016    /// element.
2017    mn "http://www.w3.org/1998/Math/MathML" {};
2018
2019    /// Build a
2020    /// [`<mo>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo)
2021    /// element.
2022    mo "http://www.w3.org/1998/Math/MathML" {
2023        fence: Bool DEFAULT,
2024        largeop: Bool DEFAULT,
2025        lspace: usize DEFAULT,
2026        maxsize: usize DEFAULT,
2027        minsize: usize DEFAULT,
2028        movablelimits: Bool DEFAULT,
2029        rspace: usize DEFAULT,
2030        separator: Bool DEFAULT,
2031        stretchy: Bool DEFAULT,
2032        symmetric: Bool DEFAULT,
2033    };
2034
2035    /// Build a
2036    /// [`<mover>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mover)
2037    /// element.
2038    mover "http://www.w3.org/1998/Math/MathML" {
2039        accent: Bool DEFAULT,
2040    };
2041
2042    /// Build a
2043    /// [`<mpadded>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mpadded)
2044    /// element.
2045    mpadded "http://www.w3.org/1998/Math/MathML" {
2046        depth: usize DEFAULT,
2047        height: usize DEFAULT,
2048        lspace: usize DEFAULT,
2049        voffset: usize DEFAULT,
2050        width: usize DEFAULT,
2051    };
2052
2053    /// Build a
2054    /// [`<mphantom>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mphantom)
2055    /// element.
2056    mphantom "http://www.w3.org/1998/Math/MathML" {};
2057
2058    /// Build a
2059    /// [`<mprescripts>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mprescripts)
2060    /// element.
2061    mprescripts "http://www.w3.org/1998/Math/MathML" {};
2062
2063    /// Build a
2064    /// [`<mroot>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mroot)
2065    /// element.
2066    mroot "http://www.w3.org/1998/Math/MathML" {};
2067
2068    /// Build a
2069    /// [`<mrow>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mrow)
2070    /// element.
2071    mrow "http://www.w3.org/1998/Math/MathML" {
2072
2073    };
2074
2075    /// Build a
2076    /// [`<ms>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/ms)
2077    /// element.
2078    ms "http://www.w3.org/1998/Math/MathML" {
2079        lquote: String DEFAULT,
2080        rquote: String DEFAULT,
2081    };
2082
2083    /// Build a
2084    /// [`<mspace>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mspace)
2085    /// element.
2086    mspace "http://www.w3.org/1998/Math/MathML" {
2087        depth: usize DEFAULT,
2088        height: usize DEFAULT,
2089        width: usize DEFAULT,
2090    };
2091
2092    /// Build a
2093    /// [`<msqrt>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/msqrt)
2094    /// element.
2095    msqrt "http://www.w3.org/1998/Math/MathML" {};
2096
2097    /// Build a
2098    /// [`<mstyle>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mstyle)
2099    /// element.
2100    mstyle "http://www.w3.org/1998/Math/MathML" {};
2101
2102    /// Build a
2103    /// [`<msub>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/msub)
2104    /// element.
2105    msub "http://www.w3.org/1998/Math/MathML" {};
2106
2107    /// Build a
2108    /// [`<msubsup>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/msubsup)
2109    /// element.
2110    msubsup "http://www.w3.org/1998/Math/MathML" {};
2111
2112    /// Build a
2113    /// [`<msup>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/msup)
2114    /// element.
2115    msup "http://www.w3.org/1998/Math/MathML" {};
2116
2117    /// Build a
2118    /// [`<mtable>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mtable)
2119    /// element.
2120    mtable "http://www.w3.org/1998/Math/MathML" {};
2121
2122    /// Build a
2123    /// [`<mtd>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mtd)
2124    /// element.
2125    mtd "http://www.w3.org/1998/Math/MathML" {
2126        columnspan: usize DEFAULT,
2127        rowspan: usize DEFAULT,
2128    };
2129
2130    /// Build a
2131    /// [`<mtext>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mtext)
2132    /// element.
2133    mtext "http://www.w3.org/1998/Math/MathML" {};
2134
2135    /// Build a
2136    /// [`<mtr>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mtr)
2137    /// element.
2138    mtr "http://www.w3.org/1998/Math/MathML" {};
2139
2140    /// Build a
2141    /// [`<munder>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/munder)
2142    /// element.
2143    munder "http://www.w3.org/1998/Math/MathML" {
2144        accentunder: Bool DEFAULT,
2145    };
2146
2147    /// Build a
2148    /// [`<munderover>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/munderover)
2149    /// element.
2150    munderover "http://www.w3.org/1998/Math/MathML" {
2151        accent: Bool DEFAULT,
2152        accentunder: Bool DEFAULT,
2153    };
2154
2155    /// Build a
2156    /// [`<semantics>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/semantics)
2157    /// element.
2158    semantics "http://www.w3.org/1998/Math/MathML" {
2159        encoding: String DEFAULT,
2160    };
2161}