Fix crash on invalid varfont, print version, accept --args

This commit is contained in:
Chlumsky 2023-01-21 16:00:52 +01:00
parent a811ef8935
commit 7ff249bcd4
4 changed files with 21 additions and 7 deletions

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2016 - 2022 Viktor Chlumsky
Copyright (c) 2016 - 2023 Viktor Chlumsky
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -2,7 +2,7 @@
/*
* MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR - standalone console program
* --------------------------------------------------------------------------
* A utility by Viktor Chlumsky, (c) 2014 - 2022
* A utility by Viktor Chlumsky, (c) 2014 - 2023
*
*/
@ -141,7 +141,7 @@ static FontHandle * loadVarFont(FreetypeHandle *library, const char *filename) {
while (*filename && *filename != '?')
buffer.push_back(*filename++);
FontHandle *font = loadFont(library, buffer.c_str());
if (*filename++ == '?') {
if (font && *filename++ == '?') {
do {
buffer.clear();
while (*filename && *filename != '=')
@ -299,7 +299,11 @@ static const char * writeOutput(const BitmapConstRef<float, N> &bitmap, const ch
#define SUFFIX_UNDERLINE
#endif
static const char *helpText =
static const char * const versionText =
"MSDFgen v" MSDFGEN_VERSION_STRING TITLE_SUFFIX "\n"
"(c) 2016 - " STRINGIZE(MSDFGEN_COPYRIGHT_YEAR) " Viktor Chlumsky";
static const char * const helpText =
"\n"
"Multi-channel signed distance field generator by Viktor Chlumsky v" MSDFGEN_VERSION_STRING TITLE_SUFFIX "\n"
"------------------------------------------------------------------" VERSION_UNDERLINE SUFFIX_UNDERLINE "\n"
@ -406,6 +410,8 @@ static const char *helpText =
"\tRenders an image preview without flattening the color channels.\n"
" -translate <x> <y>\n"
"\tSets the translation of the shape in shape units.\n"
" -version\n"
"\tPrints the version of the program.\n"
" -windingpreprocess\n"
"\tAttempts to fix only the contour windings assuming no self-intersections and even-odd fill rule.\n"
" -yflip\n"
@ -520,6 +526,10 @@ int main(int argc, const char * const *argv) {
#define ARG_MODE(s, m) if (!strcmp(arg, s)) { mode = m; ++argPos; continue; }
#define SET_FORMAT(fmt, ext) do { format = fmt; if (!outputSpecified) output = "output." ext; } while (false)
// Accept arguments prefixed with -- instead of -
if (arg[0] == '-' && arg[1] == '-')
++arg;
ARG_MODE("sdf", SINGLE)
ARG_MODE("psdf", PSEUDO)
ARG_MODE("msdf", MULTI)
@ -851,11 +861,15 @@ int main(int argc, const char * const *argv) {
argPos += 2;
continue;
}
ARG_CASE("-version", 0) {
puts(versionText);
return 0;
}
ARG_CASE("-help", 0) {
puts(helpText);
return 0;
}
printf("Unknown setting or insufficient parameters: %s\n", arg);
printf("Unknown setting or insufficient parameters: %s\n", argv[argPos]);
suggestHelp = true;
++argPos;
}

View File

@ -4,7 +4,7 @@
/*
* MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR
* ---------------------------------------------
* A utility by Viktor Chlumsky, (c) 2014 - 2022
* A utility by Viktor Chlumsky, (c) 2014 - 2023
*
* The extension module provides ways to easily load input and save output using popular formats.
*

View File

@ -4,7 +4,7 @@
/*
* MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR
* ---------------------------------------------
* A utility by Viktor Chlumsky, (c) 2014 - 2022
* A utility by Viktor Chlumsky, (c) 2014 - 2023
*
* The technique used to generate multi-channel distance fields in this code
* has been developed by Viktor Chlumsky in 2014 for his master's thesis,