From: Debian Rust Maintainers Date: Thu, 5 Sep 2019 07:06:23 +0000 (+0100) Subject: d-0004-mdbook-2-1-compat X-Git-Tag: archive/raspbian/1.39.0+dfsg1-4+rpi1~2^2~12 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=66d5ff4f3e73f9db0f7857a2ad5cec1f6192d702;p=rustc.git d-0004-mdbook-2-1-compat Gbp-Pq: Name d-0004-mdbook-2-1-compat.patch --- diff --git a/src/tools/rustbook/Cargo.toml b/src/tools/rustbook/Cargo.toml index 54549e4c7e..a8d1ab9d97 100644 --- a/src/tools/rustbook/Cargo.toml +++ b/src/tools/rustbook/Cargo.toml @@ -12,9 +12,3 @@ clap = "2.25.0" version = "0.3.0" default-features = false features = ["search"] - -[dependencies.mdbook_1] -package = "mdbook" -version = "0.1.7" -default-features = false -features = ["search"] diff --git a/src/tools/rustbook/src/main.rs b/src/tools/rustbook/src/main.rs index 04e48dde86..b12d781667 100644 --- a/src/tools/rustbook/src/main.rs +++ b/src/tools/rustbook/src/main.rs @@ -7,9 +7,6 @@ use std::path::{Path, PathBuf}; 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; @@ -37,18 +34,11 @@ fn main() { 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); @@ -68,23 +58,6 @@ fn main() { }; } -// 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); diff --git a/vendor/mdbook/src/renderer/html_handlebars/hbs_renderer.rs b/vendor/mdbook/src/renderer/html_handlebars/hbs_renderer.rs index e5cb073388..1cbcfec7a1 100644 --- a/vendor/mdbook/src/renderer/html_handlebars/hbs_renderer.rs +++ b/vendor/mdbook/src/renderer/html_handlebars/hbs_renderer.rs @@ -10,6 +10,7 @@ use std::collections::BTreeMap; use std::collections::HashMap; use std::fs; use std::path::{Path, PathBuf}; +use std::env; use handlebars::Handlebars; use regex::{Captures, Regex}; @@ -66,7 +67,7 @@ impl HtmlHandlebars { } 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( diff --git a/vendor/mdbook/src/utils/mod.rs b/vendor/mdbook/src/utils/mod.rs index 0f199fb729..1a86bf8a7b 100644 --- a/vendor/mdbook/src/utils/mod.rs +++ b/vendor/mdbook/src/utils/mod.rs @@ -4,6 +4,8 @@ pub mod fs; 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}; @@ -69,11 +71,13 @@ fn adjust_links<'a>(event: Event<'a>, with_base: &str) -> Event<'a> { 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.*)\.md(?P#.*)?").unwrap(); + static ref HTML_LINK: Regex = Regex::new(r"(?P.*)\.html(?P#.*)?").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() { @@ -88,6 +92,27 @@ fn adjust_links<'a>(event: Event<'a>, with_base: &str) -> Event<'a> { 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);