Skip to content

Commit 366dd21

Browse files
committed
Add translation support by mdbook-i18n-helpers to bootstrap
1 parent 8e7517d commit 366dd21

File tree

4 files changed

+197
-16
lines changed

4 files changed

+197
-16
lines changed

Cargo.lock

+151-5
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
348348
checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05"
349349
dependencies = [
350350
"memchr",
351-
"regex-automata 0.3.9",
351+
"regex-automata 0.3.7",
352352
"serde",
353353
]
354354

@@ -2159,6 +2159,21 @@ dependencies = [
21592159
"vcpkg",
21602160
]
21612161

2162+
[[package]]
2163+
name = "line-wrap"
2164+
version = "0.2.0"
2165+
source = "registry+https://github.com/rust-lang/crates.io-index"
2166+
checksum = "dd1bc4d24ad230d21fb898d1116b1801d7adfc449d42026475862ab48b11e70e"
2167+
2168+
[[package]]
2169+
name = "linereader"
2170+
version = "0.4.0"
2171+
source = "registry+https://github.com/rust-lang/crates.io-index"
2172+
checksum = "d921fea6860357575519aca014c6e22470585accdd543b370c404a8a72d0dd1d"
2173+
dependencies = [
2174+
"memchr",
2175+
]
2176+
21622177
[[package]]
21632178
name = "linkchecker"
21642179
version = "0.1.0"
@@ -2167,6 +2182,12 @@ dependencies = [
21672182
"regex",
21682183
]
21692184

2185+
[[package]]
2186+
name = "linked-hash-map"
2187+
version = "0.5.6"
2188+
source = "registry+https://github.com/rust-lang/crates.io-index"
2189+
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
2190+
21702191
[[package]]
21712192
name = "lint-docs"
21722193
version = "0.1.0"
@@ -2317,6 +2338,24 @@ dependencies = [
23172338
"topological-sort",
23182339
]
23192340

2341+
[[package]]
2342+
name = "mdbook-i18n-helpers"
2343+
version = "0.3.2"
2344+
source = "git+https://github.com/dalance/mdbook-i18n-helpers?branch=export_preprocessor#c2c5251481ed779f44b1abe4238916209f995cc8"
2345+
dependencies = [
2346+
"anyhow",
2347+
"chrono",
2348+
"mdbook",
2349+
"polib",
2350+
"pulldown-cmark 0.9.6",
2351+
"pulldown-cmark-to-cmark",
2352+
"regex",
2353+
"semver",
2354+
"serde_json",
2355+
"syntect",
2356+
"textwrap",
2357+
]
2358+
23202359
[[package]]
23212360
name = "measureme"
23222361
version = "11.0.1"
@@ -2576,6 +2615,28 @@ version = "1.19.0"
25762615
source = "registry+https://github.com/rust-lang/crates.io-index"
25772616
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
25782617

2618+
[[package]]
2619+
name = "onig"
2620+
version = "6.4.0"
2621+
source = "registry+https://github.com/rust-lang/crates.io-index"
2622+
checksum = "8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f"
2623+
dependencies = [
2624+
"bitflags 1.3.2",
2625+
"libc",
2626+
"once_cell",
2627+
"onig_sys",
2628+
]
2629+
2630+
[[package]]
2631+
name = "onig_sys"
2632+
version = "69.8.1"
2633+
source = "registry+https://github.com/rust-lang/crates.io-index"
2634+
checksum = "7b829e3d7e9cc74c7e315ee8edb185bf4190da5acde74afd7fc59c35b1f086e7"
2635+
dependencies = [
2636+
"cc",
2637+
"pkg-config",
2638+
]
2639+
25792640
[[package]]
25802641
name = "opener"
25812642
version = "0.6.1"
@@ -2894,6 +2955,29 @@ version = "0.3.30"
28942955
source = "registry+https://github.com/rust-lang/crates.io-index"
28952956
checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
28962957

2958+
[[package]]
2959+
name = "plist"
2960+
version = "1.6.1"
2961+
source = "registry+https://github.com/rust-lang/crates.io-index"
2962+
checksum = "d9d34169e64b3c7a80c8621a48adaf44e0cf62c78a9b25dd9dd35f1881a17cf9"
2963+
dependencies = [
2964+
"base64",
2965+
"indexmap",
2966+
"line-wrap",
2967+
"quick-xml",
2968+
"serde",
2969+
"time",
2970+
]
2971+
2972+
[[package]]
2973+
name = "polib"
2974+
version = "0.2.0"
2975+
source = "registry+https://github.com/rust-lang/crates.io-index"
2976+
checksum = "6b393b155cf9be86249cba1b56cc81be0e6212c66d94ac0d76d37a1761f3bb1b"
2977+
dependencies = [
2978+
"linereader",
2979+
]
2980+
28972981
[[package]]
28982982
name = "polonius-engine"
28992983
version = "0.13.0"
@@ -3009,12 +3093,30 @@ version = "0.10.1"
30093093
source = "registry+https://github.com/rust-lang/crates.io-index"
30103094
checksum = "bd348ff538bc9caeda7ee8cad2d1d48236a1f443c1fa3913c6a02fe0043b1dd3"
30113095

3096+
[[package]]
3097+
name = "pulldown-cmark-to-cmark"
3098+
version = "11.2.0"
3099+
source = "registry+https://github.com/rust-lang/crates.io-index"
3100+
checksum = "6dd464f32d7631035e849fcd969a603e9bb17ceaebe8467352a7728147f34e42"
3101+
dependencies = [
3102+
"pulldown-cmark 0.9.6",
3103+
]
3104+
30123105
[[package]]
30133106
name = "punycode"
30143107
version = "0.4.1"
30153108
source = "registry+https://github.com/rust-lang/crates.io-index"
30163109
checksum = "e9e1dcb320d6839f6edb64f7a4a59d39b30480d4d1765b56873f7c858538a5fe"
30173110

3111+
[[package]]
3112+
name = "quick-xml"
3113+
version = "0.31.0"
3114+
source = "registry+https://github.com/rust-lang/crates.io-index"
3115+
checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33"
3116+
dependencies = [
3117+
"memchr",
3118+
]
3119+
30183120
[[package]]
30193121
name = "quine-mc_cluskey"
30203122
version = "0.2.4"
@@ -3150,12 +3252,13 @@ dependencies = [
31503252

31513253
[[package]]
31523254
name = "regex"
3153-
version = "1.8.4"
3255+
version = "1.9.4"
31543256
source = "registry+https://github.com/rust-lang/crates.io-index"
3155-
checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f"
3257+
checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29"
31563258
dependencies = [
31573259
"aho-corasick",
31583260
"memchr",
3261+
"regex-automata 0.3.7",
31593262
"regex-syntax 0.7.5",
31603263
]
31613264

@@ -3179,9 +3282,14 @@ dependencies = [
31793282

31803283
[[package]]
31813284
name = "regex-automata"
3182-
version = "0.3.9"
3285+
version = "0.3.7"
31833286
source = "registry+https://github.com/rust-lang/crates.io-index"
3184-
checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9"
3287+
checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629"
3288+
dependencies = [
3289+
"aho-corasick",
3290+
"memchr",
3291+
"regex-syntax 0.7.5",
3292+
]
31853293

31863294
[[package]]
31873295
name = "regex-lite"
@@ -3256,6 +3364,7 @@ dependencies = [
32563364
"clap",
32573365
"env_logger",
32583366
"mdbook",
3367+
"mdbook-i18n-helpers",
32593368
]
32603369

32613370
[[package]]
@@ -5256,6 +5365,28 @@ dependencies = [
52565365
"syn 2.0.64",
52575366
]
52585367

5368+
[[package]]
5369+
name = "syntect"
5370+
version = "5.2.0"
5371+
source = "registry+https://github.com/rust-lang/crates.io-index"
5372+
checksum = "874dcfa363995604333cf947ae9f751ca3af4522c60886774c4963943b4746b1"
5373+
dependencies = [
5374+
"bincode",
5375+
"bitflags 1.3.2",
5376+
"flate2",
5377+
"fnv",
5378+
"once_cell",
5379+
"onig",
5380+
"plist",
5381+
"regex-syntax 0.8.3",
5382+
"serde",
5383+
"serde_derive",
5384+
"serde_json",
5385+
"thiserror",
5386+
"walkdir",
5387+
"yaml-rust",
5388+
]
5389+
52595390
[[package]]
52605391
name = "sysinfo"
52615392
version = "0.30.12"
@@ -5375,6 +5506,12 @@ dependencies = [
53755506
"std",
53765507
]
53775508

5509+
[[package]]
5510+
name = "textwrap"
5511+
version = "0.16.1"
5512+
source = "registry+https://github.com/rust-lang/crates.io-index"
5513+
checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9"
5514+
53785515
[[package]]
53795516
name = "thin-vec"
53805517
version = "0.2.13"
@@ -6305,6 +6442,15 @@ dependencies = [
63056442
"lzma-sys",
63066443
]
63076444

6445+
[[package]]
6446+
name = "yaml-rust"
6447+
version = "0.4.5"
6448+
source = "registry+https://github.com/rust-lang/crates.io-index"
6449+
checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
6450+
dependencies = [
6451+
"linked-hash-map",
6452+
]
6453+
63086454
[[package]]
63096455
name = "yansi-term"
63106456
version = "0.1.2"

src/bootstrap/src/core/build_steps/doc.rs

+29-11
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ macro_rules! submodule_helper {
2929
}
3030

3131
macro_rules! book {
32-
($($name:ident, $path:expr, $book_name:expr $(, submodule $(= $submodule:literal)? )? ;)+) => {
32+
($($name:ident, $path:expr, $book_name:expr, $lang:expr $(, submodule $(= $submodule:literal)? )? ;)+) => {
3333
$(
3434
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
3535
pub struct $name {
@@ -61,6 +61,7 @@ macro_rules! book {
6161
name: $book_name.to_owned(),
6262
src: builder.src.join($path),
6363
parent: Some(self),
64+
languages: $lang.into(),
6465
})
6566
}
6667
}
@@ -74,15 +75,15 @@ macro_rules! book {
7475
// FIXME: Make checking for a submodule automatic somehow (maybe by having a list of all submodules
7576
// and checking against it?).
7677
book!(
77-
CargoBook, "src/tools/cargo/src/doc", "cargo", submodule = "src/tools/cargo";
78-
ClippyBook, "src/tools/clippy/book", "clippy";
79-
EditionGuide, "src/doc/edition-guide", "edition-guide", submodule;
80-
EmbeddedBook, "src/doc/embedded-book", "embedded-book", submodule;
81-
Nomicon, "src/doc/nomicon", "nomicon", submodule;
82-
Reference, "src/doc/reference", "reference", submodule;
83-
RustByExample, "src/doc/rust-by-example", "rust-by-example", submodule;
84-
RustdocBook, "src/doc/rustdoc", "rustdoc";
85-
StyleGuide, "src/doc/style-guide", "style-guide";
78+
CargoBook, "src/tools/cargo/src/doc", "cargo", &[], submodule = "src/tools/cargo";
79+
ClippyBook, "src/tools/clippy/book", "clippy", &[];
80+
EditionGuide, "src/doc/edition-guide", "edition-guide", &[], submodule;
81+
EmbeddedBook, "src/doc/embedded-book", "embedded-book", &[], submodule;
82+
Nomicon, "src/doc/nomicon", "nomicon", &[], submodule;
83+
Reference, "src/doc/reference", "reference", &[], submodule;
84+
RustByExample, "src/doc/rust-by-example", "rust-by-example", &["ja"], submodule;
85+
RustdocBook, "src/doc/rustdoc", "rustdoc", &[];
86+
StyleGuide, "src/doc/style-guide", "style-guide", &[];
8687
);
8788

8889
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
@@ -110,6 +111,7 @@ impl Step for UnstableBook {
110111
name: "unstable-book".to_owned(),
111112
src: builder.md_doc_out(self.target).join("unstable-book"),
112113
parent: Some(self),
114+
languages: vec![],
113115
})
114116
}
115117
}
@@ -120,6 +122,7 @@ struct RustbookSrc<P: Step> {
120122
name: String,
121123
src: PathBuf,
122124
parent: Option<P>,
125+
languages: Vec<&'static str>,
123126
}
124127

125128
impl<P: Step> Step for RustbookSrc<P> {
@@ -151,7 +154,19 @@ impl<P: Step> Step for RustbookSrc<P> {
151154
builder.info(&format!("Rustbook ({target}) - {name}"));
152155
let _ = fs::remove_dir_all(&out);
153156

154-
builder.run(rustbook_cmd.arg("build").arg(src).arg("-d").arg(out));
157+
builder.run(rustbook_cmd.arg("build").arg(&src).arg("-d").arg(&out));
158+
159+
for lang in &self.languages {
160+
let out = out.join(lang);
161+
162+
builder.info(&format!("Rustbook ({target}) - {name} - {lang}"));
163+
let _ = fs::remove_dir_all(&out);
164+
165+
let mut rustbook_cmd = builder.tool_cmd(Tool::Rustbook);
166+
builder.run(
167+
rustbook_cmd.arg("build").arg(&src).arg("-d").arg(&out).arg("-l").arg(lang),
168+
);
169+
}
155170
}
156171

157172
if self.parent.is_some() {
@@ -214,6 +229,7 @@ impl Step for TheBook {
214229
name: "book".to_owned(),
215230
src: absolute_path.clone(),
216231
parent: Some(self),
232+
languages: vec![],
217233
});
218234

219235
// building older edition redirects
@@ -225,6 +241,7 @@ impl Step for TheBook {
225241
// There should only be one book that is marked as the parent for each target, so
226242
// treat the other editions as not having a parent.
227243
parent: Option::<Self>::None,
244+
languages: vec![],
228245
});
229246
}
230247

@@ -1200,6 +1217,7 @@ impl Step for RustcBook {
12001217
name: "rustc".to_owned(),
12011218
src: out_base,
12021219
parent: Some(self),
1220+
languages: vec![],
12031221
});
12041222
}
12051223
}

src/tools/rustbook/Cargo.toml

+4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ edition = "2021"
77
[dependencies]
88
clap = "4.0.32"
99
env_logger = "0.11"
10+
# Some modifications to mdbook-i18n-helpers are required for this PR.
11+
# So after checking this draft PR is acceptable, I'll send a PR to the original mdbook-i18n-helpers.
12+
# After the PR is merged and a new version is released, I'll change this entry.
13+
mdbook-i18n-helpers = {git = "https://github.com/dalance/mdbook-i18n-helpers", branch = "export_preprocessor"}
1014

1115
[dependencies.mdbook]
1216
version = "0.4.37"

0 commit comments

Comments
 (0)