
The language::markdown crate had been superceded by markdown::Mardown. After #25117, the only two remaining use-cases were rendering git commit messages (which are arguably not really markdown) and the signature help (which is definitely not markdown). Updated the former to use the new markdown component, and the latter to do syntax highlighting manually. Release Notes: - Allow selecting the commit message in git commits
139 lines
4.8 KiB
Rust
139 lines
4.8 KiB
Rust
use assets::Assets;
|
|
use gpui::{prelude::*, rgb, Application, Entity, KeyBinding, StyleRefinement, WindowOptions};
|
|
use language::{language_settings::AllLanguageSettings, LanguageRegistry};
|
|
use markdown::{Markdown, MarkdownStyle};
|
|
use node_runtime::NodeRuntime;
|
|
use settings::SettingsStore;
|
|
use std::sync::Arc;
|
|
use theme::LoadThemes;
|
|
use ui::prelude::*;
|
|
use ui::{div, App, Window};
|
|
|
|
const MARKDOWN_EXAMPLE: &str = r#"
|
|
# Markdown Example Document
|
|
|
|
## Headings
|
|
Headings are created by adding one or more `#` symbols before your heading text. The number of `#` you use will determine the size of the heading.
|
|
|
|
```
|
|
function a(b: T) {
|
|
|
|
}
|
|
```
|
|
|
|
|
|
Remember, markdown processors may have slight differences and extensions, so always refer to the specific documentation or guides relevant to your platform or editor for the best practices and additional features.
|
|
"#;
|
|
|
|
pub fn main() {
|
|
env_logger::init();
|
|
Application::new().with_assets(Assets).run(|cx| {
|
|
let store = SettingsStore::test(cx);
|
|
cx.set_global(store);
|
|
language::init(cx);
|
|
SettingsStore::update(cx, |store, cx| {
|
|
store.update_user_settings::<AllLanguageSettings>(cx, |_| {});
|
|
});
|
|
cx.bind_keys([KeyBinding::new("cmd-c", markdown::Copy, None)]);
|
|
|
|
let node_runtime = NodeRuntime::unavailable();
|
|
theme::init(LoadThemes::JustBase, cx);
|
|
|
|
let language_registry = LanguageRegistry::new(cx.background_executor().clone());
|
|
language_registry.set_theme(cx.theme().clone());
|
|
let language_registry = Arc::new(language_registry);
|
|
languages::init(language_registry.clone(), node_runtime, cx);
|
|
Assets.load_fonts(cx).unwrap();
|
|
|
|
cx.activate(true);
|
|
cx.open_window(WindowOptions::default(), |_, cx| {
|
|
cx.new(|cx| {
|
|
let markdown_style = MarkdownStyle {
|
|
base_text_style: gpui::TextStyle {
|
|
font_family: "Zed Plex Sans".into(),
|
|
color: cx.theme().colors().terminal_ansi_black,
|
|
..Default::default()
|
|
},
|
|
code_block: StyleRefinement::default()
|
|
.font_family("Zed Plex Mono")
|
|
.m(rems(1.))
|
|
.bg(rgb(0xAAAAAAA)),
|
|
inline_code: gpui::TextStyleRefinement {
|
|
font_family: Some("Zed Mono".into()),
|
|
color: Some(cx.theme().colors().editor_foreground),
|
|
background_color: Some(cx.theme().colors().editor_background),
|
|
..Default::default()
|
|
},
|
|
rule_color: Color::Muted.color(cx),
|
|
block_quote_border_color: Color::Muted.color(cx),
|
|
block_quote: gpui::TextStyleRefinement {
|
|
color: Some(Color::Muted.color(cx)),
|
|
..Default::default()
|
|
},
|
|
link: gpui::TextStyleRefinement {
|
|
color: Some(Color::Accent.color(cx)),
|
|
underline: Some(gpui::UnderlineStyle {
|
|
thickness: px(1.),
|
|
color: Some(Color::Accent.color(cx)),
|
|
wavy: false,
|
|
}),
|
|
..Default::default()
|
|
},
|
|
syntax: cx.theme().syntax().clone(),
|
|
selection_background_color: {
|
|
let mut selection = cx.theme().players().local().selection;
|
|
selection.fade_out(0.7);
|
|
selection
|
|
},
|
|
..Default::default()
|
|
};
|
|
|
|
MarkdownExample::new(
|
|
MARKDOWN_EXAMPLE.into(),
|
|
markdown_style,
|
|
language_registry,
|
|
cx,
|
|
)
|
|
})
|
|
})
|
|
.unwrap();
|
|
});
|
|
}
|
|
|
|
struct MarkdownExample {
|
|
markdown: Entity<Markdown>,
|
|
}
|
|
|
|
impl MarkdownExample {
|
|
pub fn new(
|
|
text: SharedString,
|
|
style: MarkdownStyle,
|
|
language_registry: Arc<LanguageRegistry>,
|
|
cx: &mut App,
|
|
) -> Self {
|
|
let markdown = cx.new(|cx| {
|
|
Markdown::new(
|
|
text,
|
|
style,
|
|
Some(language_registry),
|
|
Some("TypeScript".to_string()),
|
|
cx,
|
|
)
|
|
});
|
|
Self { markdown }
|
|
}
|
|
}
|
|
|
|
impl Render for MarkdownExample {
|
|
fn render(&mut self, _window: &mut Window, _cx: &mut Context<Self>) -> impl IntoElement {
|
|
div()
|
|
.id("markdown-example")
|
|
.debug_selector(|| "foo".into())
|
|
.relative()
|
|
.bg(gpui::white())
|
|
.size_full()
|
|
.p_4()
|
|
.overflow_y_scroll()
|
|
.child(self.markdown.clone())
|
|
}
|
|
}
|