Skip to content

Commit 367daaf

Browse files
committed
fix: custom render img tag
1 parent 596ab30 commit 367daaf

File tree

1 file changed

+37
-3
lines changed

1 file changed

+37
-3
lines changed

src/challenge.rs

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
use html2md::parse_html;
1+
use std::collections::HashMap;
2+
3+
use html2md::common::get_tag_attr;
4+
use html2md::{parse_html_custom, TagHandler, TagHandlerFactory};
25
use serde::{Deserialize, Serialize};
6+
use worker::console_debug;
37

48
#[derive(Clone, Debug, Deserialize, Serialize)]
59
#[serde(rename_all = "camelCase")]
@@ -60,14 +64,22 @@ pub struct Problem {
6064

6165
impl ToString for DailyChallenge {
6266
fn to_string(&self) -> String {
63-
let parsed = parse_html(
67+
console_debug!("Raw html content: {}", self.question.content);
68+
let mut custom_parser: HashMap<String, Box<dyn TagHandlerFactory>> = HashMap::new();
69+
custom_parser
70+
.entry("img".to_owned())
71+
.or_insert(Box::new(ImgHandler));
72+
73+
let parsed = parse_html_custom(
6474
&self
6575
.question
6676
.content
6777
.split('\n')
6878
.take(30)
6979
.collect::<String>(),
80+
&custom_parser,
7081
);
82+
console_debug!("Content markdown Parsed: {parsed}");
7183
let test_cases = format!(
7284
"- {}",
7385
self.question.example_testcases.replace('\n', "\n> - ")
@@ -78,7 +90,7 @@ impl ToString for DailyChallenge {
7890
.code_snippets
7991
.iter()
8092
.find(|c| c.lang_slug == "rust")
81-
.map(|c| format!("```rs\n{}\n```", c.code))
93+
.map(|c| format!("```rs\nstruct Solution;\n\n{}\n```", c.code))
8294
.unwrap_or_default();
8395

8496
format!(
@@ -106,3 +118,25 @@ impl ToString for ProblemDifficulty {
106118
}
107119
}
108120
}
121+
122+
struct ImgHandler;
123+
impl TagHandler for ImgHandler {
124+
fn handle(&mut self, tag: &html2md::Handle, printer: &mut html2md::StructuredPrinter) {
125+
let src = get_tag_attr(tag, "src").unwrap_or_default();
126+
let alt = get_tag_attr(tag, "alt");
127+
128+
if let Some(alt) = alt {
129+
printer.append_str(&format!("![{}]({})", alt, &src));
130+
} else {
131+
printer.append_str(&src);
132+
}
133+
}
134+
135+
fn after_handle(&mut self, _printer: &mut html2md::StructuredPrinter) {}
136+
}
137+
138+
impl TagHandlerFactory for ImgHandler {
139+
fn instantiate(&self) -> Box<dyn TagHandler> {
140+
Box::new(ImgHandler)
141+
}
142+
}

0 commit comments

Comments
 (0)