version = "0.3.0"
default-features = false
features = ["search"]
-
-[dependencies.mdbook_1]
-package = "mdbook"
-version = "0.1.7"
-default-features = false
-features = ["search"]
use clap::{App, ArgMatches, SubCommand, AppSettings};
-use mdbook_1::{MDBook as MDBook1};
-use mdbook_1::errors::{Result as Result1};
-
use mdbook::MDBook;
use mdbook::errors::Result;
match matches.subcommand() {
("build", Some(sub_matches)) => {
match sub_matches.value_of("mdbook-vers") {
- None | Some("1") => {
- if let Err(e) = build_1(sub_matches) {
- eprintln!("Error: {}", e);
-
- for cause in e.iter().skip(1) {
- eprintln!("\tCaused By: {}", cause);
- }
-
- ::std::process::exit(101);
+ None | Some("1") | Some("2") | Some("3") => {
+ match sub_matches.value_of("mdbook-vers") {
+ Some("1") => env::set_var("DEB_MDBOOK_1_COMPAT", "1"),
+ _ => (),
}
- }
- Some("2") | Some("3") => {
if let Err(e) = build(sub_matches) {
eprintln!("Error: {}", e);
};
}
-// Build command implementation
-pub fn build_1(args: &ArgMatches<'_>) -> Result1<()> {
- let book_dir = get_book_dir(args);
- let mut book = MDBook1::load(&book_dir)?;
-
- // Set this to allow us to catch bugs in advance.
- book.config.build.create_missing = false;
-
- if let Some(dest_dir) = args.value_of("dest-dir") {
- book.config.build.build_dir = PathBuf::from(dest_dir);
- }
-
- book.build()?;
-
- Ok(())
-}
-
// Build command implementation
pub fn build(args: &ArgMatches<'_>) -> Result<()> {
let book_dir = get_book_dir(args);
use std::collections::HashMap;
use std::fs;
use std::path::{Path, PathBuf};
+use std::env;
use handlebars::Handlebars;
use regex::{Captures, Regex};
}
ctx.data.insert("path".to_owned(), json!(path));
- ctx.data.insert("content".to_owned(), json!(content));
+ ctx.data.insert("content".to_owned(), json!(if env::var("DEB_MDBOOK_1_COMPAT") == Ok("1".to_string()) { fixed_content } else { content }));
ctx.data.insert("chapter_title".to_owned(), json!(ch.name));
ctx.data.insert("title".to_owned(), json!(title));
ctx.data.insert(
mod string;
use crate::errors::Error;
use regex::Regex;
+use std::path::Path;
+use std::env;
use pulldown_cmark::{html, CowStr, Event, Options, Parser, Tag};
lazy_static! {
static ref SCHEME_LINK: Regex = Regex::new(r"^[a-z][a-z0-9+.-]*:").unwrap();
static ref MD_LINK: Regex = Regex::new(r"(?P<link>.*)\.md(?P<anchor>#.*)?").unwrap();
+ static ref HTML_LINK: Regex = Regex::new(r"(?P<link>.*)\.html(?P<anchor>#.*)?").unwrap();
}
fn fix<'a>(dest: CowStr<'a>, base: &str) -> CowStr<'a> {
// Don't modify links with schemes like `https`.
if !SCHEME_LINK.is_match(&dest) {
+ let old_dest = &dest;
// This is a relative link, adjust it as necessary.
let mut fixed_link = String::new();
if !base.is_empty() {
fixed_link.push_str(anchor.as_str());
}
} else {
+ // compatibility for mdbook 1
+ if env::var("DEB_MDBOOK_1_COMPAT") == Ok("1".to_string()) {
+ if let Some(caps) = HTML_LINK.captures(&old_dest) {
+ let base = Path::new(base);
+ let mut path = Vec::new();
+ for _ in base.components() {
+ path.push("../");
+ }
+ path.extend(&[&caps["link"], ".html"]);
+ let mut html_link = path.concat();
+
+ if let Some(anchor) = caps.name("anchor") {
+ html_link.push_str(anchor.as_str().replace("#a--", "#--").as_str());
+ }
+
+ return CowStr::from(html_link);
+ } else {
+ return dest;
+ }
+ }
+
fixed_link.push_str(&dest);
};
return CowStr::from(fixed_link);