diff --git a/Cargo.toml b/Cargo.toml index 6e94b53..127d9c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,7 +46,7 @@ zstd = { version = "0.13", optional = true } default = ["all-fmt", "image-jpg", "image-webp"] all-fmt = ["all-script", "all-img", "all-arc", "all-audio"] all-script = ["artemis", "bgi", "cat-system", "circus", "entis-gls", "escude", "ex-hibit", "hexen-haus", "kirikiri", "softpal", "will-plus", "yaneurao", "yaneurao-itufuru"] -all-img = ["bgi-img", "cat-system-img", "circus-img", "kirikiri-img"] +all-img = ["bgi-img", "cat-system-img", "circus-img", "emote-img", "kirikiri-img"] all-arc = ["artemis-arc", "bgi-arc", "cat-system-arc", "circus-arc", "escude-arc"] all-audio = ["bgi-audio", "circus-audio"] artemis = ["utils-escape"] @@ -62,13 +62,14 @@ circus = [] circus-arc = ["circus"] circus-audio = ["circus", "flate2", "int-enum", "utils-pcm"] circus-img = ["circus", "image", "flate2", "zstd"] +emote-img = ["emote-psb", "image", "libtlg-rs", "url"] entis-gls = ["xml5ever", "markup5ever", "markup5ever_rcdom"] escude = ["int-enum"] escude-arc = ["escude", "rand", "utils-bit-stream"] ex-hibit = [] hexen-haus = ["memchr", "utils-str"] kirikiri = ["emote-psb", "fancy-regex", "flate2", "json", "utils-escape"] -kirikiri-img = ["kirikiri", "emote-psb", "image", "libtlg-rs", "url"] +kirikiri-img = ["kirikiri", "image", "libtlg-rs"] softpal = ["int-enum"] will-plus = ["utils-str"] yaneurao = [] diff --git a/README.md b/README.md index 77ab3f9..9f4b2e3 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,15 @@ msg-tool create -t |---|---|---|---|---|---|---|---|---| | `circus-crx` | `circus-img` | Circus Image File (.crx) | ✔️ | ✔️ | ❌ | ❌ | ✔️ | | | `circus-crxd` | `circus-img` | Circus Differential Image File (.crx) | ✔️ | ❌ | ❌ | ❌ | ❌ | | +### Emote +| Image Type | Feature Name | Name | Export | Import | Export Multiple | Import Multiple | Create | Remarks | +|---|---|---|---|---|---|---|---|---| +| `emote-pimg`/`pimg` | `emote-img` | Emote Multiple Image File (.pimg) | ❌ | ❌ | ✔️ | ❌ | ❌ | | +| `emote-dref`/`dref` | `emote-img` | Emote DPAK-referenced Image File (.dref) | ✔️ | ❌ | ❌ | ❌ | ❌ | | +### Entis GLS engine +| Script Type | Feature Name | Name | Export | Import | Custom Export | Custom Import | Create | Remarks | +|---|---|---|---|---|---|---|---|---| +| `entis-gls` | `entis-gls` | Entis GLS engine XML Script (.srcxml) | ✔️ | ✔️ | ❌ | ❌ | ❌ | | ### Escu:de | Script Type | Feature Name | Name | Export | Import | Custom Export | Custom Import | Create | Remarks | |---|---|---|---|---|---|---|---|---| @@ -133,10 +142,6 @@ msg-tool create -t | Archive Type | Feature Name | Name | Unpack | Pack | Remarks | |---|---|---|---|---|---| | `escude-arc` | `escude-arc` | Escu:de Archive File (.bin) | ✔️ | ✔️ | | -### Entis GLS engine -| Script Type | Feature Name | Name | Export | Import | Custom Export | Custom Import | Create | Remarks | -|---|---|---|---|---|---|---|---|---| -| `entis-gls` | `entis-gls` | Entis GLS engine XML Script (.srcxml) | ✔️ | ✔️ | ❌ | ❌ | ❌ | | ### ExHibit | Script Type | Feature Name | Name | Export | Import | Custom Export | Custom Import | Create | Remarks | |---|---|---|---|---|---|---|---|---| @@ -156,8 +161,6 @@ msg-tool create -t | Image Type | Feature Name | Name | Export | Import | Export Multiple | Import Multiple | Create | Remarks | |---|---|---|---|---|---|---|---|---| | `kirikiri-tlg`/`kr-tlg` | `kirikiri-img` | Kirikiri TLG Image File (.tlg) | ✔️ | ✔️ | ❌ | ❌ | ✔️ | tlg6 is not supported when importing/creating image | -| `kirikiri-pimg`/`kr-pimg` | `kirikiri-img` | Kirikiri Multiple Image File (.pimg) | ❌ | ❌ | ✔️ | ❌ | ❌ | | -| `kirikiri-dref`/`kr-dref` | `kirikiri-img` | Kirikiri DPAK-referenced Image File (.dref) | ✔️ | ❌ | ❌ | ❌ | ❌ | | ### Softpal | Script Type | Feature Name | Name | Export | Import | Custom Export | Custom Import | Create | Remarks | |---|---|---|---|---|---|---|---|---| diff --git a/src/scripts/kirikiri/image/dref.rs b/src/scripts/emote/dref.rs similarity index 98% rename from src/scripts/kirikiri/image/dref.rs rename to src/scripts/emote/dref.rs index 4021a68..6b1954c 100644 --- a/src/scripts/kirikiri/image/dref.rs +++ b/src/scripts/emote/dref.rs @@ -1,4 +1,4 @@ -//! Kirikiri DPAK-referenced Image File (.dref) +//! Emote DPAK-referenced Image File (.dref) use crate::ext::io::*; use crate::ext::psb::*; use crate::scripts::base::*; @@ -13,7 +13,7 @@ use std::path::{Path, PathBuf}; use url::Url; #[derive(Debug)] -/// Kirikiri DREF Script Builder +/// Emote DREF Script Builder pub struct DrefBuilder {} impl DrefBuilder { @@ -47,7 +47,7 @@ impl ScriptBuilder for DrefBuilder { } fn script_type(&self) -> &'static ScriptType { - &ScriptType::KirikiriDref + &ScriptType::EmoteDref } fn is_image(&self) -> bool { @@ -177,7 +177,7 @@ impl DpakLoader { } } -/// Kirikiri DREF Script +/// Emote DREF Script pub struct Dref { urls: Vec, dir: PathBuf, diff --git a/src/scripts/emote/mod.rs b/src/scripts/emote/mod.rs new file mode 100644 index 0000000..ccedb71 --- /dev/null +++ b/src/scripts/emote/mod.rs @@ -0,0 +1,2 @@ +pub mod dref; +pub mod pimg; diff --git a/src/scripts/kirikiri/image/pimg.rs b/src/scripts/emote/pimg.rs similarity index 99% rename from src/scripts/kirikiri/image/pimg.rs rename to src/scripts/emote/pimg.rs index 2386cb5..b5ea2e3 100644 --- a/src/scripts/kirikiri/image/pimg.rs +++ b/src/scripts/emote/pimg.rs @@ -1,4 +1,4 @@ -//! Kirikiri Multiple Image File (.pimg) +//! Emote Multiple Image File (.pimg) use crate::ext::io::*; use crate::ext::psb::*; use crate::scripts::base::*; @@ -13,7 +13,7 @@ use std::io::{Read, Seek}; use std::path::Path; #[derive(Debug)] -/// Kirikiri PImg Script Builder +/// Emote PImg Script Builder pub struct PImgBuilder {} impl PImgBuilder { @@ -75,7 +75,7 @@ impl ScriptBuilder for PImgBuilder { } fn script_type(&self) -> &'static ScriptType { - &ScriptType::KirikiriPimg + &ScriptType::EmotePimg } fn is_this_format(&self, filename: &str, buf: &[u8], buf_len: usize) -> Option { @@ -97,7 +97,7 @@ impl ScriptBuilder for PImgBuilder { } #[derive(Debug)] -/// Kirikiri PImg Script +/// Emote PImg Script pub struct PImg { psb: VirtualPsbFixed, overlay: Option, diff --git a/src/scripts/kirikiri/image/mod.rs b/src/scripts/kirikiri/image/mod.rs index 792470a..d9caf39 100644 --- a/src/scripts/kirikiri/image/mod.rs +++ b/src/scripts/kirikiri/image/mod.rs @@ -1,4 +1,2 @@ //! Kirikiri Images -pub mod dref; -pub mod pimg; pub mod tlg; diff --git a/src/scripts/mod.rs b/src/scripts/mod.rs index 7447e77..74ebac9 100644 --- a/src/scripts/mod.rs +++ b/src/scripts/mod.rs @@ -8,6 +8,8 @@ pub mod bgi; pub mod cat_system; #[cfg(feature = "circus")] pub mod circus; +#[cfg(feature = "emote-img")] +pub mod emote; #[cfg(feature = "entis-gls")] pub mod entis_gls; #[cfg(feature = "escude")] @@ -70,10 +72,10 @@ lazy_static::lazy_static! { Box::new(kirikiri::ks::KsBuilder::new()), #[cfg(feature = "kirikiri-img")] Box::new(kirikiri::image::tlg::TlgImageBuilder::new()), - #[cfg(feature = "kirikiri-img")] - Box::new(kirikiri::image::pimg::PImgBuilder::new()), - #[cfg(feature = "kirikiri-img")] - Box::new(kirikiri::image::dref::DrefBuilder::new()), + #[cfg(feature = "emote-img")] + Box::new(emote::pimg::PImgBuilder::new()), + #[cfg(feature = "emote-img")] + Box::new(emote::dref::DrefBuilder::new()), #[cfg(feature = "kirikiri")] Box::new(kirikiri::mdf::MdfBuilder::new()), #[cfg(feature = "will-plus")] diff --git a/src/types.rs b/src/types.rs index 213a17a..bb2a36b 100644 --- a/src/types.rs +++ b/src/types.rs @@ -428,6 +428,14 @@ pub enum ScriptType { #[cfg(feature = "circus-img")] /// Circus Differential Image CircusCrxd, + #[cfg(feature = "emote-img")] + #[value(alias("pimg"))] + /// Emote PIMG image + EmotePimg, + #[cfg(feature = "emote-img")] + #[value(alias("dref"))] + /// Emote DREF(DPAK-referenced) image + EmoteDref, #[cfg(feature = "entis-gls")] /// Entis GLS srcxml Script EntisGls, @@ -462,14 +470,6 @@ pub enum ScriptType { #[value(alias("kr-tlg"))] /// Kirikiri TLG image KirikiriTlg, - #[cfg(feature = "kirikiri-img")] - #[value(alias("kr-pimg"))] - /// Kirikiri PIMG image - KirikiriPimg, - #[cfg(feature = "kirikiri-img")] - #[value(alias("kr-dref"))] - /// Kirikiri DREF(DPAK-referenced) image - KirikiriDref, #[cfg(feature = "kirikiri")] #[value(alias("kr-mdf"))] /// Kirikiri MDF (zlib compressed) file diff --git a/src/utils/encoding.rs b/src/utils/encoding.rs index 65757b9..67c189d 100644 --- a/src/utils/encoding.rs +++ b/src/utils/encoding.rs @@ -88,8 +88,7 @@ pub fn decode_to_string( Encoding::Auto => decode_to_string(Encoding::Utf8, data, check) .or_else(|_| decode_to_string(Encoding::Cp932, data, check)) .or_else(|_| decode_to_string(Encoding::Gb2312, data, check)), - // Keep same behavior as Windows API (Code Page 65001) - Encoding::Utf8 => Ok(String::from_utf8_lossy(data).into_owned()), + Encoding::Utf8 => Ok(String::from_utf8(data.to_vec())?), Encoding::Cp932 => { let result = encoding::codec::japanese::Windows31JEncoding .decode(