diff options
Diffstat (limited to '')
| -rw-r--r-- | src/optparser.h | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/src/optparser.h b/src/optparser.h index 425bc90..89ef14d 100644 --- a/src/optparser.h +++ b/src/optparser.h | |||
| @@ -12,6 +12,18 @@ | |||
| 12 | namespace Bu | 12 | namespace Bu |
| 13 | { | 13 | { |
| 14 | typedef Bu::Array<Bu::FString> StrArray; | 14 | typedef Bu::Array<Bu::FString> StrArray; |
| 15 | |||
| 16 | /** | ||
| 17 | * POSIX/Gnu style command line parser. Handles long and short options in | ||
| 18 | * a variety of fun and useful ways, along with singal based callbacks and | ||
| 19 | * automatic variable setting. It's pretty easy to use, and very flexible. | ||
| 20 | * | ||
| 21 | * OptParser supports it's own builtin help mechanism which automatically | ||
| 22 | * enumerates the available options and their help in a well formatted and | ||
| 23 | * easy to read way, automatically formatting your help text per option and | ||
| 24 | * allows for addition "help banners" which can be placed wherever you | ||
| 25 | * would like. | ||
| 26 | */ | ||
| 15 | class OptParser | 27 | class OptParser |
| 16 | { | 28 | { |
| 17 | private: | 29 | private: |
| @@ -67,7 +79,6 @@ namespace Bu | |||
| 67 | Bu::FString sOpt; | 79 | Bu::FString sOpt; |
| 68 | Bu::FString sHelp; | 80 | Bu::FString sHelp; |
| 69 | OptionSignal sUsed; | 81 | OptionSignal sUsed; |
| 70 | bool bShortHasParams; | ||
| 71 | _ValueProxy *pProxy; | 82 | _ValueProxy *pProxy; |
| 72 | Bu::FString sOverride; | 83 | Bu::FString sOverride; |
| 73 | }; | 84 | }; |
| @@ -103,7 +114,6 @@ namespace Bu | |||
| 103 | o.cOpt = cOpt; | 114 | o.cOpt = cOpt; |
| 104 | o.sOpt = sOpt; | 115 | o.sOpt = sOpt; |
| 105 | o.pProxy = new ValueProxy<vtype>( var ); | 116 | o.pProxy = new ValueProxy<vtype>( var ); |
| 106 | o.bShortHasParams = true; | ||
| 107 | o.sHelp = sHelp; | 117 | o.sHelp = sHelp; |
| 108 | addOption( o ); | 118 | addOption( o ); |
| 109 | } | 119 | } |
| @@ -148,14 +158,24 @@ namespace Bu | |||
| 148 | void setOverride( const Bu::FString &sOpt, | 158 | void setOverride( const Bu::FString &sOpt, |
| 149 | const Bu::FString &sOverride ); | 159 | const Bu::FString &sOverride ); |
| 150 | 160 | ||
| 151 | // void addOption( char cOpt, const Bu::FString &sOpt, | ||
| 152 | |||
| 153 | void addHelpOption( char c='h', const Bu::FString &s="help", | 161 | void addHelpOption( char c='h', const Bu::FString &s="help", |
| 154 | const Bu::FString &sHelp="This help." ); | 162 | const Bu::FString &sHelp="This help." ); |
| 155 | void addHelpBanner( const Bu::FString &sText, bool bFormatted=true ); | 163 | void addHelpBanner( const Bu::FString &sText, bool bFormatted=true ); |
| 156 | 164 | ||
| 157 | int optHelp( StrArray aParams ); | 165 | int optHelp( StrArray aParams ); |
| 158 | 166 | ||
| 167 | /** | ||
| 168 | * This function is called when an unrecognized option is found, the | ||
| 169 | * default behaviour is to print an error to stdout and exit( 1 ), if | ||
| 170 | * you want to do something different, just override this function. | ||
| 171 | * This is also called by default when something is found that hasn't | ||
| 172 | * been handled by an option, and isn't an option (starts with - or --). | ||
| 173 | * To change this behaviour call | ||
| 174 | */ | ||
| 175 | virtual void optionError( const Bu::FString sOption ); | ||
| 176 | |||
| 177 | void setNonOption( OptionSignal sSignal ); | ||
| 178 | |||
| 159 | private: | 179 | private: |
| 160 | Bu::FString format( const Bu::FString &sIn, int iWidth, int iIndent ); | 180 | Bu::FString format( const Bu::FString &sIn, int iWidth, int iIndent ); |
| 161 | 181 | ||
| @@ -163,6 +183,7 @@ namespace Bu | |||
| 163 | ShortOptionHash hsOption; | 183 | ShortOptionHash hsOption; |
| 164 | LongOptionHash hlOption; | 184 | LongOptionHash hlOption; |
| 165 | BannerList lBanner; | 185 | BannerList lBanner; |
| 186 | OptionSignal sNonOption; | ||
| 166 | }; | 187 | }; |
| 167 | }; | 188 | }; |
| 168 | 189 | ||
