mirror of
https://github.com/lise-henry/crowbook
synced 2024-05-28 05:46:23 +02:00
html renderer no longer moves its vector
This commit is contained in:
parent
2160f5d0d8
commit
61a6354398
|
@ -44,7 +44,7 @@ impl<'a> HtmlRenderer<'a> {
|
|||
}
|
||||
}
|
||||
let v = try!(parser.parse_file(file));
|
||||
for token in v {
|
||||
for token in &v {
|
||||
content.push_str(&self.parse_token(token));
|
||||
}
|
||||
}
|
||||
|
@ -65,20 +65,20 @@ impl<'a> HtmlRenderer<'a> {
|
|||
}
|
||||
|
||||
/// Transform a vector of `Token`s to HTML format.
|
||||
pub fn render_vec(&mut self, tokens: Vec<Token>) -> String {
|
||||
pub fn render_vec(&mut self, tokens: &[Token]) -> String {
|
||||
let mut res = String::new();
|
||||
|
||||
for token in tokens {
|
||||
res.push_str(&self.parse_token(token));
|
||||
res.push_str(&self.parse_token(&token));
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
fn parse_token(&mut self, token: Token) -> String {
|
||||
match token {
|
||||
Token::Str(text) => escape_html(&*text),
|
||||
Token::Paragraph(vec) => format!("<p>{}</p>\n", self.render_vec(vec)),
|
||||
Token::Header(n, vec) => {
|
||||
fn parse_token(&mut self, token: &Token) -> String {
|
||||
match *token {
|
||||
Token::Str(ref text) => escape_html(&*text),
|
||||
Token::Paragraph(ref vec) => format!("<p>{}</p>\n", self.render_vec(vec)),
|
||||
Token::Header(n, ref vec) => {
|
||||
let s = if n == 1 && self.current_numbering {
|
||||
let chapter = self.current_chapter;
|
||||
self.current_chapter += 1;
|
||||
|
@ -88,11 +88,11 @@ impl<'a> HtmlRenderer<'a> {
|
|||
};
|
||||
format!("<h{}>{}</h{}>\n", n, s, n)
|
||||
},
|
||||
Token::Emphasis(vec) => format!("<em>{}</em>", self.render_vec(vec)),
|
||||
Token::Strong(vec) => format!("<b>{}</b>", self.render_vec(vec)),
|
||||
Token::Code(vec) => format!("<code>{}</code>", self.render_vec(vec)),
|
||||
Token::BlockQuote(vec) => format!("<blockquote>{}</blockquote>\n", self.render_vec(vec)),
|
||||
Token::CodeBlock(language, vec) => {
|
||||
Token::Emphasis(ref vec) => format!("<em>{}</em>", self.render_vec(vec)),
|
||||
Token::Strong(ref vec) => format!("<b>{}</b>", self.render_vec(vec)),
|
||||
Token::Code(ref vec) => format!("<code>{}</code>", self.render_vec(vec)),
|
||||
Token::BlockQuote(ref vec) => format!("<blockquote>{}</blockquote>\n", self.render_vec(vec)),
|
||||
Token::CodeBlock(ref language, ref vec) => {
|
||||
let s = self.render_vec(vec);
|
||||
if language.is_empty() {
|
||||
format!("<pre><code>\n{}</code></pre>\n", s)
|
||||
|
@ -103,10 +103,10 @@ impl<'a> HtmlRenderer<'a> {
|
|||
Token::Rule => String::from("<p class = \"rule\">***</p>\n"),
|
||||
Token::SoftBreak => String::from(" "),
|
||||
Token::HardBreak => String::from("<br />\n"),
|
||||
Token::List(vec) => format!("<ul>\n{}</ul>\n", self.render_vec(vec)),
|
||||
Token::OrderedList(n, vec) => format!("<ol start = \"{}\">\n{}</ol>\n", n, self.render_vec(vec)),
|
||||
Token::Item(vec) => format!("<li>{}</li>\n", self.render_vec(vec)),
|
||||
Token::Link(url, title, vec) => format!("<a href = \"{}\"{}>{}</a>",
|
||||
Token::List(ref vec) => format!("<ul>\n{}</ul>\n", self.render_vec(vec)),
|
||||
Token::OrderedList(n, ref vec) => format!("<ol start = \"{}\">\n{}</ol>\n", n, self.render_vec(vec)),
|
||||
Token::Item(ref vec) => format!("<li>{}</li>\n", self.render_vec(vec)),
|
||||
Token::Link(ref url, ref title, ref vec) => format!("<a href = \"{}\"{}>{}</a>",
|
||||
url,
|
||||
if title.is_empty() {
|
||||
String::new()
|
||||
|
@ -114,7 +114,7 @@ impl<'a> HtmlRenderer<'a> {
|
|||
format!(" title = \"{}\"", title)
|
||||
},
|
||||
self.render_vec(vec)),
|
||||
Token::Image(url, title, alt) => format!("<img src = \"{}\" title = \"{}\" alt = \"{}\" />",
|
||||
Token::Image(ref url, ref title, ref alt) => format!("<img src = \"{}\" title = \"{}\" alt = \"{}\" />",
|
||||
url,
|
||||
title,
|
||||
self.render_vec(alt))
|
||||
|
|
|
@ -2,15 +2,16 @@ extern crate crowbook;
|
|||
|
||||
use self::crowbook::{Parser, HtmlRenderer, Book, Token};
|
||||
|
||||
fn ast_to_html(v: Vec<Token>) -> String {
|
||||
let book = Book::new();
|
||||
fn ast_to_html(v: &[Token]) -> String {
|
||||
let mut book = Book::new();
|
||||
book.set_numbering(false);
|
||||
let mut html = HtmlRenderer::new(&book);
|
||||
html.render_vec(v)
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn combination() {
|
||||
fn html_combination() {
|
||||
let doc = "
|
||||
Foo
|
||||
===
|
||||
|
@ -59,6 +60,6 @@ Some paragraph
|
|||
</ol>
|
||||
<p><a href = \"http://foo/bar?baz=42&coin=plop\">& some link</a></p>
|
||||
";
|
||||
let actual = ast_to_html(Parser::new().parse(doc).unwrap());
|
||||
let actual = ast_to_html(&Parser::new().parse(doc).unwrap());
|
||||
assert_eq!(actual, expected);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
extern crate crowbook;
|
||||
|
||||
use self::crowbook::{Parser, Token};
|
||||
use std::borrow::Cow;
|
||||
|
||||
fn parse_from_str(doc: &str) -> Vec<Token> {
|
||||
let mut parser = Parser::new();
|
||||
|
|
Loading…
Reference in New Issue