Parse complete vng files
This commit is contained in:
parent
5b975a23f8
commit
b89b1c3767
34
Cargo.lock
generated
34
Cargo.lock
generated
@ -38,6 +38,29 @@ dependencies = [
|
|||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "equivalent"
|
||||||
|
version = "1.0.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hashbrown"
|
||||||
|
version = "0.15.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "header-config"
|
||||||
|
version = "0.1.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "534f791edc58252667d692bb3b4b6dead797024ac02ec9cdb5733da81089b21d"
|
||||||
|
dependencies = [
|
||||||
|
"header-parsing",
|
||||||
|
"indexmap",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "header-parsing"
|
name = "header-parsing"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
@ -50,6 +73,16 @@ version = "0.3.9"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
|
checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "indexmap"
|
||||||
|
version = "2.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
|
||||||
|
dependencies = [
|
||||||
|
"equivalent",
|
||||||
|
"hashbrown",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "1.0.14"
|
version = "1.0.14"
|
||||||
@ -136,6 +169,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"data-stream",
|
"data-stream",
|
||||||
"dialogi",
|
"dialogi",
|
||||||
|
"header-config",
|
||||||
"maud",
|
"maud",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"pukram2html",
|
"pukram2html",
|
||||||
|
|||||||
@ -11,3 +11,4 @@ data-stream = "0.3.0"
|
|||||||
dialogi = "0.3.1"
|
dialogi = "0.3.1"
|
||||||
vn-settings = "0.1.0"
|
vn-settings = "0.1.0"
|
||||||
threadpool = "1.8.1"
|
threadpool = "1.8.1"
|
||||||
|
header-config = "0.1.5"
|
||||||
|
|||||||
@ -1,19 +1,11 @@
|
|||||||
use std::{collections::HashMap, path::Path};
|
use std::path::Path;
|
||||||
|
|
||||||
use dialogi::DialogSequence;
|
use dialogi::DialogSequence;
|
||||||
use vn_settings::{Change, Parameter, SettingsContext};
|
use vn_settings::{Change, Parameter, SettingsContext};
|
||||||
|
|
||||||
pub fn parse_map(
|
pub fn parse_map(
|
||||||
story_path: &Path,
|
story_path: &Path,
|
||||||
|
settings_context: &mut SettingsContext,
|
||||||
) -> Result<Vec<DialogSequence<Change, Parameter>>, dialogi::ParsingError> {
|
) -> Result<Vec<DialogSequence<Change, Parameter>>, dialogi::ParsingError> {
|
||||||
let mut layers = HashMap::new();
|
DialogSequence::map_from_path(story_path, settings_context)
|
||||||
layers.insert("Background".into(), 0);
|
|
||||||
layers.insert("Character".into(), 1);
|
|
||||||
|
|
||||||
let mut settings_context = SettingsContext {
|
|
||||||
object_cache: HashMap::new(),
|
|
||||||
layers,
|
|
||||||
};
|
|
||||||
|
|
||||||
DialogSequence::map_from_path(story_path, &mut settings_context)
|
|
||||||
}
|
}
|
||||||
|
|||||||
39
src/main.rs
39
src/main.rs
@ -19,6 +19,7 @@ use data_stream::{
|
|||||||
from_stream, to_stream,
|
from_stream, to_stream,
|
||||||
};
|
};
|
||||||
use dialog::parse_map;
|
use dialog::parse_map;
|
||||||
|
use header_config::parse_config;
|
||||||
use maud::html;
|
use maud::html;
|
||||||
use percent_encoding::percent_decode_str;
|
use percent_encoding::percent_decode_str;
|
||||||
use pukram2html::{Settings, convert, convert_extended, convert_subheader};
|
use pukram2html::{Settings, convert, convert_extended, convert_subheader};
|
||||||
@ -28,7 +29,7 @@ mod request;
|
|||||||
use request::Request;
|
use request::Request;
|
||||||
use vn_settings::{
|
use vn_settings::{
|
||||||
ColorSettings, ImageSettings, LayoutSettings, Names, ObjectSettings, PlayerSettings,
|
ColorSettings, ImageSettings, LayoutSettings, Names, ObjectSettings, PlayerSettings,
|
||||||
TimingSettings,
|
SettingsContext, TimingSettings,
|
||||||
};
|
};
|
||||||
|
|
||||||
mod dialog;
|
mod dialog;
|
||||||
@ -597,12 +598,38 @@ fn handle_relative_connection(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let check_path: &Path = relative_path.as_ref();
|
let check_path: &Path = relative_path.as_ref();
|
||||||
let interactive = check_path.parent().is_some_and(|parent| {
|
let config_map = check_path
|
||||||
std::fs::metadata(parent.with_extension("vng")).is_ok_and(|file| file.is_file())
|
.parent()
|
||||||
});
|
.map(|parent| parse_config(&parent.with_extension("vng")).ok())
|
||||||
|
.unwrap_or_default();
|
||||||
|
|
||||||
if interactive {
|
if let Some(mut config_map) = config_map {
|
||||||
let Ok(dialogs) = parse_map(file_paths.pk) else {
|
let mut layers = HashMap::new();
|
||||||
|
|
||||||
|
let keys: Vec<_> = config_map.keys().cloned().collect();
|
||||||
|
for key in keys {
|
||||||
|
let Some(("Layer", name)) = key.split_once(':') else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
|
||||||
|
let value = config_map.shift_remove(&key).expect("Invalid layer");
|
||||||
|
if !value.is_empty() {
|
||||||
|
eprintln!("Layers don't accept arguments!");
|
||||||
|
}
|
||||||
|
layers.insert(name.into(), layers.len());
|
||||||
|
}
|
||||||
|
|
||||||
|
if layers.is_empty() {
|
||||||
|
layers.insert("Background".into(), 0);
|
||||||
|
layers.insert("Character".into(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut settings_context = SettingsContext {
|
||||||
|
object_cache: HashMap::new(),
|
||||||
|
layers,
|
||||||
|
};
|
||||||
|
|
||||||
|
let Ok(dialogs) = parse_map(file_paths.pk, &mut settings_context) else {
|
||||||
fail(stream);
|
fail(stream);
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user