diff --git a/src/main.rs b/src/main.rs index a7bef51..7878965 100644 --- a/src/main.rs +++ b/src/main.rs @@ -649,6 +649,79 @@ fn write_tab_styles(stream: &mut TcpStream, count: usize) { let _ = writeln!(stream, ""); } +enum TabInfo { + Lines(Vec), + Chara(Vec), + Game(IndexMap, Box>), + Description, + Comment(Vec), +} + +struct Tab { + title: Box, + info: TabInfo, +} + +fn entry_handler( + path: &Path, + relative_path: &str, + censored: bool, +) -> impl Fn(&str, &mut W, usize) { + move |mut entry, output, level| { + let level = level + 1; + let mut pki_path = path.to_path_buf(); + let mut audio_path = path.to_path_buf(); + if let Some((real_entry, _)) = entry.split_once(':') { + entry = real_entry + } + let pki_extension = if censored { "pkc" } else { "pki" }; + if relative_path.is_empty() { + pki_path.push(format!("{entry}.{pki_extension}")); + audio_path.push(format!("{entry}.mp3")); + } else { + pki_path.push(format!("{relative_path}/{entry}.{pki_extension}")); + audio_path.push(format!("{relative_path}/{entry}.mp3")); + } + + let Ok(file) = File::open(pki_path) else { + return; + }; + + let _ = writeln!( + output, + "{entry}" + ); + + if Path::is_file(&audio_path) { + let _ = writeln!( + output, + "

" + ); + } + + convert_subheader( + BufReader::new(file).lines().map(Result::unwrap_or_default), + output, + level, + ); + } +} + +fn chara_handler(path: &Path, relative_path: &str) -> impl Fn(&str, &mut W, usize) { + move |entry, output, _level| { + let mut chara_path = path.to_path_buf(); + chara_path.push(relative_path); + chara_path.push(format!("{entry}.chara")); + + let Some(def) = load_character_file(&chara_path) else { + return; + }; + + let html = render_character(entry, &def, relative_path); + let _ = output.write_all(html.into_string().as_bytes()); + } +} + fn handle_relative_connection( info: Arc, mut stream: TcpStream, @@ -714,83 +787,10 @@ fn handle_relative_connection( section(&mut stream); - fn entry_handler( - path: &Path, - relative_path: &str, - censored: bool, - ) -> impl Fn(&str, &mut W, usize) { - move |mut entry, output, level| { - let level = level + 1; - let mut pki_path = path.to_path_buf(); - let mut audio_path = path.to_path_buf(); - if let Some((real_entry, _)) = entry.split_once(':') { - entry = real_entry - } - let pki_extension = if censored { "pkc" } else { "pki" }; - if relative_path.is_empty() { - pki_path.push(format!("{entry}.{pki_extension}")); - audio_path.push(format!("{entry}.mp3")); - } else { - pki_path.push(format!("{relative_path}/{entry}.{pki_extension}")); - audio_path.push(format!("{relative_path}/{entry}.mp3")); - } - - let Ok(file) = File::open(pki_path) else { - return; - }; - - let _ = writeln!( - output, - "{entry}" - ); - - if Path::is_file(&audio_path) { - let _ = writeln!( - output, - "

" - ); - } - - convert_subheader( - BufReader::new(file).lines().map(Result::unwrap_or_default), - output, - level, - ); - } - } - - fn chara_handler(path: &Path, relative_path: &str) -> impl Fn(&str, &mut W, usize) { - move |entry, output, _level| { - let mut chara_path = path.to_path_buf(); - chara_path.push(relative_path); - chara_path.push(format!("{entry}.chara")); - - let Some(def) = load_character_file(&chara_path) else { - return; - }; - - let html = render_character(entry, &def, relative_path); - let _ = output.write_all(html.into_string().as_bytes()); - } - } - if back { let _ = writeln!(stream, "

{title}

"); } - enum TabInfo { - Lines(Vec), - Chara(Vec), - Game(IndexMap, Box>), - Description, - Comment(Vec), - } - - struct Tab { - title: Box, - info: TabInfo, - } - let mut sections = Vec::new(); let check_path: &Path = relative_path.as_ref();