Expand description
§🧊 Frostmark
An HTML + Markdown viewer for iced
Render rich text in your iced app at lightning-fast speeds using plain HTML or Markdown!

§Usage
- Create a
MarkStateand store it in your application state.
use frostmark::MarkState;
let text = "Hello from **markdown** and <b>HTML</b>!";
let state = MarkState::with_html_and_markdown(text);
// or if you just want HTML
let state = MarkState::with_html(text);
// put this in your App struct- In your
viewfunction use aMarkWidget.
iced::widget::container( // just an example
MarkWidget::new(&self.mark_state)
)
.padding(10)You can find runnable examples here
Click to expand a full example
use frostmark::{MarkState, MarkWidget};
use iced::{widget, Element, Task};
#[derive(Debug, Clone)]
enum Message {}
struct App {
state: MarkState,
}
impl App {
fn update(&mut self, _: Message) -> Task<Message> {
Task::none()
}
fn view(&self) -> Element<'_, Message> {
widget::container(MarkWidget::new(&self.state))
.padding(10)
.into()
}
}
fn main() {
iced::application(
|| App { state: MarkState::with_html_and_markdown(YOUR_TEXT) },
App::update,
App::view
).run().unwrap();
}
const YOUR_TEXT: &str = "Hello from **markdown** and <b>HTML</b>!";Note: Markdown support is optional and you can disable the markdown
feature to have more lightweight, HTML-only support.
§How does this work
Markdown (if present) is converted to HTML using comrak.
HTML is parsed using html5ever,
from the Servo project.
The resulting DOM is rendered directly to iced widgets using a custom renderer.
§Crate Features
All enabled by default
markdown: Adds markdown support alongside HTML. Disable this if you want HTML-only support, or a lighter program.- Built-in iced features (can be disabled if you wish)
iced-wgpu: wgpu rendering backendiced-tiny-skia: tiny-skia rendering backendiced-tokio: tokio async runtimeiced-windowing: x11 and wayland backends
§Roadmap
- Support for more elements (eg: superscript, table)
| Version | iced | MSRV |
|---|---|---|
| 0.3 | 0.14 | 1.88 |
| 0.2 | 0.13 | 1.82 |
| 0.1 | 0.13 | 1.82 |
§Contributing
This library is experimental. Bug reports and pull requests are welcome; contributions are appreciated!
- License: Dual licensed under MIT and Apache 2.0.
Structs§
- Image
Info - Information about the image to help you render it
in
MarkWidget::on_drawing_image. - Mark
State - The state of the document.
- Mark
Widget - The widget to be constructed every frame.
- Style
- The style of a
crate::MarkWidgetthat affects how it’s rendered. - Update
Msg - The message that’s sent when a widget is updated.