11use comrak:: nodes:: AstNode ;
2- use maud:: { html, Markup , PreEscaped , Render , DOCTYPE } ;
2+ use maud:: { html, Html , ToHtml , DOCTYPE } ;
33use std:: str;
44
55use crate :: {
66 page:: { Page , COMRAK_OPTIONS } ,
7- string_writer :: StringWriter ,
7+ text_writer :: TextWriter ,
88} ;
99
1010struct Comrak < ' a > ( & ' a AstNode < ' a > ) ;
1111
12- impl < ' a > Render for Comrak < ' a > {
13- fn render_to ( & self , buffer : & mut String ) {
14- comrak:: format_html ( self . 0 , & COMRAK_OPTIONS , & mut StringWriter ( buffer) ) . unwrap ( ) ;
12+ impl < ' a > ToHtml for Comrak < ' a > {
13+ fn html ( & self , buffer : & mut Html ) {
14+ // XSS-Safety: The input Markdown comes from docs, which are trusted.
15+ comrak:: format_html (
16+ self . 0 ,
17+ & COMRAK_OPTIONS ,
18+ & mut TextWriter ( buffer. as_mut_string_unchecked ( ) ) ,
19+ )
20+ . unwrap ( ) ;
1521 }
1622}
1723
1824/// Hack! Comrak wraps a single line of input in `<p>` tags, which is great in
1925/// general but not suitable for links in the navigation bar.
2026struct ComrakRemovePTags < ' a > ( & ' a AstNode < ' a > ) ;
2127
22- impl < ' a > Render for ComrakRemovePTags < ' a > {
23- fn render ( & self ) -> Markup {
28+ impl < ' a > ToHtml for ComrakRemovePTags < ' a > {
29+ fn to_html ( & self ) -> Html {
2430 let mut buffer = String :: new ( ) ;
25- comrak:: format_html ( self . 0 , & COMRAK_OPTIONS , & mut StringWriter ( & mut buffer) ) . unwrap ( ) ;
31+ comrak:: format_html ( self . 0 , & COMRAK_OPTIONS , & mut TextWriter ( & mut buffer) ) . unwrap ( ) ;
2632 assert ! ( buffer. starts_with( "<p>" ) && buffer. ends_with( "</p>\n " ) ) ;
27- PreEscaped (
33+ // XSS-Safety: The input Markdown comes from docs, which are trusted.
34+ Html :: from_unchecked (
2835 buffer
2936 . trim_start_matches ( "<p>" )
3037 . trim_end_matches ( "</p>\n " )
@@ -35,9 +42,9 @@ impl<'a> Render for ComrakRemovePTags<'a> {
3542
3643struct ComrakText < ' a > ( & ' a AstNode < ' a > ) ;
3744
38- impl < ' a > Render for ComrakText < ' a > {
39- fn render_to ( & self , buffer : & mut String ) {
40- comrak:: format_commonmark ( self . 0 , & COMRAK_OPTIONS , & mut StringWriter ( buffer) ) . unwrap ( ) ;
45+ impl < ' a > ToHtml for ComrakText < ' a > {
46+ fn html ( & self , buffer : & mut Html ) {
47+ comrak:: format_commonmark ( self . 0 , & COMRAK_OPTIONS , & mut TextWriter ( buffer) ) . unwrap ( ) ;
4148 }
4249}
4350
@@ -47,7 +54,7 @@ pub fn main<'a>(
4754 nav : & [ ( & str , & ' a AstNode < ' a > ) ] ,
4855 version : & str ,
4956 hash : & str ,
50- ) -> Markup {
57+ ) -> Html {
5158 html ! {
5259 ( DOCTYPE )
5360 meta charset="utf-8" ;
0 commit comments