rtml/
attributes.rs

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]
130//macro_rules! globalattributeit {
131//    ($attr:ident, $val:expr) => {
132//        paste::paste! {
133//        #[allow(non_camel_case_types)]
134//        #[derive(Clone)]
135//        pub struct [<$attr _>];
136//        impl std::fmt::Display for [<$attr _>] {
137//            fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
138//                return write!(f, "{}", $val);
139//            }
140//        }
141//        allattrs!([< $attr _>]);
142//        }
143//    };
144//}
145
146#[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
163//macro_rules! attributeit {
164//    ($attr:ident, $val:expr) => {
165//        paste::paste! {
166//        #[allow(non_camel_case_types)]
167//        #[derive(Clone)]
168//        pub struct [< $attr _ >];
169//        impl fmt::Display for [<$attr _>] {
170//            fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
171//                return write!(f, "{}", $val);
172//            }
173//        }
174//        impl Attribute for [<$attr _>] {}
175//        }
176//    };
177//}
178
179macro_rules! attributeit {
180    ($attr:ident) => {
181        impl Attribute for $attr {}
182    };
183}
184// Global Attributes
185globalattributeit! {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
199// Special
200attributeit! {_type}
201attributeit! {_loop}
202attributeit! {_for}
203attributeit! {http_equiv}
204attributeit! {accept_charset}
205attributeit! {_as}
206attributeit! {_async}
207attributeit! {_kind}
208
209// Event
210// Window
211attributeit! {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
226// Form
227attributeit! {onblur}
228attributeit! {onchange}
229attributeit! {oncontextmenu}
230attributeit! {onfocus}
231attributeit! {oninput}
232attributeit! {onreset}
233attributeit! {onsearch}
234attributeit! {onselect}
235attributeit! {onsubmit}
236
237// Keyboard
238attributeit! {onkeydown}
239attributeit! {onkeypress}
240attributeit! {onkeyup}
241
242// Mouse
243attributeit! {onclick}
244attributeit! {ondblclick}
245attributeit! {onmousedown}
246attributeit! {onmousemove}
247attributeit! {onmouseout}
248attributeit! {onmouseover}
249attributeit! {onmouseup}
250attributeit! {onwheel}
251
252// Drag
253attributeit! {ondrag}
254attributeit! {ondragend}
255attributeit! {ondragenter}
256attributeit! {ondragleave}
257attributeit! {ondragover}
258attributeit! {ondragstart}
259attributeit! {ondrop}
260attributeit! {onscroll}
261
262// Clipboard
263attributeit! {oncopy}
264attributeit! {oncut}
265attributeit! {onpaste}
266
267// Media
268attributeit! {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
291// Misc
292attributeit! {ontoggle}
293
294// Specific Attributes
295// a
296attributeit! {href}
297attributeit! {src}
298attributeit! {download}
299attributeit! {media}
300attributeit! {ping}
301attributeit! {referrerpolicy}
302attributeit! {rel}
303attributeit! {hreflang}
304attributeit! {target}
305// area
306attributeit! {alt}
307attributeit! {coords}
308attributeit! {shape}
309// audio
310attributeit! {autoplay}
311attributeit! {controls}
312attributeit! {muted}
313attributeit! {preload}
314attributeit! {cite}
315// button
316attributeit! {autofocus}
317attributeit! {disabled}
318attributeit! {form}
319attributeit! {formaction}
320attributeit! {formenctype}
321attributeit! {formmethod}
322attributeit! {formnovalidate}
323attributeit! {formtarget}
324attributeit! {name}
325attributeit! {value}
326// canvas
327attributeit! {height}
328attributeit! {width}
329// col
330attributeit! {span}
331// del
332attributeit! {datetime}
333// details
334attributeit! {open}
335// form
336attributeit! {action}
337attributeit! {autocomplete}
338attributeit! {enctype}
339attributeit! {method}
340attributeit! {novalidate}
341// html
342attributeit! {xmlns}
343// iframe
344attributeit! {allow}
345attributeit! {allowfullscreen}
346attributeit! {allowpaymentrequest}
347attributeit! {loading}
348attributeit! {sandbox}
349attributeit! {srcdoc}
350// img
351attributeit! {crossorigin}
352attributeit! {decoding}
353attributeit! {ismap}
354attributeit! {longdesc}
355attributeit! {srcset}
356attributeit! {sizes}
357attributeit! {usemap}
358// input
359attributeit! {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}
373// meta
374attributeit! {content}
375attributeit! {charset}
376// meter
377attributeit! {high}
378attributeit! {low}
379attributeit! {optimum}
380// object
381attributeit! {data}
382// ol
383attributeit! {reversed}
384attributeit! {start}
385// optgroup
386attributeit! {label}
387// option
388attributeit! {selected}
389// script
390attributeit! {defer}
391attributeit! {integrity}
392attributeit! {nomodule}
393// select
394attributeit! {size}
395// style
396attributeit! {nonce}
397// table
398attributeit! {colspan}
399// textarea
400attributeit! {cols}
401attributeit! {rows}
402// td
403attributeit! {rowspan}
404// textarea
405attributeit! {wrap}
406// track
407attributeit! {default}
408attributeit! {srclang}
409// th
410attributeit! {headers}
411attributeit! {scope}
412// video
413attributeit! {playsinline}
414attributeit! {poster}