support AFS tables in convert-common-item-set
This commit is contained in:
+10
-5
@@ -2153,16 +2153,20 @@ Action a_convert_rare_item_set(
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
static shared_ptr<CommonItemSet> load_common_item_set(const std::string& filename, bool big_endian) {
|
static shared_ptr<CommonItemSet> load_common_item_set(
|
||||||
|
const std::string& filename, const std::string& ct_filename, bool big_endian) {
|
||||||
auto data = make_shared<string>(phosg::load_file(filename));
|
auto data = make_shared<string>(phosg::load_file(filename));
|
||||||
if (filename.ends_with(".json")) {
|
if (filename.ends_with(".json")) {
|
||||||
return make_shared<JSONCommonItemSet>(phosg::JSON::parse(*data));
|
return make_shared<JSONCommonItemSet>(phosg::JSON::parse(*data));
|
||||||
|
} else if (filename.ends_with(".afs")) {
|
||||||
|
auto ct_data = make_shared<string>(phosg::load_file(ct_filename));
|
||||||
|
return make_shared<AFSV2CommonItemSet>(data, ct_data);
|
||||||
} else if (filename.ends_with(".gsl")) {
|
} else if (filename.ends_with(".gsl")) {
|
||||||
return make_shared<GSLV3V4CommonItemSet>(data, big_endian);
|
return make_shared<GSLV3V4CommonItemSet>(data, big_endian);
|
||||||
} else if (filename.ends_with(".gslb")) {
|
} else if (filename.ends_with(".gslb")) {
|
||||||
return make_shared<GSLV3V4CommonItemSet>(data, true);
|
return make_shared<GSLV3V4CommonItemSet>(data, true);
|
||||||
} else {
|
} else {
|
||||||
throw runtime_error("cannot determine input format; use a filename ending with .json, .gsl, or .gslb");
|
throw runtime_error("cannot determine input format; use a filename ending with .json, .afs, .gsl, or .gslb");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2173,6 +2177,7 @@ Action a_convert_common_item_set(
|
|||||||
OUTPUT-FILENAME or stdout. The input filename must end in one of the\n\
|
OUTPUT-FILENAME or stdout. The input filename must end in one of the\n\
|
||||||
following extensions:\n\
|
following extensions:\n\
|
||||||
.json (newserv JSON common item table)\n\
|
.json (newserv JSON common item table)\n\
|
||||||
|
.afs (PSO v2 AFS archive; --ct-filename is required in this case)\n\
|
||||||
.gsl (PSO BB little-endian GSL archive)\n\
|
.gsl (PSO BB little-endian GSL archive)\n\
|
||||||
.gslb (PSO GC big-endian GSL archive)\n",
|
.gslb (PSO GC big-endian GSL archive)\n",
|
||||||
+[](phosg::Arguments& args) {
|
+[](phosg::Arguments& args) {
|
||||||
@@ -2181,7 +2186,7 @@ Action a_convert_common_item_set(
|
|||||||
throw runtime_error("input filename must be given");
|
throw runtime_error("input filename must be given");
|
||||||
}
|
}
|
||||||
|
|
||||||
auto cs = load_common_item_set(input_filename, args.get<bool>("big-endian"));
|
auto cs = load_common_item_set(input_filename, args.get<string>("ct-filename", false), args.get<bool>("big-endian"));
|
||||||
const string& output_filename = args.get<string>(2, false);
|
const string& output_filename = args.get<string>(2, false);
|
||||||
if (output_filename.empty()) {
|
if (output_filename.empty()) {
|
||||||
cs->print(stdout);
|
cs->print(stdout);
|
||||||
@@ -2203,8 +2208,8 @@ Action a_compare_common_item_set(
|
|||||||
throw runtime_error("two input filenames must be given");
|
throw runtime_error("two input filenames must be given");
|
||||||
}
|
}
|
||||||
|
|
||||||
auto cs1 = load_common_item_set(input_filename1, args.get<bool>("big-endian1"));
|
auto cs1 = load_common_item_set(input_filename1, args.get<string>("ct-filename1", false), args.get<bool>("big-endian1"));
|
||||||
auto cs2 = load_common_item_set(input_filename2, args.get<bool>("big-endian2"));
|
auto cs2 = load_common_item_set(input_filename2, args.get<string>("ct-filename2", false), args.get<bool>("big-endian2"));
|
||||||
cs1->print_diff(stdout, *cs2);
|
cs1->print_diff(stdout, *cs2);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user