Skip to content

Latest commit

 

History

98 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧊 Frostmark

An HTML + Markdown viewer for iced

Render rich text in your iced app at lightning-fast speeds using plain HTML or Markdown!

(Demo showing HTML and Markdown together)


Usage

  1. Create a [MarkState] and 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
  1. In your view function use a [MarkWidget].
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

  • markdown (enabled by default): Adds markdown support alongside HTML. Disable this if you want HTML-only support, or a lighter program.

TODO

  • Support for more elements (eg: superscript)
  • Fix <ruby> edge cases
  • (Maybe) Switch to custom widget renderer for efficiency gains

Version iced MSRV
0.3.x 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!

Contributors


License: Dual licensed under MIT and Apache 2.0.

About

HTML/Markdown widget for iced

Resources

Stars

14 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages