Build Chinese language user manual (#1219)

This commit is contained in:
Casey Rodarmor
2022-06-08 20:04:06 -05:00
committed by GitHub
parent 89c5e6adb6
commit 97fde19a93
8 changed files with 78 additions and 40 deletions

View File

@@ -8,44 +8,68 @@ use {
std::{error::Error, fs},
};
fn main() -> Result<(), Box<dyn Error>> {
fs::remove_dir_all("book/src").ok();
fs::create_dir("book/src")?;
enum Language {
English,
Chinese,
}
let txt = fs::read_to_string("README.md")?;
let mut chapters = vec![(1usize, Vec::new())];
for event in Parser::new_ext(&txt, Options::all()) {
if let Event::Start(Tag::Heading(level @ (H2 | H3), ..)) = event {
chapters.push((if level == H2 { 2 } else { 3 }, Vec::new()));
impl Language {
fn code(&self) -> &'static str {
match self {
Self::English => "en",
Self::Chinese => "zh",
}
chapters.last_mut().unwrap().1.push(event);
}
let mut summary = String::new();
for (i, (level, chapter)) in chapters.into_iter().enumerate() {
let mut txt = String::new();
cmark(chapter.iter(), &mut txt)?;
let title = if i == 0 {
txt = txt.split_inclusive('\n').skip(1).collect::<String>();
"Introduction"
} else {
txt.lines().next().unwrap().split_once(' ').unwrap().1
};
let path = format!("book/src/chapter_{}.md", i + 1);
fs::write(&path, &txt)?;
summary.push_str(&format!(
"{}- [{}](chapter_{}.md)\n",
" ".repeat((level.saturating_sub(1)) * 4),
title,
i + 1
));
fn suffix(&self) -> &'static str {
match self {
Self::English => "",
Self::Chinese => ".中文",
}
}
}
fs::write("book/src/SUMMARY.md", summary)?;
fn main() -> Result<(), Box<dyn Error>> {
for language in [Language::English, Language::Chinese] {
let src = format!("book/{}/src", language.code());
fs::remove_dir_all(&src).ok();
fs::create_dir(&src)?;
let txt = fs::read_to_string(format!("README{}.md", language.suffix()))?;
let mut chapters = vec![(1usize, Vec::new())];
for event in Parser::new_ext(&txt, Options::all()) {
if let Event::Start(Tag::Heading(level @ (H2 | H3), ..)) = event {
chapters.push((if level == H2 { 2 } else { 3 }, Vec::new()));
}
chapters.last_mut().unwrap().1.push(event);
}
let mut summary = String::new();
for (i, (level, chapter)) in chapters.into_iter().enumerate() {
let mut txt = String::new();
cmark(chapter.iter(), &mut txt)?;
let title = if i == 0 {
txt = txt.split_inclusive('\n').skip(1).collect::<String>();
"Introduction"
} else {
txt.lines().next().unwrap().split_once(' ').unwrap().1
};
let path = format!("{}/chapter_{}.md", src, i + 1);
fs::write(&path, &txt)?;
summary.push_str(&format!(
"{}- [{}](chapter_{}.md)\n",
" ".repeat((level.saturating_sub(1)) * 4),
title,
i + 1
));
}
fs::write(format!("{}/SUMMARY.md", src), summary).unwrap();
}
Ok(())
}