@@ -184,6 +184,8 @@ pub enum Item {
184
184
///
185
185
/// You can enable the `highlighter` feature for syntax highlighting.
186
186
CodeBlock {
187
+ /// The language of the code block, if any.
188
+ language : Option < String > ,
187
189
/// The raw code of the code block.
188
190
code : String ,
189
191
/// The styled lines of text in the code block.
@@ -464,6 +466,7 @@ fn parse_with<'a>(
464
466
465
467
let mut spans = Vec :: new ( ) ;
466
468
let mut code = String :: new ( ) ;
469
+ let mut code_language = None ;
467
470
let mut code_lines = Vec :: new ( ) ;
468
471
let mut strong = false ;
469
472
let mut emphasis = false ;
@@ -603,7 +606,7 @@ fn parse_with<'a>(
603
606
None
604
607
}
605
608
pulldown_cmark:: Tag :: CodeBlock (
606
- pulldown_cmark:: CodeBlockKind :: Fenced ( _language ) ,
609
+ pulldown_cmark:: CodeBlockKind :: Fenced ( language ) ,
607
610
) if !metadata && !table => {
608
611
#[ cfg( feature = "highlighter" ) ]
609
612
{
@@ -613,16 +616,19 @@ fn parse_with<'a>(
613
616
. highlighter
614
617
. take ( )
615
618
. filter ( |highlighter| {
616
- highlighter. language == _language . as_ref ( )
619
+ highlighter. language == language . as_ref ( )
617
620
} )
618
- . unwrap_or_else ( || Highlighter :: new ( & _language ) ) ;
621
+ . unwrap_or_else ( || Highlighter :: new ( & language ) ) ;
619
622
620
623
highlighter. prepare ( ) ;
621
624
622
625
highlighter
623
626
} ) ;
624
627
}
625
628
629
+ code_language =
630
+ ( !language. is_empty ( ) ) . then ( || language. into_string ( ) ) ;
631
+
626
632
let prev = if spans. is_empty ( ) {
627
633
None
628
634
} else {
@@ -734,6 +740,7 @@ fn parse_with<'a>(
734
740
state. borrow_mut ( ) ,
735
741
& mut stack,
736
742
Item :: CodeBlock {
743
+ language : code_language. take ( ) ,
737
744
code : mem:: take ( & mut code) ,
738
745
lines : code_lines. drain ( ..) . collect ( ) ,
739
746
} ,
@@ -1029,9 +1036,11 @@ where
1029
1036
viewer. heading ( settings, level, text, index)
1030
1037
}
1031
1038
Item :: Paragraph ( text) => viewer. paragraph ( settings, text) ,
1032
- Item :: CodeBlock { code, lines } => {
1033
- viewer. code_block ( settings, code, lines)
1034
- }
1039
+ Item :: CodeBlock {
1040
+ language,
1041
+ code,
1042
+ lines,
1043
+ } => viewer. code_block ( settings, language. as_deref ( ) , code, lines) ,
1035
1044
Item :: List { start : None , items } => {
1036
1045
viewer. unordered_list ( settings, items)
1037
1046
}
@@ -1171,7 +1180,6 @@ where
1171
1180
/// Displays a code block using the default look.
1172
1181
pub fn code_block < ' a , Message , Theme , Renderer > (
1173
1182
settings : Settings ,
1174
- _code : & ' a str ,
1175
1183
lines : & ' a [ Text ] ,
1176
1184
on_link_click : impl Fn ( Url ) -> Message + Clone + ' a ,
1177
1185
) -> Element < ' a , Message , Theme , Renderer >
@@ -1266,10 +1274,14 @@ where
1266
1274
fn code_block (
1267
1275
& self ,
1268
1276
settings : Settings ,
1277
+ language : Option < & ' a str > ,
1269
1278
code : & ' a str ,
1270
1279
lines : & ' a [ Text ] ,
1271
1280
) -> Element < ' a , Message , Theme , Renderer > {
1272
- code_block ( settings, code, lines, Self :: on_link_click)
1281
+ let _language = language;
1282
+ let _code = code;
1283
+
1284
+ code_block ( settings, lines, Self :: on_link_click)
1273
1285
}
1274
1286
1275
1287
/// Displays an unordered list.
0 commit comments