Updated the documentation
This commit is contained in:
parent
92f0fa0aba
commit
77fe87e8ad
|
@ -9,7 +9,7 @@ fn_args_density = "Compressed"
|
||||||
enum_trailing_comma = true
|
enum_trailing_comma = true
|
||||||
match_block_trailing_comma = true
|
match_block_trailing_comma = true
|
||||||
struct_trailing_comma = "Always"
|
struct_trailing_comma = "Always"
|
||||||
wrap_comments = true
|
wrap_comments = false
|
||||||
use_try_shorthand = true
|
use_try_shorthand = true
|
||||||
|
|
||||||
report_todo = "Always"
|
report_todo = "Always"
|
||||||
|
|
|
@ -33,6 +33,12 @@ impl Builder {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Set the renderer to be used.
|
||||||
|
pub fn set_renderer(mut self, renderer: Box<Renderer>) -> Self {
|
||||||
|
self.renderer = Some(renderer);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
pub fn build(self) -> Result<MDBook> {
|
pub fn build(self) -> Result<MDBook> {
|
||||||
// if no custom config provided, try to read it from disk
|
// if no custom config provided, try to read it from disk
|
||||||
let cfg = match self.config {
|
let cfg = match self.config {
|
||||||
|
|
|
@ -70,7 +70,7 @@ impl MDBook {
|
||||||
/// # use mdbook::MDBook;
|
/// # use mdbook::MDBook;
|
||||||
/// # use mdbook::loader::BookItem;
|
/// # use mdbook::loader::BookItem;
|
||||||
/// # #[allow(unused_variables)]
|
/// # #[allow(unused_variables)]
|
||||||
/// # fn run() -> ::errors::Result<()> {
|
/// # fn run() -> ::mdbook::errors::Result<()> {
|
||||||
/// # let book = MDBook::new("mybook")?;
|
/// # let book = MDBook::new("mybook")?;
|
||||||
/// for item in book.iter() {
|
/// for item in book.iter() {
|
||||||
/// match *item {
|
/// match *item {
|
||||||
|
@ -90,7 +90,6 @@ impl MDBook {
|
||||||
/// # }
|
/// # }
|
||||||
/// # fn main() { run().unwrap() }
|
/// # fn main() { run().unwrap() }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
pub fn iter(&self) -> BookItems {
|
pub fn iter(&self) -> BookItems {
|
||||||
self.book.iter()
|
self.book.iter()
|
||||||
}
|
}
|
||||||
|
@ -271,22 +270,27 @@ impl MDBook {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn test(&mut self, library_paths: Vec<&str>) -> Result<()> {
|
pub fn test(&mut self, library_paths: Vec<&str>) -> Result<()> {
|
||||||
// read in the chapters
|
let library_args: Vec<&str> = (0..library_paths.len())
|
||||||
self.parse_summary().chain_err(|| "Couldn't parse summary")?;
|
.map(|_| "-L")
|
||||||
let library_args: Vec<&str> = (0..library_paths.len()).map(|_| "-L")
|
.zip(library_paths.into_iter())
|
||||||
.zip(library_paths.into_iter())
|
.flat_map(|x| vec![x.0, x.1])
|
||||||
.flat_map(|x| vec![x.0, x.1])
|
.collect();
|
||||||
.collect();
|
|
||||||
for item in self.iter() {
|
for item in self.iter() {
|
||||||
|
if let BookItem::Chapter(ref ch) = *item {
|
||||||
|
let chapter_path = ch.path();
|
||||||
|
|
||||||
if let BookItem::Chapter(_, ref ch) = *item {
|
if chapter_path == Path::new("") {
|
||||||
if ch.path != PathBuf::new() {
|
|
||||||
|
|
||||||
let path = self.get_source().join(&ch.path);
|
let path = self.get_source().join(&chapter_path);
|
||||||
|
|
||||||
println!("[*]: Testing file: {:?}", path);
|
println!("[*]: Testing file: {:?}", path);
|
||||||
|
|
||||||
let output = Command::new("rustdoc").arg(&path).arg("--test").args(&library_args).output()?;
|
let output = Command::new("rustdoc")
|
||||||
|
.arg(&path)
|
||||||
|
.arg("--test")
|
||||||
|
.args(&library_args)
|
||||||
|
.output()?;
|
||||||
|
|
||||||
if !output.status.success() {
|
if !output.status.success() {
|
||||||
bail!(ErrorKind::Subprocess("Rustdoc returned an error".to_string(), output));
|
bail!(ErrorKind::Subprocess("Rustdoc returned an error".to_string(), output));
|
||||||
|
|
40
src/lib.rs
40
src/lib.rs
|
@ -18,19 +18,17 @@
|
||||||
//! ## Example
|
//! ## Example
|
||||||
//!
|
//!
|
||||||
//! ```no_run
|
//! ```no_run
|
||||||
//! extern crate mdbook;
|
//! use mdbook::config::BookConfig;
|
||||||
|
//! use mdbook::book::Builder;
|
||||||
//!
|
//!
|
||||||
//! use mdbook::MDBook;
|
//! // configure our book
|
||||||
|
//! let config = BookConfig::new("my-book").with_source("src");
|
||||||
//!
|
//!
|
||||||
//! # #[allow(unused_variables)]
|
//! // then create a book which uses that configuration
|
||||||
//! fn main() {
|
//! let mut book = Builder::new("my-book").with_config(config).build().unwrap();
|
||||||
//! let mut book = MDBook::new("my-book") // Path to root
|
//!
|
||||||
//! .with_source("src") // Path from root to source directory
|
//! // and finally, render the book as html
|
||||||
//! .with_destination("book") // Path from root to output directory
|
//! book.build().unwrap();
|
||||||
//! .read_config() // Parse book.toml configuration file
|
|
||||||
//! .expect("I don't handle configuration file errors, but you should!");
|
|
||||||
//! book.build().unwrap(); // Render the book
|
|
||||||
//! }
|
|
||||||
//! ```
|
//! ```
|
||||||
//!
|
//!
|
||||||
//! ## Implementing a new Renderer
|
//! ## Implementing a new Renderer
|
||||||
|
@ -41,17 +39,14 @@
|
||||||
//! And then you can swap in your renderer like this:
|
//! And then you can swap in your renderer like this:
|
||||||
//!
|
//!
|
||||||
//! ```no_run
|
//! ```no_run
|
||||||
//! # extern crate mdbook;
|
//! # #![allow(unused_variables)]
|
||||||
//! #
|
//! use mdbook::renderer::HtmlHandlebars;
|
||||||
//! # use mdbook::MDBook;
|
//! use mdbook::book::Builder;
|
||||||
//! # use mdbook::renderer::HtmlHandlebars;
|
//!
|
||||||
//! #
|
//! let your_renderer = HtmlHandlebars::new();
|
||||||
//! # #[allow(unused_variables)]
|
//! let book = Builder::new("my-book").set_renderer(Box::new(your_renderer))
|
||||||
//! # fn main() {
|
//! .build()
|
||||||
//! # let your_renderer = HtmlHandlebars::new();
|
//! .unwrap();
|
||||||
//! #
|
|
||||||
//! let book = MDBook::new("my-book").set_renderer(Box::new(your_renderer));
|
|
||||||
//! # }
|
|
||||||
//! ```
|
//! ```
|
||||||
//! If you make a renderer, you get the book constructed in form of `Vec<BookItems>` and you get
|
//! If you make a renderer, you get the book constructed in form of `Vec<BookItems>` and you get
|
||||||
//! the book config in a `BookConfig` struct.
|
//! the book config in a `BookConfig` struct.
|
||||||
|
@ -91,7 +86,6 @@ extern crate serde_json;
|
||||||
extern crate pretty_assertions;
|
extern crate pretty_assertions;
|
||||||
extern crate tempdir;
|
extern crate tempdir;
|
||||||
|
|
||||||
mod parse;
|
|
||||||
mod preprocess;
|
mod preprocess;
|
||||||
pub mod book;
|
pub mod book;
|
||||||
pub mod config;
|
pub mod config;
|
||||||
|
|
|
@ -30,55 +30,48 @@ impl HtmlHandlebars {
|
||||||
|
|
||||||
fn render_item(&self, item: &BookItem, mut ctx: RenderItemContext, print_content: &mut String) -> Result<()> {
|
fn render_item(&self, item: &BookItem, mut ctx: RenderItemContext, print_content: &mut String) -> Result<()> {
|
||||||
// FIXME: This should be made DRY-er and rely less on mutable state
|
// FIXME: This should be made DRY-er and rely less on mutable state
|
||||||
|
// deferred because we'll probably need to rewrite it anyway when
|
||||||
|
// renderers are made more pluggable
|
||||||
match *item {
|
match *item {
|
||||||
BookItem::Chapter(_, ref ch) |
|
BookItem::Chapter(ref ch) => {
|
||||||
BookItem::Affix(ref ch) => {
|
let mut content = ch.content.clone();
|
||||||
if ch.path != PathBuf::new() {
|
|
||||||
|
|
||||||
let path = ctx.book.get_source().join(&ch.path);
|
// TODO: Port the playpen stuff to not require a file on disk
|
||||||
|
// content = helpers::playpen::render_playpen(&content, ch.path());
|
||||||
|
|
||||||
debug!("[*]: Opening file: {:?}", path);
|
content = utils::render_markdown(&content, ctx.book.get_curly_quotes());
|
||||||
let mut f = File::open(&path)?;
|
print_content.push_str(&content);
|
||||||
let mut content: String = String::new();
|
|
||||||
|
|
||||||
debug!("[*]: Reading file");
|
// Update the context with data for this file
|
||||||
f.read_to_string(&mut content)?;
|
|
||||||
|
|
||||||
// Parse and expand links
|
let path = match ch.path().to_str() {
|
||||||
if let Some(p) = path.parent() {
|
Some(p) => p,
|
||||||
content = preprocess::links::replace_all(&content, p)?;
|
None => bail!("Could not convert path to str"),
|
||||||
}
|
};
|
||||||
|
ctx.data.insert("path".to_owned(), json!(path));
|
||||||
|
|
||||||
content = utils::render_markdown(&content, ctx.book.get_curly_quotes());
|
ctx.data.insert("content".to_owned(), json!(content));
|
||||||
print_content.push_str(&content);
|
ctx.data.insert("chapter_title".to_owned(), json!(ch.name));
|
||||||
|
|
||||||
// Update the context with data for this file
|
// FIXME: This place needs a `Path` as well
|
||||||
let path = ch.path.to_str().ok_or_else(|| {
|
// ctx.data.insert(
|
||||||
io::Error::new(io::ErrorKind::Other, "Could not convert path to str")
|
// "path_to_root".to_owned(),
|
||||||
})?;
|
// json!(utils::fs::path_to_root(&ch.path)),
|
||||||
|
// );
|
||||||
|
|
||||||
ctx.data.insert("path".to_owned(), json!(path));
|
// Render the handlebars template with the data
|
||||||
ctx.data.insert("content".to_owned(), json!(content));
|
debug!("[*]: Render template");
|
||||||
ctx.data.insert("chapter_title".to_owned(), json!(ch.name));
|
let rendered = ctx.handlebars.render("index", &ctx.data)?;
|
||||||
ctx.data.insert(
|
let rendered = self.post_process(rendered);
|
||||||
"path_to_root".to_owned(),
|
|
||||||
json!(utils::fs::path_to_root(&ch.path)),
|
|
||||||
);
|
|
||||||
|
|
||||||
// Render the handlebars template with the data
|
let filename = Path::new(ch.path()).with_extension("html");
|
||||||
debug!("[*]: Render template");
|
|
||||||
let rendered = ctx.handlebars.render("index", &ctx.data)?;
|
|
||||||
let rendered = self.post_process(rendered);
|
|
||||||
|
|
||||||
let filename = Path::new(&ch.path).with_extension("html");
|
// Write to file
|
||||||
|
info!("[*] Creating {:?} ✓", filename.display());
|
||||||
|
ctx.book.write_file(filename, &rendered.into_bytes())?;
|
||||||
|
|
||||||
// Write to file
|
if ctx.is_index {
|
||||||
info!("[*] Creating {:?} ✓", filename.display());
|
self.render_index(ctx.book, ch, &ctx.destination)?;
|
||||||
ctx.book.write_file(filename, &rendered.into_bytes())?;
|
|
||||||
|
|
||||||
if ctx.is_index {
|
|
||||||
self.render_index(ctx.book, ch, &ctx.destination)?;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => {},
|
_ => {},
|
||||||
|
|
Loading…
Reference in New Issue