@@ -504,20 +504,31 @@ fn write_fg_span(buffer: &mut String, span: SpanKind, element: &adapter::Element
504504 classes. push ( "hidden" ) ;
505505 }
506506
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 ( ) ;
519531 }
520- write ! ( buffer, r#"</{span}>"# ) . unwrap ( ) ;
521532}
522533
523534fn write_bg_span ( buffer : & mut String , span : SpanKind , style : & anstyle:: Style , fragment : & str ) {
0 commit comments