@@ -506,18 +506,40 @@ fn write_fg_span(buffer: &mut String, span: SpanKind, element: &adapter::Element
506506
507507 let mut need_closing_a = false ;
508508
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 ( ) ;
509+ match span {
510+ SpanKind :: Span => {
511+ if classes. is_empty ( ) && element. url . is_none ( ) {
512+ // No need to create an element if there is no class or href.
513+ write ! ( buffer, "{fragment}" ) . unwrap ( ) ;
514+ }
515+ write ! ( buffer, r#"<span"# ) . unwrap ( ) ;
516+ write_classes ( buffer, classes) ;
517+ write ! ( buffer, r#">"# ) . unwrap ( ) ;
518+ if let Some ( hyperlink) = & element. url {
519+ write ! ( buffer, r#"<a href="{hyperlink}">"# ) . unwrap ( ) ;
520+ need_closing_a = true ;
521+ }
522+ write ! ( buffer, "{fragment}" ) . unwrap ( ) ;
523+ if need_closing_a {
524+ write ! ( buffer, r#"</a>"# ) . unwrap ( ) ;
525+ }
526+ write ! ( buffer, r#"</span>"# ) . unwrap ( ) ;
527+ }
528+ SpanKind :: Tspan => {
529+ write ! ( buffer, r#"<tspan"# ) . unwrap ( ) ;
530+ write_classes ( buffer, classes) ;
531+ write ! ( buffer, r#">"# ) . unwrap ( ) ;
532+ if let Some ( hyperlink) = & element. url {
533+ write ! ( buffer, r#"<a href="{hyperlink}">"# ) . unwrap ( ) ;
534+ need_closing_a = true ;
535+ }
536+ write ! ( buffer, "{fragment}" ) . unwrap ( ) ;
537+ if need_closing_a {
538+ write ! ( buffer, r#"</a>"# ) . unwrap ( ) ;
539+ }
540+ write ! ( buffer, r#"</tspan>"# ) . unwrap ( ) ;
541+ }
519542 }
520- write ! ( buffer, r#"</{span}>"# ) . unwrap ( ) ;
521543}
522544
523545fn write_bg_span ( buffer : & mut String , span : SpanKind , style : & anstyle:: Style , fragment : & str ) {
0 commit comments