on master help sign in
Simplify some code
1ca6ba0Blaž Hrastnik
helix-term/src/commands.rs+1−1
@@ -4790,7 +4790,7 @@ fn keep_or_remove_selections_impl(cx: &mut Context, remove: bool) {
4790 let reg = cx.register.unwrap_or('/');
4790 let reg = cx.register.unwrap_or('/');
4791 let prompt = ui::regex_prompt(
4791 let prompt = ui::regex_prompt(
4792 cx,
4792 cx,
4793− if !remove { "keep:" } else { "remove:" }.into(),
4793+ if remove { "remove:" } else { "keep:" }.into(),
4794 Some(reg),
4794 Some(reg),
4795 ui::completers::none,
4795 ui::completers::none,
4796 move |view, doc, regex, event| {
4796 move |view, doc, regex, event| {
helix-term/src/ui/markdown.rs+31−34
@@ -6,7 +6,7 @@ use tui::{
6
6
7use std::sync::Arc;
7use std::sync::Arc;
8
8
9−use pulldown_cmark::{CodeBlockKind, CowStr, Event, HeadingLevel, Options, Parser, Tag};
9+use pulldown_cmark::{CodeBlockKind, Event, HeadingLevel, Options, Parser, Tag};
10
10
11use helix_core::{
11use helix_core::{
12 syntax::{self, HighlightEvent, Syntax},
12 syntax::{self, HighlightEvent, Syntax},
@@ -59,15 +59,6 @@ impl Markdown {
59 let mut spans = Vec::new();
59 let mut spans = Vec::new();
60 let mut lines = Vec::new();
60 let mut lines = Vec::new();
61
61
62− fn to_span(text: pulldown_cmark::CowStr) -> Span {
63− use std::ops::Deref;
64− Span::raw::<std::borrow::Cow<_>>(match text {
65− CowStr::Borrowed(s) => s.into(),
66− CowStr::Boxed(s) => s.to_string().into(),
67− CowStr::Inlined(s) => s.deref().to_owned().into(),
68− })
69− }
70−
71 let get_theme = |keys: &[&str]| match theme {
62 let get_theme = |keys: &[&str]| match theme {
72 Some(theme) => keys
63 Some(theme) => keys
73 .iter()
64 .iter()
@@ -82,15 +73,28 @@ impl Markdown {
82 .map(|key| get_theme(key))
73 .map(|key| get_theme(key))
83 .collect();
74 .collect();
84
75
76+ let mut list_stack = Vec::new();
77+
85 for event in parser {
78 for event in parser {
86 match event {
79 match event {
87− Event::Start(tag) => tags.push(tag),
80+ Event::Start(Tag::List(list)) => list_stack.push(list),
81+ Event::End(Tag::List(_)) => {
82+ list_stack.pop();
83+ }
84+ Event::Start(Tag::Item) => {
85+ tags.push(Tag::Item);
86+ spans.push(Span::from("- "));
87+ }
88+ Event::Start(tag) => {
89+ tags.push(tag);
90+ }
88 Event::End(tag) => {
91 Event::End(tag) => {
89 tags.pop();
92 tags.pop();
90 match tag {
93 match tag {
91 Tag::Heading(_, _, _)
94 Tag::Heading(_, _, _)
92 | Tag::Paragraph
95 | Tag::Paragraph
93− | Tag::CodeBlock(CodeBlockKind::Fenced(_)) => {
96+ | Tag::CodeBlock(CodeBlockKind::Fenced(_))
97+ | Tag::Item => {
94 // whenever code block or paragraph closes, new line
98 // whenever code block or paragraph closes, new line
95 let spans = std::mem::take(&mut spans);
99 let spans = std::mem::take(&mut spans);
96 if !spans.is_empty() {
100 if !spans.is_empty() {
@@ -132,8 +136,6 @@ impl Markdown {
132 None => text_style,
136 None => text_style,
133 };
137 };
134
138
135− // TODO: replace tabs with indentation
136−
137 let mut slice = &text[start..end];
139 let mut slice = &text[start..end];
138 // TODO: do we need to handle all unicode line endings
140 // TODO: do we need to handle all unicode line endings
139 // here, or is just '\n' okay?
141 // here, or is just '\n' okay?
@@ -175,27 +177,24 @@ impl Markdown {
175 lines.push(Spans::from(span));
177 lines.push(Spans::from(span));
176 }
178 }
177 }
179 }
178− } else if let Some(Tag::Heading(level, _, _)) = tags.last() {
179− let mut span = to_span(text);
180− span.style = match level {
181− HeadingLevel::H1 => heading_styles[0],
182− HeadingLevel::H2 => heading_styles[1],
183− HeadingLevel::H3 => heading_styles[2],
184− HeadingLevel::H4 => heading_styles[3],
185− HeadingLevel::H5 => heading_styles[4],
186− HeadingLevel::H6 => heading_styles[5],
187− };
188− spans.push(span);
189 } else {
180 } else {
190− let mut span = to_span(text);
181+ let style = if let Some(Tag::Heading(level, ..)) = tags.last() {
182+ match level {
183+ HeadingLevel::H1 => heading_styles[0],
184+ HeadingLevel::H2 => heading_styles[1],
185+ HeadingLevel::H3 => heading_styles[2],
186+ HeadingLevel::H4 => heading_styles[3],
187+ HeadingLevel::H5 => heading_styles[4],
188+ HeadingLevel::H6 => heading_styles[5],
189+ }
190+ } else {
191− span.style = text_style;
191+ text_style
192+ };
192− spans.push(span);
193+ spans.push(Span::styled(text, style));
193 }
194 }
194 }
195 }
195 Event::Code(text) | Event::Html(text) => {
196 Event::Code(text) | Event::Html(text) => {
196− let mut span = to_span(text);
197+ spans.push(Span::styled(text, code_style));
197− span.style = code_style;
198− spans.push(span);
199 }
198 }
200 Event::SoftBreak | Event::HardBreak => {
199 Event::SoftBreak | Event::HardBreak => {
201 // let spans = std::mem::replace(&mut spans, Vec::new());
200 // let spans = std::mem::replace(&mut spans, Vec::new());
@@ -203,9 +202,7 @@ impl Markdown {
203 spans.push(Span::raw(" "));
202 spans.push(Span::raw(" "));
204 }
203 }
205 Event::Rule => {
204 Event::Rule => {
206− let mut span = Span::raw("---");
207− span.style = code_style;
208− lines.push(Spans::from(span));
205+ lines.push(Spans::from(Span::styled("---", code_style)));
209 lines.push(Spans::default());
206 lines.push(Spans::default());
210 }
207 }
211 // TaskListMarker(bool) true if checked
208 // TaskListMarker(bool) true if checked