Crate html

Source
Expand description

Typed HTML support for Rust.

§Philosophy

HTML is easy to get started with, but hard to get right. There are several hundred element kinds, element attributes, and deeply nested hierachies - with some relationships even being conditional on each other. Remembering all of this is difficult and error-prone, but luckily we don’t have to remember any of this by using the type system! Rust’s type system enables us to model the entire HTML spec, allowing us to catch all errors ahead of time during compilation.

This project comes in layers. The bottom-most layer is the HTML spec itself. We download it, and parse it into definition files. We then take these definitions, and use it to generate the html-sys crate. This crate is semantically correct, and knows how to render itself to string representations. We then combine html-sys with web-sys (wip) to create a higher-level HTML interface, complete with support for events. This can be used to manipulate HTML both in browser (wip) and non-browser contexts.

§Examples

We can create HTML structures one-by-one:

#![recursion_limit = "512"]

use html::text_content::OrderedList;
let tree = OrderedList::builder()
    .list_item(|li| li.text("nori").class("cat"))
    .list_item(|li| li.text("chashu").class("cat"))
    .build();
let string = tree.to_string();

But we can also use Rust’s native control flow structures such as loops to iterate over items and create HTML:

#![recursion_limit = "512"]

use html::text_content::OrderedList;
let mut ol = OrderedList::builder();
for name in ["hello", "world"] {
    ol.list_item(|li| li.text(name));
}
let tree = ol.build();

We can also create elements separately and append them later:

#![recursion_limit = "512"]

use html::text_content::{OrderedList, ListItem};
let mut ol = OrderedList::builder();
let li = ListItem::builder().text("hello").build();
ol.push(li);
let tree = ol.build();

Modules§

content
Content sectioning elements
edits
Demarcating edits elements
embedded
Embedded content elements
forms
Forms elements
inline_text
Inline text elements
interactive
Interactive elements
media
Image and multimedia content
metadata
Metadata elements
root
Root elements
scripting
Scripting elements
tables
Table content elements
text_content
Text content elements
web_components
Web Components

Traits§

EmbeddedContent
The Embedded content category
FlowContent
The Flow content category
HeadingContent
The Heading content category
HtmlElement
An HTML Element
InteractiveContent
The Interactive content category
MetadataContent
The Metadata content category
PalpableContent
The Palpable content category
PhrasingContent
The Phrasing content category
Render
Render an HTML element to a string.
ScriptSupportingContent
The Script-supporting elements content category
SectioningContent
The Sectioning content category
TransparentContent
The Transparent content category