Skip to content

Commit 911ab7b

Browse files
committed
Fix docs
1 parent 533bc5d commit 911ab7b

File tree

5 files changed

+41
-34
lines changed

5 files changed

+41
-34
lines changed

docs/src/bin/build_nav.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use comrak::{self, nodes::AstNode, Arena};
22
use docs::{
33
page::{Page, COMRAK_OPTIONS},
4-
string_writer::StringWriter,
4+
text_writer::TextWriter,
55
};
66
use std::{env, error::Error, fs, io, path::Path, str};
77

@@ -51,7 +51,7 @@ fn load_page_title<'a>(
5151
let page = Page::load(arena, path)?;
5252
let title = page.title.map(|title| {
5353
let mut buffer = String::new();
54-
comrak::format_commonmark(title, &COMRAK_OPTIONS, &mut StringWriter(&mut buffer)).unwrap();
54+
comrak::format_commonmark(title, &COMRAK_OPTIONS, &mut TextWriter(&mut buffer)).unwrap();
5555
buffer
5656
});
5757
Ok(title)

docs/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#![feature(once_cell)]
22

33
pub mod page;
4-
pub mod string_writer;
4+
pub mod text_writer;
55
pub mod views;

docs/src/string_writer.rs

Lines changed: 0 additions & 18 deletions
This file was deleted.

docs/src/text_writer.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
use std::{fmt, io, str};
2+
3+
pub struct TextWriter<T>(pub T);
4+
5+
impl<T: fmt::Write> io::Write for TextWriter<T> {
6+
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
7+
let s =
8+
str::from_utf8(buf).map_err(|err| io::Error::new(io::ErrorKind::InvalidData, err))?;
9+
self.0
10+
.write_str(s)
11+
.map_err(|err| io::Error::new(io::ErrorKind::Other, err))?;
12+
Ok(buf.len())
13+
}
14+
15+
fn flush(&mut self) -> io::Result<()> {
16+
Ok(())
17+
}
18+
}

docs/src/views.rs

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,37 @@
11
use comrak::nodes::AstNode;
2-
use maud::{html, Markup, PreEscaped, Render, DOCTYPE};
2+
use maud::{html, Html, ToHtml, DOCTYPE};
33
use std::str;
44

55
use crate::{
66
page::{Page, COMRAK_OPTIONS},
7-
string_writer::StringWriter,
7+
text_writer::TextWriter,
88
};
99

1010
struct 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.
2026
struct 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

3643
struct 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

Comments
 (0)