@@ -504,20 +504,31 @@ fn write_fg_span(buffer: &mut String, span: SpanKind, element: &adapter::Element
504
504
classes. push ( "hidden" ) ;
505
505
}
506
506
507
- let mut need_closing_a = false ;
508
-
509
- write ! ( buffer, r#"<{span}"# ) . unwrap ( ) ;
510
- write_classes ( buffer, classes) ;
511
- write ! ( buffer, r#">"# ) . unwrap ( ) ;
512
- if let Some ( hyperlink) = & element. url {
513
- write ! ( buffer, r#"<a href="{hyperlink}">"# ) . unwrap ( ) ;
514
- need_closing_a = true ;
515
- }
516
- write ! ( buffer, "{fragment}" ) . unwrap ( ) ;
517
- if need_closing_a {
518
- write ! ( buffer, r#"</a>"# ) . unwrap ( ) ;
507
+ if span != SpanKind :: Tspan && classes. is_empty ( ) && element. url . is_none ( ) {
508
+ // No need to create an element if there is no class or href.
509
+ write ! ( buffer, "{fragment}" ) . unwrap ( ) ;
510
+ } else if span == SpanKind :: Tspan {
511
+ write ! ( buffer, "<tspan" ) . unwrap ( ) ;
512
+ write_classes ( buffer, classes) ;
513
+ buffer. write_str ( ">" ) . unwrap ( ) ;
514
+ if let Some ( hyperlink) = & element. url {
515
+ write ! ( buffer, r#"<a href="{hyperlink}">{fragment}</a>"# ) . unwrap ( ) ;
516
+ } else {
517
+ write ! ( buffer, "{fragment}" ) . unwrap ( ) ;
518
+ }
519
+ write ! ( buffer, "</tspan>" ) . unwrap ( ) ;
520
+ } else {
521
+ let closing = if let Some ( hyperlink) = & element. url {
522
+ write ! ( buffer, r#"<a href="{hyperlink}"# ) . unwrap ( ) ;
523
+ "</a>"
524
+ } else {
525
+ write ! ( buffer, "<span" ) . unwrap ( ) ;
526
+ "</span>"
527
+ } ;
528
+ write_classes ( buffer, classes) ;
529
+ buffer. write_str ( ">" ) . unwrap ( ) ;
530
+ write ! ( buffer, "{fragment}{closing}" ) . unwrap ( ) ;
519
531
}
520
- write ! ( buffer, r#"</{span}>"# ) . unwrap ( ) ;
521
532
}
522
533
523
534
fn write_bg_span ( buffer : & mut String , span : SpanKind , style : & anstyle:: Style , fragment : & str ) {
0 commit comments