#include "options.hpp" Options::Options( int argc, char** argv ) { validArguments.push_back( Argument( "nodecorations", 'n', true ) ); validArguments.push_back( Argument( "bordersize", 'b', false ) ); validArguments.push_back( Argument( "padding", 'p', false ) ); validArguments.push_back( Argument( "color", 'c', false ) ); validArguments.push_back( Argument( "shader", 'r', false ) ); validArguments.push_back( Argument( "highlight", 'l', true ) ); validArguments.push_back( Argument( "format", 'f', false ) ); validArguments.push_back( Argument( "tolerance", 't', false ) ); validArguments.push_back( Argument( "nokeyboard", 'k', true ) ); validArguments.push_back( Argument( "noopengl", 'o', true ) ); validArguments.push_back( Argument( "help", 'h', true ) ); validArguments.push_back( Argument( "xdisplay", 'x', false ) ); validArguments.push_back( Argument( "version", 'v', true ) ); validArguments.push_back( Argument( "quiet", 'q', true ) ); try { validate( argc, argv ); } catch( ... ) { arguments.clear(); values.clear(); floatingValues.clear(); validArguments[0].isFlagArgument = false; validate( argc, argv ); } } int Options::validateStringOption( int argc, char** argv, int argumentIndex ) { std::string argument = argv[argumentIndex]; unsigned int index = 0; while( index < validArguments.size() ) { Argument& check = validArguments[index]; for( unsigned int i=0;i maxFloatingValues ) { throw new std::invalid_argument("Unexpected floating value `" + argument + "`. Forget to specify an option?" ); } i++; continue; } if ( argument[0] == '-' && argument[1] == '-' ) { i += validateStringOption( argc, argv, i ); continue; } i += validateCharOption( argc, argv, i ); } } bool Options::getFloat( std::string name, char namec, float& found ) { for( unsigned int i=0;i 1 && arguments[i].find("=") == std::string::npos ) { throw new std::invalid_argument("Expected `=` after " + arguments[i]); } std::string::size_type sz; float retvar; try { retvar = std::stoi(values[i],&sz); } catch ( ... ) { throw new std::invalid_argument("Unable to parse " + arguments[i] + "'s value " + values[i] + " as an integer."); } if ( sz != values[i].length() ) { throw new std::invalid_argument("Unable to parse " + arguments[i] + "'s value " + values[i] + " as an integer."); } found = retvar; return true; } } return false; } bool Options::getString( std::string name, char namec, std::string& found ) { for( unsigned int i=0;i