use theme_path key in book.json when given
This commit is contained in:
parent
a9e5dc63f1
commit
85d8e2ebd3
|
@ -15,9 +15,14 @@ Here is an example of what a ***book.json*** file might look like:
|
||||||
|
|
||||||
#### Supported variables
|
#### Supported variables
|
||||||
|
|
||||||
- **title:** title of the book
|
If relative paths are given, they will be relative to the book's root, i.e. the
|
||||||
- **author:** author of the book
|
parent directory of the source directory.
|
||||||
- **description:** description, which is added as meta in the html head of each page.
|
|
||||||
- **dest:** path to the directory where you want your book to be rendered. If a relative path is given it will be relative to the parent directory of the source directory
|
- **title:** The title of the book.
|
||||||
|
- **author:** The author of the book.
|
||||||
|
- **description:** The description, which is added as meta in the html head of each page.
|
||||||
|
- **src:** The path to the book's source files (chapters in Markdown, SUMMARY.md, etc.). Defaults to `root/src`.
|
||||||
|
- **dest:** The path to the directory where you want your book to be rendered. Defaults to `root/book`.
|
||||||
|
- **theme_path:** The path to a custom theme directory. Defaults to `root/theme`.
|
||||||
|
|
||||||
***note:*** *the supported configurable parameters are scarce at the moment, but more will be added in the future*
|
***note:*** *the supported configurable parameters are scarce at the moment, but more will be added in the future*
|
||||||
|
|
|
@ -5,12 +5,15 @@ use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct BookConfig {
|
pub struct BookConfig {
|
||||||
pub title: String,
|
|
||||||
pub author: String,
|
|
||||||
pub description: String,
|
|
||||||
root: PathBuf,
|
root: PathBuf,
|
||||||
pub dest: PathBuf,
|
pub dest: PathBuf,
|
||||||
pub src: PathBuf,
|
pub src: PathBuf,
|
||||||
|
pub theme_path: PathBuf,
|
||||||
|
|
||||||
|
pub title: String,
|
||||||
|
pub author: String,
|
||||||
|
pub description: String,
|
||||||
|
|
||||||
pub indent_spaces: i32,
|
pub indent_spaces: i32,
|
||||||
multilingual: bool,
|
multilingual: bool,
|
||||||
}
|
}
|
||||||
|
@ -19,12 +22,15 @@ pub struct BookConfig {
|
||||||
impl BookConfig {
|
impl BookConfig {
|
||||||
pub fn new(root: &Path) -> Self {
|
pub fn new(root: &Path) -> Self {
|
||||||
BookConfig {
|
BookConfig {
|
||||||
title: String::new(),
|
|
||||||
author: String::new(),
|
|
||||||
description: String::new(),
|
|
||||||
root: root.to_owned(),
|
root: root.to_owned(),
|
||||||
dest: root.join("book"),
|
dest: root.join("book"),
|
||||||
src: root.join("src"),
|
src: root.join("src"),
|
||||||
|
theme_path: root.join("theme"),
|
||||||
|
|
||||||
|
title: String::new(),
|
||||||
|
author: String::new(),
|
||||||
|
description: String::new(),
|
||||||
|
|
||||||
indent_spaces: 4, // indentation used for SUMMARY.md
|
indent_spaces: 4, // indentation used for SUMMARY.md
|
||||||
multilingual: false,
|
multilingual: false,
|
||||||
}
|
}
|
||||||
|
@ -72,33 +78,33 @@ impl BookConfig {
|
||||||
|
|
||||||
// Destination folder
|
// Destination folder
|
||||||
if let Some(a) = config.get("dest") {
|
if let Some(a) = config.get("dest") {
|
||||||
let dest = PathBuf::from(&a.to_string().replace("\"", ""));
|
let mut dest = PathBuf::from(&a.to_string().replace("\"", ""));
|
||||||
|
|
||||||
// If path is relative make it absolute from the parent directory of src
|
// If path is relative make it absolute from the parent directory of src
|
||||||
match dest.is_relative() {
|
if dest.is_relative() {
|
||||||
true => {
|
dest = self.get_root().join(&dest);
|
||||||
let dest = self.get_root().join(&dest).to_owned();
|
|
||||||
self.set_dest(&dest);
|
|
||||||
},
|
|
||||||
false => {
|
|
||||||
self.set_dest(&dest);
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
self.set_dest(&dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Source folder
|
// Source folder
|
||||||
if let Some(a) = config.get("src") {
|
if let Some(a) = config.get("src") {
|
||||||
let src = PathBuf::from(&a.to_string().replace("\"", ""));
|
let mut src = PathBuf::from(&a.to_string().replace("\"", ""));
|
||||||
match src.is_relative() {
|
if src.is_relative() {
|
||||||
true => {
|
src = self.get_root().join(&src);
|
||||||
let src = self.get_root().join(&src).to_owned();
|
}
|
||||||
self.set_src(&src);
|
|
||||||
},
|
|
||||||
false => {
|
|
||||||
self.set_src(&src);
|
self.set_src(&src);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Theme path folder
|
||||||
|
if let Some(a) = config.get("theme_path") {
|
||||||
|
let mut theme_path = PathBuf::from(&a.to_string().replace("\"", ""));
|
||||||
|
if theme_path.is_relative() {
|
||||||
|
theme_path = self.get_root().join(&theme_path);
|
||||||
}
|
}
|
||||||
|
self.set_theme_path(&theme_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self
|
self
|
||||||
|
@ -130,4 +136,13 @@ impl BookConfig {
|
||||||
self.src = src.to_owned();
|
self.src = src.to_owned();
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_theme_path(&self) -> &Path {
|
||||||
|
&self.theme_path
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_theme_path(&mut self, theme_path: &Path) -> &mut Self {
|
||||||
|
self.theme_path = theme_path.to_owned();
|
||||||
|
self
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ pub struct MDBook {
|
||||||
root: PathBuf,
|
root: PathBuf,
|
||||||
dest: PathBuf,
|
dest: PathBuf,
|
||||||
src: PathBuf,
|
src: PathBuf,
|
||||||
|
theme_path: PathBuf,
|
||||||
|
|
||||||
pub title: String,
|
pub title: String,
|
||||||
pub author: String,
|
pub author: String,
|
||||||
|
@ -34,8 +35,11 @@ pub struct MDBook {
|
||||||
impl MDBook {
|
impl MDBook {
|
||||||
/// Create a new `MDBook` struct with root directory `root`
|
/// Create a new `MDBook` struct with root directory `root`
|
||||||
///
|
///
|
||||||
/// - The default source directory is set to `root/src`
|
/// Default directory paths:
|
||||||
/// - The default output directory is set to `root/book`
|
///
|
||||||
|
/// - source: `root/src`
|
||||||
|
/// - output: `root/book`
|
||||||
|
/// - theme: `root/theme`
|
||||||
///
|
///
|
||||||
/// They can both be changed by using [`set_src()`](#method.set_src) and [`set_dest()`](#method.set_dest)
|
/// They can both be changed by using [`set_src()`](#method.set_src) and [`set_dest()`](#method.set_dest)
|
||||||
|
|
||||||
|
@ -49,6 +53,7 @@ impl MDBook {
|
||||||
root: root.to_owned(),
|
root: root.to_owned(),
|
||||||
dest: root.join("book"),
|
dest: root.join("book"),
|
||||||
src: root.join("src"),
|
src: root.join("src"),
|
||||||
|
theme_path: root.join("theme"),
|
||||||
|
|
||||||
title: String::new(),
|
title: String::new(),
|
||||||
author: String::new(),
|
author: String::new(),
|
||||||
|
@ -294,6 +299,7 @@ impl MDBook {
|
||||||
|
|
||||||
self.dest = config.dest;
|
self.dest = config.dest;
|
||||||
self.src = config.src;
|
self.src = config.src;
|
||||||
|
self.theme_path = config.theme_path;
|
||||||
|
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
@ -444,6 +450,18 @@ impl MDBook {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_theme_path(mut self, theme_path: &Path) -> Self {
|
||||||
|
self.theme_path = match theme_path.is_absolute() {
|
||||||
|
true => theme_path.to_owned(),
|
||||||
|
false => self.root.join(theme_path).to_owned(),
|
||||||
|
};
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_theme_path(&self) -> &Path {
|
||||||
|
&self.theme_path
|
||||||
|
}
|
||||||
|
|
||||||
// Construct book
|
// Construct book
|
||||||
fn parse_summary(&mut self) -> Result<(), Box<Error>> {
|
fn parse_summary(&mut self) -> Result<(), Box<Error>> {
|
||||||
// When append becomes stable, use self.content.append() ...
|
// When append becomes stable, use self.content.append() ...
|
||||||
|
|
|
@ -30,7 +30,7 @@ impl Renderer for HtmlHandlebars {
|
||||||
let mut handlebars = Handlebars::new();
|
let mut handlebars = Handlebars::new();
|
||||||
|
|
||||||
// Load theme
|
// Load theme
|
||||||
let theme = theme::Theme::new(book.get_src());
|
let theme = theme::Theme::new(book.get_theme_path());
|
||||||
|
|
||||||
// Register template
|
// Register template
|
||||||
debug!("[*]: Register handlebars template");
|
debug!("[*]: Register handlebars template");
|
||||||
|
|
|
@ -56,12 +56,6 @@ impl Theme {
|
||||||
return theme;
|
return theme;
|
||||||
}
|
}
|
||||||
|
|
||||||
let src = src.join("theme");
|
|
||||||
// If src does exist, check if there is a theme directory in it
|
|
||||||
if !src.exists() || !src.is_dir() {
|
|
||||||
return theme;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for individual files if they exist
|
// Check for individual files if they exist
|
||||||
|
|
||||||
// index.hbs
|
// index.hbs
|
||||||
|
|
Loading…
Reference in New Issue