OpenShot Library | libopenshot-audio
0.2.0
|
26 static inline File resolveFilename (
const String& name)
31 static inline void checkFileExists (
const File& f)
37 static inline void checkFolderExists (
const File& f)
39 if (! f.isDirectory())
45 return resolveFilename (
text);
50 auto f = resolveAsFile();
57 auto f = resolveAsFile();
59 if (! f.isDirectory())
65 static inline bool isShortOptionFormat (
StringRef s) {
return s[0] ==
'-' && s[1] !=
'-'; }
66 static inline bool isLongOptionFormat (
StringRef s) {
return s[0] ==
'-' && s[1] ==
'-' && s[2] !=
'-'; }
67 static inline bool isOptionFormat (StringRef s) {
return s[0] ==
'-'; }
75 if (! isLongOptionFormat (option))
77 jassert (! isShortOptionFormat (option));
78 return isLongOption (
"--" + option);
81 return text.upToFirstOccurrenceOf (
"=",
false,
false) == option;
87 if (
auto equalsIndex = text.indexOfChar (
'='))
95 jassert (option !=
'-');
97 return isShortOption() && text.containsChar (option);
107 if (isShortOptionFormat (o) && o.length() == 2 && isShortOption ((
char) o[1]))
110 if (isLongOptionFormat (o) && isLongOption (o))
145 if (
size() < expectedMinNumberOfArgs)
151 jassert (option ==
String (option).trim());
153 for (
int i = 0; i <
arguments.size(); ++i)
173 jassert (isOptionFormat (option));
175 for (
int i = 0; i <
arguments.size(); ++i)
181 if (arg.isShortOption())
184 return arguments.getReference (i + 1).text;
189 if (arg.isLongOption())
190 return arg.getLongOptionValue();
207 return resolveFilename (text);
213 checkFileExists (file);
220 checkFolderExists (file);
246 std::cout << error.errorMessage << std::endl;
247 returnCode = error.returnCode;
255 for (
auto& c : commands)
259 if (optionMustBeFirstArg ? (index == 0) : (index >= 0))
263 if (commandIfNoOthersRecognised >= 0)
264 return &commands[(size_t) commandIfNoOthersRecognised];
271 if (
auto c =
findCommand (args, optionMustBeFirstArg))
274 fail (
"Unrecognised arguments");
285 commands.emplace_back (std::move (c));
290 commandIfNoOthersRecognised = (int) commands.size();
296 Command c { arg, arg,
"Prints the list of commands", {},
299 std::cout << helpMessage << std::endl;
303 if (makeDefaultCommand)
311 addCommand ({ arg, arg,
"Prints the current version number", {},
314 std::cout << versionText << std::endl;
329 int descriptionIndent = 0;
331 for (
auto& c : commands)
333 auto nameAndArgs = exeName +
" " + c.argumentDescription;
334 namesAndArgs.
add (nameAndArgs);
335 descriptionIndent = std::max (descriptionIndent, nameAndArgs.length());
338 descriptionIndent = std::min (descriptionIndent + 1, 40);
340 for (
size_t i = 0; i < commands.size(); ++i)
342 auto nameAndArgs = namesAndArgs[(int) i];
345 if (nameAndArgs.length() > descriptionIndent)
348 std::cout << nameAndArgs.
paddedRight (
' ', descriptionIndent);
350 std::cout << commands[i].shortDescription << std::endl;
353 std::cout << std::endl;
A special array for holding a list of strings.
ArgumentList(String executable, StringArray arguments)
Creates an argument list for a given executable.
bool operator!=(StringRef stringToCompare) const
Compares this argument against a string.
A simple class for holding temporary references to a string literal or String.
Holds a list of command-line arguments, and provides useful methods for searching and operating on th...
String getValueForOption(StringRef option) const
Looks for a given argument and returns either its assigned value (for long options) or the string tha...
Argument operator[](int index) const
Returns one of the arguments.
int size() const
Returns the number of arguments in the list.
File resolveAsExistingFile() const
Resolves this argument as an absolute File, using the current working directory as a base for resolvi...
void trim()
Deletes any whitespace characters from the starts and ends of all the strings.
void removeEmptyStrings(bool removeWhitespaceStrings=true)
Removes empty strings from the array.
Represents a command that can be executed if its command-line arguments are matched.
void addVersionCommand(String versionArgument, String versionText)
Adds a command that will print the given text in response to the "--version" option.
static File getCurrentWorkingDirectory()
Returns the current working directory.
void failIfOptionIsMissing(StringRef option) const
Throws an error unless the given option is found in the argument list.
const std::vector< Command > & getCommands() const
Gives read-only access to the list of registered commands.
File getFileForOption(StringRef option) const
Looks for the value of argument using getValueForOption() and tries to parse that value as a file.
const Command * findCommand(const ArgumentList &, bool optionMustBeFirstArg) const
Looks for the first command in the list which matches the given arguments.
static StringArray fromTokens(StringRef stringToTokenise, bool preserveQuotedStrings)
Returns an array containing the tokens in a given string.
String getLongOptionValue() const
If this argument is a long option with a value, this returns the value.
int indexOfOption(StringRef option) const
Returns the index of the given string if it matches one of the arguments, or -1 if it doesn't.
static int invokeCatchingFailures(std::function< int()> &&functionToCall)
Invokes a function, catching any fail() calls that it might trigger, and handling them by printing th...
File resolveAsFile() const
Resolves this argument as an absolute File, using the current working directory as a base for resolvi...
static String repeatedString(StringRef stringToRepeat, int numberOfTimesToRepeat)
Creates a string which is a version of a string repeated and joined together.
String executableName
The name or path of the executable that was invoked, as it was specified on the command-line.
bool operator==(StringRef stringToCompare) const
Compares this argument against a string.
int findAndRunCommand(const ArgumentList &, bool optionMustBeFirstArg=false) const
Looks for the first command in the list which matches the given arguments, and tries to invoke it.
bool isOption() const
Returns true if this argument starts with one or more dashes.
Represents a local file or directory.
One of the arguments in an ArgumentList.
void addDefaultCommand(Command)
Adds a command to the list, and marks it as one which is invoked if no other command matches.
static void fail(String errorMessage, int returnCode=1)
Throws a failure exception to cause a command-line app to terminate.
String paddedRight(juce_wchar padCharacter, int minimumLength) const
Returns a copy of this string with the specified character repeatedly added to its end until the tota...
File getExistingFileForOption(StringRef option) const
Looks for a file argument using getFileForOption() and fails with a suitable error if the file doesn'...
void addHelpCommand(String helpArgument, String helpMessage, bool makeDefaultCommand)
Adds a help command to the list.
String text
The original text of this argument.
void printCommandList(const ArgumentList &) const
Prints out the list of commands and their short descriptions in a format that's suitable for use as h...
Array< Argument > arguments
The list of arguments (not including the name of the executable that was invoked).
String substring(int startIndex, int endIndex) const
Returns a subsection of the string.
void add(String stringToAdd)
Appends a string at the end of the array.
void checkMinNumArguments(int expectedMinNumberOfArgs) const
Throws an error unless there are at least the given number of arguments.
void addCommand(Command)
Adds a command to the list.
bool containsOption(StringRef option) const
Returns true if the given string matches one of the arguments.
File getExistingFolderForOption(StringRef option) const
Looks for a filename argument using getFileForOption() and fails with a suitable error if the file is...
bool isLongOption() const
Returns true if this argument starts with a double dash.
File resolveAsExistingFolder() const
Resolves a user-supplied folder name into an absolute File, using the current working directory as a ...
bool isShortOption() const
Returns true if this argument starts with a single dash.
String fromLastOccurrenceOf(StringRef substringToFind, bool includeSubStringInResult, bool ignoreCase) const
Returns a section of the string starting from the last occurrence of a given substring.
File getChildFile(StringRef relativeOrAbsolutePath) const
Returns a file that represents a relative (or absolute) sub-path of the current one.