(kind: &pulldown_cmark::CodeBlockKind<'_>, source: &str)
| 97 | } |
| 98 | |
| 99 | fn render_code_block_html(kind: &pulldown_cmark::CodeBlockKind<'_>, source: &str) -> String { |
| 100 | let language = match kind { |
| 101 | pulldown_cmark::CodeBlockKind::Fenced(info) => { |
| 102 | let slug = info.split_whitespace().next().unwrap_or_default(); |
| 103 | language_from_slug(slug) |
| 104 | } |
| 105 | pulldown_cmark::CodeBlockKind::Indented => None, |
| 106 | }; |
| 107 | |
| 108 | let Some(language) = language else { |
| 109 | return render_plain_code_block(source); |
| 110 | }; |
| 111 | |
| 112 | let source = source.trim_end_matches('\n'); |
| 113 | let highlighted: dioxus_code::advanced::HighlightedSource = |
| 114 | dioxus_code::SourceCode::new(language, source).into(); |
| 115 | |
| 116 | dioxus_ssr::render_element(rsx! { |
| 117 | div { |
| 118 | class: "dx-preview-code-theme", |
| 119 | tabindex: "0", |
| 120 | dioxus_code::Code { |
| 121 | src: highlighted, |
| 122 | theme: dioxus_code::CodeTheme::system( |
| 123 | dioxus_code::Theme::GITHUB_LIGHT, |
| 124 | dioxus_code::Theme::GITHUB_DARK, |
| 125 | ), |
| 126 | } |
| 127 | } |
| 128 | }) |
| 129 | } |
| 130 | |
| 131 | fn render_plain_code_block(source: &str) -> String { |
| 132 | let source = source.trim_end_matches('\n'); |
no test coverage detected