diff --git a/src/main.rs b/src/main.rs index 3ae567f..e538aff 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,6 +20,7 @@ use data_stream::{ from_stream, to_stream, }; use header_config::parse_config; +use indexmap::IndexMap; use maud::html; use percent_encoding::percent_decode_str; use pukram2html::{Settings, convert, convert_extended, convert_subheader}; @@ -652,35 +653,26 @@ fn handle_relative_connection( .parent() .map(|parent| parent.with_extension("mlc")); - if let Some(config_map) = config_map { - if render_novel( + #[derive(Default)] + struct Section { + title: Box, + lines: Vec, + config_map: Option, Box>>, + } + + let mut sections = Vec::new(); + + if config_map.is_some() { + sections.push(Section { + title: "Game".into(), + lines: Vec::new(), config_map, - file_paths.pk, - mlc_path.as_deref(), - file_paths.mld, - relative_path, - &mut stream, - choice, - progress, - ) - .is_err() - { - fail(stream); - return; - } + }); } else { let Ok(pk_file) = File::open(file_paths.pk) else { unreachable!(); }; - #[derive(Default)] - struct Section { - title: Box, - lines: Vec, - } - - let mut sections = Vec::new(); - let mut current_section = Section::default(); for line in BufReader::new(pk_file).lines() { @@ -694,6 +686,7 @@ fn handle_relative_connection( current_section = Section { title: title.into(), lines: vec![line], + config_map: None, }; continue; @@ -703,12 +696,13 @@ fn handle_relative_connection( } sections.push(current_section); + } - let count = sections.len(); + let count = sections.len(); - let _ = write!(stream, ""); + + let _ = write!(stream, r#"
"#); + + let _ = write!( + stream, + r#""# + ); + for i in 2..=count { let _ = write!( stream, - "#tab-{count}:checked ~ #content-{count} {{ display: block; }}" + r#""# ); + } - let _ = write!(stream, ""); - - let _ = write!(stream, r#"
"#); - + let _ = write!(stream, r#"
"#); + for (i, Section { title, .. }) in sections.iter().enumerate() { + let index = i + 1; let _ = write!( stream, - r#""# + r#""# ); - for i in 2..=count { - let _ = write!( - stream, - r#""# - ); - } + } + let _ = write!(stream, "
"); - let _ = write!(stream, r#"
"#); - for (i, Section { title, .. }) in sections.iter().enumerate() { - let index = i + 1; - let _ = write!( - stream, - r#""# - ); - } - let _ = write!(stream, "
"); - - for (i, Section { lines, .. }) in sections.iter().enumerate() { - let index = i + 1; - let _ = write!(stream, r#"
"#); + for ( + i, + Section { + lines, config_map, .. + }, + ) in sections.into_iter().enumerate() + { + let index = i + 1; + let _ = write!(stream, r#"
"#); + if !lines.is_empty() { convert_extended( lines, &mut stream, @@ -795,12 +796,29 @@ fn handle_relative_connection( .with_start_level(start_level) .with_use_textboxes(true), ); - let _ = write!(stream, "
"); } - + if let Some(config_map) = config_map { + if render_novel( + config_map, + file_paths.pk, + mlc_path.as_deref(), + file_paths.mld, + relative_path, + &mut stream, + choice, + progress, + ) + .is_err() + { + fail(stream); + return; + } + } let _ = write!(stream, "
"); } + let _ = write!(stream, "
"); + section(&mut stream); if let Some(pki_path) = file_paths.pki {