1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//! Fast, type-safe HTML generation for Rust and WebAssembly.
//!
//! A port of [Winged-Swift](https://github.com/micheltlutz/Winged-Swift) 2.0.0: the same
//! composite tree, the same escape-by-default guarantee, the same compact and pretty
//! render modes — compiled to native code or to `wasm32-unknown-unknown`.
//!
//! # Getting started
//!
//! ```
//! use winged_rust::prelude::*;
//!
//! let card = article()
//! .add_class("card p-4")
//! .child(h1().text("Welcome to WingedRust!").add_class("text-2xl"))
//! .child(p().text("Ultra-fast HTML generation compiled to WebAssembly."));
//!
//! println!("{}", card.render_pretty());
//! ```
//!
//! # Escaping
//!
//! Text content and attribute values are escaped **when they enter the tree**, not when it
//! is rendered, so nothing is escaped twice and nothing is missed. [`Node::Raw`] is the
//! documented way to inject markup you already trust.
//!
//! ```
//! use winged_rust::prelude::*;
//! assert_eq!(p().text("<script>").render(), "<p><script></p>");
//! ```
//!
//! # Render modes
//!
//! [`Render::render`] produces a single line; [`Render::render_pretty`] indents. Both take
//! their configuration from a [`RenderOptions`] value rather than global state, so two
//! threads can render the same tree differently at the same time.
//!
//! # Limits
//!
//! Rendering has no depth limit: the writer walks an explicit stack instead of recursing.
//! What deep trees do cost is output size in pretty mode, which is quadratic in depth
//! because every line carries one indent string per level. See [`Render`] and
//! `SECURITY.md`.
//!
//! # Parity
//!
//! The crate is verified against Winged-Swift's own golden fixtures — the same bytes, from
//! the same page, built through both APIs. Behavioural differences that were introduced on
//! purpose are listed in `PORTING.md`.
pub use crate;
pub use crateDocument;
pub use crateLayout;