* Fixes#240: Multiple long option names / aliases
* We now use a vector of long option names instead of a single name
* When specifying an option, you can provide multiple names separated by commas, at most one of which may have a length of 1 (not necessarily the first specified name). The length-1 name is the single-hyphen switch (the "short name").
* Hashing uses the first long name
* Option help currently only uses the first long name.
* Fixes#345, fixes#346, regards #340: Put exceptions in a sub-namespace and renamed them accordingly.
* Also fixed some "loose ends" regarding namespace indentation which were missing in PR #350.
* Dropped `required_option_missing` as it is unused.
* Namespace no longer induce indentation
* Namespace opening brace now on same line as namespace name
* Namespace closing brace now has an empty line before it unless the namespace contents were short and with no empty lines
* Namespace closing brace now always followed by a comment with the closed namespace' name
* -Wsuggest-override is not supported by gcc before 5.0
* GCC prior to 5.0 should ignore not only -Wnon-virtual-dtor but also -Weffc++, otherwise non-virtual destructor problems will still be reported.
* The `#pragma GCC diagnostic push' should be used before setting up the temporary environment.
* When using GCC4.8, use manual lexical analysis instead of regular expressions.
* Add gcc4.8 stuff to travis file.
* -Wsuggest-override is not supported by gcc before 5.0
* GCC prior to 5.0 should ignore not only -Wnon-virtual-dtor but also -Weffc++, otherwise non-virtual destructor problems will still be reported.
* The `#pragma GCC diagnostic push' should be used before setting up the temporary environment.
* Improve formatting of help descriptions (#213)
* new function: cxxopts::Option::set_width(size_t width)
Set the size of a helpline.
* new function: cxxopts::Option::set_tab_expansion()
Expand the tabs in descriptions.
The tabsize 8 chars, base is start of description.
The descriptions are not disturbed by adding additional options.
* Allow newlines \n and tabs \t in descriptions.
Other changes (last commit/new commit):
* 1453/1471: size_t for OPTION_LONGEST and OPTION_DESC_GAP.
This prevents the static cast in 2086/2140.
* 2088/2142: in case of small width the value of
"width - longest - OPTION_DEC_GAP" becomes negative.
Because size_t is unsigned the result is a big number, and
the width of the column of the descriptions is not shortened.
* new 2143: When the given width is too small, it is set to
longest + OPTION_DESC_GAP + 10
* new 1570: A long description is broken into multiple lines, and
the iterator lastSpace remembers the begin of the last word.
But when the iterator current reaches the end of line, the whole
string from iterator is printed, which in soome cases is too
long. Thats why one blank is added to the description to trigger
the handling of lastSpace.
Accordingly in 1574/1627 the line is shortened by one char.
* repaired signed/unsigned issue
* changes for unicode
* Cmake Revamp
I needed to do a variety of things to ensure cxxopts worked well in my own project.
I created a new cmake module to abstract a lot of the logic in the main CMakelists.txt, I think it really assists in the readability of the project. Consequently a lot of logic is now written in functions.
I made a lot of the project options off by default unless the project is being built standalone. As a frequent consumer of cmake libraries this is a huge issue. Since examples, tests, installation, etc. aren't things I expect/desired by default when using libraries.
Co-authored-by: Juan Ramos <juanr0911@gmail.com>
Major refactor of the parsing code organisation to improve encapsulation
and not modify the input arguments. The returned result no longer has
pointers into the original option specification.
* Fixes#245:
* Added a new exception type: `option_has_no_value_exception`; throwing it when an option has no value we can cast with `as()`, instead of an `std::domain_error`.
* The `OptionValue` type now holds a pointer to the long option name (in its corresponding key within ParseResults's `m_results` field.