iced-markdown-editor
A Word-style WYSIWYG CommonMark editor widget for iced 0.14,
with the GFM extensions strikethrough, task lists and tables. 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
- Tables with column alignment; Tab and Enter move between cells
- WYSIWYG and Markdown source mode on the same pages
- Zoom, undo / redo, clipboard
- Toolbar and status bar in English, German, French, Spanish and Italian (Fluent)
- 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.3", 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 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
Documentation
See docs/ and docs.rs. To preview them locally, see CONTRIBUTING.md.
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).