refactor easy_mark_viewer.rs: break it up into logical parts

This commit is contained in:
Emil Ernerfeldt 2021-02-01 17:00:42 +01:00
parent 01fca2f31c
commit 2cbea02c8b
1 changed files with 69 additions and 64 deletions

View File

@ -3,15 +3,22 @@ use crate::*;
/// Parse and display a VERY simple and small subset of Markdown. /// Parse and display a VERY simple and small subset of Markdown.
pub fn easy_mark(ui: &mut Ui, easy_mark: &str) { pub fn easy_mark(ui: &mut Ui, easy_mark: &str) {
easy_mark_it(ui, easy_mark::Parser::new(easy_mark))
}
pub fn easy_mark_it<'em>(ui: &mut Ui, items: impl Iterator<Item = easy_mark::Item<'em>>) {
ui.horizontal_wrapped(|ui| { ui.horizontal_wrapped(|ui| {
ui.spacing_mut().item_spacing = Vec2::zero();
for item in items {
item_ui(ui, item);
}
});
}
pub fn item_ui(ui: &mut Ui, item: easy_mark::Item<'_>) {
let row_height = ui.fonts()[TextStyle::Body].row_height(); let row_height = ui.fonts()[TextStyle::Body].row_height();
let one_indent = row_height / 2.0; let one_indent = row_height / 2.0;
let spacing = vec2(0.0, 2.0);
let style = ui.style_mut();
style.spacing.interact_size.y = row_height;
style.spacing.item_spacing = spacing;
for item in easy_mark::Parser::new(easy_mark) {
match item { match item {
easy_mark::Item::Newline => { easy_mark::Item::Newline => {
// ui.label("\n"); // too much spacing (paragraph spacing) // ui.label("\n"); // too much spacing (paragraph spacing)
@ -20,10 +27,10 @@ pub fn easy_mark(ui: &mut Ui, easy_mark: &str) {
} }
easy_mark::Item::Text(style, text) => { easy_mark::Item::Text(style, text) => {
ui.add(label_from_style(text, style)); ui.add(label_from_style(text, &style));
} }
easy_mark::Item::Hyperlink(style, text, url) => { easy_mark::Item::Hyperlink(style, text, url) => {
let label = label_from_style(text, style); let label = label_from_style(text, &style);
ui.add(Hyperlink::from_label_and_url(label, url)); ui.add(Hyperlink::from_label_and_url(label, url));
} }
@ -36,9 +43,9 @@ pub fn easy_mark(ui: &mut Ui, easy_mark: &str) {
} }
easy_mark::Item::QuoteIndent => { easy_mark::Item::QuoteIndent => {
let rect = ui let rect = ui
.allocate_exact_size(vec2(row_height, row_height), Sense::hover()) .allocate_exact_size(vec2(2.0 * one_indent, row_height), Sense::hover())
.0; .0;
let rect = rect.expand2(spacing * 0.5); let rect = rect.expand2(ui.style().spacing.item_spacing * 0.5);
ui.painter().line_segment( ui.painter().line_segment(
[rect.center_top(), rect.center_bottom()], [rect.center_top(), rect.center_bottom()],
(1.0, ui.style().visuals.weak_text_color()), (1.0, ui.style().visuals.weak_text_color()),
@ -67,10 +74,8 @@ pub fn easy_mark(ui: &mut Ui, easy_mark: &str) {
} }
}; };
} }
});
}
fn label_from_style(text: &str, style: easy_mark::Style) -> Label { fn label_from_style(text: &str, style: &easy_mark::Style) -> Label {
let easy_mark::Style { let easy_mark::Style {
heading, heading,
quoted, quoted,
@ -79,7 +84,7 @@ fn label_from_style(text: &str, style: easy_mark::Style) -> Label {
underline, underline,
strikethrough, strikethrough,
italics, italics,
} = style; } = *style;
let mut label = Label::new(text); let mut label = Label::new(text);
if heading { if heading {