@@ -54,6 +54,7 @@ impl<'a> MarkdownRenderer<'a> {
54
54
. collect ( ) ;
55
55
let tag_attributes = [
56
56
( "a" , [ "href" , "target" ] . iter ( ) . cloned ( ) . collect ( ) ) ,
57
+ ( "code" , [ "class" ] . iter ( ) . cloned ( ) . collect ( ) ) ,
57
58
(
58
59
"img" ,
59
60
[ "width" , "height" , "src" , "alt" , "align" ]
@@ -68,11 +69,37 @@ impl<'a> MarkdownRenderer<'a> {
68
69
] . iter ( )
69
70
. cloned ( )
70
71
. collect ( ) ;
72
+ let allowed_classes = [
73
+ (
74
+ "code" ,
75
+ [
76
+ "language-bash" ,
77
+ "language-clike" ,
78
+ "language-glsl" ,
79
+ "language-go" ,
80
+ "language-ini" ,
81
+ "language-javascript" ,
82
+ "language-json" ,
83
+ "language-markup" ,
84
+ "language-protobuf" ,
85
+ "language-ruby" ,
86
+ "language-rust" ,
87
+ "language-scss" ,
88
+ "language-sql" ,
89
+ "yaml" ,
90
+ ] . iter ( )
91
+ . cloned ( )
92
+ . collect ( ) ,
93
+ ) ,
94
+ ] . iter ( )
95
+ . cloned ( )
96
+ . collect ( ) ;
71
97
let html_sanitizer = Ammonia {
72
98
link_rel : Some ( "nofollow noopener noreferrer" ) ,
73
99
keep_cleaned_elements : true ,
74
100
tags : tags,
75
101
tag_attributes : tag_attributes,
102
+ allowed_classes : allowed_classes,
76
103
..Ammonia :: default ( )
77
104
} ;
78
105
MarkdownRenderer { html_sanitizer : html_sanitizer }
@@ -173,4 +200,15 @@ mod tests {
173
200
let result = markdown_to_html ( text) . unwrap ( ) ;
174
201
assert_eq ! ( result, "<p>wb’</p>\n " ) ;
175
202
}
203
+
204
+ #[ test]
205
+ fn code_block_with_syntax_highlighting ( ) {
206
+ let code_block = r#"```ruby \
207
+ def cat \
208
+ puts meow \
209
+ end \
210
+ ```"# ;
211
+ let result = markdown_to_html ( code_block) . unwrap ( ) ;
212
+ assert_eq ! ( result, "cat" )
213
+ }
176
214
}
0 commit comments