1use crate::*;
2
3pub trait GlobalAttribute {}
4pub trait EventAttribute {}
5
6pub trait Attribute: std::fmt::Display + 'static {}
7
8#[macro_export]
9macro_rules! allattrs {
10 ($attr:ident) => {
11 impl ACompat for $attr {}
12 impl AbbrCompat for $attr {}
13 impl AddressCompat for $attr {}
14 impl AreaCompat for $attr {}
15 impl ArticleCompat for $attr {}
16 impl AsideCompat for $attr {}
17 impl AudioCompat for $attr {}
18 impl BCompat for $attr {}
19 impl BaseCompat for $attr {}
20 impl BdiCompat for $attr {}
21 impl BdoCompat for $attr {}
22 impl BlockquoteCompat for $attr {}
23 impl BodyCompat for $attr {}
24 impl BrCompat for $attr {}
25 impl ButtonCompat for $attr {}
26 impl CanvasCompat for $attr {}
27 impl CaptionCompat for $attr {}
28 impl CiteCompat for $attr {}
29 impl CodeCompat for $attr {}
30 impl ColCompat for $attr {}
31 impl ColgroupCompat for $attr {}
32 impl DataCompat for $attr {}
33 impl DatalistCompat for $attr {}
34 impl DdCompat for $attr {}
35 impl DelCompat for $attr {}
36 impl DetailsCompat for $attr {}
37 impl DfnCompat for $attr {}
38 impl DialogCompat for $attr {}
39 impl DivCompat for $attr {}
40 impl DlCompat for $attr {}
41 impl DtCompat for $attr {}
42 impl EmCompat for $attr {}
43 impl EmbedCompat for $attr {}
44 impl FieldsetCompat for $attr {}
45 impl FigcaptionCompat for $attr {}
46 impl FigureCompat for $attr {}
47 impl FooterCompat for $attr {}
48 impl FormCompat for $attr {}
49 impl H1Compat for $attr {}
50 impl H2Compat for $attr {}
51 impl H3Compat for $attr {}
52 impl H4Compat for $attr {}
53 impl H5Compat for $attr {}
54 impl H6Compat for $attr {}
55 impl HeadCompat for $attr {}
56 impl HeaderCompat for $attr {}
57 impl HrCompat for $attr {}
58 impl HtmlCompat for $attr {}
59 impl ICompat for $attr {}
60 impl IframeCompat for $attr {}
61 impl ImgCompat for $attr {}
62 impl InputCompat for $attr {}
63 impl InsCompat for $attr {}
64 impl KbdCompat for $attr {}
65 impl LabelCompat for $attr {}
66 impl LegendCompat for $attr {}
67 impl LiCompat for $attr {}
68 impl LinkCompat for $attr {}
69 impl MainCompat for $attr {}
70 impl MapCompat for $attr {}
71 impl MarkCompat for $attr {}
72 impl MetaCompat for $attr {}
73 impl MeterCompat for $attr {}
74 impl NavCompat for $attr {}
75 impl NoscriptCompat for $attr {}
76 impl ObjectCompat for $attr {}
77 impl OlCompat for $attr {}
78 impl OptgroupCompat for $attr {}
79 impl OptionCompat for $attr {}
80 impl OutputCompat for $attr {}
81 impl PCompat for $attr {}
82 impl PictureCompat for $attr {}
83 impl PreCompat for $attr {}
84 impl ProgressCompat for $attr {}
85 impl QCompat for $attr {}
86 impl RpCompat for $attr {}
87 impl RtCompat for $attr {}
88 impl RubyCompat for $attr {}
89 impl SCompat for $attr {}
90 impl ScriptCompat for $attr {}
91 impl SectionCompat for $attr {}
92 impl SelectCompat for $attr {}
93 impl SmallCompat for $attr {}
94 impl SourceCompat for $attr {}
95 impl SpanCompat for $attr {}
96 impl StrongCompat for $attr {}
97 impl StyleCompat for $attr {}
98 impl SubCompat for $attr {}
99 impl SummaryCompat for $attr {}
100 impl SupCompat for $attr {}
101 impl TableCompat for $attr {}
102 impl TbodyCompat for $attr {}
103 impl TdCompat for $attr {}
104 impl TemplateCompat for $attr {}
105 impl TextareaCompat for $attr {}
106 impl TfootCompat for $attr {}
107 impl ThCompat for $attr {}
108 impl TheadCompat for $attr {}
109 impl TimeCompat for $attr {}
110 impl TitleCompat for $attr {}
111 impl TrCompat for $attr {}
112 impl TrackCompat for $attr {}
113 impl UCompat for $attr {}
114 impl UlCompat for $attr {}
115 impl VarCompat for $attr {}
116 impl VideoCompat for $attr {}
117 impl WbrCompat for $attr {}
118
119 impl GlobalAttribute for $attr {}
120 };
121}
122
123#[macro_export]
124macro_rules! globalattributeit {
125 ($attr:ident) => {
126 allattrs!($attr);
127 };
128}
129#[macro_export]
147macro_rules! make_data {
148 ($attr:ident) => {
149 paste::paste! {
150 #[allow(non_camel_case_types)]
151 #[derive(Clone)]
152 pub struct [<data _ $attr>];
153 impl std::fmt::Display for [<data _ $attr>] {
154 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
155 return write!(f, "{}", str::replace(stringify!([<data _ $attr >]), "_", "-"));
156 }
157 }
158 allattrs!([< data _ $attr>]);
159 }
160 };
161}
162
163macro_rules! attributeit {
180 ($attr:ident) => {
181 impl Attribute for $attr {}
182 };
183}
184globalattributeit! {accesskey}
186globalattributeit! {class}
187globalattributeit! {contenteditable}
188globalattributeit! {dir}
189globalattributeit! {draggable}
190globalattributeit! {hidden}
191globalattributeit! {id}
192globalattributeit! {lang}
193globalattributeit! {spellcheck}
194globalattributeit! {style}
195globalattributeit! {tabindex}
196globalattributeit! {title}
197globalattributeit! {translate}
198
199attributeit! {_type}
201attributeit! {_loop}
202attributeit! {_for}
203attributeit! {http_equiv}
204attributeit! {accept_charset}
205attributeit! {_as}
206attributeit! {_async}
207attributeit! {_kind}
208
209attributeit! {onafterprint}
212attributeit! {onbeforeprint}
213attributeit! {onbeforeunload}
214attributeit! {onerror}
215attributeit! {onhashchange}
216attributeit! {onload}
217attributeit! {onmessage}
218attributeit! {onoffline}
219attributeit! {ononline}
220attributeit! {onpagehide}
221attributeit! {onpageshow}
222attributeit! {onpopstate}
223attributeit! {onresize}
224attributeit! {onunload}
225
226attributeit! {onblur}
228attributeit! {onchange}
229attributeit! {oncontextmenu}
230attributeit! {onfocus}
231attributeit! {oninput}
232attributeit! {onreset}
233attributeit! {onsearch}
234attributeit! {onselect}
235attributeit! {onsubmit}
236
237attributeit! {onkeydown}
239attributeit! {onkeypress}
240attributeit! {onkeyup}
241
242attributeit! {onclick}
244attributeit! {ondblclick}
245attributeit! {onmousedown}
246attributeit! {onmousemove}
247attributeit! {onmouseout}
248attributeit! {onmouseover}
249attributeit! {onmouseup}
250attributeit! {onwheel}
251
252attributeit! {ondrag}
254attributeit! {ondragend}
255attributeit! {ondragenter}
256attributeit! {ondragleave}
257attributeit! {ondragover}
258attributeit! {ondragstart}
259attributeit! {ondrop}
260attributeit! {onscroll}
261
262attributeit! {oncopy}
264attributeit! {oncut}
265attributeit! {onpaste}
266
267attributeit! {onabort}
269attributeit! {oncanplay}
270attributeit! {oncanplaythrough}
271attributeit! {oncuechange}
272attributeit! {ondurationchange}
273attributeit! {onemptied}
274attributeit! {onended}
275attributeit! {onloadeddata}
276attributeit! {onloadedmetadata}
277attributeit! {onloadstart}
278attributeit! {onpause}
279attributeit! {onplay}
280attributeit! {onplaying}
281attributeit! {onprogress}
282attributeit! {onratechange}
283attributeit! {onseeked}
284attributeit! {onseeking}
285attributeit! {onstalled}
286attributeit! {onsuspend}
287attributeit! {ontimeupdate}
288attributeit! {onvolumechange}
289attributeit! {onwaiting}
290
291attributeit! {ontoggle}
293
294attributeit! {href}
297attributeit! {src}
298attributeit! {download}
299attributeit! {media}
300attributeit! {ping}
301attributeit! {referrerpolicy}
302attributeit! {rel}
303attributeit! {hreflang}
304attributeit! {target}
305attributeit! {alt}
307attributeit! {coords}
308attributeit! {shape}
309attributeit! {autoplay}
311attributeit! {controls}
312attributeit! {muted}
313attributeit! {preload}
314attributeit! {cite}
315attributeit! {autofocus}
317attributeit! {disabled}
318attributeit! {form}
319attributeit! {formaction}
320attributeit! {formenctype}
321attributeit! {formmethod}
322attributeit! {formnovalidate}
323attributeit! {formtarget}
324attributeit! {name}
325attributeit! {value}
326attributeit! {height}
328attributeit! {width}
329attributeit! {span}
331attributeit! {datetime}
333attributeit! {open}
335attributeit! {action}
337attributeit! {autocomplete}
338attributeit! {enctype}
339attributeit! {method}
340attributeit! {novalidate}
341attributeit! {xmlns}
343attributeit! {allow}
345attributeit! {allowfullscreen}
346attributeit! {allowpaymentrequest}
347attributeit! {loading}
348attributeit! {sandbox}
349attributeit! {srcdoc}
350attributeit! {crossorigin}
352attributeit! {decoding}
353attributeit! {ismap}
354attributeit! {longdesc}
355attributeit! {srcset}
356attributeit! {sizes}
357attributeit! {usemap}
358attributeit! {accept}
360attributeit! {checked}
361attributeit! {dirname}
362attributeit! {list}
363attributeit! {max}
364attributeit! {maxlength}
365attributeit! {min}
366attributeit! {minlength}
367attributeit! {multiple}
368attributeit! {pattern}
369attributeit! {placeholder}
370attributeit! {readonly}
371attributeit! {required}
372attributeit! {step}
373attributeit! {content}
375attributeit! {charset}
376attributeit! {high}
378attributeit! {low}
379attributeit! {optimum}
380attributeit! {data}
382attributeit! {reversed}
384attributeit! {start}
385attributeit! {label}
387attributeit! {selected}
389attributeit! {defer}
391attributeit! {integrity}
392attributeit! {nomodule}
393attributeit! {size}
395attributeit! {nonce}
397attributeit! {colspan}
399attributeit! {cols}
401attributeit! {rows}
402attributeit! {rowspan}
404attributeit! {wrap}
406attributeit! {default}
408attributeit! {srclang}
409attributeit! {headers}
411attributeit! {scope}
412attributeit! {playsinline}
414attributeit! {poster}