iced-markdown-editor 0.2.6

A Word-style WYSIWYG CommonMark editor widget for Iced
Documentation

iced-markdown-editor

A Word-style WYSIWYG CommonMark editor widget for iced 0.14, with the GFM extensions strikethrough and task lists. Desktop and web.

  • Pages like a word processor (A4, Letter, custom sizes, margins) or full width
  • Formatting toolbar, keyboard shortcuts, Word-style autoformat
  • Nested lists, task lists with clickable checkboxes, block quotes, code blocks
  • WYSIWYG and Markdown source mode on the same pages
  • Zoom, undo / redo, clipboard
  • Optional syntax highlighting (syntect) and images (images)
  • Round trip tested against all 652 examples of the CommonMark 0.31.2 spec
[dependencies]
iced = "0.14"
iced-markdown-editor = { version = "0.17", features = ["syntect", "images"] }
use iced_markdown_editor::{markdown_editor, Action, EditorState, Event, FONTS};

struct App {
    editor: EditorState,
}

#[derive(Debug, Clone)]
enum Message {
    Editor(Action),
}

impl App {
    fn new() -> Self {
        Self { editor: EditorState::with_markdown("# Hello\n\n- [ ] first task\n") }
    }

    fn update(&mut self, message: Message) -> iced::Task<Message> {
        match message {
            Message::Editor(action) => {
                let output = self.editor.update(action);
                if output.events.contains(&Event::Changed) {
                    let _markdown = self.editor.markdown();
                }
                output.task.map(Message::Editor)
            }
        }
    }

    fn view(&self) -> iced::Element<'_, Message> {
        markdown_editor(&self.editor).view().map(Message::Editor)
    }

    fn subscription(&self) -> iced::Subscription<Message> {
        self.editor.subscription().map(Message::Editor)
    }
}

pub fn main() -> iced::Result {
    let mut app = iced::application(App::new, App::update, App::view)
        .subscription(App::subscription);
    for font in FONTS {
        app = app.font(font);
    }
    app.run()
}

Examples

cargo run --example editor --features syntect,images   # full demo
cargo run --example minimal
cargo run --example images_folder --features images
cargo run --example images_embed --features images
cargo run --example images_upload --features images
cargo run --example images_insert --features images
cd examples/web && trunk serve --open                  # in the browser

Documentation

See docs/ and docs.rs.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option. The bundled DejaVu fonts have their own license (assets/fonts/LICENSE-DejaVu.txt).