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 } ;
25use 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
6165impl 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\n struct 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