summaryrefslogtreecommitdiff
path: root/src/cmds
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-02-27 06:20:10 +0800
committer魏曹先生 <1992414357@qq.com>2026-02-27 06:20:10 +0800
commita31cb962b99e96bda167be87dd37c2e2f82fea2f (patch)
treec8182c97081492bc01cf7bfcacc4cd7a8fda45a3 /src/cmds
parent94b7d7d80a0c2dd0884bed60659d65c5019f0839 (diff)
Add pretty output option to sheetdump command
Diffstat (limited to 'src/cmds')
-rw-r--r--src/cmds/arg/sheetdump.rs7
-rw-r--r--src/cmds/cmd/sheetdump.rs24
-rw-r--r--src/cmds/in/sheetdump.rs1
-rw-r--r--src/cmds/out/mappings_pretty.rs7
-rw-r--r--src/cmds/renderer/mappings_pretty.rs93
5 files changed, 123 insertions, 9 deletions
diff --git a/src/cmds/arg/sheetdump.rs b/src/cmds/arg/sheetdump.rs
index 907b181..abd0d29 100644
--- a/src/cmds/arg/sheetdump.rs
+++ b/src/cmds/arg/sheetdump.rs
@@ -6,6 +6,9 @@ use clap::Parser;
pub struct JVSheetdumpArgument {
pub sheet_file: PathBuf,
- #[arg(short, long)]
- pub sort: bool,
+ #[arg(short, long = "no-sort")]
+ pub no_sort: bool,
+
+ #[arg(long = "no-pretty")]
+ pub no_pretty: bool,
}
diff --git a/src/cmds/cmd/sheetdump.rs b/src/cmds/cmd/sheetdump.rs
index 1945f44..fefa6d4 100644
--- a/src/cmds/cmd/sheetdump.rs
+++ b/src/cmds/cmd/sheetdump.rs
@@ -3,8 +3,10 @@ use std::any::TypeId;
use crate::{
cmd_output,
cmds::{
- arg::sheetdump::JVSheetdumpArgument, collect::sheetdump::JVSheetdumpCollect,
- r#in::sheetdump::JVSheetdumpInput, out::mappings::JVMappingsOutput,
+ arg::sheetdump::JVSheetdumpArgument,
+ collect::sheetdump::JVSheetdumpCollect,
+ r#in::sheetdump::JVSheetdumpInput,
+ out::{mappings::JVMappingsOutput, mappings_pretty::JVMappingsPrettyOutput},
},
systems::cmd::{
cmd_system::JVCommandContext,
@@ -28,7 +30,10 @@ fn help_str() -> String {
}
async fn prepare(args: &Arg, _ctx: &JVCommandContext) -> Result<In, CmdPrepareError> {
- Ok(In { sort: args.sort })
+ Ok(In {
+ sort: !args.no_sort,
+ pretty: !args.no_pretty,
+ })
}
async fn collect(args: &Arg, _ctx: &JVCommandContext) -> Result<Collect, CmdPrepareError> {
@@ -55,10 +60,15 @@ async fn exec(
mappings_vec.sort();
}
- let result = JVMappingsOutput {
- mappings: mappings_vec,
- };
- cmd_output!(JVMappingsOutput => result)
+ if input.pretty {
+ cmd_output!(JVMappingsPrettyOutput => JVMappingsPrettyOutput {
+ mappings: mappings_vec,
+ })
+ } else {
+ cmd_output!(JVMappingsOutput => JVMappingsOutput {
+ mappings: mappings_vec,
+ })
+ }
}
crate::command_template!();
diff --git a/src/cmds/in/sheetdump.rs b/src/cmds/in/sheetdump.rs
index 7c636e5..5bfcd80 100644
--- a/src/cmds/in/sheetdump.rs
+++ b/src/cmds/in/sheetdump.rs
@@ -1,3 +1,4 @@
pub struct JVSheetdumpInput {
pub sort: bool,
+ pub pretty: bool,
}
diff --git a/src/cmds/out/mappings_pretty.rs b/src/cmds/out/mappings_pretty.rs
new file mode 100644
index 0000000..e0fa58c
--- /dev/null
+++ b/src/cmds/out/mappings_pretty.rs
@@ -0,0 +1,7 @@
+use just_enough_vcs::system::sheet_system::mapping::LocalMapping;
+use serde::Serialize;
+
+#[derive(Serialize)]
+pub struct JVMappingsPrettyOutput {
+ pub mappings: Vec<LocalMapping>,
+}
diff --git a/src/cmds/renderer/mappings_pretty.rs b/src/cmds/renderer/mappings_pretty.rs
new file mode 100644
index 0000000..dad4d95
--- /dev/null
+++ b/src/cmds/renderer/mappings_pretty.rs
@@ -0,0 +1,93 @@
+use cli_utils::{display::SimpleTable, string_vec};
+use colored::Colorize;
+use just_enough_vcs::system::sheet_system::mapping::LocalMapping;
+use render_system_macros::result_renderer;
+use rust_i18n::t;
+
+use crate::{
+ cmds::out::mappings_pretty::JVMappingsPrettyOutput,
+ r_println,
+ systems::{cmd::errors::CmdRenderError, render::renderer::JVRenderResult},
+};
+
+#[result_renderer(JVMappingsPrettyRenderer)]
+pub async fn render(data: &JVMappingsPrettyOutput) -> Result<JVRenderResult, CmdRenderError> {
+ let mut r = JVRenderResult::default();
+ let mappings = &data.mappings;
+ r_println!(r, "{}", render_pretty_mappings(&mappings));
+ Ok(r)
+}
+
+fn render_pretty_mappings(mappings: &Vec<LocalMapping>) -> String {
+ let header = string_vec![
+ "0",
+ format!(" | {}", t!("sheetedit.mapping").bold()),
+ "",
+ format!("| {}", t!("sheetedit.index_source").bold()),
+ "",
+ format!("| {}", t!("sheetedit.forward").bold()),
+ "|"
+ ];
+
+ let mut simple_table = SimpleTable::new(header);
+
+ let mut i = 1;
+ for mapping in mappings {
+ let mapping_str = mapping
+ .to_string()
+ .split(" ")
+ .into_iter()
+ .map(|s| s.to_string())
+ .collect::<Vec<String>>();
+ simple_table.push_item(vec![
+ // Number
+ format!("{}", i).bold().to_string(),
+ // Mapping
+ format!(
+ " | {} ",
+ mapping_str
+ .get(0)
+ .unwrap_or(&String::default())
+ .bright_cyan()
+ ),
+ // => & ==
+ format!(
+ "{} ",
+ match mapping_str.get(1).unwrap_or(&String::default()).as_str() {
+ "==" => mapping_str[1].bright_yellow().bold(),
+ "=>" => mapping_str[1].bright_yellow(),
+ _ => mapping_str[1].bright_black(),
+ }
+ ),
+ // Index
+ format!(
+ " {} ",
+ mapping_str
+ .get(2)
+ .unwrap_or(&String::default())
+ .bright_yellow()
+ ),
+ // => & ==
+ format!(
+ "{} ",
+ match mapping_str.get(1).unwrap_or(&String::default()).as_str() {
+ "==" => mapping_str[1].bright_yellow().bold(),
+ "=>" => mapping_str[1].bright_yellow(),
+ _ => mapping_str[1].bright_black(),
+ }
+ ),
+ // Forward
+ format!(
+ " {} ",
+ mapping_str
+ .get(4)
+ .unwrap_or(&String::default())
+ .bright_yellow()
+ ),
+ "|".to_string(),
+ ]);
+
+ i += 1;
+ }
+ simple_table.to_string()
+}