| Index: test/ot-sanitise.cc
|
| diff --git a/test/ot-sanitise.cc b/test/ot-sanitise.cc
|
| old mode 100644
|
| new mode 100755
|
| index ad3054e7c9e1df8918c70bd4be26e3c9fdcb91fe..3411cac2c0c8db5df30558ff8097f53f137306f3
|
| --- a/test/ot-sanitise.cc
|
| +++ b/test/ot-sanitise.cc
|
| @@ -13,6 +13,7 @@
|
| #include <unistd.h>
|
| #endif // defined(_WIN32)
|
|
|
| +#include <cstdarg>
|
| #include <cstdio>
|
| #include <cstdlib>
|
|
|
| @@ -28,15 +29,45 @@
|
| namespace {
|
|
|
| int Usage(const char *argv0) {
|
| - std::fprintf(stderr, "Usage: %s ttf_file > dest_ttf_file\n", argv0);
|
| + std::fprintf(stderr, "Usage: %s ttf_file [dest_ttf_file]\n", argv0);
|
| return 1;
|
| }
|
|
|
| +class Context: public ots::OTSContext {
|
| + public:
|
| + virtual void Message(int level, const char *format, ...) {
|
| + va_list va;
|
| +
|
| + if (level == 0)
|
| + std::fprintf(stderr, "ERROR: ");
|
| + else
|
| + std::fprintf(stderr, "WARNING: ");
|
| + va_start(va, format);
|
| + std::vfprintf(stderr, format, va);
|
| + std::fprintf(stderr, "\n");
|
| + va_end(va);
|
| + }
|
| +
|
| + virtual ots::TableAction GetTableAction(uint32_t tag) {
|
| +#define TAG(a, b, c, d) ((a) << 24 | (b) << 16 | (c) << 8 | (d))
|
| + switch (tag) {
|
| + case TAG('S','i','l','f'):
|
| + case TAG('S','i','l','l'):
|
| + case TAG('G','l','o','c'):
|
| + case TAG('G','l','a','t'):
|
| + case TAG('F','e','a','t'):
|
| + return ots::TABLE_ACTION_PASSTHRU;
|
| + default:
|
| + return ots::TABLE_ACTION_DEFAULT;
|
| + }
|
| +#undef TAG
|
| + }
|
| +};
|
| +
|
| } // namespace
|
|
|
| int main(int argc, char **argv) {
|
| - if (argc != 2) return Usage(argv[0]);
|
| - if (::isatty(1)) return Usage(argv[0]);
|
| + if (argc < 2 || argc > 3) return Usage(argv[0]);
|
|
|
| ots::EnableWOFF2();
|
|
|
| @@ -56,11 +87,14 @@ int main(int argc, char **argv) {
|
| }
|
| ::close(fd);
|
|
|
| - ots::FILEStream output(stdout);
|
| -#if defined(_WIN32)
|
| - ::setmode(fileno(stdout), O_BINARY);
|
| -#endif
|
| - const bool result = ots::Process(&output, data, st.st_size);
|
| + Context context;
|
| +
|
| + FILE* out = NULL;
|
| + if (argc == 3)
|
| + out = fopen(argv[2], "wb");
|
| +
|
| + ots::FILEStream output(out);
|
| + const bool result = context.Process(&output, data, st.st_size);
|
|
|
| if (!result) {
|
| std::fprintf(stderr, "Failed to sanitise file!\n");
|
|
|