dioxus_html/
elements.rs

1#![allow(non_upper_case_globals)]
2
3use dioxus_core::HasAttributes;
4use dioxus_core::IntoAttributeValue;
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: String DEFAULT, // FIXME
1107        elementtiming: String DEFAULT,
1108        fetchpriority: String DEFAULT,
1109        attributionsrc: String DEFAULT,
1110    };
1111
1112    /// Build a
1113    /// [`<map>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map)
1114    /// element.
1115    map None {
1116        name: Id DEFAULT,
1117    };
1118
1119    /// Build a
1120    /// [`<track>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/track)
1121    /// element.
1122    track None {
1123        default: Bool DEFAULT,
1124        kind: VideoKind DEFAULT,
1125        label: String DEFAULT,
1126        src: Uri DEFAULT,
1127        srclang: LanguageTag DEFAULT,
1128    };
1129
1130    /// Build a
1131    /// [`<video>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video)
1132    /// element.
1133    video None {
1134        autoplay: Bool DEFAULT,
1135        controls: Bool DEFAULT,
1136        crossorigin: CrossOrigin DEFAULT,
1137        height: usize DEFAULT,
1138        r#loop: Bool "loop",
1139        muted: Bool DEFAULT,
1140        preload: Preload DEFAULT,
1141        playsinline: Bool DEFAULT,
1142        poster: Uri DEFAULT,
1143        src: Uri DEFAULT,
1144        width: usize DEFAULT,
1145    };
1146
1147
1148    // Embedded content
1149
1150    /// Build a
1151    /// [`<embed>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/embed)
1152    /// element.
1153    embed None {
1154        height: usize DEFAULT,
1155        src: Uri DEFAULT,
1156        r#type: Mime "type",
1157        width: usize DEFAULT,
1158    };
1159
1160    /// Build a
1161    /// [`<iframe>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe)
1162    /// element.
1163    iframe None {
1164        allow: FeaturePolicy DEFAULT,
1165        allowfullscreen: Bool DEFAULT,
1166        allowpaymentrequest: Bool DEFAULT,
1167        height: usize DEFAULT,
1168        name: Id DEFAULT,
1169        referrerpolicy: ReferrerPolicy DEFAULT,
1170        src: Uri DEFAULT,
1171        srcdoc: Uri DEFAULT,
1172        width: usize DEFAULT,
1173
1174        margin_width: String "marginWidth",
1175        align: String DEFAULT,
1176        longdesc: String DEFAULT,
1177
1178        scrolling: String DEFAULT,
1179        margin_height: String "marginHeight",
1180        frame_border: String "frameBorder",
1181        // sandbox: SpacedSet<Sandbox>,
1182    };
1183
1184    /// Build a
1185    /// [`<object>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object)
1186    /// element.
1187    object None {
1188        data: Uri DEFAULT,
1189        form: Id DEFAULT,
1190        height: usize DEFAULT,
1191        name: Id DEFAULT,
1192        r#type: Mime "type",
1193        typemustmatch: Bool DEFAULT,
1194        usemap: String DEFAULT, // TODO should be a fragment starting with '#'
1195        width: usize DEFAULT,
1196    };
1197
1198    /// Build a
1199    /// [`<param>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/param)
1200    /// element.
1201    param None {
1202        name: String DEFAULT,
1203        value: String DEFAULT,
1204    };
1205
1206    /// Build a
1207    /// [`<picture>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture)
1208    /// element.
1209    picture None {};
1210
1211    /// Build a
1212    /// [`<source>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source)
1213    /// element.
1214    source None {
1215        src: Uri DEFAULT,
1216        r#type: Mime "type",
1217    };
1218
1219
1220    // Scripting
1221
1222    /// Build a
1223    /// [`<canvas>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas)
1224    /// element.
1225    canvas None {
1226        height: usize DEFAULT,
1227        width: usize DEFAULT,
1228    };
1229
1230    /// Build a
1231    /// [`<noscript>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript)
1232    /// element.
1233    noscript None {};
1234
1235    /// Build a
1236    /// [`<script>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script)
1237    /// element.
1238    ///
1239    /// The script HTML element is used to embed executable code or data; this is typically used to embed or refer to
1240    /// JavaScript code. The script element can also be used with other languages, such as WebGL's GLSL shader
1241    /// programming language and JSON.
1242    script None {
1243        /// Normal script elements pass minimal information to the window.onerror for scripts which do not pass the
1244        /// standard CORS checks. To allow error logging for sites which use a separate domain for static media, use
1245        /// this attribute. See CORS settings attributes for a more descriptive explanation of its valid arguments.
1246        crossorigin: CrossOrigin DEFAULT,
1247
1248        /// This Boolean attribute is set to indicate to a browser that the script is meant to be executed after the
1249        /// document has been parsed, but before firing DOMContentLoaded.
1250        ///
1251        /// Scripts with the defer attribute will prevent the DOMContentLoaded event from firing until the script has
1252        /// loaded and finished evaluating.
1253        ///
1254        /// ----
1255        /// ### Warning:
1256        ///
1257        /// This attribute must not be used if the src attribute is absent (i.e. for inline scripts), in this
1258        /// case it would have no effect.
1259        ///
1260        /// ----
1261        ///
1262        /// The defer attribute has no effect on module scripts — they defer by default.
1263        /// Scripts with the defer attribute will execute in the order in which they appear in the document.
1264        ///
1265        /// This attribute allows the elimination of parser-blocking JavaScript where the browser would have to load and
1266        /// evaluate scripts before continuing to parse. async has a similar effect in this case.
1267        defer: Bool DEFAULT,
1268        integrity: Integrity DEFAULT,
1269        nomodule: Bool DEFAULT,
1270        nonce: Nonce DEFAULT,
1271        src: Uri DEFAULT,
1272        text: String DEFAULT,
1273        fetchpriority: String DEFAULT,
1274        referrerpolicy: String DEFAULT,
1275
1276        r#async: Bool "async",
1277        r#type: String "type", // TODO could be an enum
1278        r#script: String "script",
1279    };
1280
1281
1282    // Demarcating edits
1283
1284    /// Build a
1285    /// [`<del>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/del)
1286    /// element.
1287    del None {
1288        cite: Uri DEFAULT,
1289        datetime: Datetime DEFAULT,
1290    };
1291
1292    /// Build a
1293    /// [`<ins>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ins)
1294    /// element.
1295    ins None {
1296        cite: Uri DEFAULT,
1297        datetime: Datetime DEFAULT,
1298    };
1299
1300
1301    // Table content
1302
1303    /// Build a
1304    /// [`<caption>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption)
1305    /// element.
1306    caption None {};
1307
1308    /// Build a
1309    /// [`<col>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col)
1310    /// element.
1311    col None {
1312        span: usize DEFAULT,
1313    };
1314
1315    /// Build a
1316    /// [`<colgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup)
1317    /// element.
1318    colgroup None {
1319        span: usize DEFAULT,
1320    };
1321
1322    /// Build a
1323    /// [`<table>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table)
1324    /// element.
1325    table None {};
1326
1327    /// Build a
1328    /// [`<tbody>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody)
1329    /// element.
1330    tbody None {};
1331
1332    /// Build a
1333    /// [`<td>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td)
1334    /// element.
1335    td None {
1336        colspan: usize DEFAULT,
1337        rowspan: usize DEFAULT,
1338        // headers: SpacedSet<Id>,
1339    };
1340
1341    /// Build a
1342    /// [`<tfoot>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tfoot)
1343    /// element.
1344    tfoot None {};
1345
1346    /// Build a
1347    /// [`<th>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th)
1348    /// element.
1349    th None {
1350        abbr: String DEFAULT,
1351        colspan: usize DEFAULT,
1352        rowspan: usize DEFAULT,
1353        scope: TableHeaderScope DEFAULT,
1354        // headers: SpacedSet<Id>,
1355    };
1356
1357    /// Build a
1358    /// [`<thead>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/thead)
1359    /// element.
1360    thead None {};
1361
1362    /// Build a
1363    /// [`<tr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr)
1364    /// element.
1365    tr None {};
1366
1367
1368    // Forms
1369
1370    /// Build a
1371    /// [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button)
1372    /// element.
1373    button None {
1374        autofocus: Bool DEFAULT,
1375        disabled: Bool DEFAULT,
1376        form: Id DEFAULT,
1377        formaction: Uri DEFAULT,
1378        formenctype: FormEncodingType DEFAULT,
1379        formmethod: FormMethod DEFAULT,
1380        formnovalidate: Bool DEFAULT,
1381        formtarget: Target DEFAULT,
1382        name: Id DEFAULT,
1383        popovertarget: String DEFAULT,
1384        popovertargetaction: String DEFAULT,
1385        value: String DEFAULT,
1386        r#type: String "type",
1387    };
1388
1389    /// Build a
1390    /// [`<datalist>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist)
1391    /// element.
1392    datalist None {};
1393
1394    /// Build a
1395    /// [`<fieldset>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset)
1396    /// element.
1397    fieldset None {
1398        disabled: Bool DEFAULT,
1399        form: Id DEFAULT,
1400        name: Id DEFAULT,
1401    };
1402
1403    /// Build a
1404    /// [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form)
1405    /// element.
1406    form None {
1407        // accept-charset: SpacedList<CharacterEncoding>,
1408        action: Uri DEFAULT,
1409        autocomplete: OnOff DEFAULT,
1410        enctype: FormEncodingType DEFAULT,
1411        method: FormMethod DEFAULT,
1412        name: Id DEFAULT,
1413        novalidate: Bool DEFAULT,
1414        target: Target DEFAULT,
1415    };
1416
1417    /// Build a
1418    /// [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input)
1419    /// element.
1420    input None {
1421        accept: String DEFAULT,
1422        alt: String DEFAULT,
1423        autocomplete: String DEFAULT,
1424        /// cf. <https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/autocorrect>
1425        autocorrect: OnOff DEFAULT,
1426        autofocus: Bool DEFAULT,
1427        capture: String DEFAULT,
1428        checked: Bool DEFAULT,
1429        directory: Bool "webkitdirectory",
1430        disabled: Bool DEFAULT,
1431        form: Id DEFAULT,
1432        formaction: Uri DEFAULT,
1433        formenctype: FormEncodingType DEFAULT,
1434        formmethod: FormDialogMethod DEFAULT,
1435        formnovalidate: Bool DEFAULT,
1436        formtarget: Target DEFAULT,
1437        height: isize DEFAULT,
1438        initial_checked: Bool DEFAULT,
1439        list: Id DEFAULT,
1440        max: String DEFAULT,
1441        maxlength: usize DEFAULT,
1442        min: String DEFAULT,
1443        minlength: usize DEFAULT,
1444        multiple: Bool DEFAULT,
1445        name: Id DEFAULT,
1446        pattern: String DEFAULT,
1447        popovertarget: String DEFAULT,
1448        popovertargetaction: String DEFAULT,
1449        placeholder: String DEFAULT,
1450        readonly: Bool DEFAULT,
1451        required: Bool DEFAULT,
1452        size: usize DEFAULT,
1453        spellcheck: Bool DEFAULT,
1454        src: Uri DEFAULT,
1455        step: String DEFAULT,
1456        tabindex: usize DEFAULT,
1457        width: isize DEFAULT,
1458
1459        /// The type of input
1460        ///
1461        /// Here are the different input types you can use in HTML:
1462        ///
1463        /// - `button`
1464        /// - `checkbox`
1465        /// - `color`
1466        /// - `date`
1467        /// - `datetime-local`
1468        /// - `email`
1469        /// - `file`
1470        /// - `hidden`
1471        /// - `image`
1472        /// - `month`
1473        /// - `number`
1474        /// - `password`
1475        /// - `radio`
1476        /// - `range`
1477        /// - `reset`
1478        /// - `search`
1479        /// - `submit`
1480        /// - `tel`
1481        /// - `text`
1482        /// - `time`
1483        /// - `url`
1484        /// - `week`
1485
1486        r#type: InputType "type",
1487        // value: String,
1488        value: String volatile,
1489        initial_value: String DEFAULT,
1490    };
1491
1492    /// Build a
1493    /// [`<label>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label)
1494    /// element.
1495    label None {
1496        form: Id DEFAULT,
1497        r#for: Id "for",
1498    };
1499
1500    /// Build a
1501    /// [`<legend>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend)
1502    /// element.
1503    legend None {};
1504
1505    /// Build a
1506    /// [`<meter>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meter)
1507    /// element.
1508    meter None {
1509        value: isize DEFAULT,
1510        min: isize DEFAULT,
1511        max: isize DEFAULT,
1512        low: isize DEFAULT,
1513        high: isize DEFAULT,
1514        optimum: isize DEFAULT,
1515        form: Id DEFAULT,
1516    };
1517
1518    /// Build a
1519    /// [`<optgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup)
1520    /// element.
1521    optgroup None {
1522        disabled: Bool DEFAULT,
1523        label: String DEFAULT,
1524    };
1525
1526    /// Build a
1527    /// [`<option>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option)
1528    /// element.
1529    option None {
1530        disabled: Bool DEFAULT,
1531        label: String DEFAULT,
1532
1533
1534        value: String DEFAULT,
1535
1536        selected: Bool volatile,
1537        initial_selected: Bool DEFAULT,
1538    };
1539
1540    /// Build a
1541    /// [`<output>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/output)
1542    /// element.
1543    output None {
1544        form: Id DEFAULT,
1545        name: Id DEFAULT,
1546        // r#for: SpacedSet<Id>,
1547    };
1548
1549    /// Build a
1550    /// [`<progress>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress)
1551    /// element.
1552    progress None {
1553        max: f64 DEFAULT,
1554        value: f64 DEFAULT,
1555    };
1556
1557    /// Build a
1558    /// [`<select>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select)
1559    /// element.
1560    select None {
1561        // defined below
1562        // value: String,
1563        autocomplete: String DEFAULT,
1564        autofocus: Bool DEFAULT,
1565        disabled: Bool DEFAULT,
1566        form: Id DEFAULT,
1567        multiple: Bool DEFAULT,
1568        name: Id DEFAULT,
1569        required: Bool DEFAULT,
1570        size: usize DEFAULT,
1571        value: String volatile,
1572    };
1573
1574    /// Build a
1575    /// [`<textarea>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea)
1576    /// element.
1577    textarea None {
1578        autocomplete: OnOff DEFAULT,
1579        /// cf. <https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/autocorrect>
1580        autocorrect: OnOff DEFAULT,
1581        autofocus: Bool DEFAULT,
1582        cols: usize DEFAULT,
1583        disabled: Bool DEFAULT,
1584        form: Id DEFAULT,
1585        maxlength: usize DEFAULT,
1586        minlength: usize DEFAULT,
1587        name: Id DEFAULT,
1588        placeholder: String DEFAULT,
1589        readonly: Bool DEFAULT,
1590        required: Bool DEFAULT,
1591        rows: usize DEFAULT,
1592        spellcheck: BoolOrDefault DEFAULT,
1593        wrap: Wrap DEFAULT,
1594        value: String volatile,
1595
1596        initial_value: String DEFAULT,
1597    };
1598
1599
1600    // Interactive elements
1601
1602    /// Build a
1603    /// [`<details>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details)
1604    /// element.
1605    details None {
1606        open: Bool DEFAULT,
1607    };
1608
1609    /// Build dialog
1610    /// [`<dialog>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog)
1611    /// element.
1612    dialog None {
1613        open: Bool DEFAULT,
1614    };
1615
1616    /// Build a
1617    /// [`<summary>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/summary)
1618    /// element.
1619    summary None {};
1620
1621    // Web components
1622
1623    /// Build a
1624    /// [`<slot>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot)
1625    /// element.
1626    slot None {
1627        name: String DEFAULT,
1628    };
1629
1630    /// Build a
1631    /// [`<template>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template)
1632    /// element.
1633    template None {};
1634
1635    // SVG components
1636    /// Build a
1637    /// [`<svg>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/svg)
1638    /// element.
1639    svg "http://www.w3.org/2000/svg" { };
1640
1641
1642    // /// Build a
1643    // /// [`<a>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/a)
1644    // /// element.
1645    // a "http://www.w3.org/2000/svg" {};
1646
1647    /// Build a
1648    /// [`<animate>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animate)
1649    /// element.
1650    animate "http://www.w3.org/2000/svg" {};
1651
1652    /// Build a
1653    /// [`<animateMotion>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animateMotion)
1654    /// element.
1655    animateMotion "http://www.w3.org/2000/svg" {};
1656
1657    /// Build a
1658    /// [`<animateTransform>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animateTransform)
1659    /// element.
1660    animateTransform "http://www.w3.org/2000/svg" {};
1661
1662    /// Build a
1663    /// [`<circle>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/circle)
1664    /// element.
1665    circle "http://www.w3.org/2000/svg" {};
1666
1667    /// Build a
1668    /// [`<clipPath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/clipPath)
1669    /// element.
1670    clipPath "http://www.w3.org/2000/svg" {};
1671
1672    /// Build a
1673    /// [`<defs>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/defs)
1674    /// element.
1675    defs "http://www.w3.org/2000/svg" {};
1676
1677    /// Build a
1678    /// [`<desc>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/desc)
1679    /// element.
1680    desc "http://www.w3.org/2000/svg" {};
1681
1682    /// Build a
1683    /// [`<discard>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/discard)
1684    /// element.
1685    discard "http://www.w3.org/2000/svg" {};
1686
1687    /// Build a
1688    /// [`<ellipse>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/ellipse)
1689    /// element.
1690    ellipse "http://www.w3.org/2000/svg" {};
1691
1692    /// Build a
1693    /// [`<feBlend>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feBlend)
1694    /// element.
1695    feBlend "http://www.w3.org/2000/svg" {};
1696
1697    /// Build a
1698    /// [`<feColorMatrix>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feColorMatrix)
1699    /// element.
1700    feColorMatrix "http://www.w3.org/2000/svg" {};
1701
1702    /// Build a
1703    /// [`<feComponentTransfer>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feComponentTransfer)
1704    /// element.
1705    feComponentTransfer "http://www.w3.org/2000/svg" {};
1706
1707    /// Build a
1708    /// [`<feComposite>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feComposite)
1709    /// element.
1710    feComposite "http://www.w3.org/2000/svg" {};
1711
1712    /// Build a
1713    /// [`<feConvolveMatrix>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feConvolveMatrix)
1714    /// element.
1715    feConvolveMatrix "http://www.w3.org/2000/svg" {};
1716
1717    /// Build a
1718    /// [`<feDiffuseLighting>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDiffuseLighting)
1719    /// element.
1720    feDiffuseLighting "http://www.w3.org/2000/svg" {};
1721
1722    /// Build a
1723    /// [`<feDisplacementMap>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDisplacementMap)
1724    /// element.
1725    feDisplacementMap "http://www.w3.org/2000/svg" {};
1726
1727    /// Build a
1728    /// [`<feDistantLight>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDistantLight)
1729    /// element.
1730    feDistantLight "http://www.w3.org/2000/svg" {};
1731
1732    /// Build a
1733    /// [`<feDropShadow>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDropShadow)
1734    /// element.
1735    feDropShadow "http://www.w3.org/2000/svg" {};
1736
1737    /// Build a
1738    /// [`<feFlood>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFlood)
1739    /// element.
1740    feFlood "http://www.w3.org/2000/svg" {};
1741
1742    /// Build a
1743    /// [`<feFuncA>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncA)
1744    /// element.
1745    feFuncA "http://www.w3.org/2000/svg" {};
1746
1747    /// Build a
1748    /// [`<feFuncB>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncB)
1749    /// element.
1750    feFuncB "http://www.w3.org/2000/svg" {};
1751
1752    /// Build a
1753    /// [`<feFuncG>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncG)
1754    /// element.
1755    feFuncG "http://www.w3.org/2000/svg" {};
1756
1757    /// Build a
1758    /// [`<feFuncR>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncR)
1759    /// element.
1760    feFuncR "http://www.w3.org/2000/svg" {};
1761
1762    /// Build a
1763    /// [`<feGaussianBlur>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feGaussianBlur)
1764    /// element.
1765    feGaussianBlur "http://www.w3.org/2000/svg" {};
1766
1767    /// Build a
1768    /// [`<feImage>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feImage)
1769    /// element.
1770    feImage "http://www.w3.org/2000/svg" {};
1771
1772    /// Build a
1773    /// [`<feMerge>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feMerge)
1774    /// element.
1775    feMerge "http://www.w3.org/2000/svg" {};
1776
1777    /// Build a
1778    /// [`<feMergeNode>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feMergeNode)
1779    /// element.
1780    feMergeNode "http://www.w3.org/2000/svg" {};
1781
1782    /// Build a
1783    /// [`<feMorphology>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feMorphology)
1784    /// element.
1785    feMorphology "http://www.w3.org/2000/svg" {};
1786
1787    /// Build a
1788    /// [`<feOffset>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feOffset)
1789    /// element.
1790    feOffset "http://www.w3.org/2000/svg" {};
1791
1792    /// Build a
1793    /// [`<fePointLight>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/fePointLight)
1794    /// element.
1795    fePointLight "http://www.w3.org/2000/svg" {};
1796
1797    /// Build a
1798    /// [`<feSpecularLighting>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feSpecularLighting)
1799    /// element.
1800    feSpecularLighting "http://www.w3.org/2000/svg" {};
1801
1802    /// Build a
1803    /// [`<feSpotLight>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feSpotLight)
1804    /// element.
1805    feSpotLight "http://www.w3.org/2000/svg" {};
1806
1807    /// Build a
1808    /// [`<feTile>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feTile)
1809    /// element.
1810    feTile "http://www.w3.org/2000/svg" {};
1811
1812    /// Build a
1813    /// [`<feTurbulence>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feTurbulence)
1814    /// element.
1815    feTurbulence "http://www.w3.org/2000/svg" {};
1816
1817    /// Build a
1818    /// [`<filter>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/filter)
1819    /// element.
1820    filter "http://www.w3.org/2000/svg" {};
1821
1822    /// Build a
1823    /// [`<foreignObject>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/foreignObject)
1824    /// element.
1825    foreignObject "http://www.w3.org/2000/svg" {};
1826
1827    /// Build a
1828    /// [`<g>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/g)
1829    /// element.
1830    g "http://www.w3.org/2000/svg" {};
1831
1832    /// Build a
1833    /// [`<hatch>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/hatch)
1834    /// element.
1835    hatch "http://www.w3.org/2000/svg" {};
1836
1837    /// Build a
1838    /// [`<hatchpath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/hatchpath)
1839    /// element.
1840    hatchpath "http://www.w3.org/2000/svg" {};
1841
1842    /// Build a
1843    /// [`<image>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/image)
1844    /// element.
1845    image "http://www.w3.org/2000/svg" {};
1846
1847    /// Build a
1848    /// [`<line>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/line)
1849    /// element.
1850    line "http://www.w3.org/2000/svg" {};
1851
1852    /// Build a
1853    /// [`<linearGradient>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/linearGradient)
1854    /// element.
1855    linearGradient "http://www.w3.org/2000/svg" {};
1856
1857    /// Build a
1858    /// [`<marker>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/marker)
1859    /// element.
1860    marker "http://www.w3.org/2000/svg" {};
1861
1862    /// Build a
1863    /// [`<mask>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/mask)
1864    /// element.
1865    mask "http://www.w3.org/2000/svg" {};
1866
1867    /// Build a
1868    /// [`<metadata>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/metadata)
1869    /// element.
1870    metadata "http://www.w3.org/2000/svg" {};
1871
1872    /// Build a
1873    /// [`<mpath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/mpath)
1874    /// element.
1875    mpath "http://www.w3.org/2000/svg" {};
1876
1877    /// Build a
1878    /// [`<path>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/path)
1879    /// element.
1880    path "http://www.w3.org/2000/svg" {};
1881
1882    /// Build a
1883    /// [`<pattern>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/pattern)
1884    /// element.
1885    pattern "http://www.w3.org/2000/svg" {};
1886
1887    /// Build a
1888    /// [`<polygon>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polygon)
1889    /// element.
1890    polygon "http://www.w3.org/2000/svg" {};
1891
1892    /// Build a
1893    /// [`<polyline>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polyline)
1894    /// element.
1895    polyline "http://www.w3.org/2000/svg" {};
1896
1897    /// Build a
1898    /// [`<radialGradient>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/radialGradient)
1899    /// element.
1900    radialGradient "http://www.w3.org/2000/svg" {};
1901
1902    /// Build a
1903    /// [`<rect>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/rect)
1904    /// element.
1905    rect "http://www.w3.org/2000/svg" {};
1906
1907    // /// Build a
1908    // /// [`<script>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/script)
1909    // /// element.
1910    // script "http://www.w3.org/2000/svg" {};
1911
1912    /// Build a
1913    /// [`<set>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/set)
1914    /// element.
1915    set "http://www.w3.org/2000/svg" {};
1916
1917    /// Build a
1918    /// [`<stop>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/stop)
1919    /// element.
1920    stop "http://www.w3.org/2000/svg" {};
1921
1922    // /// Build a
1923    // /// [`<style>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/style)
1924    // /// element.
1925    // style "http://www.w3.org/2000/svg" {};
1926
1927    // /// Build a
1928    // /// [`<svg>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/svg)
1929    // /// element.
1930    // svg "http://www.w3.org/2000/svg" {};
1931
1932    /// Build a
1933    /// [`<switch>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/switch)
1934    /// element.
1935    switch "http://www.w3.org/2000/svg" {};
1936
1937    /// Build a
1938    /// [`<symbol>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/symbol)
1939    /// element.
1940    symbol "http://www.w3.org/2000/svg" {};
1941
1942    /// Build a
1943    /// [`<text>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/text)
1944    /// element.
1945    text "http://www.w3.org/2000/svg" {};
1946
1947    /// Build a
1948    /// [`<textPath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/textPath)
1949    /// element.
1950    textPath "http://www.w3.org/2000/svg" {};
1951
1952    // /// Build a
1953    // /// [`<title>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title)
1954    // /// element.
1955    // title "http://www.w3.org/2000/svg" {};
1956
1957    /// Build a
1958    /// [`<tspan>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/tspan)
1959    /// element.
1960    tspan "http://www.w3.org/2000/svg" {};
1961
1962    /// Build a
1963    /// [`<view>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/view)
1964    /// element.
1965    view "http://www.w3.org/2000/svg" {};
1966
1967    // /// Build a
1968    // /// [`<use>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/use)
1969    // /// element.
1970    r#use ["use", "http://www.w3.org/2000/svg"] {
1971        href: String DEFAULT,
1972    };
1973
1974    // MathML elements
1975
1976    /// Build a
1977    /// [`<annotation>`](https://w3c.github.io/mathml-core/#dfn-annotation)
1978    /// element.
1979    annotation "http://www.w3.org/1998/Math/MathML" {
1980            encoding: String DEFAULT,
1981    };
1982
1983    /// Build a
1984    /// [`<annotation-xml>`](https://w3c.github.io/mathml-core/#dfn-annotation-xml)
1985    /// element.
1986    annotationXml ["annotation-xml", "http://www.w3.org/1998/Math/MathML"] {
1987            encoding: String DEFAULT,
1988    };
1989
1990    /// Build a
1991    /// [`<merror>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/merror)
1992    /// element.
1993    merror "http://www.w3.org/1998/Math/MathML" {};
1994
1995    /// Build a
1996    /// [`<math>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/math)
1997    /// element.
1998    math "http://www.w3.org/1998/Math/MathML" {
1999        display: String DEFAULT,
2000    };
2001
2002    /// Build a
2003    /// [`<mfrac>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mfrac)
2004    /// element.
2005    mfrac "http://www.w3.org/1998/Math/MathML" {
2006        linethickness: usize DEFAULT,
2007    };
2008
2009    /// Build a
2010    /// [`<mi>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mi)
2011    /// element.
2012    mi "http://www.w3.org/1998/Math/MathML" {
2013        mathvariant: String DEFAULT,
2014    };
2015
2016    /// Build a
2017    /// [`<mmultiscripts>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mmultiscripts)
2018    /// element.
2019    mmultiscripts "http://www.w3.org/1998/math/mathml" {};
2020
2021    /// Build a
2022    /// [`<mn>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mn)
2023    /// element.
2024    mn "http://www.w3.org/1998/Math/MathML" {};
2025
2026    /// Build a
2027    /// [`<mo>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo)
2028    /// element.
2029    mo "http://www.w3.org/1998/Math/MathML" {
2030        fence: Bool DEFAULT,
2031        largeop: Bool DEFAULT,
2032        lspace: usize DEFAULT,
2033        maxsize: usize DEFAULT,
2034        minsize: usize DEFAULT,
2035        movablelimits: Bool DEFAULT,
2036        rspace: usize DEFAULT,
2037        separator: Bool DEFAULT,
2038        stretchy: Bool DEFAULT,
2039        symmetric: Bool DEFAULT,
2040    };
2041
2042    /// Build a
2043    /// [`<mover>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mover)
2044    /// element.
2045    mover "http://www.w3.org/1998/Math/MathML" {
2046        accent: Bool DEFAULT,
2047    };
2048
2049    /// Build a
2050    /// [`<mpadded>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mpadded)
2051    /// element.
2052    mpadded "http://www.w3.org/1998/Math/MathML" {
2053        depth: usize DEFAULT,
2054        height: usize DEFAULT,
2055        lspace: usize DEFAULT,
2056        voffset: usize DEFAULT,
2057        width: usize DEFAULT,
2058    };
2059
2060    /// Build a
2061    /// [`<mphantom>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mphantom)
2062    /// element.
2063    mphantom "http://www.w3.org/1998/Math/MathML" {};
2064
2065    /// Build a
2066    /// [`<mprescripts>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mprescripts)
2067    /// element.
2068    mprescripts "http://www.w3.org/1998/Math/MathML" {};
2069
2070    /// Build a
2071    /// [`<mroot>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mroot)
2072    /// element.
2073    mroot "http://www.w3.org/1998/Math/MathML" {};
2074
2075    /// Build a
2076    /// [`<mrow>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mrow)
2077    /// element.
2078    mrow "http://www.w3.org/1998/Math/MathML" {
2079
2080    };
2081
2082    /// Build a
2083    /// [`<ms>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/ms)
2084    /// element.
2085    ms "http://www.w3.org/1998/Math/MathML" {
2086        lquote: String DEFAULT,
2087        rquote: String DEFAULT,
2088    };
2089
2090    /// Build a
2091    /// [`<mspace>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mspace)
2092    /// element.
2093    mspace "http://www.w3.org/1998/Math/MathML" {
2094        depth: usize DEFAULT,
2095        height: usize DEFAULT,
2096        width: usize DEFAULT,
2097    };
2098
2099    /// Build a
2100    /// [`<msqrt>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/msqrt)
2101    /// element.
2102    msqrt "http://www.w3.org/1998/Math/MathML" {};
2103
2104    /// Build a
2105    /// [`<mstyle>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mstyle)
2106    /// element.
2107    mstyle "http://www.w3.org/1998/Math/MathML" {};
2108
2109    /// Build a
2110    /// [`<msub>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/msub)
2111    /// element.
2112    msub "http://www.w3.org/1998/Math/MathML" {};
2113
2114    /// Build a
2115    /// [`<msubsup>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/msubsup)
2116    /// element.
2117    msubsup "http://www.w3.org/1998/Math/MathML" {};
2118
2119    /// Build a
2120    /// [`<msup>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/msup)
2121    /// element.
2122    msup "http://www.w3.org/1998/Math/MathML" {};
2123
2124    /// Build a
2125    /// [`<mtable>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mtable)
2126    /// element.
2127    mtable "http://www.w3.org/1998/Math/MathML" {};
2128
2129    /// Build a
2130    /// [`<mtd>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mtd)
2131    /// element.
2132    mtd "http://www.w3.org/1998/Math/MathML" {
2133        columnspan: usize DEFAULT,
2134        rowspan: usize DEFAULT,
2135    };
2136
2137    /// Build a
2138    /// [`<mtext>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mtext)
2139    /// element.
2140    mtext "http://www.w3.org/1998/Math/MathML" {};
2141
2142    /// Build a
2143    /// [`<mtr>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mtr)
2144    /// element.
2145    mtr "http://www.w3.org/1998/Math/MathML" {};
2146
2147    /// Build a
2148    /// [`<munder>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/munder)
2149    /// element.
2150    munder "http://www.w3.org/1998/Math/MathML" {
2151        accentunder: Bool DEFAULT,
2152    };
2153
2154    /// Build a
2155    /// [`<munderover>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/munderover)
2156    /// element.
2157    munderover "http://www.w3.org/1998/Math/MathML" {
2158        accent: Bool DEFAULT,
2159        accentunder: Bool DEFAULT,
2160    };
2161
2162    /// Build a
2163    /// [`<semantics>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/semantics)
2164    /// element.
2165    semantics "http://www.w3.org/1998/Math/MathML" {
2166        encoding: String DEFAULT,
2167    };
2168}