diff options
Diffstat (limited to 'xsd/pregenerated')
| -rw-r--r-- | xsd/pregenerated/xsd/cxx/options.cxx | 739 | ||||
| -rw-r--r-- | xsd/pregenerated/xsd/cxx/options.hxx | 451 | ||||
| -rw-r--r-- | xsd/pregenerated/xsd/cxx/options.ixx | 615 | ||||
| -rw-r--r-- | xsd/pregenerated/xsd/cxx/parser/options.cxx | 776 | ||||
| -rw-r--r-- | xsd/pregenerated/xsd/cxx/parser/options.hxx | 186 | ||||
| -rw-r--r-- | xsd/pregenerated/xsd/cxx/parser/options.ixx | 162 | ||||
| -rw-r--r-- | xsd/pregenerated/xsd/cxx/tree/options.cxx | 1343 | ||||
| -rw-r--r-- | xsd/pregenerated/xsd/cxx/tree/options.hxx | 414 | ||||
| -rw-r--r-- | xsd/pregenerated/xsd/cxx/tree/options.ixx | 504 | ||||
| -rw-r--r-- | xsd/pregenerated/xsd/options.cxx | 1297 | ||||
| -rw-r--r-- | xsd/pregenerated/xsd/options.hxx | 702 | ||||
| -rw-r--r-- | xsd/pregenerated/xsd/options.ixx | 555 | 
12 files changed, 7744 insertions, 0 deletions
| diff --git a/xsd/pregenerated/xsd/cxx/options.cxx b/xsd/pregenerated/xsd/cxx/options.cxx new file mode 100644 index 0000000..9eea3a9 --- /dev/null +++ b/xsd/pregenerated/xsd/cxx/options.cxx @@ -0,0 +1,739 @@ +// -*- C++ -*- +// +// This file was generated by CLI, a command line interface +// compiler for C++. +// + +// Begin prologue. +// +#include <xsd/options-parser.hxx> +// +// End prologue. + +#include <xsd/cxx/options.hxx> + +#include <map> +#include <set> +#include <string> +#include <vector> +#include <utility> +#include <ostream> +#include <sstream> +#include <cstring> + +namespace cli +{ +  template <typename X> +  struct parser +  { +    static void +    parse (X& x, bool& xs, scanner& s) +    { +      using namespace std; + +      const char* o (s.next ()); +      if (s.more ()) +      { +        string v (s.next ()); +        istringstream is (v); +        if (!(is >> x && is.peek () == istringstream::traits_type::eof ())) +          throw invalid_value (o, v); +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <> +  struct parser<bool> +  { +    static void +    parse (bool& x, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +      { +        const char* v (s.next ()); + +        if (std::strcmp (v, "1")    == 0 || +            std::strcmp (v, "true") == 0 || +            std::strcmp (v, "TRUE") == 0 || +            std::strcmp (v, "True") == 0) +          x = true; +        else if (std::strcmp (v, "0")     == 0 || +                 std::strcmp (v, "false") == 0 || +                 std::strcmp (v, "FALSE") == 0 || +                 std::strcmp (v, "False") == 0) +          x = false; +        else +          throw invalid_value (o, v); +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <> +  struct parser<std::string> +  { +    static void +    parse (std::string& x, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +        x = s.next (); +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <typename X> +  struct parser<std::pair<X, std::size_t> > +  { +    static void +    parse (std::pair<X, std::size_t>& x, bool& xs, scanner& s) +    { +      x.second = s.position (); +      parser<X>::parse (x.first, xs, s); +    } +  }; + +  template <typename X> +  struct parser<std::vector<X> > +  { +    static void +    parse (std::vector<X>& c, bool& xs, scanner& s) +    { +      X x; +      bool dummy; +      parser<X>::parse (x, dummy, s); +      c.push_back (x); +      xs = true; +    } +  }; + +  template <typename X, typename C> +  struct parser<std::set<X, C> > +  { +    static void +    parse (std::set<X, C>& c, bool& xs, scanner& s) +    { +      X x; +      bool dummy; +      parser<X>::parse (x, dummy, s); +      c.insert (x); +      xs = true; +    } +  }; + +  template <typename K, typename V, typename C> +  struct parser<std::map<K, V, C> > +  { +    static void +    parse (std::map<K, V, C>& m, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +      { +        std::size_t pos (s.position ()); +        std::string ov (s.next ()); +        std::string::size_type p = ov.find ('='); + +        K k = K (); +        V v = V (); +        std::string kstr (ov, 0, p); +        std::string vstr (ov, (p != std::string::npos ? p + 1 : ov.size ())); + +        int ac (2); +        char* av[] = +        { +          const_cast<char*> (o), +          0 +        }; + +        bool dummy; +        if (!kstr.empty ()) +        { +          av[1] = const_cast<char*> (kstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<K>::parse (k, dummy, s); +        } + +        if (!vstr.empty ()) +        { +          av[1] = const_cast<char*> (vstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<V>::parse (v, dummy, s); +        } + +        m[k] = v; +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <typename K, typename V, typename C> +  struct parser<std::multimap<K, V, C> > +  { +    static void +    parse (std::multimap<K, V, C>& m, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +      { +        std::size_t pos (s.position ()); +        std::string ov (s.next ()); +        std::string::size_type p = ov.find ('='); + +        K k = K (); +        V v = V (); +        std::string kstr (ov, 0, p); +        std::string vstr (ov, (p != std::string::npos ? p + 1 : ov.size ())); + +        int ac (2); +        char* av[] = +        { +          const_cast<char*> (o), +          0 +        }; + +        bool dummy; +        if (!kstr.empty ()) +        { +          av[1] = const_cast<char*> (kstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<K>::parse (k, dummy, s); +        } + +        if (!vstr.empty ()) +        { +          av[1] = const_cast<char*> (vstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<V>::parse (v, dummy, s); +        } + +        m.insert (typename std::multimap<K, V, C>::value_type (k, v)); +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <typename X, typename T, T X::*M> +  void +  thunk (X& x, scanner& s) +  { +    parser<T>::parse (x.*M, s); +  } + +  template <typename X, bool X::*M> +  void +  thunk (X& x, scanner& s) +  { +    s.next (); +    x.*M = true; +  } + +  template <typename X, typename T, T X::*M, bool X::*S> +  void +  thunk (X& x, scanner& s) +  { +    parser<T>::parse (x.*M, x.*S, s); +  } +} + +#include <map> + +namespace CXX +{ +  // options +  // + +  options:: +  options () +  : std_ (cxx_version::cxx11), +    std_specified_ (false), +    char_type_ ("char"), +    char_type_specified_ (false), +    char_encoding_ (), +    char_encoding_specified_ (false), +    output_dir_ (), +    output_dir_specified_ (false), +    generate_inline_ (), +    generate_xml_schema_ (), +    extern_xml_schema_ (), +    extern_xml_schema_specified_ (false), +    namespace_map_ (), +    namespace_map_specified_ (false), +    namespace_regex_ (), +    namespace_regex_specified_ (false), +    namespace_regex_trace_ (), +    reserved_name_ (), +    reserved_name_specified_ (false), +    include_with_brackets_ (), +    include_prefix_ (), +    include_prefix_specified_ (false), +    include_regex_ (), +    include_regex_specified_ (false), +    include_regex_trace_ (), +    guard_prefix_ (), +    guard_prefix_specified_ (false), +    hxx_suffix_ (".hxx"), +    hxx_suffix_specified_ (false), +    ixx_suffix_ (".ixx"), +    ixx_suffix_specified_ (false), +    cxx_suffix_ (".cxx"), +    cxx_suffix_specified_ (false), +    fwd_suffix_ ("-fwd.hxx"), +    fwd_suffix_specified_ (false), +    hxx_regex_ (), +    hxx_regex_specified_ (false), +    ixx_regex_ (), +    ixx_regex_specified_ (false), +    cxx_regex_ (), +    cxx_regex_specified_ (false), +    fwd_regex_ (), +    fwd_regex_specified_ (false), +    hxx_prologue_ (), +    hxx_prologue_specified_ (false), +    ixx_prologue_ (), +    ixx_prologue_specified_ (false), +    cxx_prologue_ (), +    cxx_prologue_specified_ (false), +    fwd_prologue_ (), +    fwd_prologue_specified_ (false), +    prologue_ (), +    prologue_specified_ (false), +    hxx_epilogue_ (), +    hxx_epilogue_specified_ (false), +    ixx_epilogue_ (), +    ixx_epilogue_specified_ (false), +    cxx_epilogue_ (), +    cxx_epilogue_specified_ (false), +    fwd_epilogue_ (), +    fwd_epilogue_specified_ (false), +    epilogue_ (), +    epilogue_specified_ (false), +    hxx_prologue_file_ (), +    hxx_prologue_file_specified_ (false), +    ixx_prologue_file_ (), +    ixx_prologue_file_specified_ (false), +    cxx_prologue_file_ (), +    cxx_prologue_file_specified_ (false), +    fwd_prologue_file_ (), +    fwd_prologue_file_specified_ (false), +    prologue_file_ (), +    prologue_file_specified_ (false), +    hxx_epilogue_file_ (), +    hxx_epilogue_file_specified_ (false), +    ixx_epilogue_file_ (), +    ixx_epilogue_file_specified_ (false), +    cxx_epilogue_file_ (), +    cxx_epilogue_file_specified_ (false), +    fwd_epilogue_file_ (), +    fwd_epilogue_file_specified_ (false), +    epilogue_file_ (), +    epilogue_file_specified_ (false), +    export_symbol_ (), +    export_symbol_specified_ (false), +    export_xml_schema_ (), +    export_maps_ (), +    import_maps_ (), +    generate_dep_ (), +    generate_dep_only_ (), +    dep_phony_ (), +    dep_target_ (), +    dep_target_specified_ (false), +    dep_suffix_ (".d"), +    dep_suffix_specified_ (false), +    dep_file_ (), +    dep_file_specified_ (false), +    dep_regex_ (), +    dep_regex_specified_ (false) +  { +  } + +  ::cli::usage_para options:: +  print_usage (::std::wostream& os, ::cli::usage_para p) +  { +    CLI_POTENTIALLY_UNUSED (os); + +    if (p == ::cli::usage_para::text) +      os << ::std::endl; + +    os << "--std <version>              Specify the C++ standard that the generated code" << ::std::endl +       << "                             should conform to." << ::std::endl; + +    os << "--char-type <type>           Generate code using the provided character <type>" << ::std::endl +       << "                             instead of the default char." << ::std::endl; + +    os << "--char-encoding <enc>        Specify the character encoding that should be used" << ::std::endl +       << "                             in the generated code." << ::std::endl; + +    os << "--output-dir <dir>           Write generated files to <dir> instead of the" << ::std::endl +       << "                             current directory." << ::std::endl; + +    os << "--generate-inline            Generate simple functions inline." << ::std::endl; + +    os << "--generate-xml-schema        Generate a C++ header file as if the schema being" << ::std::endl +       << "                             compiled defines the XML Schema namespace." << ::std::endl; + +    os << "--extern-xml-schema <file>   Include a header file derived from <file> instead" << ::std::endl +       << "                             of generating the XML Schema namespace mapping" << ::std::endl +       << "                             inline." << ::std::endl; + +    os << "--namespace-map <xns>=<cns>  Map XML Schema namespace <xns> to C++ namespace" << ::std::endl +       << "                             <cns>." << ::std::endl; + +    os << "--namespace-regex <regex>    Add <regex> to the list of regular expressions" << ::std::endl +       << "                             used to translate XML Schema namespace names to" << ::std::endl +       << "                             C++ namespace names." << ::std::endl; + +    os << "--namespace-regex-trace      Trace the process of applying regular expressions" << ::std::endl +       << "                             specified with the --namespace-regex option." << ::std::endl; + +    os << "--reserved-name <n>[=<r>]    Add name <n> to the list of names that should not" << ::std::endl +       << "                             be used as identifiers." << ::std::endl; + +    os << "--include-with-brackets      Use angle brackets (<>) instead of quotes (\"\") in" << ::std::endl +       << "                             generated #include directives." << ::std::endl; + +    os << "--include-prefix <prefix>    Add <prefix> to generated #include directive" << ::std::endl +       << "                             paths." << ::std::endl; + +    os << "--include-regex <regex>      Add <regex> to the list of regular expressions" << ::std::endl +       << "                             used to transform #include directive paths." << ::std::endl; + +    os << "--include-regex-trace        Trace the process of applying regular expressions" << ::std::endl +       << "                             specified with the --include-regex option." << ::std::endl; + +    os << "--guard-prefix <prefix>      Add <prefix> to generated header inclusion guards." << ::std::endl; + +    os << "--hxx-suffix <suffix>        Use the provided <suffix> instead of the default" << ::std::endl +       << "                             .hxx to construct the name of the header file." << ::std::endl; + +    os << "--ixx-suffix <suffix>        Use the provided <suffix> instead of the default" << ::std::endl +       << "                             .ixx to construct the name of the inline file." << ::std::endl; + +    os << "--cxx-suffix <suffix>        Use the provided <suffix> instead of the default" << ::std::endl +       << "                             .cxx to construct the name of the source file." << ::std::endl; + +    os << "--fwd-suffix <suffix>        Use the provided <suffix> instead of the default" << ::std::endl +       << "                             -fwd.hxx to construct the name of the forward" << ::std::endl +       << "                             declaration file." << ::std::endl; + +    os << "--hxx-regex <regex>          Use the provided expression to construct the name" << ::std::endl +       << "                             of the header file." << ::std::endl; + +    os << "--ixx-regex <regex>          Use the provided expression to construct the name" << ::std::endl +       << "                             of the inline file." << ::std::endl; + +    os << "--cxx-regex <regex>          Use the provided expression to construct the name" << ::std::endl +       << "                             of the source file." << ::std::endl; + +    os << "--fwd-regex <regex>          Use the provided expression to construct the name" << ::std::endl +       << "                             of the forward declaration file." << ::std::endl; + +    os << "--hxx-prologue <text>        Insert <text> at the beginning of the header file." << ::std::endl; + +    os << "--ixx-prologue <text>        Insert <text> at the beginning of the inline file." << ::std::endl; + +    os << "--cxx-prologue <text>        Insert <text> at the beginning of the source file." << ::std::endl; + +    os << "--fwd-prologue <text>        Insert <text> at the beginning of the forward" << ::std::endl +       << "                             declaration file." << ::std::endl; + +    os << "--prologue <text>            Insert <text> at the beginning of each generated" << ::std::endl +       << "                             file for which there is no file-specific prologue." << ::std::endl; + +    os << "--hxx-epilogue <text>        Insert <text> at the end of the header file." << ::std::endl; + +    os << "--ixx-epilogue <text>        Insert <text> at the end of the inline file." << ::std::endl; + +    os << "--cxx-epilogue <text>        Insert <text> at the end of the source file." << ::std::endl; + +    os << "--fwd-epilogue <text>        Insert <text> at the end of the forward" << ::std::endl +       << "                             declaration file." << ::std::endl; + +    os << "--epilogue <text>            Insert <text> at the end of each generated file" << ::std::endl +       << "                             for which there is no file-specific epilogue." << ::std::endl; + +    os << "--hxx-prologue-file <file>   Insert the content of the <file> at the beginning" << ::std::endl +       << "                             of the header file." << ::std::endl; + +    os << "--ixx-prologue-file <file>   Insert the content of the <file> at the beginning" << ::std::endl +       << "                             of the inline file." << ::std::endl; + +    os << "--cxx-prologue-file <file>   Insert the content of the <file> at the beginning" << ::std::endl +       << "                             of the source file." << ::std::endl; + +    os << "--fwd-prologue-file <file>   Insert the content of the <file> at the beginning" << ::std::endl +       << "                             of the forward declaration file." << ::std::endl; + +    os << "--prologue-file <file>       Insert the content of the <file> at the beginning" << ::std::endl +       << "                             of each generated file for which there is no" << ::std::endl +       << "                             file-specific prologue file." << ::std::endl; + +    os << "--hxx-epilogue-file <file>   Insert the content of the <file> at the end of the" << ::std::endl +       << "                             header file." << ::std::endl; + +    os << "--ixx-epilogue-file <file>   Insert the content of the <file> at the end of the" << ::std::endl +       << "                             inline file." << ::std::endl; + +    os << "--cxx-epilogue-file <file>   Insert the content of the <file> at the end of the" << ::std::endl +       << "                             source file." << ::std::endl; + +    os << "--fwd-epilogue-file <file>   Insert the content of the <file> at the end of the" << ::std::endl +       << "                             forward declaration file." << ::std::endl; + +    os << "--epilogue-file <file>       Insert the content of the <file> at the end of" << ::std::endl +       << "                             each generated file for which there is no" << ::std::endl +       << "                             file-specific epilogue file." << ::std::endl; + +    os << "--export-symbol <symbol>     Insert <symbol> in places where DLL export/import" << ::std::endl +       << "                             control statements" << ::std::endl +       << "                             (__declspec(dllexport/dllimport)) are necessary." << ::std::endl; + +    os << "--export-xml-schema          Export/import types in the XML Schema namespace" << ::std::endl +       << "                             using the export symbol provided with the" << ::std::endl +       << "                             --export-symbol option." << ::std::endl; + +    os << "--export-maps                Export polymorphism support maps from a Win32 DLL" << ::std::endl +       << "                             into which this generated code is placed." << ::std::endl; + +    os << "--import-maps                Import polymorphism support maps to a Win32 DLL or" << ::std::endl +       << "                             executable into which this generated code is" << ::std::endl +       << "                             linked." << ::std::endl; + +    os << "--generate-dep               Generate make dependency information." << ::std::endl; + +    os << "--generate-dep-only          Generate make dependency information only." << ::std::endl; + +    os << "--dep-phony                  Generate phony targets for included/imported" << ::std::endl +       << "                             schema files, causing each to depend on nothing." << ::std::endl; + +    os << "--dep-target <target>        Change the target of the dependency rule." << ::std::endl; + +    os << "--dep-suffix <suffix>        Use <suffix> instead of the default .d to" << ::std::endl +       << "                             construct the name of the dependency file." << ::std::endl; + +    os << "--dep-file <path>            Use <path> as the generated dependency file path" << ::std::endl +       << "                             instead of deriving it from the input file name." << ::std::endl; + +    os << "--dep-regex <regex>          Use the provided expression to construct the name" << ::std::endl +       << "                             of the dependency file." << ::std::endl; + +    p = ::cli::usage_para::option; + +    return p; +  } + +  typedef +  std::map<std::string, void (*) (options&, ::cli::scanner&)> +  _cli_options_map; + +  static _cli_options_map _cli_options_map_; + +  struct _cli_options_map_init +  { +    _cli_options_map_init () +    { +      _cli_options_map_["--std"] = +      &::cli::thunk< options, cxx_version, &options::std_, +        &options::std_specified_ >; +      _cli_options_map_["--char-type"] = +      &::cli::thunk< options, NarrowString, &options::char_type_, +        &options::char_type_specified_ >; +      _cli_options_map_["--char-encoding"] = +      &::cli::thunk< options, NarrowString, &options::char_encoding_, +        &options::char_encoding_specified_ >; +      _cli_options_map_["--output-dir"] = +      &::cli::thunk< options, NarrowString, &options::output_dir_, +        &options::output_dir_specified_ >; +      _cli_options_map_["--generate-inline"] = +      &::cli::thunk< options, &options::generate_inline_ >; +      _cli_options_map_["--generate-xml-schema"] = +      &::cli::thunk< options, &options::generate_xml_schema_ >; +      _cli_options_map_["--extern-xml-schema"] = +      &::cli::thunk< options, NarrowString, &options::extern_xml_schema_, +        &options::extern_xml_schema_specified_ >; +      _cli_options_map_["--namespace-map"] = +      &::cli::thunk< options, NarrowStrings, &options::namespace_map_, +        &options::namespace_map_specified_ >; +      _cli_options_map_["--namespace-regex"] = +      &::cli::thunk< options, NarrowStrings, &options::namespace_regex_, +        &options::namespace_regex_specified_ >; +      _cli_options_map_["--namespace-regex-trace"] = +      &::cli::thunk< options, &options::namespace_regex_trace_ >; +      _cli_options_map_["--reserved-name"] = +      &::cli::thunk< options, NarrowStrings, &options::reserved_name_, +        &options::reserved_name_specified_ >; +      _cli_options_map_["--include-with-brackets"] = +      &::cli::thunk< options, &options::include_with_brackets_ >; +      _cli_options_map_["--include-prefix"] = +      &::cli::thunk< options, NarrowString, &options::include_prefix_, +        &options::include_prefix_specified_ >; +      _cli_options_map_["--include-regex"] = +      &::cli::thunk< options, NarrowStrings, &options::include_regex_, +        &options::include_regex_specified_ >; +      _cli_options_map_["--include-regex-trace"] = +      &::cli::thunk< options, &options::include_regex_trace_ >; +      _cli_options_map_["--guard-prefix"] = +      &::cli::thunk< options, NarrowString, &options::guard_prefix_, +        &options::guard_prefix_specified_ >; +      _cli_options_map_["--hxx-suffix"] = +      &::cli::thunk< options, NarrowString, &options::hxx_suffix_, +        &options::hxx_suffix_specified_ >; +      _cli_options_map_["--ixx-suffix"] = +      &::cli::thunk< options, NarrowString, &options::ixx_suffix_, +        &options::ixx_suffix_specified_ >; +      _cli_options_map_["--cxx-suffix"] = +      &::cli::thunk< options, NarrowString, &options::cxx_suffix_, +        &options::cxx_suffix_specified_ >; +      _cli_options_map_["--fwd-suffix"] = +      &::cli::thunk< options, NarrowString, &options::fwd_suffix_, +        &options::fwd_suffix_specified_ >; +      _cli_options_map_["--hxx-regex"] = +      &::cli::thunk< options, NarrowString, &options::hxx_regex_, +        &options::hxx_regex_specified_ >; +      _cli_options_map_["--ixx-regex"] = +      &::cli::thunk< options, NarrowString, &options::ixx_regex_, +        &options::ixx_regex_specified_ >; +      _cli_options_map_["--cxx-regex"] = +      &::cli::thunk< options, NarrowString, &options::cxx_regex_, +        &options::cxx_regex_specified_ >; +      _cli_options_map_["--fwd-regex"] = +      &::cli::thunk< options, NarrowString, &options::fwd_regex_, +        &options::fwd_regex_specified_ >; +      _cli_options_map_["--hxx-prologue"] = +      &::cli::thunk< options, NarrowStrings, &options::hxx_prologue_, +        &options::hxx_prologue_specified_ >; +      _cli_options_map_["--ixx-prologue"] = +      &::cli::thunk< options, NarrowStrings, &options::ixx_prologue_, +        &options::ixx_prologue_specified_ >; +      _cli_options_map_["--cxx-prologue"] = +      &::cli::thunk< options, NarrowStrings, &options::cxx_prologue_, +        &options::cxx_prologue_specified_ >; +      _cli_options_map_["--fwd-prologue"] = +      &::cli::thunk< options, NarrowStrings, &options::fwd_prologue_, +        &options::fwd_prologue_specified_ >; +      _cli_options_map_["--prologue"] = +      &::cli::thunk< options, NarrowStrings, &options::prologue_, +        &options::prologue_specified_ >; +      _cli_options_map_["--hxx-epilogue"] = +      &::cli::thunk< options, NarrowStrings, &options::hxx_epilogue_, +        &options::hxx_epilogue_specified_ >; +      _cli_options_map_["--ixx-epilogue"] = +      &::cli::thunk< options, NarrowStrings, &options::ixx_epilogue_, +        &options::ixx_epilogue_specified_ >; +      _cli_options_map_["--cxx-epilogue"] = +      &::cli::thunk< options, NarrowStrings, &options::cxx_epilogue_, +        &options::cxx_epilogue_specified_ >; +      _cli_options_map_["--fwd-epilogue"] = +      &::cli::thunk< options, NarrowStrings, &options::fwd_epilogue_, +        &options::fwd_epilogue_specified_ >; +      _cli_options_map_["--epilogue"] = +      &::cli::thunk< options, NarrowStrings, &options::epilogue_, +        &options::epilogue_specified_ >; +      _cli_options_map_["--hxx-prologue-file"] = +      &::cli::thunk< options, NarrowString, &options::hxx_prologue_file_, +        &options::hxx_prologue_file_specified_ >; +      _cli_options_map_["--ixx-prologue-file"] = +      &::cli::thunk< options, NarrowString, &options::ixx_prologue_file_, +        &options::ixx_prologue_file_specified_ >; +      _cli_options_map_["--cxx-prologue-file"] = +      &::cli::thunk< options, NarrowString, &options::cxx_prologue_file_, +        &options::cxx_prologue_file_specified_ >; +      _cli_options_map_["--fwd-prologue-file"] = +      &::cli::thunk< options, NarrowString, &options::fwd_prologue_file_, +        &options::fwd_prologue_file_specified_ >; +      _cli_options_map_["--prologue-file"] = +      &::cli::thunk< options, NarrowString, &options::prologue_file_, +        &options::prologue_file_specified_ >; +      _cli_options_map_["--hxx-epilogue-file"] = +      &::cli::thunk< options, NarrowString, &options::hxx_epilogue_file_, +        &options::hxx_epilogue_file_specified_ >; +      _cli_options_map_["--ixx-epilogue-file"] = +      &::cli::thunk< options, NarrowString, &options::ixx_epilogue_file_, +        &options::ixx_epilogue_file_specified_ >; +      _cli_options_map_["--cxx-epilogue-file"] = +      &::cli::thunk< options, NarrowString, &options::cxx_epilogue_file_, +        &options::cxx_epilogue_file_specified_ >; +      _cli_options_map_["--fwd-epilogue-file"] = +      &::cli::thunk< options, NarrowString, &options::fwd_epilogue_file_, +        &options::fwd_epilogue_file_specified_ >; +      _cli_options_map_["--epilogue-file"] = +      &::cli::thunk< options, NarrowString, &options::epilogue_file_, +        &options::epilogue_file_specified_ >; +      _cli_options_map_["--export-symbol"] = +      &::cli::thunk< options, NarrowString, &options::export_symbol_, +        &options::export_symbol_specified_ >; +      _cli_options_map_["--export-xml-schema"] = +      &::cli::thunk< options, &options::export_xml_schema_ >; +      _cli_options_map_["--export-maps"] = +      &::cli::thunk< options, &options::export_maps_ >; +      _cli_options_map_["--import-maps"] = +      &::cli::thunk< options, &options::import_maps_ >; +      _cli_options_map_["--generate-dep"] = +      &::cli::thunk< options, &options::generate_dep_ >; +      _cli_options_map_["--generate-dep-only"] = +      &::cli::thunk< options, &options::generate_dep_only_ >; +      _cli_options_map_["--dep-phony"] = +      &::cli::thunk< options, &options::dep_phony_ >; +      _cli_options_map_["--dep-target"] = +      &::cli::thunk< options, NarrowStrings, &options::dep_target_, +        &options::dep_target_specified_ >; +      _cli_options_map_["--dep-suffix"] = +      &::cli::thunk< options, NarrowString, &options::dep_suffix_, +        &options::dep_suffix_specified_ >; +      _cli_options_map_["--dep-file"] = +      &::cli::thunk< options, NarrowString, &options::dep_file_, +        &options::dep_file_specified_ >; +      _cli_options_map_["--dep-regex"] = +      &::cli::thunk< options, NarrowString, &options::dep_regex_, +        &options::dep_regex_specified_ >; +    } +  }; + +  static _cli_options_map_init _cli_options_map_init_; + +  bool options:: +  _parse (const char* o, ::cli::scanner& s) +  { +    _cli_options_map::const_iterator i (_cli_options_map_.find (o)); + +    if (i != _cli_options_map_.end ()) +    { +      (*(i->second)) (*this, s); +      return true; +    } + +    // options base +    // +    if (::options::_parse (o, s)) +      return true; + +    return false; +  } +} + +// Begin epilogue. +// +// +// End epilogue. + diff --git a/xsd/pregenerated/xsd/cxx/options.hxx b/xsd/pregenerated/xsd/cxx/options.hxx new file mode 100644 index 0000000..085aa4c --- /dev/null +++ b/xsd/pregenerated/xsd/cxx/options.hxx @@ -0,0 +1,451 @@ +// -*- C++ -*- +// +// This file was generated by CLI, a command line interface +// compiler for C++. +// + +#ifndef XSD_CXX_OPTIONS_HXX +#define XSD_CXX_OPTIONS_HXX + +// Begin prologue. +// +// +// End prologue. + +#include <cstddef> + +#include <xsd/types.hxx> + +#include <xsd/cxx/option-types.hxx> + +#include <xsd/options.hxx> + +namespace CXX +{ +  class options: public ::options +  { +    public: +    // Option accessors. +    // +    const cxx_version& +    std () const; + +    bool +    std_specified () const; + +    const NarrowString& +    char_type () const; + +    bool +    char_type_specified () const; + +    const NarrowString& +    char_encoding () const; + +    bool +    char_encoding_specified () const; + +    const NarrowString& +    output_dir () const; + +    bool +    output_dir_specified () const; + +    const bool& +    generate_inline () const; + +    const bool& +    generate_xml_schema () const; + +    const NarrowString& +    extern_xml_schema () const; + +    bool +    extern_xml_schema_specified () const; + +    const NarrowStrings& +    namespace_map () const; + +    bool +    namespace_map_specified () const; + +    const NarrowStrings& +    namespace_regex () const; + +    bool +    namespace_regex_specified () const; + +    const bool& +    namespace_regex_trace () const; + +    const NarrowStrings& +    reserved_name () const; + +    bool +    reserved_name_specified () const; + +    const bool& +    include_with_brackets () const; + +    const NarrowString& +    include_prefix () const; + +    bool +    include_prefix_specified () const; + +    const NarrowStrings& +    include_regex () const; + +    bool +    include_regex_specified () const; + +    const bool& +    include_regex_trace () const; + +    const NarrowString& +    guard_prefix () const; + +    bool +    guard_prefix_specified () const; + +    const NarrowString& +    hxx_suffix () const; + +    bool +    hxx_suffix_specified () const; + +    const NarrowString& +    ixx_suffix () const; + +    bool +    ixx_suffix_specified () const; + +    const NarrowString& +    cxx_suffix () const; + +    bool +    cxx_suffix_specified () const; + +    const NarrowString& +    fwd_suffix () const; + +    bool +    fwd_suffix_specified () const; + +    const NarrowString& +    hxx_regex () const; + +    bool +    hxx_regex_specified () const; + +    const NarrowString& +    ixx_regex () const; + +    bool +    ixx_regex_specified () const; + +    const NarrowString& +    cxx_regex () const; + +    bool +    cxx_regex_specified () const; + +    const NarrowString& +    fwd_regex () const; + +    bool +    fwd_regex_specified () const; + +    const NarrowStrings& +    hxx_prologue () const; + +    bool +    hxx_prologue_specified () const; + +    const NarrowStrings& +    ixx_prologue () const; + +    bool +    ixx_prologue_specified () const; + +    const NarrowStrings& +    cxx_prologue () const; + +    bool +    cxx_prologue_specified () const; + +    const NarrowStrings& +    fwd_prologue () const; + +    bool +    fwd_prologue_specified () const; + +    const NarrowStrings& +    prologue () const; + +    bool +    prologue_specified () const; + +    const NarrowStrings& +    hxx_epilogue () const; + +    bool +    hxx_epilogue_specified () const; + +    const NarrowStrings& +    ixx_epilogue () const; + +    bool +    ixx_epilogue_specified () const; + +    const NarrowStrings& +    cxx_epilogue () const; + +    bool +    cxx_epilogue_specified () const; + +    const NarrowStrings& +    fwd_epilogue () const; + +    bool +    fwd_epilogue_specified () const; + +    const NarrowStrings& +    epilogue () const; + +    bool +    epilogue_specified () const; + +    const NarrowString& +    hxx_prologue_file () const; + +    bool +    hxx_prologue_file_specified () const; + +    const NarrowString& +    ixx_prologue_file () const; + +    bool +    ixx_prologue_file_specified () const; + +    const NarrowString& +    cxx_prologue_file () const; + +    bool +    cxx_prologue_file_specified () const; + +    const NarrowString& +    fwd_prologue_file () const; + +    bool +    fwd_prologue_file_specified () const; + +    const NarrowString& +    prologue_file () const; + +    bool +    prologue_file_specified () const; + +    const NarrowString& +    hxx_epilogue_file () const; + +    bool +    hxx_epilogue_file_specified () const; + +    const NarrowString& +    ixx_epilogue_file () const; + +    bool +    ixx_epilogue_file_specified () const; + +    const NarrowString& +    cxx_epilogue_file () const; + +    bool +    cxx_epilogue_file_specified () const; + +    const NarrowString& +    fwd_epilogue_file () const; + +    bool +    fwd_epilogue_file_specified () const; + +    const NarrowString& +    epilogue_file () const; + +    bool +    epilogue_file_specified () const; + +    const NarrowString& +    export_symbol () const; + +    bool +    export_symbol_specified () const; + +    const bool& +    export_xml_schema () const; + +    const bool& +    export_maps () const; + +    const bool& +    import_maps () const; + +    const bool& +    generate_dep () const; + +    const bool& +    generate_dep_only () const; + +    const bool& +    dep_phony () const; + +    const NarrowStrings& +    dep_target () const; + +    bool +    dep_target_specified () const; + +    const NarrowString& +    dep_suffix () const; + +    bool +    dep_suffix_specified () const; + +    const NarrowString& +    dep_file () const; + +    bool +    dep_file_specified () const; + +    const NarrowString& +    dep_regex () const; + +    bool +    dep_regex_specified () const; + +    // Print usage information. +    // +    static ::cli::usage_para +    print_usage (::std::wostream&, +                 ::cli::usage_para = ::cli::usage_para::none); + +    // Implementation details. +    // +    protected: +    options (); + +    bool +    _parse (const char*, ::cli::scanner&); + +    public: +    cxx_version std_; +    bool std_specified_; +    NarrowString char_type_; +    bool char_type_specified_; +    NarrowString char_encoding_; +    bool char_encoding_specified_; +    NarrowString output_dir_; +    bool output_dir_specified_; +    bool generate_inline_; +    bool generate_xml_schema_; +    NarrowString extern_xml_schema_; +    bool extern_xml_schema_specified_; +    NarrowStrings namespace_map_; +    bool namespace_map_specified_; +    NarrowStrings namespace_regex_; +    bool namespace_regex_specified_; +    bool namespace_regex_trace_; +    NarrowStrings reserved_name_; +    bool reserved_name_specified_; +    bool include_with_brackets_; +    NarrowString include_prefix_; +    bool include_prefix_specified_; +    NarrowStrings include_regex_; +    bool include_regex_specified_; +    bool include_regex_trace_; +    NarrowString guard_prefix_; +    bool guard_prefix_specified_; +    NarrowString hxx_suffix_; +    bool hxx_suffix_specified_; +    NarrowString ixx_suffix_; +    bool ixx_suffix_specified_; +    NarrowString cxx_suffix_; +    bool cxx_suffix_specified_; +    NarrowString fwd_suffix_; +    bool fwd_suffix_specified_; +    NarrowString hxx_regex_; +    bool hxx_regex_specified_; +    NarrowString ixx_regex_; +    bool ixx_regex_specified_; +    NarrowString cxx_regex_; +    bool cxx_regex_specified_; +    NarrowString fwd_regex_; +    bool fwd_regex_specified_; +    NarrowStrings hxx_prologue_; +    bool hxx_prologue_specified_; +    NarrowStrings ixx_prologue_; +    bool ixx_prologue_specified_; +    NarrowStrings cxx_prologue_; +    bool cxx_prologue_specified_; +    NarrowStrings fwd_prologue_; +    bool fwd_prologue_specified_; +    NarrowStrings prologue_; +    bool prologue_specified_; +    NarrowStrings hxx_epilogue_; +    bool hxx_epilogue_specified_; +    NarrowStrings ixx_epilogue_; +    bool ixx_epilogue_specified_; +    NarrowStrings cxx_epilogue_; +    bool cxx_epilogue_specified_; +    NarrowStrings fwd_epilogue_; +    bool fwd_epilogue_specified_; +    NarrowStrings epilogue_; +    bool epilogue_specified_; +    NarrowString hxx_prologue_file_; +    bool hxx_prologue_file_specified_; +    NarrowString ixx_prologue_file_; +    bool ixx_prologue_file_specified_; +    NarrowString cxx_prologue_file_; +    bool cxx_prologue_file_specified_; +    NarrowString fwd_prologue_file_; +    bool fwd_prologue_file_specified_; +    NarrowString prologue_file_; +    bool prologue_file_specified_; +    NarrowString hxx_epilogue_file_; +    bool hxx_epilogue_file_specified_; +    NarrowString ixx_epilogue_file_; +    bool ixx_epilogue_file_specified_; +    NarrowString cxx_epilogue_file_; +    bool cxx_epilogue_file_specified_; +    NarrowString fwd_epilogue_file_; +    bool fwd_epilogue_file_specified_; +    NarrowString epilogue_file_; +    bool epilogue_file_specified_; +    NarrowString export_symbol_; +    bool export_symbol_specified_; +    bool export_xml_schema_; +    bool export_maps_; +    bool import_maps_; +    bool generate_dep_; +    bool generate_dep_only_; +    bool dep_phony_; +    NarrowStrings dep_target_; +    bool dep_target_specified_; +    NarrowString dep_suffix_; +    bool dep_suffix_specified_; +    NarrowString dep_file_; +    bool dep_file_specified_; +    NarrowString dep_regex_; +    bool dep_regex_specified_; +  }; +} + +#include <xsd/cxx/options.ixx> + +// Begin epilogue. +// +// +// End epilogue. + +#endif // XSD_CXX_OPTIONS_HXX diff --git a/xsd/pregenerated/xsd/cxx/options.ixx b/xsd/pregenerated/xsd/cxx/options.ixx new file mode 100644 index 0000000..8266e31 --- /dev/null +++ b/xsd/pregenerated/xsd/cxx/options.ixx @@ -0,0 +1,615 @@ +// -*- C++ -*- +// +// This file was generated by CLI, a command line interface +// compiler for C++. +// + +// Begin prologue. +// +// +// End prologue. + +namespace CXX +{ +  // options +  // + +  inline const cxx_version& options:: +  std () const +  { +    return this->std_; +  } + +  inline bool options:: +  std_specified () const +  { +    return this->std_specified_; +  } + +  inline const NarrowString& options:: +  char_type () const +  { +    return this->char_type_; +  } + +  inline bool options:: +  char_type_specified () const +  { +    return this->char_type_specified_; +  } + +  inline const NarrowString& options:: +  char_encoding () const +  { +    return this->char_encoding_; +  } + +  inline bool options:: +  char_encoding_specified () const +  { +    return this->char_encoding_specified_; +  } + +  inline const NarrowString& options:: +  output_dir () const +  { +    return this->output_dir_; +  } + +  inline bool options:: +  output_dir_specified () const +  { +    return this->output_dir_specified_; +  } + +  inline const bool& options:: +  generate_inline () const +  { +    return this->generate_inline_; +  } + +  inline const bool& options:: +  generate_xml_schema () const +  { +    return this->generate_xml_schema_; +  } + +  inline const NarrowString& options:: +  extern_xml_schema () const +  { +    return this->extern_xml_schema_; +  } + +  inline bool options:: +  extern_xml_schema_specified () const +  { +    return this->extern_xml_schema_specified_; +  } + +  inline const NarrowStrings& options:: +  namespace_map () const +  { +    return this->namespace_map_; +  } + +  inline bool options:: +  namespace_map_specified () const +  { +    return this->namespace_map_specified_; +  } + +  inline const NarrowStrings& options:: +  namespace_regex () const +  { +    return this->namespace_regex_; +  } + +  inline bool options:: +  namespace_regex_specified () const +  { +    return this->namespace_regex_specified_; +  } + +  inline const bool& options:: +  namespace_regex_trace () const +  { +    return this->namespace_regex_trace_; +  } + +  inline const NarrowStrings& options:: +  reserved_name () const +  { +    return this->reserved_name_; +  } + +  inline bool options:: +  reserved_name_specified () const +  { +    return this->reserved_name_specified_; +  } + +  inline const bool& options:: +  include_with_brackets () const +  { +    return this->include_with_brackets_; +  } + +  inline const NarrowString& options:: +  include_prefix () const +  { +    return this->include_prefix_; +  } + +  inline bool options:: +  include_prefix_specified () const +  { +    return this->include_prefix_specified_; +  } + +  inline const NarrowStrings& options:: +  include_regex () const +  { +    return this->include_regex_; +  } + +  inline bool options:: +  include_regex_specified () const +  { +    return this->include_regex_specified_; +  } + +  inline const bool& options:: +  include_regex_trace () const +  { +    return this->include_regex_trace_; +  } + +  inline const NarrowString& options:: +  guard_prefix () const +  { +    return this->guard_prefix_; +  } + +  inline bool options:: +  guard_prefix_specified () const +  { +    return this->guard_prefix_specified_; +  } + +  inline const NarrowString& options:: +  hxx_suffix () const +  { +    return this->hxx_suffix_; +  } + +  inline bool options:: +  hxx_suffix_specified () const +  { +    return this->hxx_suffix_specified_; +  } + +  inline const NarrowString& options:: +  ixx_suffix () const +  { +    return this->ixx_suffix_; +  } + +  inline bool options:: +  ixx_suffix_specified () const +  { +    return this->ixx_suffix_specified_; +  } + +  inline const NarrowString& options:: +  cxx_suffix () const +  { +    return this->cxx_suffix_; +  } + +  inline bool options:: +  cxx_suffix_specified () const +  { +    return this->cxx_suffix_specified_; +  } + +  inline const NarrowString& options:: +  fwd_suffix () const +  { +    return this->fwd_suffix_; +  } + +  inline bool options:: +  fwd_suffix_specified () const +  { +    return this->fwd_suffix_specified_; +  } + +  inline const NarrowString& options:: +  hxx_regex () const +  { +    return this->hxx_regex_; +  } + +  inline bool options:: +  hxx_regex_specified () const +  { +    return this->hxx_regex_specified_; +  } + +  inline const NarrowString& options:: +  ixx_regex () const +  { +    return this->ixx_regex_; +  } + +  inline bool options:: +  ixx_regex_specified () const +  { +    return this->ixx_regex_specified_; +  } + +  inline const NarrowString& options:: +  cxx_regex () const +  { +    return this->cxx_regex_; +  } + +  inline bool options:: +  cxx_regex_specified () const +  { +    return this->cxx_regex_specified_; +  } + +  inline const NarrowString& options:: +  fwd_regex () const +  { +    return this->fwd_regex_; +  } + +  inline bool options:: +  fwd_regex_specified () const +  { +    return this->fwd_regex_specified_; +  } + +  inline const NarrowStrings& options:: +  hxx_prologue () const +  { +    return this->hxx_prologue_; +  } + +  inline bool options:: +  hxx_prologue_specified () const +  { +    return this->hxx_prologue_specified_; +  } + +  inline const NarrowStrings& options:: +  ixx_prologue () const +  { +    return this->ixx_prologue_; +  } + +  inline bool options:: +  ixx_prologue_specified () const +  { +    return this->ixx_prologue_specified_; +  } + +  inline const NarrowStrings& options:: +  cxx_prologue () const +  { +    return this->cxx_prologue_; +  } + +  inline bool options:: +  cxx_prologue_specified () const +  { +    return this->cxx_prologue_specified_; +  } + +  inline const NarrowStrings& options:: +  fwd_prologue () const +  { +    return this->fwd_prologue_; +  } + +  inline bool options:: +  fwd_prologue_specified () const +  { +    return this->fwd_prologue_specified_; +  } + +  inline const NarrowStrings& options:: +  prologue () const +  { +    return this->prologue_; +  } + +  inline bool options:: +  prologue_specified () const +  { +    return this->prologue_specified_; +  } + +  inline const NarrowStrings& options:: +  hxx_epilogue () const +  { +    return this->hxx_epilogue_; +  } + +  inline bool options:: +  hxx_epilogue_specified () const +  { +    return this->hxx_epilogue_specified_; +  } + +  inline const NarrowStrings& options:: +  ixx_epilogue () const +  { +    return this->ixx_epilogue_; +  } + +  inline bool options:: +  ixx_epilogue_specified () const +  { +    return this->ixx_epilogue_specified_; +  } + +  inline const NarrowStrings& options:: +  cxx_epilogue () const +  { +    return this->cxx_epilogue_; +  } + +  inline bool options:: +  cxx_epilogue_specified () const +  { +    return this->cxx_epilogue_specified_; +  } + +  inline const NarrowStrings& options:: +  fwd_epilogue () const +  { +    return this->fwd_epilogue_; +  } + +  inline bool options:: +  fwd_epilogue_specified () const +  { +    return this->fwd_epilogue_specified_; +  } + +  inline const NarrowStrings& options:: +  epilogue () const +  { +    return this->epilogue_; +  } + +  inline bool options:: +  epilogue_specified () const +  { +    return this->epilogue_specified_; +  } + +  inline const NarrowString& options:: +  hxx_prologue_file () const +  { +    return this->hxx_prologue_file_; +  } + +  inline bool options:: +  hxx_prologue_file_specified () const +  { +    return this->hxx_prologue_file_specified_; +  } + +  inline const NarrowString& options:: +  ixx_prologue_file () const +  { +    return this->ixx_prologue_file_; +  } + +  inline bool options:: +  ixx_prologue_file_specified () const +  { +    return this->ixx_prologue_file_specified_; +  } + +  inline const NarrowString& options:: +  cxx_prologue_file () const +  { +    return this->cxx_prologue_file_; +  } + +  inline bool options:: +  cxx_prologue_file_specified () const +  { +    return this->cxx_prologue_file_specified_; +  } + +  inline const NarrowString& options:: +  fwd_prologue_file () const +  { +    return this->fwd_prologue_file_; +  } + +  inline bool options:: +  fwd_prologue_file_specified () const +  { +    return this->fwd_prologue_file_specified_; +  } + +  inline const NarrowString& options:: +  prologue_file () const +  { +    return this->prologue_file_; +  } + +  inline bool options:: +  prologue_file_specified () const +  { +    return this->prologue_file_specified_; +  } + +  inline const NarrowString& options:: +  hxx_epilogue_file () const +  { +    return this->hxx_epilogue_file_; +  } + +  inline bool options:: +  hxx_epilogue_file_specified () const +  { +    return this->hxx_epilogue_file_specified_; +  } + +  inline const NarrowString& options:: +  ixx_epilogue_file () const +  { +    return this->ixx_epilogue_file_; +  } + +  inline bool options:: +  ixx_epilogue_file_specified () const +  { +    return this->ixx_epilogue_file_specified_; +  } + +  inline const NarrowString& options:: +  cxx_epilogue_file () const +  { +    return this->cxx_epilogue_file_; +  } + +  inline bool options:: +  cxx_epilogue_file_specified () const +  { +    return this->cxx_epilogue_file_specified_; +  } + +  inline const NarrowString& options:: +  fwd_epilogue_file () const +  { +    return this->fwd_epilogue_file_; +  } + +  inline bool options:: +  fwd_epilogue_file_specified () const +  { +    return this->fwd_epilogue_file_specified_; +  } + +  inline const NarrowString& options:: +  epilogue_file () const +  { +    return this->epilogue_file_; +  } + +  inline bool options:: +  epilogue_file_specified () const +  { +    return this->epilogue_file_specified_; +  } + +  inline const NarrowString& options:: +  export_symbol () const +  { +    return this->export_symbol_; +  } + +  inline bool options:: +  export_symbol_specified () const +  { +    return this->export_symbol_specified_; +  } + +  inline const bool& options:: +  export_xml_schema () const +  { +    return this->export_xml_schema_; +  } + +  inline const bool& options:: +  export_maps () const +  { +    return this->export_maps_; +  } + +  inline const bool& options:: +  import_maps () const +  { +    return this->import_maps_; +  } + +  inline const bool& options:: +  generate_dep () const +  { +    return this->generate_dep_; +  } + +  inline const bool& options:: +  generate_dep_only () const +  { +    return this->generate_dep_only_; +  } + +  inline const bool& options:: +  dep_phony () const +  { +    return this->dep_phony_; +  } + +  inline const NarrowStrings& options:: +  dep_target () const +  { +    return this->dep_target_; +  } + +  inline bool options:: +  dep_target_specified () const +  { +    return this->dep_target_specified_; +  } + +  inline const NarrowString& options:: +  dep_suffix () const +  { +    return this->dep_suffix_; +  } + +  inline bool options:: +  dep_suffix_specified () const +  { +    return this->dep_suffix_specified_; +  } + +  inline const NarrowString& options:: +  dep_file () const +  { +    return this->dep_file_; +  } + +  inline bool options:: +  dep_file_specified () const +  { +    return this->dep_file_specified_; +  } + +  inline const NarrowString& options:: +  dep_regex () const +  { +    return this->dep_regex_; +  } + +  inline bool options:: +  dep_regex_specified () const +  { +    return this->dep_regex_specified_; +  } +} + +// Begin epilogue. +// +// +// End epilogue. diff --git a/xsd/pregenerated/xsd/cxx/parser/options.cxx b/xsd/pregenerated/xsd/cxx/parser/options.cxx new file mode 100644 index 0000000..60667ac --- /dev/null +++ b/xsd/pregenerated/xsd/cxx/parser/options.cxx @@ -0,0 +1,776 @@ +// -*- C++ -*- +// +// This file was generated by CLI, a command line interface +// compiler for C++. +// + +// Begin prologue. +// +#include <xsd/options-parser.hxx> +// +// End prologue. + +#include <xsd/cxx/parser/options.hxx> + +#include <map> +#include <set> +#include <string> +#include <vector> +#include <utility> +#include <ostream> +#include <sstream> +#include <cstring> + +namespace cli +{ +  template <typename X> +  struct parser +  { +    static void +    parse (X& x, bool& xs, scanner& s) +    { +      using namespace std; + +      const char* o (s.next ()); +      if (s.more ()) +      { +        string v (s.next ()); +        istringstream is (v); +        if (!(is >> x && is.peek () == istringstream::traits_type::eof ())) +          throw invalid_value (o, v); +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <> +  struct parser<bool> +  { +    static void +    parse (bool& x, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +      { +        const char* v (s.next ()); + +        if (std::strcmp (v, "1")    == 0 || +            std::strcmp (v, "true") == 0 || +            std::strcmp (v, "TRUE") == 0 || +            std::strcmp (v, "True") == 0) +          x = true; +        else if (std::strcmp (v, "0")     == 0 || +                 std::strcmp (v, "false") == 0 || +                 std::strcmp (v, "FALSE") == 0 || +                 std::strcmp (v, "False") == 0) +          x = false; +        else +          throw invalid_value (o, v); +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <> +  struct parser<std::string> +  { +    static void +    parse (std::string& x, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +        x = s.next (); +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <typename X> +  struct parser<std::pair<X, std::size_t> > +  { +    static void +    parse (std::pair<X, std::size_t>& x, bool& xs, scanner& s) +    { +      x.second = s.position (); +      parser<X>::parse (x.first, xs, s); +    } +  }; + +  template <typename X> +  struct parser<std::vector<X> > +  { +    static void +    parse (std::vector<X>& c, bool& xs, scanner& s) +    { +      X x; +      bool dummy; +      parser<X>::parse (x, dummy, s); +      c.push_back (x); +      xs = true; +    } +  }; + +  template <typename X, typename C> +  struct parser<std::set<X, C> > +  { +    static void +    parse (std::set<X, C>& c, bool& xs, scanner& s) +    { +      X x; +      bool dummy; +      parser<X>::parse (x, dummy, s); +      c.insert (x); +      xs = true; +    } +  }; + +  template <typename K, typename V, typename C> +  struct parser<std::map<K, V, C> > +  { +    static void +    parse (std::map<K, V, C>& m, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +      { +        std::size_t pos (s.position ()); +        std::string ov (s.next ()); +        std::string::size_type p = ov.find ('='); + +        K k = K (); +        V v = V (); +        std::string kstr (ov, 0, p); +        std::string vstr (ov, (p != std::string::npos ? p + 1 : ov.size ())); + +        int ac (2); +        char* av[] = +        { +          const_cast<char*> (o), +          0 +        }; + +        bool dummy; +        if (!kstr.empty ()) +        { +          av[1] = const_cast<char*> (kstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<K>::parse (k, dummy, s); +        } + +        if (!vstr.empty ()) +        { +          av[1] = const_cast<char*> (vstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<V>::parse (v, dummy, s); +        } + +        m[k] = v; +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <typename K, typename V, typename C> +  struct parser<std::multimap<K, V, C> > +  { +    static void +    parse (std::multimap<K, V, C>& m, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +      { +        std::size_t pos (s.position ()); +        std::string ov (s.next ()); +        std::string::size_type p = ov.find ('='); + +        K k = K (); +        V v = V (); +        std::string kstr (ov, 0, p); +        std::string vstr (ov, (p != std::string::npos ? p + 1 : ov.size ())); + +        int ac (2); +        char* av[] = +        { +          const_cast<char*> (o), +          0 +        }; + +        bool dummy; +        if (!kstr.empty ()) +        { +          av[1] = const_cast<char*> (kstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<K>::parse (k, dummy, s); +        } + +        if (!vstr.empty ()) +        { +          av[1] = const_cast<char*> (vstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<V>::parse (v, dummy, s); +        } + +        m.insert (typename std::multimap<K, V, C>::value_type (k, v)); +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <typename X, typename T, T X::*M> +  void +  thunk (X& x, scanner& s) +  { +    parser<T>::parse (x.*M, s); +  } + +  template <typename X, bool X::*M> +  void +  thunk (X& x, scanner& s) +  { +    s.next (); +    x.*M = true; +  } + +  template <typename X, typename T, T X::*M, bool X::*S> +  void +  thunk (X& x, scanner& s) +  { +    parser<T>::parse (x.*M, x.*S, s); +  } +} + +#include <map> + +namespace CXX +{ +  namespace Parser +  { +    // options +    // + +    options:: +    options () +    : type_map_ (), +      type_map_specified_ (false), +      xml_parser_ ("xerces"), +      xml_parser_specified_ (false), +      generate_validation_ (), +      suppress_validation_ (), +      generate_polymorphic_ (), +      generate_noop_impl_ (), +      generate_print_impl_ (), +      generate_test_driver_ (), +      force_overwrite_ (), +      root_element_first_ (), +      root_element_last_ (), +      root_element_ (), +      root_element_specified_ (false), +      skel_type_suffix_ ("_pskel"), +      skel_type_suffix_specified_ (false), +      skel_file_suffix_ ("-pskel"), +      skel_file_suffix_specified_ (false), +      impl_type_suffix_ ("_pimpl"), +      impl_type_suffix_specified_ (false), +      impl_file_suffix_ ("-pimpl"), +      impl_file_suffix_specified_ (false) +    { +    } + +    options:: +    options (int& argc, +             char** argv, +             bool erase, +             ::cli::unknown_mode opt, +             ::cli::unknown_mode arg) +    : type_map_ (), +      type_map_specified_ (false), +      xml_parser_ ("xerces"), +      xml_parser_specified_ (false), +      generate_validation_ (), +      suppress_validation_ (), +      generate_polymorphic_ (), +      generate_noop_impl_ (), +      generate_print_impl_ (), +      generate_test_driver_ (), +      force_overwrite_ (), +      root_element_first_ (), +      root_element_last_ (), +      root_element_ (), +      root_element_specified_ (false), +      skel_type_suffix_ ("_pskel"), +      skel_type_suffix_specified_ (false), +      skel_file_suffix_ ("-pskel"), +      skel_file_suffix_specified_ (false), +      impl_type_suffix_ ("_pimpl"), +      impl_type_suffix_specified_ (false), +      impl_file_suffix_ ("-pimpl"), +      impl_file_suffix_specified_ (false) +    { +      ::cli::argv_scanner s (argc, argv, erase); +      _parse (s, opt, arg); +    } + +    options:: +    options (int start, +             int& argc, +             char** argv, +             bool erase, +             ::cli::unknown_mode opt, +             ::cli::unknown_mode arg) +    : type_map_ (), +      type_map_specified_ (false), +      xml_parser_ ("xerces"), +      xml_parser_specified_ (false), +      generate_validation_ (), +      suppress_validation_ (), +      generate_polymorphic_ (), +      generate_noop_impl_ (), +      generate_print_impl_ (), +      generate_test_driver_ (), +      force_overwrite_ (), +      root_element_first_ (), +      root_element_last_ (), +      root_element_ (), +      root_element_specified_ (false), +      skel_type_suffix_ ("_pskel"), +      skel_type_suffix_specified_ (false), +      skel_file_suffix_ ("-pskel"), +      skel_file_suffix_specified_ (false), +      impl_type_suffix_ ("_pimpl"), +      impl_type_suffix_specified_ (false), +      impl_file_suffix_ ("-pimpl"), +      impl_file_suffix_specified_ (false) +    { +      ::cli::argv_scanner s (start, argc, argv, erase); +      _parse (s, opt, arg); +    } + +    options:: +    options (int& argc, +             char** argv, +             int& end, +             bool erase, +             ::cli::unknown_mode opt, +             ::cli::unknown_mode arg) +    : type_map_ (), +      type_map_specified_ (false), +      xml_parser_ ("xerces"), +      xml_parser_specified_ (false), +      generate_validation_ (), +      suppress_validation_ (), +      generate_polymorphic_ (), +      generate_noop_impl_ (), +      generate_print_impl_ (), +      generate_test_driver_ (), +      force_overwrite_ (), +      root_element_first_ (), +      root_element_last_ (), +      root_element_ (), +      root_element_specified_ (false), +      skel_type_suffix_ ("_pskel"), +      skel_type_suffix_specified_ (false), +      skel_file_suffix_ ("-pskel"), +      skel_file_suffix_specified_ (false), +      impl_type_suffix_ ("_pimpl"), +      impl_type_suffix_specified_ (false), +      impl_file_suffix_ ("-pimpl"), +      impl_file_suffix_specified_ (false) +    { +      ::cli::argv_scanner s (argc, argv, erase); +      _parse (s, opt, arg); +      end = s.end (); +    } + +    options:: +    options (int start, +             int& argc, +             char** argv, +             int& end, +             bool erase, +             ::cli::unknown_mode opt, +             ::cli::unknown_mode arg) +    : type_map_ (), +      type_map_specified_ (false), +      xml_parser_ ("xerces"), +      xml_parser_specified_ (false), +      generate_validation_ (), +      suppress_validation_ (), +      generate_polymorphic_ (), +      generate_noop_impl_ (), +      generate_print_impl_ (), +      generate_test_driver_ (), +      force_overwrite_ (), +      root_element_first_ (), +      root_element_last_ (), +      root_element_ (), +      root_element_specified_ (false), +      skel_type_suffix_ ("_pskel"), +      skel_type_suffix_specified_ (false), +      skel_file_suffix_ ("-pskel"), +      skel_file_suffix_specified_ (false), +      impl_type_suffix_ ("_pimpl"), +      impl_type_suffix_specified_ (false), +      impl_file_suffix_ ("-pimpl"), +      impl_file_suffix_specified_ (false) +    { +      ::cli::argv_scanner s (start, argc, argv, erase); +      _parse (s, opt, arg); +      end = s.end (); +    } + +    options:: +    options (::cli::scanner& s, +             ::cli::unknown_mode opt, +             ::cli::unknown_mode arg) +    : type_map_ (), +      type_map_specified_ (false), +      xml_parser_ ("xerces"), +      xml_parser_specified_ (false), +      generate_validation_ (), +      suppress_validation_ (), +      generate_polymorphic_ (), +      generate_noop_impl_ (), +      generate_print_impl_ (), +      generate_test_driver_ (), +      force_overwrite_ (), +      root_element_first_ (), +      root_element_last_ (), +      root_element_ (), +      root_element_specified_ (false), +      skel_type_suffix_ ("_pskel"), +      skel_type_suffix_specified_ (false), +      skel_file_suffix_ ("-pskel"), +      skel_file_suffix_specified_ (false), +      impl_type_suffix_ ("_pimpl"), +      impl_type_suffix_specified_ (false), +      impl_file_suffix_ ("-pimpl"), +      impl_file_suffix_specified_ (false) +    { +      _parse (s, opt, arg); +    } + +    ::cli::usage_para options:: +    print_usage (::std::wostream& os, ::cli::usage_para p) +    { +      CLI_POTENTIALLY_UNUSED (os); + +      if (p == ::cli::usage_para::text) +        os << ::std::endl; + +      os << "--type-map <mapfile>         Read XML Schema to C++ type mapping information" << ::std::endl +         << "                             from <mapfile>." << ::std::endl; + +      os << "--xml-parser <parser>        Use <parser> as the underlying XML parser." << ::std::endl; + +      os << "--generate-validation        Generate validation code." << ::std::endl; + +      os << "--suppress-validation        Suppress the generation of validation code." << ::std::endl; + +      os << "--generate-polymorphic       Generate polymorphism-aware code." << ::std::endl; + +      os << "--generate-noop-impl         Generate a sample parser implementation that does" << ::std::endl +         << "                             nothing (no operation)." << ::std::endl; + +      os << "--generate-print-impl        Generate a sample parser implementation that" << ::std::endl +         << "                             prints the XML data to STDOUT." << ::std::endl; + +      os << "--generate-test-driver       Generate a test driver for the sample parser" << ::std::endl +         << "                             implementation." << ::std::endl; + +      os << "--force-overwrite            Force overwriting of the existing implementation" << ::std::endl +         << "                             and test driver files." << ::std::endl; + +      os << "--root-element-first         Indicate that the first global element is the" << ::std::endl +         << "                             document root." << ::std::endl; + +      os << "--root-element-last          Indicate that the last global element is the" << ::std::endl +         << "                             document root." << ::std::endl; + +      os << "--root-element <element>     Indicate that <element> is the document root." << ::std::endl; + +      os << "--skel-type-suffix <suffix>  Use the provided <suffix> instead of the default" << ::std::endl +         << "                             _pskel to construct the names of the generated" << ::std::endl +         << "                             parser skeletons." << ::std::endl; + +      os << "--skel-file-suffix <suffix>  Use the provided <suffix> instead of the default" << ::std::endl +         << "                             -pskel to construct the names of the generated" << ::std::endl +         << "                             parser skeleton files." << ::std::endl; + +      os << "--impl-type-suffix <suffix>  Use the provided <suffix> instead of the default" << ::std::endl +         << "                             _pimpl to construct the names of the parser" << ::std::endl +         << "                             implementations for the built-in XML Schema types" << ::std::endl +         << "                             as well as sample parser implementations." << ::std::endl; + +      os << "--impl-file-suffix <suffix>  Use the provided <suffix> instead of the default" << ::std::endl +         << "                             -pimpl to construct the names of the generated" << ::std::endl +         << "                             sample parser implementation files." << ::std::endl; + +      p = ::cli::usage_para::option; + +      return p; +    } + +    typedef +    std::map<std::string, void (*) (options&, ::cli::scanner&)> +    _cli_options_map; + +    static _cli_options_map _cli_options_map_; + +    struct _cli_options_map_init +    { +      _cli_options_map_init () +      { +        _cli_options_map_["--type-map"] = +        &::cli::thunk< options, NarrowStrings, &options::type_map_, +          &options::type_map_specified_ >; +        _cli_options_map_["--xml-parser"] = +        &::cli::thunk< options, NarrowString, &options::xml_parser_, +          &options::xml_parser_specified_ >; +        _cli_options_map_["--generate-validation"] = +        &::cli::thunk< options, &options::generate_validation_ >; +        _cli_options_map_["--suppress-validation"] = +        &::cli::thunk< options, &options::suppress_validation_ >; +        _cli_options_map_["--generate-polymorphic"] = +        &::cli::thunk< options, &options::generate_polymorphic_ >; +        _cli_options_map_["--generate-noop-impl"] = +        &::cli::thunk< options, &options::generate_noop_impl_ >; +        _cli_options_map_["--generate-print-impl"] = +        &::cli::thunk< options, &options::generate_print_impl_ >; +        _cli_options_map_["--generate-test-driver"] = +        &::cli::thunk< options, &options::generate_test_driver_ >; +        _cli_options_map_["--force-overwrite"] = +        &::cli::thunk< options, &options::force_overwrite_ >; +        _cli_options_map_["--root-element-first"] = +        &::cli::thunk< options, &options::root_element_first_ >; +        _cli_options_map_["--root-element-last"] = +        &::cli::thunk< options, &options::root_element_last_ >; +        _cli_options_map_["--root-element"] = +        &::cli::thunk< options, NarrowString, &options::root_element_, +          &options::root_element_specified_ >; +        _cli_options_map_["--skel-type-suffix"] = +        &::cli::thunk< options, NarrowString, &options::skel_type_suffix_, +          &options::skel_type_suffix_specified_ >; +        _cli_options_map_["--skel-file-suffix"] = +        &::cli::thunk< options, NarrowString, &options::skel_file_suffix_, +          &options::skel_file_suffix_specified_ >; +        _cli_options_map_["--impl-type-suffix"] = +        &::cli::thunk< options, NarrowString, &options::impl_type_suffix_, +          &options::impl_type_suffix_specified_ >; +        _cli_options_map_["--impl-file-suffix"] = +        &::cli::thunk< options, NarrowString, &options::impl_file_suffix_, +          &options::impl_file_suffix_specified_ >; +      } +    }; + +    static _cli_options_map_init _cli_options_map_init_; + +    bool options:: +    _parse (const char* o, ::cli::scanner& s) +    { +      _cli_options_map::const_iterator i (_cli_options_map_.find (o)); + +      if (i != _cli_options_map_.end ()) +      { +        (*(i->second)) (*this, s); +        return true; +      } + +      // options base +      // +      if (::CXX::options::_parse (o, s)) +        return true; + +      return false; +    } + +    bool options:: +    _parse (::cli::scanner& s, +            ::cli::unknown_mode opt_mode, +            ::cli::unknown_mode arg_mode) +    { +      // Can't skip combined flags (--no-combined-flags). +      // +      assert (opt_mode != ::cli::unknown_mode::skip); + +      bool r = false; +      bool opt = true; + +      while (s.more ()) +      { +        const char* o = s.peek (); + +        if (std::strcmp (o, "--") == 0) +        { +          opt = false; +          s.skip (); +          r = true; +          continue; +        } + +        if (opt) +        { +          if (_parse (o, s)) +          { +            r = true; +            continue; +          } + +          if (std::strncmp (o, "-", 1) == 0 && o[1] != '\0') +          { +            // Handle combined option values. +            // +            std::string co; +            if (const char* v = std::strchr (o, '=')) +            { +              co.assign (o, 0, v - o); +              ++v; + +              int ac (2); +              char* av[] = +              { +                const_cast<char*> (co.c_str ()), +                const_cast<char*> (v) +              }; + +              ::cli::argv_scanner ns (0, ac, av); + +              if (_parse (co.c_str (), ns)) +              { +                // Parsed the option but not its value? +                // +                if (ns.end () != 2) +                  throw ::cli::invalid_value (co, v); + +                s.next (); +                r = true; +                continue; +              } +              else +              { +                // Set the unknown option and fall through. +                // +                o = co.c_str (); +              } +            } + +            // Handle combined flags. +            // +            char cf[3]; +            { +              const char* p = o + 1; +              for (; *p != '\0'; ++p) +              { +                if (!((*p >= 'a' && *p <= 'z') || +                      (*p >= 'A' && *p <= 'Z') || +                      (*p >= '0' && *p <= '9'))) +                  break; +              } + +              if (*p == '\0') +              { +                for (p = o + 1; *p != '\0'; ++p) +                { +                  std::strcpy (cf, "-"); +                  cf[1] = *p; +                  cf[2] = '\0'; + +                  int ac (1); +                  char* av[] = +                  { +                    cf +                  }; + +                  ::cli::argv_scanner ns (0, ac, av); + +                  if (!_parse (cf, ns)) +                    break; +                } + +                if (*p == '\0') +                { +                  // All handled. +                  // +                  s.next (); +                  r = true; +                  continue; +                } +                else +                { +                  // Set the unknown option and fall through. +                  // +                  o = cf; +                } +              } +            } + +            switch (opt_mode) +            { +              case ::cli::unknown_mode::skip: +              { +                s.skip (); +                r = true; +                continue; +              } +              case ::cli::unknown_mode::stop: +              { +                break; +              } +              case ::cli::unknown_mode::fail: +              { +                throw ::cli::unknown_option (o); +              } +            } + +            break; +          } +        } + +        switch (arg_mode) +        { +          case ::cli::unknown_mode::skip: +          { +            s.skip (); +            r = true; +            continue; +          } +          case ::cli::unknown_mode::stop: +          { +            break; +          } +          case ::cli::unknown_mode::fail: +          { +            throw ::cli::unknown_argument (o); +          } +        } + +        break; +      } + +      return r; +    } +  } +} + +// Begin epilogue. +// +// +// End epilogue. + diff --git a/xsd/pregenerated/xsd/cxx/parser/options.hxx b/xsd/pregenerated/xsd/cxx/parser/options.hxx new file mode 100644 index 0000000..03b67fd --- /dev/null +++ b/xsd/pregenerated/xsd/cxx/parser/options.hxx @@ -0,0 +1,186 @@ +// -*- C++ -*- +// +// This file was generated by CLI, a command line interface +// compiler for C++. +// + +#ifndef XSD_CXX_PARSER_OPTIONS_HXX +#define XSD_CXX_PARSER_OPTIONS_HXX + +// Begin prologue. +// +// +// End prologue. + +#include <cstddef> + +#include <xsd/types.hxx> + +#include <xsd/cxx/options.hxx> + +namespace CXX +{ +  namespace Parser +  { +    class options: public ::CXX::options +    { +      public: +      options (); + +      options (int& argc, +               char** argv, +               bool erase = false, +               ::cli::unknown_mode option = ::cli::unknown_mode::fail, +               ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +      options (int start, +               int& argc, +               char** argv, +               bool erase = false, +               ::cli::unknown_mode option = ::cli::unknown_mode::fail, +               ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +      options (int& argc, +               char** argv, +               int& end, +               bool erase = false, +               ::cli::unknown_mode option = ::cli::unknown_mode::fail, +               ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +      options (int start, +               int& argc, +               char** argv, +               int& end, +               bool erase = false, +               ::cli::unknown_mode option = ::cli::unknown_mode::fail, +               ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +      options (::cli::scanner&, +               ::cli::unknown_mode option = ::cli::unknown_mode::fail, +               ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +      // Option accessors. +      // +      const NarrowStrings& +      type_map () const; + +      bool +      type_map_specified () const; + +      const NarrowString& +      xml_parser () const; + +      bool +      xml_parser_specified () const; + +      const bool& +      generate_validation () const; + +      const bool& +      suppress_validation () const; + +      const bool& +      generate_polymorphic () const; + +      const bool& +      generate_noop_impl () const; + +      const bool& +      generate_print_impl () const; + +      const bool& +      generate_test_driver () const; + +      const bool& +      force_overwrite () const; + +      const bool& +      root_element_first () const; + +      const bool& +      root_element_last () const; + +      const NarrowString& +      root_element () const; + +      bool +      root_element_specified () const; + +      const NarrowString& +      skel_type_suffix () const; + +      bool +      skel_type_suffix_specified () const; + +      const NarrowString& +      skel_file_suffix () const; + +      bool +      skel_file_suffix_specified () const; + +      const NarrowString& +      impl_type_suffix () const; + +      bool +      impl_type_suffix_specified () const; + +      const NarrowString& +      impl_file_suffix () const; + +      bool +      impl_file_suffix_specified () const; + +      // Print usage information. +      // +      static ::cli::usage_para +      print_usage (::std::wostream&, +                   ::cli::usage_para = ::cli::usage_para::none); + +      // Implementation details. +      // +      protected: +      bool +      _parse (const char*, ::cli::scanner&); + +      private: +      bool +      _parse (::cli::scanner&, +              ::cli::unknown_mode option, +              ::cli::unknown_mode argument); + +      public: +      NarrowStrings type_map_; +      bool type_map_specified_; +      NarrowString xml_parser_; +      bool xml_parser_specified_; +      bool generate_validation_; +      bool suppress_validation_; +      bool generate_polymorphic_; +      bool generate_noop_impl_; +      bool generate_print_impl_; +      bool generate_test_driver_; +      bool force_overwrite_; +      bool root_element_first_; +      bool root_element_last_; +      NarrowString root_element_; +      bool root_element_specified_; +      NarrowString skel_type_suffix_; +      bool skel_type_suffix_specified_; +      NarrowString skel_file_suffix_; +      bool skel_file_suffix_specified_; +      NarrowString impl_type_suffix_; +      bool impl_type_suffix_specified_; +      NarrowString impl_file_suffix_; +      bool impl_file_suffix_specified_; +    }; +  } +} + +#include <xsd/cxx/parser/options.ixx> + +// Begin epilogue. +// +// +// End epilogue. + +#endif // XSD_CXX_PARSER_OPTIONS_HXX diff --git a/xsd/pregenerated/xsd/cxx/parser/options.ixx b/xsd/pregenerated/xsd/cxx/parser/options.ixx new file mode 100644 index 0000000..64c00c5 --- /dev/null +++ b/xsd/pregenerated/xsd/cxx/parser/options.ixx @@ -0,0 +1,162 @@ +// -*- C++ -*- +// +// This file was generated by CLI, a command line interface +// compiler for C++. +// + +// Begin prologue. +// +// +// End prologue. + +namespace CXX +{ +  namespace Parser +  { +    // options +    // + +    inline const NarrowStrings& options:: +    type_map () const +    { +      return this->type_map_; +    } + +    inline bool options:: +    type_map_specified () const +    { +      return this->type_map_specified_; +    } + +    inline const NarrowString& options:: +    xml_parser () const +    { +      return this->xml_parser_; +    } + +    inline bool options:: +    xml_parser_specified () const +    { +      return this->xml_parser_specified_; +    } + +    inline const bool& options:: +    generate_validation () const +    { +      return this->generate_validation_; +    } + +    inline const bool& options:: +    suppress_validation () const +    { +      return this->suppress_validation_; +    } + +    inline const bool& options:: +    generate_polymorphic () const +    { +      return this->generate_polymorphic_; +    } + +    inline const bool& options:: +    generate_noop_impl () const +    { +      return this->generate_noop_impl_; +    } + +    inline const bool& options:: +    generate_print_impl () const +    { +      return this->generate_print_impl_; +    } + +    inline const bool& options:: +    generate_test_driver () const +    { +      return this->generate_test_driver_; +    } + +    inline const bool& options:: +    force_overwrite () const +    { +      return this->force_overwrite_; +    } + +    inline const bool& options:: +    root_element_first () const +    { +      return this->root_element_first_; +    } + +    inline const bool& options:: +    root_element_last () const +    { +      return this->root_element_last_; +    } + +    inline const NarrowString& options:: +    root_element () const +    { +      return this->root_element_; +    } + +    inline bool options:: +    root_element_specified () const +    { +      return this->root_element_specified_; +    } + +    inline const NarrowString& options:: +    skel_type_suffix () const +    { +      return this->skel_type_suffix_; +    } + +    inline bool options:: +    skel_type_suffix_specified () const +    { +      return this->skel_type_suffix_specified_; +    } + +    inline const NarrowString& options:: +    skel_file_suffix () const +    { +      return this->skel_file_suffix_; +    } + +    inline bool options:: +    skel_file_suffix_specified () const +    { +      return this->skel_file_suffix_specified_; +    } + +    inline const NarrowString& options:: +    impl_type_suffix () const +    { +      return this->impl_type_suffix_; +    } + +    inline bool options:: +    impl_type_suffix_specified () const +    { +      return this->impl_type_suffix_specified_; +    } + +    inline const NarrowString& options:: +    impl_file_suffix () const +    { +      return this->impl_file_suffix_; +    } + +    inline bool options:: +    impl_file_suffix_specified () const +    { +      return this->impl_file_suffix_specified_; +    } +  } +} + +// Begin epilogue. +// +// +// End epilogue. diff --git a/xsd/pregenerated/xsd/cxx/tree/options.cxx b/xsd/pregenerated/xsd/cxx/tree/options.cxx new file mode 100644 index 0000000..17214c1 --- /dev/null +++ b/xsd/pregenerated/xsd/cxx/tree/options.cxx @@ -0,0 +1,1343 @@ +// -*- C++ -*- +// +// This file was generated by CLI, a command line interface +// compiler for C++. +// + +// Begin prologue. +// +#include <xsd/options-parser.hxx> +// +// End prologue. + +#include <xsd/cxx/tree/options.hxx> + +#include <map> +#include <set> +#include <string> +#include <vector> +#include <utility> +#include <ostream> +#include <sstream> +#include <cstring> + +namespace cli +{ +  template <typename X> +  struct parser +  { +    static void +    parse (X& x, bool& xs, scanner& s) +    { +      using namespace std; + +      const char* o (s.next ()); +      if (s.more ()) +      { +        string v (s.next ()); +        istringstream is (v); +        if (!(is >> x && is.peek () == istringstream::traits_type::eof ())) +          throw invalid_value (o, v); +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <> +  struct parser<bool> +  { +    static void +    parse (bool& x, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +      { +        const char* v (s.next ()); + +        if (std::strcmp (v, "1")    == 0 || +            std::strcmp (v, "true") == 0 || +            std::strcmp (v, "TRUE") == 0 || +            std::strcmp (v, "True") == 0) +          x = true; +        else if (std::strcmp (v, "0")     == 0 || +                 std::strcmp (v, "false") == 0 || +                 std::strcmp (v, "FALSE") == 0 || +                 std::strcmp (v, "False") == 0) +          x = false; +        else +          throw invalid_value (o, v); +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <> +  struct parser<std::string> +  { +    static void +    parse (std::string& x, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +        x = s.next (); +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <typename X> +  struct parser<std::pair<X, std::size_t> > +  { +    static void +    parse (std::pair<X, std::size_t>& x, bool& xs, scanner& s) +    { +      x.second = s.position (); +      parser<X>::parse (x.first, xs, s); +    } +  }; + +  template <typename X> +  struct parser<std::vector<X> > +  { +    static void +    parse (std::vector<X>& c, bool& xs, scanner& s) +    { +      X x; +      bool dummy; +      parser<X>::parse (x, dummy, s); +      c.push_back (x); +      xs = true; +    } +  }; + +  template <typename X, typename C> +  struct parser<std::set<X, C> > +  { +    static void +    parse (std::set<X, C>& c, bool& xs, scanner& s) +    { +      X x; +      bool dummy; +      parser<X>::parse (x, dummy, s); +      c.insert (x); +      xs = true; +    } +  }; + +  template <typename K, typename V, typename C> +  struct parser<std::map<K, V, C> > +  { +    static void +    parse (std::map<K, V, C>& m, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +      { +        std::size_t pos (s.position ()); +        std::string ov (s.next ()); +        std::string::size_type p = ov.find ('='); + +        K k = K (); +        V v = V (); +        std::string kstr (ov, 0, p); +        std::string vstr (ov, (p != std::string::npos ? p + 1 : ov.size ())); + +        int ac (2); +        char* av[] = +        { +          const_cast<char*> (o), +          0 +        }; + +        bool dummy; +        if (!kstr.empty ()) +        { +          av[1] = const_cast<char*> (kstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<K>::parse (k, dummy, s); +        } + +        if (!vstr.empty ()) +        { +          av[1] = const_cast<char*> (vstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<V>::parse (v, dummy, s); +        } + +        m[k] = v; +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <typename K, typename V, typename C> +  struct parser<std::multimap<K, V, C> > +  { +    static void +    parse (std::multimap<K, V, C>& m, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +      { +        std::size_t pos (s.position ()); +        std::string ov (s.next ()); +        std::string::size_type p = ov.find ('='); + +        K k = K (); +        V v = V (); +        std::string kstr (ov, 0, p); +        std::string vstr (ov, (p != std::string::npos ? p + 1 : ov.size ())); + +        int ac (2); +        char* av[] = +        { +          const_cast<char*> (o), +          0 +        }; + +        bool dummy; +        if (!kstr.empty ()) +        { +          av[1] = const_cast<char*> (kstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<K>::parse (k, dummy, s); +        } + +        if (!vstr.empty ()) +        { +          av[1] = const_cast<char*> (vstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<V>::parse (v, dummy, s); +        } + +        m.insert (typename std::multimap<K, V, C>::value_type (k, v)); +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <typename X, typename T, T X::*M> +  void +  thunk (X& x, scanner& s) +  { +    parser<T>::parse (x.*M, s); +  } + +  template <typename X, bool X::*M> +  void +  thunk (X& x, scanner& s) +  { +    s.next (); +    x.*M = true; +  } + +  template <typename X, typename T, T X::*M, bool X::*S> +  void +  thunk (X& x, scanner& s) +  { +    parser<T>::parse (x.*M, x.*S, s); +  } +} + +#include <map> + +namespace CXX +{ +  namespace Tree +  { +    // options +    // + +    options:: +    options () +    : generate_polymorphic_ (), +      polymorphic_type_ (), +      polymorphic_type_specified_ (false), +      polymorphic_type_all_ (), +      polymorphic_plate_ (0), +      polymorphic_plate_specified_ (false), +      ordered_type_ (), +      ordered_type_specified_ (false), +      ordered_type_derived_ (), +      ordered_type_mixed_ (), +      ordered_type_all_ (), +      order_container_ (), +      order_container_specified_ (false), +      generate_serialization_ (), +      generate_ostream_ (), +      generate_doxygen_ (), +      generate_comparison_ (), +      generate_default_ctor_ (), +      generate_from_base_ctor_ (), +      suppress_assignment_ (), +      generate_detach_ (), +      generate_wildcard_ (), +      generate_any_type_ (), +      generate_insertion_ (), +      generate_insertion_specified_ (false), +      generate_extraction_ (), +      generate_extraction_specified_ (false), +      generate_forward_ (), +      suppress_parsing_ (), +      generate_element_type_ (), +      generate_element_map_ (), +      generate_intellisense_ (), +      omit_default_attributes_ (), +      type_naming_ ("knr"), +      type_naming_specified_ (false), +      function_naming_ ("knr"), +      function_naming_specified_ (false), +      type_regex_ (), +      type_regex_specified_ (false), +      accessor_regex_ (), +      accessor_regex_specified_ (false), +      one_accessor_regex_ (), +      one_accessor_regex_specified_ (false), +      opt_accessor_regex_ (), +      opt_accessor_regex_specified_ (false), +      seq_accessor_regex_ (), +      seq_accessor_regex_specified_ (false), +      modifier_regex_ (), +      modifier_regex_specified_ (false), +      one_modifier_regex_ (), +      one_modifier_regex_specified_ (false), +      opt_modifier_regex_ (), +      opt_modifier_regex_specified_ (false), +      seq_modifier_regex_ (), +      seq_modifier_regex_specified_ (false), +      parser_regex_ (), +      parser_regex_specified_ (false), +      serializer_regex_ (), +      serializer_regex_specified_ (false), +      const_regex_ (), +      const_regex_specified_ (false), +      enumerator_regex_ (), +      enumerator_regex_specified_ (false), +      element_type_regex_ (), +      element_type_regex_specified_ (false), +      name_regex_trace_ (), +      root_element_first_ (), +      root_element_last_ (), +      root_element_all_ (), +      root_element_none_ (), +      root_element_ (), +      root_element_specified_ (false), +      custom_type_ (), +      custom_type_specified_ (false), +      custom_type_regex_ (), +      custom_type_regex_specified_ (false), +      parts_ (1), +      parts_specified_ (false), +      parts_suffix_ ("-"), +      parts_suffix_specified_ (false) +    { +    } + +    options:: +    options (int& argc, +             char** argv, +             bool erase, +             ::cli::unknown_mode opt, +             ::cli::unknown_mode arg) +    : generate_polymorphic_ (), +      polymorphic_type_ (), +      polymorphic_type_specified_ (false), +      polymorphic_type_all_ (), +      polymorphic_plate_ (0), +      polymorphic_plate_specified_ (false), +      ordered_type_ (), +      ordered_type_specified_ (false), +      ordered_type_derived_ (), +      ordered_type_mixed_ (), +      ordered_type_all_ (), +      order_container_ (), +      order_container_specified_ (false), +      generate_serialization_ (), +      generate_ostream_ (), +      generate_doxygen_ (), +      generate_comparison_ (), +      generate_default_ctor_ (), +      generate_from_base_ctor_ (), +      suppress_assignment_ (), +      generate_detach_ (), +      generate_wildcard_ (), +      generate_any_type_ (), +      generate_insertion_ (), +      generate_insertion_specified_ (false), +      generate_extraction_ (), +      generate_extraction_specified_ (false), +      generate_forward_ (), +      suppress_parsing_ (), +      generate_element_type_ (), +      generate_element_map_ (), +      generate_intellisense_ (), +      omit_default_attributes_ (), +      type_naming_ ("knr"), +      type_naming_specified_ (false), +      function_naming_ ("knr"), +      function_naming_specified_ (false), +      type_regex_ (), +      type_regex_specified_ (false), +      accessor_regex_ (), +      accessor_regex_specified_ (false), +      one_accessor_regex_ (), +      one_accessor_regex_specified_ (false), +      opt_accessor_regex_ (), +      opt_accessor_regex_specified_ (false), +      seq_accessor_regex_ (), +      seq_accessor_regex_specified_ (false), +      modifier_regex_ (), +      modifier_regex_specified_ (false), +      one_modifier_regex_ (), +      one_modifier_regex_specified_ (false), +      opt_modifier_regex_ (), +      opt_modifier_regex_specified_ (false), +      seq_modifier_regex_ (), +      seq_modifier_regex_specified_ (false), +      parser_regex_ (), +      parser_regex_specified_ (false), +      serializer_regex_ (), +      serializer_regex_specified_ (false), +      const_regex_ (), +      const_regex_specified_ (false), +      enumerator_regex_ (), +      enumerator_regex_specified_ (false), +      element_type_regex_ (), +      element_type_regex_specified_ (false), +      name_regex_trace_ (), +      root_element_first_ (), +      root_element_last_ (), +      root_element_all_ (), +      root_element_none_ (), +      root_element_ (), +      root_element_specified_ (false), +      custom_type_ (), +      custom_type_specified_ (false), +      custom_type_regex_ (), +      custom_type_regex_specified_ (false), +      parts_ (1), +      parts_specified_ (false), +      parts_suffix_ ("-"), +      parts_suffix_specified_ (false) +    { +      ::cli::argv_scanner s (argc, argv, erase); +      _parse (s, opt, arg); +    } + +    options:: +    options (int start, +             int& argc, +             char** argv, +             bool erase, +             ::cli::unknown_mode opt, +             ::cli::unknown_mode arg) +    : generate_polymorphic_ (), +      polymorphic_type_ (), +      polymorphic_type_specified_ (false), +      polymorphic_type_all_ (), +      polymorphic_plate_ (0), +      polymorphic_plate_specified_ (false), +      ordered_type_ (), +      ordered_type_specified_ (false), +      ordered_type_derived_ (), +      ordered_type_mixed_ (), +      ordered_type_all_ (), +      order_container_ (), +      order_container_specified_ (false), +      generate_serialization_ (), +      generate_ostream_ (), +      generate_doxygen_ (), +      generate_comparison_ (), +      generate_default_ctor_ (), +      generate_from_base_ctor_ (), +      suppress_assignment_ (), +      generate_detach_ (), +      generate_wildcard_ (), +      generate_any_type_ (), +      generate_insertion_ (), +      generate_insertion_specified_ (false), +      generate_extraction_ (), +      generate_extraction_specified_ (false), +      generate_forward_ (), +      suppress_parsing_ (), +      generate_element_type_ (), +      generate_element_map_ (), +      generate_intellisense_ (), +      omit_default_attributes_ (), +      type_naming_ ("knr"), +      type_naming_specified_ (false), +      function_naming_ ("knr"), +      function_naming_specified_ (false), +      type_regex_ (), +      type_regex_specified_ (false), +      accessor_regex_ (), +      accessor_regex_specified_ (false), +      one_accessor_regex_ (), +      one_accessor_regex_specified_ (false), +      opt_accessor_regex_ (), +      opt_accessor_regex_specified_ (false), +      seq_accessor_regex_ (), +      seq_accessor_regex_specified_ (false), +      modifier_regex_ (), +      modifier_regex_specified_ (false), +      one_modifier_regex_ (), +      one_modifier_regex_specified_ (false), +      opt_modifier_regex_ (), +      opt_modifier_regex_specified_ (false), +      seq_modifier_regex_ (), +      seq_modifier_regex_specified_ (false), +      parser_regex_ (), +      parser_regex_specified_ (false), +      serializer_regex_ (), +      serializer_regex_specified_ (false), +      const_regex_ (), +      const_regex_specified_ (false), +      enumerator_regex_ (), +      enumerator_regex_specified_ (false), +      element_type_regex_ (), +      element_type_regex_specified_ (false), +      name_regex_trace_ (), +      root_element_first_ (), +      root_element_last_ (), +      root_element_all_ (), +      root_element_none_ (), +      root_element_ (), +      root_element_specified_ (false), +      custom_type_ (), +      custom_type_specified_ (false), +      custom_type_regex_ (), +      custom_type_regex_specified_ (false), +      parts_ (1), +      parts_specified_ (false), +      parts_suffix_ ("-"), +      parts_suffix_specified_ (false) +    { +      ::cli::argv_scanner s (start, argc, argv, erase); +      _parse (s, opt, arg); +    } + +    options:: +    options (int& argc, +             char** argv, +             int& end, +             bool erase, +             ::cli::unknown_mode opt, +             ::cli::unknown_mode arg) +    : generate_polymorphic_ (), +      polymorphic_type_ (), +      polymorphic_type_specified_ (false), +      polymorphic_type_all_ (), +      polymorphic_plate_ (0), +      polymorphic_plate_specified_ (false), +      ordered_type_ (), +      ordered_type_specified_ (false), +      ordered_type_derived_ (), +      ordered_type_mixed_ (), +      ordered_type_all_ (), +      order_container_ (), +      order_container_specified_ (false), +      generate_serialization_ (), +      generate_ostream_ (), +      generate_doxygen_ (), +      generate_comparison_ (), +      generate_default_ctor_ (), +      generate_from_base_ctor_ (), +      suppress_assignment_ (), +      generate_detach_ (), +      generate_wildcard_ (), +      generate_any_type_ (), +      generate_insertion_ (), +      generate_insertion_specified_ (false), +      generate_extraction_ (), +      generate_extraction_specified_ (false), +      generate_forward_ (), +      suppress_parsing_ (), +      generate_element_type_ (), +      generate_element_map_ (), +      generate_intellisense_ (), +      omit_default_attributes_ (), +      type_naming_ ("knr"), +      type_naming_specified_ (false), +      function_naming_ ("knr"), +      function_naming_specified_ (false), +      type_regex_ (), +      type_regex_specified_ (false), +      accessor_regex_ (), +      accessor_regex_specified_ (false), +      one_accessor_regex_ (), +      one_accessor_regex_specified_ (false), +      opt_accessor_regex_ (), +      opt_accessor_regex_specified_ (false), +      seq_accessor_regex_ (), +      seq_accessor_regex_specified_ (false), +      modifier_regex_ (), +      modifier_regex_specified_ (false), +      one_modifier_regex_ (), +      one_modifier_regex_specified_ (false), +      opt_modifier_regex_ (), +      opt_modifier_regex_specified_ (false), +      seq_modifier_regex_ (), +      seq_modifier_regex_specified_ (false), +      parser_regex_ (), +      parser_regex_specified_ (false), +      serializer_regex_ (), +      serializer_regex_specified_ (false), +      const_regex_ (), +      const_regex_specified_ (false), +      enumerator_regex_ (), +      enumerator_regex_specified_ (false), +      element_type_regex_ (), +      element_type_regex_specified_ (false), +      name_regex_trace_ (), +      root_element_first_ (), +      root_element_last_ (), +      root_element_all_ (), +      root_element_none_ (), +      root_element_ (), +      root_element_specified_ (false), +      custom_type_ (), +      custom_type_specified_ (false), +      custom_type_regex_ (), +      custom_type_regex_specified_ (false), +      parts_ (1), +      parts_specified_ (false), +      parts_suffix_ ("-"), +      parts_suffix_specified_ (false) +    { +      ::cli::argv_scanner s (argc, argv, erase); +      _parse (s, opt, arg); +      end = s.end (); +    } + +    options:: +    options (int start, +             int& argc, +             char** argv, +             int& end, +             bool erase, +             ::cli::unknown_mode opt, +             ::cli::unknown_mode arg) +    : generate_polymorphic_ (), +      polymorphic_type_ (), +      polymorphic_type_specified_ (false), +      polymorphic_type_all_ (), +      polymorphic_plate_ (0), +      polymorphic_plate_specified_ (false), +      ordered_type_ (), +      ordered_type_specified_ (false), +      ordered_type_derived_ (), +      ordered_type_mixed_ (), +      ordered_type_all_ (), +      order_container_ (), +      order_container_specified_ (false), +      generate_serialization_ (), +      generate_ostream_ (), +      generate_doxygen_ (), +      generate_comparison_ (), +      generate_default_ctor_ (), +      generate_from_base_ctor_ (), +      suppress_assignment_ (), +      generate_detach_ (), +      generate_wildcard_ (), +      generate_any_type_ (), +      generate_insertion_ (), +      generate_insertion_specified_ (false), +      generate_extraction_ (), +      generate_extraction_specified_ (false), +      generate_forward_ (), +      suppress_parsing_ (), +      generate_element_type_ (), +      generate_element_map_ (), +      generate_intellisense_ (), +      omit_default_attributes_ (), +      type_naming_ ("knr"), +      type_naming_specified_ (false), +      function_naming_ ("knr"), +      function_naming_specified_ (false), +      type_regex_ (), +      type_regex_specified_ (false), +      accessor_regex_ (), +      accessor_regex_specified_ (false), +      one_accessor_regex_ (), +      one_accessor_regex_specified_ (false), +      opt_accessor_regex_ (), +      opt_accessor_regex_specified_ (false), +      seq_accessor_regex_ (), +      seq_accessor_regex_specified_ (false), +      modifier_regex_ (), +      modifier_regex_specified_ (false), +      one_modifier_regex_ (), +      one_modifier_regex_specified_ (false), +      opt_modifier_regex_ (), +      opt_modifier_regex_specified_ (false), +      seq_modifier_regex_ (), +      seq_modifier_regex_specified_ (false), +      parser_regex_ (), +      parser_regex_specified_ (false), +      serializer_regex_ (), +      serializer_regex_specified_ (false), +      const_regex_ (), +      const_regex_specified_ (false), +      enumerator_regex_ (), +      enumerator_regex_specified_ (false), +      element_type_regex_ (), +      element_type_regex_specified_ (false), +      name_regex_trace_ (), +      root_element_first_ (), +      root_element_last_ (), +      root_element_all_ (), +      root_element_none_ (), +      root_element_ (), +      root_element_specified_ (false), +      custom_type_ (), +      custom_type_specified_ (false), +      custom_type_regex_ (), +      custom_type_regex_specified_ (false), +      parts_ (1), +      parts_specified_ (false), +      parts_suffix_ ("-"), +      parts_suffix_specified_ (false) +    { +      ::cli::argv_scanner s (start, argc, argv, erase); +      _parse (s, opt, arg); +      end = s.end (); +    } + +    options:: +    options (::cli::scanner& s, +             ::cli::unknown_mode opt, +             ::cli::unknown_mode arg) +    : generate_polymorphic_ (), +      polymorphic_type_ (), +      polymorphic_type_specified_ (false), +      polymorphic_type_all_ (), +      polymorphic_plate_ (0), +      polymorphic_plate_specified_ (false), +      ordered_type_ (), +      ordered_type_specified_ (false), +      ordered_type_derived_ (), +      ordered_type_mixed_ (), +      ordered_type_all_ (), +      order_container_ (), +      order_container_specified_ (false), +      generate_serialization_ (), +      generate_ostream_ (), +      generate_doxygen_ (), +      generate_comparison_ (), +      generate_default_ctor_ (), +      generate_from_base_ctor_ (), +      suppress_assignment_ (), +      generate_detach_ (), +      generate_wildcard_ (), +      generate_any_type_ (), +      generate_insertion_ (), +      generate_insertion_specified_ (false), +      generate_extraction_ (), +      generate_extraction_specified_ (false), +      generate_forward_ (), +      suppress_parsing_ (), +      generate_element_type_ (), +      generate_element_map_ (), +      generate_intellisense_ (), +      omit_default_attributes_ (), +      type_naming_ ("knr"), +      type_naming_specified_ (false), +      function_naming_ ("knr"), +      function_naming_specified_ (false), +      type_regex_ (), +      type_regex_specified_ (false), +      accessor_regex_ (), +      accessor_regex_specified_ (false), +      one_accessor_regex_ (), +      one_accessor_regex_specified_ (false), +      opt_accessor_regex_ (), +      opt_accessor_regex_specified_ (false), +      seq_accessor_regex_ (), +      seq_accessor_regex_specified_ (false), +      modifier_regex_ (), +      modifier_regex_specified_ (false), +      one_modifier_regex_ (), +      one_modifier_regex_specified_ (false), +      opt_modifier_regex_ (), +      opt_modifier_regex_specified_ (false), +      seq_modifier_regex_ (), +      seq_modifier_regex_specified_ (false), +      parser_regex_ (), +      parser_regex_specified_ (false), +      serializer_regex_ (), +      serializer_regex_specified_ (false), +      const_regex_ (), +      const_regex_specified_ (false), +      enumerator_regex_ (), +      enumerator_regex_specified_ (false), +      element_type_regex_ (), +      element_type_regex_specified_ (false), +      name_regex_trace_ (), +      root_element_first_ (), +      root_element_last_ (), +      root_element_all_ (), +      root_element_none_ (), +      root_element_ (), +      root_element_specified_ (false), +      custom_type_ (), +      custom_type_specified_ (false), +      custom_type_regex_ (), +      custom_type_regex_specified_ (false), +      parts_ (1), +      parts_specified_ (false), +      parts_suffix_ ("-"), +      parts_suffix_specified_ (false) +    { +      _parse (s, opt, arg); +    } + +    ::cli::usage_para options:: +    print_usage (::std::wostream& os, ::cli::usage_para p) +    { +      CLI_POTENTIALLY_UNUSED (os); + +      if (p == ::cli::usage_para::text) +        os << ::std::endl; + +      os << "--generate-polymorphic       Generate polymorphism-aware code." << ::std::endl; + +      os << "--polymorphic-type <type>    Indicate that <type> is a root of a polymorphic" << ::std::endl +         << "                             type hierarchy." << ::std::endl; + +      os << "--polymorphic-type-all       Indicate that all types should be treated as" << ::std::endl +         << "                             polymorphic." << ::std::endl; + +      os << "--polymorphic-plate <num>    Specify the polymorphic map plate the generated" << ::std::endl +         << "                             code should register on." << ::std::endl; + +      os << "--ordered-type <type>        Indicate that element order in <type> is" << ::std::endl +         << "                             significant." << ::std::endl; + +      os << "--ordered-type-derived       Automatically treat types derived from ordered" << ::std::endl +         << "                             bases as also ordered." << ::std::endl; + +      os << "--ordered-type-mixed         Automatically treat complex types with mixed" << ::std::endl +         << "                             content as ordered." << ::std::endl; + +      os << "--ordered-type-all           Indicate that element order in all types is" << ::std::endl +         << "                             significant." << ::std::endl; + +      os << "--order-container <type>     Specify a custom class template that should be" << ::std::endl +         << "                             used as a container for the content order in" << ::std::endl +         << "                             ordered types instead of the default std::vector." << ::std::endl; + +      os << "--generate-serialization     Generate serialization functions." << ::std::endl; + +      os << "--generate-ostream           Generate ostream insertion operators (operator<<)" << ::std::endl +         << "                             for generated types." << ::std::endl; + +      os << "--generate-doxygen           Generate documentation comments suitable for" << ::std::endl +         << "                             extraction by the Doxygen documentation system." << ::std::endl; + +      os << "--generate-comparison        Generate comparison operators (operator== and" << ::std::endl +         << "                             operator!=) for complex types." << ::std::endl; + +      os << "--generate-default-ctor      Generate default constructors even for types that" << ::std::endl +         << "                             have required members." << ::std::endl; + +      os << "--generate-from-base-ctor    Generate constructors that expect an instance of a" << ::std::endl +         << "                             base type followed by all required members." << ::std::endl; + +      os << "--suppress-assignment        Suppress the generation of copy assignment" << ::std::endl +         << "                             operators for complex types." << ::std::endl; + +      os << "--generate-detach            Generate detach functions for required elements" << ::std::endl +         << "                             and attributes." << ::std::endl; + +      os << "--generate-wildcard          Generate accessors and modifiers as well as" << ::std::endl +         << "                             parsing and serialization code for XML Schema" << ::std::endl +         << "                             wildcards (any and anyAttribute)." << ::std::endl; + +      os << "--generate-any-type          Extract and store content of the XML Schema" << ::std::endl +         << "                             anyType type as a DOM fragment." << ::std::endl; + +      os << "--generate-insertion <os>    Generate data representation stream insertion" << ::std::endl +         << "                             operators for the <os> output stream type." << ::std::endl; + +      os << "--generate-extraction <is>   Generate data representation stream extraction" << ::std::endl +         << "                             constructors for the <is> input stream type." << ::std::endl; + +      os << "--generate-forward           Generate a separate header file with forward" << ::std::endl +         << "                             declarations for the types being generated." << ::std::endl; + +      os << "--suppress-parsing           Suppress the generation of the parsing functions" << ::std::endl +         << "                             and constructors." << ::std::endl; + +      os << "--generate-element-type      Generate types instead of parsing and" << ::std::endl +         << "                             serialization functions for root elements." << ::std::endl; + +      os << "--generate-element-map       Generate a root element map that allows uniform" << ::std::endl +         << "                             parsing and serialization of multiple root" << ::std::endl +         << "                             elements." << ::std::endl; + +      os << "--generate-intellisense      Generate workarounds for IntelliSense bugs in" << ::std::endl +         << "                             Visual Studio 2005 (8.0)." << ::std::endl; + +      os << "--omit-default-attributes    Omit attributes with default and fixed values from" << ::std::endl +         << "                             serialized XML documents." << ::std::endl; + +      os << "--type-naming <style>        Specify the type naming convention that should be" << ::std::endl +         << "                             used in the generated code." << ::std::endl; + +      os << "--function-naming <style>    Specify the function naming convention that should" << ::std::endl +         << "                             be used in the generated code." << ::std::endl; + +      os << "--type-regex <regex>         Add <regex> to the list of regular expressions" << ::std::endl +         << "                             used to translate XML Schema type names to C++" << ::std::endl +         << "                             type names." << ::std::endl; + +      os << "--accessor-regex <regex>     Add <regex> to the list of regular expressions" << ::std::endl +         << "                             used to translate XML Schema names of" << ::std::endl +         << "                             elements/attributes to C++ accessor function" << ::std::endl +         << "                             names." << ::std::endl; + +      os << "--one-accessor-regex <regex> Add <regex> to the list of regular expressions" << ::std::endl +         << "                             used to translate XML Schema names of" << ::std::endl +         << "                             elements/attributes with cardinality one to C++" << ::std::endl +         << "                             accessor function names." << ::std::endl; + +      os << "--opt-accessor-regex <regex> Add <regex> to the list of regular expressions" << ::std::endl +         << "                             used to translate XML Schema names of" << ::std::endl +         << "                             elements/attributes with cardinality optional to" << ::std::endl +         << "                             C++ accessor function names." << ::std::endl; + +      os << "--seq-accessor-regex <regex> Add <regex> to the list of regular expressions" << ::std::endl +         << "                             used to translate XML Schema names of" << ::std::endl +         << "                             elements/attributes with cardinality sequence to" << ::std::endl +         << "                             C++ accessor function names." << ::std::endl; + +      os << "--modifier-regex <regex>     Add <regex> to the list of regular expressions" << ::std::endl +         << "                             used to translate XML Schema names of" << ::std::endl +         << "                             elements/attributes to C++ modifier function" << ::std::endl +         << "                             names." << ::std::endl; + +      os << "--one-modifier-regex <regex> Add <regex> to the list of regular expressions" << ::std::endl +         << "                             used to translate XML Schema names of" << ::std::endl +         << "                             elements/attributes with cardinality one to C++" << ::std::endl +         << "                             modifier function names." << ::std::endl; + +      os << "--opt-modifier-regex <regex> Add <regex> to the list of regular expressions" << ::std::endl +         << "                             used to translate XML Schema names of" << ::std::endl +         << "                             elements/attributes with cardinality optional to" << ::std::endl +         << "                             C++ modifier function names." << ::std::endl; + +      os << "--seq-modifier-regex <regex> Add <regex> to the list of regular expressions" << ::std::endl +         << "                             used to translate XML Schema names of" << ::std::endl +         << "                             elements/attributes with cardinality sequence to" << ::std::endl +         << "                             C++ modifier function names." << ::std::endl; + +      os << "--parser-regex <regex>       Add <regex> to the list of regular expressions" << ::std::endl +         << "                             used to translate XML Schema element names to C++" << ::std::endl +         << "                             parsing function names." << ::std::endl; + +      os << "--serializer-regex <regex>   Add <regex> to the list of regular expressions" << ::std::endl +         << "                             used to translate XML Schema element names to C++" << ::std::endl +         << "                             serialization function names." << ::std::endl; + +      os << "--const-regex <regex>        Add <regex> to the list of regular expressions" << ::std::endl +         << "                             used to translate XML Schema-derived names to C++" << ::std::endl +         << "                             constant names." << ::std::endl; + +      os << "--enumerator-regex <regex>   Add <regex> to the list of regular expressions" << ::std::endl +         << "                             used to translate XML Schema enumeration values to" << ::std::endl +         << "                             C++ enumerator names." << ::std::endl; + +      os << "--element-type-regex <regex> Add <regex> to the list of regular expressions" << ::std::endl +         << "                             used to translate XML Schema element names to C++" << ::std::endl +         << "                             element type names." << ::std::endl; + +      os << "--name-regex-trace           Trace the process of applying regular expressions" << ::std::endl +         << "                             specified with the name transformation options." << ::std::endl; + +      os << "--root-element-first         Treat only the first global element as a document" << ::std::endl +         << "                             root." << ::std::endl; + +      os << "--root-element-last          Treat only the last global element as a document" << ::std::endl +         << "                             root." << ::std::endl; + +      os << "--root-element-all           Treat all global elements as document roots." << ::std::endl; + +      os << "--root-element-none          Do not treat any global elements as document" << ::std::endl +         << "                             roots." << ::std::endl; + +      os << "--root-element <element>     Treat only <element> as a document root." << ::std::endl; + +      os << "--custom-type <map>          Use a custom C++ type instead of the generated" << ::std::endl +         << "                             class." << ::std::endl; + +      os << "--custom-type-regex <regex>  Use custom C++ types instead of the generated" << ::std::endl +         << "                             classes." << ::std::endl; + +      os << "--parts <num>                Split generated source code into <num> parts." << ::std::endl; + +      os << "--parts-suffix <suffix>      Use <suffix> instead of the default '-' to" << ::std::endl +         << "                             separate the file name from the part number." << ::std::endl; + +      p = ::cli::usage_para::option; + +      return p; +    } + +    typedef +    std::map<std::string, void (*) (options&, ::cli::scanner&)> +    _cli_options_map; + +    static _cli_options_map _cli_options_map_; + +    struct _cli_options_map_init +    { +      _cli_options_map_init () +      { +        _cli_options_map_["--generate-polymorphic"] = +        &::cli::thunk< options, &options::generate_polymorphic_ >; +        _cli_options_map_["--polymorphic-type"] = +        &::cli::thunk< options, NarrowStrings, &options::polymorphic_type_, +          &options::polymorphic_type_specified_ >; +        _cli_options_map_["--polymorphic-type-all"] = +        &::cli::thunk< options, &options::polymorphic_type_all_ >; +        _cli_options_map_["--polymorphic-plate"] = +        &::cli::thunk< options, unsigned long, &options::polymorphic_plate_, +          &options::polymorphic_plate_specified_ >; +        _cli_options_map_["--ordered-type"] = +        &::cli::thunk< options, NarrowStrings, &options::ordered_type_, +          &options::ordered_type_specified_ >; +        _cli_options_map_["--ordered-type-derived"] = +        &::cli::thunk< options, &options::ordered_type_derived_ >; +        _cli_options_map_["--ordered-type-mixed"] = +        &::cli::thunk< options, &options::ordered_type_mixed_ >; +        _cli_options_map_["--ordered-type-all"] = +        &::cli::thunk< options, &options::ordered_type_all_ >; +        _cli_options_map_["--order-container"] = +        &::cli::thunk< options, NarrowString, &options::order_container_, +          &options::order_container_specified_ >; +        _cli_options_map_["--generate-serialization"] = +        &::cli::thunk< options, &options::generate_serialization_ >; +        _cli_options_map_["--generate-ostream"] = +        &::cli::thunk< options, &options::generate_ostream_ >; +        _cli_options_map_["--generate-doxygen"] = +        &::cli::thunk< options, &options::generate_doxygen_ >; +        _cli_options_map_["--generate-comparison"] = +        &::cli::thunk< options, &options::generate_comparison_ >; +        _cli_options_map_["--generate-default-ctor"] = +        &::cli::thunk< options, &options::generate_default_ctor_ >; +        _cli_options_map_["--generate-from-base-ctor"] = +        &::cli::thunk< options, &options::generate_from_base_ctor_ >; +        _cli_options_map_["--suppress-assignment"] = +        &::cli::thunk< options, &options::suppress_assignment_ >; +        _cli_options_map_["--generate-detach"] = +        &::cli::thunk< options, &options::generate_detach_ >; +        _cli_options_map_["--generate-wildcard"] = +        &::cli::thunk< options, &options::generate_wildcard_ >; +        _cli_options_map_["--generate-any-type"] = +        &::cli::thunk< options, &options::generate_any_type_ >; +        _cli_options_map_["--generate-insertion"] = +        &::cli::thunk< options, NarrowStrings, &options::generate_insertion_, +          &options::generate_insertion_specified_ >; +        _cli_options_map_["--generate-extraction"] = +        &::cli::thunk< options, NarrowStrings, &options::generate_extraction_, +          &options::generate_extraction_specified_ >; +        _cli_options_map_["--generate-forward"] = +        &::cli::thunk< options, &options::generate_forward_ >; +        _cli_options_map_["--suppress-parsing"] = +        &::cli::thunk< options, &options::suppress_parsing_ >; +        _cli_options_map_["--generate-element-type"] = +        &::cli::thunk< options, &options::generate_element_type_ >; +        _cli_options_map_["--generate-element-map"] = +        &::cli::thunk< options, &options::generate_element_map_ >; +        _cli_options_map_["--generate-intellisense"] = +        &::cli::thunk< options, &options::generate_intellisense_ >; +        _cli_options_map_["--omit-default-attributes"] = +        &::cli::thunk< options, &options::omit_default_attributes_ >; +        _cli_options_map_["--type-naming"] = +        &::cli::thunk< options, NarrowString, &options::type_naming_, +          &options::type_naming_specified_ >; +        _cli_options_map_["--function-naming"] = +        &::cli::thunk< options, NarrowString, &options::function_naming_, +          &options::function_naming_specified_ >; +        _cli_options_map_["--type-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::type_regex_, +          &options::type_regex_specified_ >; +        _cli_options_map_["--accessor-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::accessor_regex_, +          &options::accessor_regex_specified_ >; +        _cli_options_map_["--one-accessor-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::one_accessor_regex_, +          &options::one_accessor_regex_specified_ >; +        _cli_options_map_["--opt-accessor-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::opt_accessor_regex_, +          &options::opt_accessor_regex_specified_ >; +        _cli_options_map_["--seq-accessor-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::seq_accessor_regex_, +          &options::seq_accessor_regex_specified_ >; +        _cli_options_map_["--modifier-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::modifier_regex_, +          &options::modifier_regex_specified_ >; +        _cli_options_map_["--one-modifier-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::one_modifier_regex_, +          &options::one_modifier_regex_specified_ >; +        _cli_options_map_["--opt-modifier-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::opt_modifier_regex_, +          &options::opt_modifier_regex_specified_ >; +        _cli_options_map_["--seq-modifier-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::seq_modifier_regex_, +          &options::seq_modifier_regex_specified_ >; +        _cli_options_map_["--parser-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::parser_regex_, +          &options::parser_regex_specified_ >; +        _cli_options_map_["--serializer-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::serializer_regex_, +          &options::serializer_regex_specified_ >; +        _cli_options_map_["--const-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::const_regex_, +          &options::const_regex_specified_ >; +        _cli_options_map_["--enumerator-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::enumerator_regex_, +          &options::enumerator_regex_specified_ >; +        _cli_options_map_["--element-type-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::element_type_regex_, +          &options::element_type_regex_specified_ >; +        _cli_options_map_["--name-regex-trace"] = +        &::cli::thunk< options, &options::name_regex_trace_ >; +        _cli_options_map_["--root-element-first"] = +        &::cli::thunk< options, &options::root_element_first_ >; +        _cli_options_map_["--root-element-last"] = +        &::cli::thunk< options, &options::root_element_last_ >; +        _cli_options_map_["--root-element-all"] = +        &::cli::thunk< options, &options::root_element_all_ >; +        _cli_options_map_["--root-element-none"] = +        &::cli::thunk< options, &options::root_element_none_ >; +        _cli_options_map_["--root-element"] = +        &::cli::thunk< options, NarrowStrings, &options::root_element_, +          &options::root_element_specified_ >; +        _cli_options_map_["--custom-type"] = +        &::cli::thunk< options, NarrowStrings, &options::custom_type_, +          &options::custom_type_specified_ >; +        _cli_options_map_["--custom-type-regex"] = +        &::cli::thunk< options, NarrowStrings, &options::custom_type_regex_, +          &options::custom_type_regex_specified_ >; +        _cli_options_map_["--parts"] = +        &::cli::thunk< options, std::size_t, &options::parts_, +          &options::parts_specified_ >; +        _cli_options_map_["--parts-suffix"] = +        &::cli::thunk< options, NarrowString, &options::parts_suffix_, +          &options::parts_suffix_specified_ >; +      } +    }; + +    static _cli_options_map_init _cli_options_map_init_; + +    bool options:: +    _parse (const char* o, ::cli::scanner& s) +    { +      _cli_options_map::const_iterator i (_cli_options_map_.find (o)); + +      if (i != _cli_options_map_.end ()) +      { +        (*(i->second)) (*this, s); +        return true; +      } + +      // options base +      // +      if (::CXX::options::_parse (o, s)) +        return true; + +      return false; +    } + +    bool options:: +    _parse (::cli::scanner& s, +            ::cli::unknown_mode opt_mode, +            ::cli::unknown_mode arg_mode) +    { +      // Can't skip combined flags (--no-combined-flags). +      // +      assert (opt_mode != ::cli::unknown_mode::skip); + +      bool r = false; +      bool opt = true; + +      while (s.more ()) +      { +        const char* o = s.peek (); + +        if (std::strcmp (o, "--") == 0) +        { +          opt = false; +          s.skip (); +          r = true; +          continue; +        } + +        if (opt) +        { +          if (_parse (o, s)) +          { +            r = true; +            continue; +          } + +          if (std::strncmp (o, "-", 1) == 0 && o[1] != '\0') +          { +            // Handle combined option values. +            // +            std::string co; +            if (const char* v = std::strchr (o, '=')) +            { +              co.assign (o, 0, v - o); +              ++v; + +              int ac (2); +              char* av[] = +              { +                const_cast<char*> (co.c_str ()), +                const_cast<char*> (v) +              }; + +              ::cli::argv_scanner ns (0, ac, av); + +              if (_parse (co.c_str (), ns)) +              { +                // Parsed the option but not its value? +                // +                if (ns.end () != 2) +                  throw ::cli::invalid_value (co, v); + +                s.next (); +                r = true; +                continue; +              } +              else +              { +                // Set the unknown option and fall through. +                // +                o = co.c_str (); +              } +            } + +            // Handle combined flags. +            // +            char cf[3]; +            { +              const char* p = o + 1; +              for (; *p != '\0'; ++p) +              { +                if (!((*p >= 'a' && *p <= 'z') || +                      (*p >= 'A' && *p <= 'Z') || +                      (*p >= '0' && *p <= '9'))) +                  break; +              } + +              if (*p == '\0') +              { +                for (p = o + 1; *p != '\0'; ++p) +                { +                  std::strcpy (cf, "-"); +                  cf[1] = *p; +                  cf[2] = '\0'; + +                  int ac (1); +                  char* av[] = +                  { +                    cf +                  }; + +                  ::cli::argv_scanner ns (0, ac, av); + +                  if (!_parse (cf, ns)) +                    break; +                } + +                if (*p == '\0') +                { +                  // All handled. +                  // +                  s.next (); +                  r = true; +                  continue; +                } +                else +                { +                  // Set the unknown option and fall through. +                  // +                  o = cf; +                } +              } +            } + +            switch (opt_mode) +            { +              case ::cli::unknown_mode::skip: +              { +                s.skip (); +                r = true; +                continue; +              } +              case ::cli::unknown_mode::stop: +              { +                break; +              } +              case ::cli::unknown_mode::fail: +              { +                throw ::cli::unknown_option (o); +              } +            } + +            break; +          } +        } + +        switch (arg_mode) +        { +          case ::cli::unknown_mode::skip: +          { +            s.skip (); +            r = true; +            continue; +          } +          case ::cli::unknown_mode::stop: +          { +            break; +          } +          case ::cli::unknown_mode::fail: +          { +            throw ::cli::unknown_argument (o); +          } +        } + +        break; +      } + +      return r; +    } +  } +} + +// Begin epilogue. +// +// +// End epilogue. + diff --git a/xsd/pregenerated/xsd/cxx/tree/options.hxx b/xsd/pregenerated/xsd/cxx/tree/options.hxx new file mode 100644 index 0000000..f5a808c --- /dev/null +++ b/xsd/pregenerated/xsd/cxx/tree/options.hxx @@ -0,0 +1,414 @@ +// -*- C++ -*- +// +// This file was generated by CLI, a command line interface +// compiler for C++. +// + +#ifndef XSD_CXX_TREE_OPTIONS_HXX +#define XSD_CXX_TREE_OPTIONS_HXX + +// Begin prologue. +// +// +// End prologue. + +#include <cstddef> + +#include <xsd/types.hxx> + +#include <xsd/cxx/options.hxx> + +namespace CXX +{ +  namespace Tree +  { +    class options: public ::CXX::options +    { +      public: +      options (); + +      options (int& argc, +               char** argv, +               bool erase = false, +               ::cli::unknown_mode option = ::cli::unknown_mode::fail, +               ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +      options (int start, +               int& argc, +               char** argv, +               bool erase = false, +               ::cli::unknown_mode option = ::cli::unknown_mode::fail, +               ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +      options (int& argc, +               char** argv, +               int& end, +               bool erase = false, +               ::cli::unknown_mode option = ::cli::unknown_mode::fail, +               ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +      options (int start, +               int& argc, +               char** argv, +               int& end, +               bool erase = false, +               ::cli::unknown_mode option = ::cli::unknown_mode::fail, +               ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +      options (::cli::scanner&, +               ::cli::unknown_mode option = ::cli::unknown_mode::fail, +               ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +      // Option accessors. +      // +      const bool& +      generate_polymorphic () const; + +      const NarrowStrings& +      polymorphic_type () const; + +      bool +      polymorphic_type_specified () const; + +      const bool& +      polymorphic_type_all () const; + +      const unsigned long& +      polymorphic_plate () const; + +      bool +      polymorphic_plate_specified () const; + +      const NarrowStrings& +      ordered_type () const; + +      bool +      ordered_type_specified () const; + +      const bool& +      ordered_type_derived () const; + +      const bool& +      ordered_type_mixed () const; + +      const bool& +      ordered_type_all () const; + +      const NarrowString& +      order_container () const; + +      bool +      order_container_specified () const; + +      const bool& +      generate_serialization () const; + +      const bool& +      generate_ostream () const; + +      const bool& +      generate_doxygen () const; + +      const bool& +      generate_comparison () const; + +      const bool& +      generate_default_ctor () const; + +      const bool& +      generate_from_base_ctor () const; + +      const bool& +      suppress_assignment () const; + +      const bool& +      generate_detach () const; + +      const bool& +      generate_wildcard () const; + +      const bool& +      generate_any_type () const; + +      const NarrowStrings& +      generate_insertion () const; + +      bool +      generate_insertion_specified () const; + +      const NarrowStrings& +      generate_extraction () const; + +      bool +      generate_extraction_specified () const; + +      const bool& +      generate_forward () const; + +      const bool& +      suppress_parsing () const; + +      const bool& +      generate_element_type () const; + +      const bool& +      generate_element_map () const; + +      const bool& +      generate_intellisense () const; + +      const bool& +      omit_default_attributes () const; + +      const NarrowString& +      type_naming () const; + +      bool +      type_naming_specified () const; + +      const NarrowString& +      function_naming () const; + +      bool +      function_naming_specified () const; + +      const NarrowStrings& +      type_regex () const; + +      bool +      type_regex_specified () const; + +      const NarrowStrings& +      accessor_regex () const; + +      bool +      accessor_regex_specified () const; + +      const NarrowStrings& +      one_accessor_regex () const; + +      bool +      one_accessor_regex_specified () const; + +      const NarrowStrings& +      opt_accessor_regex () const; + +      bool +      opt_accessor_regex_specified () const; + +      const NarrowStrings& +      seq_accessor_regex () const; + +      bool +      seq_accessor_regex_specified () const; + +      const NarrowStrings& +      modifier_regex () const; + +      bool +      modifier_regex_specified () const; + +      const NarrowStrings& +      one_modifier_regex () const; + +      bool +      one_modifier_regex_specified () const; + +      const NarrowStrings& +      opt_modifier_regex () const; + +      bool +      opt_modifier_regex_specified () const; + +      const NarrowStrings& +      seq_modifier_regex () const; + +      bool +      seq_modifier_regex_specified () const; + +      const NarrowStrings& +      parser_regex () const; + +      bool +      parser_regex_specified () const; + +      const NarrowStrings& +      serializer_regex () const; + +      bool +      serializer_regex_specified () const; + +      const NarrowStrings& +      const_regex () const; + +      bool +      const_regex_specified () const; + +      const NarrowStrings& +      enumerator_regex () const; + +      bool +      enumerator_regex_specified () const; + +      const NarrowStrings& +      element_type_regex () const; + +      bool +      element_type_regex_specified () const; + +      const bool& +      name_regex_trace () const; + +      const bool& +      root_element_first () const; + +      const bool& +      root_element_last () const; + +      const bool& +      root_element_all () const; + +      const bool& +      root_element_none () const; + +      const NarrowStrings& +      root_element () const; + +      bool +      root_element_specified () const; + +      const NarrowStrings& +      custom_type () const; + +      bool +      custom_type_specified () const; + +      const NarrowStrings& +      custom_type_regex () const; + +      bool +      custom_type_regex_specified () const; + +      const std::size_t& +      parts () const; + +      bool +      parts_specified () const; + +      const NarrowString& +      parts_suffix () const; + +      bool +      parts_suffix_specified () const; + +      // Print usage information. +      // +      static ::cli::usage_para +      print_usage (::std::wostream&, +                   ::cli::usage_para = ::cli::usage_para::none); + +      // Implementation details. +      // +      protected: +      bool +      _parse (const char*, ::cli::scanner&); + +      private: +      bool +      _parse (::cli::scanner&, +              ::cli::unknown_mode option, +              ::cli::unknown_mode argument); + +      public: +      bool generate_polymorphic_; +      NarrowStrings polymorphic_type_; +      bool polymorphic_type_specified_; +      bool polymorphic_type_all_; +      unsigned long polymorphic_plate_; +      bool polymorphic_plate_specified_; +      NarrowStrings ordered_type_; +      bool ordered_type_specified_; +      bool ordered_type_derived_; +      bool ordered_type_mixed_; +      bool ordered_type_all_; +      NarrowString order_container_; +      bool order_container_specified_; +      bool generate_serialization_; +      bool generate_ostream_; +      bool generate_doxygen_; +      bool generate_comparison_; +      bool generate_default_ctor_; +      bool generate_from_base_ctor_; +      bool suppress_assignment_; +      bool generate_detach_; +      bool generate_wildcard_; +      bool generate_any_type_; +      NarrowStrings generate_insertion_; +      bool generate_insertion_specified_; +      NarrowStrings generate_extraction_; +      bool generate_extraction_specified_; +      bool generate_forward_; +      bool suppress_parsing_; +      bool generate_element_type_; +      bool generate_element_map_; +      bool generate_intellisense_; +      bool omit_default_attributes_; +      NarrowString type_naming_; +      bool type_naming_specified_; +      NarrowString function_naming_; +      bool function_naming_specified_; +      NarrowStrings type_regex_; +      bool type_regex_specified_; +      NarrowStrings accessor_regex_; +      bool accessor_regex_specified_; +      NarrowStrings one_accessor_regex_; +      bool one_accessor_regex_specified_; +      NarrowStrings opt_accessor_regex_; +      bool opt_accessor_regex_specified_; +      NarrowStrings seq_accessor_regex_; +      bool seq_accessor_regex_specified_; +      NarrowStrings modifier_regex_; +      bool modifier_regex_specified_; +      NarrowStrings one_modifier_regex_; +      bool one_modifier_regex_specified_; +      NarrowStrings opt_modifier_regex_; +      bool opt_modifier_regex_specified_; +      NarrowStrings seq_modifier_regex_; +      bool seq_modifier_regex_specified_; +      NarrowStrings parser_regex_; +      bool parser_regex_specified_; +      NarrowStrings serializer_regex_; +      bool serializer_regex_specified_; +      NarrowStrings const_regex_; +      bool const_regex_specified_; +      NarrowStrings enumerator_regex_; +      bool enumerator_regex_specified_; +      NarrowStrings element_type_regex_; +      bool element_type_regex_specified_; +      bool name_regex_trace_; +      bool root_element_first_; +      bool root_element_last_; +      bool root_element_all_; +      bool root_element_none_; +      NarrowStrings root_element_; +      bool root_element_specified_; +      NarrowStrings custom_type_; +      bool custom_type_specified_; +      NarrowStrings custom_type_regex_; +      bool custom_type_regex_specified_; +      std::size_t parts_; +      bool parts_specified_; +      NarrowString parts_suffix_; +      bool parts_suffix_specified_; +    }; +  } +} + +#include <xsd/cxx/tree/options.ixx> + +// Begin epilogue. +// +// +// End epilogue. + +#endif // XSD_CXX_TREE_OPTIONS_HXX diff --git a/xsd/pregenerated/xsd/cxx/tree/options.ixx b/xsd/pregenerated/xsd/cxx/tree/options.ixx new file mode 100644 index 0000000..4d34fd9 --- /dev/null +++ b/xsd/pregenerated/xsd/cxx/tree/options.ixx @@ -0,0 +1,504 @@ +// -*- C++ -*- +// +// This file was generated by CLI, a command line interface +// compiler for C++. +// + +// Begin prologue. +// +// +// End prologue. + +namespace CXX +{ +  namespace Tree +  { +    // options +    // + +    inline const bool& options:: +    generate_polymorphic () const +    { +      return this->generate_polymorphic_; +    } + +    inline const NarrowStrings& options:: +    polymorphic_type () const +    { +      return this->polymorphic_type_; +    } + +    inline bool options:: +    polymorphic_type_specified () const +    { +      return this->polymorphic_type_specified_; +    } + +    inline const bool& options:: +    polymorphic_type_all () const +    { +      return this->polymorphic_type_all_; +    } + +    inline const unsigned long& options:: +    polymorphic_plate () const +    { +      return this->polymorphic_plate_; +    } + +    inline bool options:: +    polymorphic_plate_specified () const +    { +      return this->polymorphic_plate_specified_; +    } + +    inline const NarrowStrings& options:: +    ordered_type () const +    { +      return this->ordered_type_; +    } + +    inline bool options:: +    ordered_type_specified () const +    { +      return this->ordered_type_specified_; +    } + +    inline const bool& options:: +    ordered_type_derived () const +    { +      return this->ordered_type_derived_; +    } + +    inline const bool& options:: +    ordered_type_mixed () const +    { +      return this->ordered_type_mixed_; +    } + +    inline const bool& options:: +    ordered_type_all () const +    { +      return this->ordered_type_all_; +    } + +    inline const NarrowString& options:: +    order_container () const +    { +      return this->order_container_; +    } + +    inline bool options:: +    order_container_specified () const +    { +      return this->order_container_specified_; +    } + +    inline const bool& options:: +    generate_serialization () const +    { +      return this->generate_serialization_; +    } + +    inline const bool& options:: +    generate_ostream () const +    { +      return this->generate_ostream_; +    } + +    inline const bool& options:: +    generate_doxygen () const +    { +      return this->generate_doxygen_; +    } + +    inline const bool& options:: +    generate_comparison () const +    { +      return this->generate_comparison_; +    } + +    inline const bool& options:: +    generate_default_ctor () const +    { +      return this->generate_default_ctor_; +    } + +    inline const bool& options:: +    generate_from_base_ctor () const +    { +      return this->generate_from_base_ctor_; +    } + +    inline const bool& options:: +    suppress_assignment () const +    { +      return this->suppress_assignment_; +    } + +    inline const bool& options:: +    generate_detach () const +    { +      return this->generate_detach_; +    } + +    inline const bool& options:: +    generate_wildcard () const +    { +      return this->generate_wildcard_; +    } + +    inline const bool& options:: +    generate_any_type () const +    { +      return this->generate_any_type_; +    } + +    inline const NarrowStrings& options:: +    generate_insertion () const +    { +      return this->generate_insertion_; +    } + +    inline bool options:: +    generate_insertion_specified () const +    { +      return this->generate_insertion_specified_; +    } + +    inline const NarrowStrings& options:: +    generate_extraction () const +    { +      return this->generate_extraction_; +    } + +    inline bool options:: +    generate_extraction_specified () const +    { +      return this->generate_extraction_specified_; +    } + +    inline const bool& options:: +    generate_forward () const +    { +      return this->generate_forward_; +    } + +    inline const bool& options:: +    suppress_parsing () const +    { +      return this->suppress_parsing_; +    } + +    inline const bool& options:: +    generate_element_type () const +    { +      return this->generate_element_type_; +    } + +    inline const bool& options:: +    generate_element_map () const +    { +      return this->generate_element_map_; +    } + +    inline const bool& options:: +    generate_intellisense () const +    { +      return this->generate_intellisense_; +    } + +    inline const bool& options:: +    omit_default_attributes () const +    { +      return this->omit_default_attributes_; +    } + +    inline const NarrowString& options:: +    type_naming () const +    { +      return this->type_naming_; +    } + +    inline bool options:: +    type_naming_specified () const +    { +      return this->type_naming_specified_; +    } + +    inline const NarrowString& options:: +    function_naming () const +    { +      return this->function_naming_; +    } + +    inline bool options:: +    function_naming_specified () const +    { +      return this->function_naming_specified_; +    } + +    inline const NarrowStrings& options:: +    type_regex () const +    { +      return this->type_regex_; +    } + +    inline bool options:: +    type_regex_specified () const +    { +      return this->type_regex_specified_; +    } + +    inline const NarrowStrings& options:: +    accessor_regex () const +    { +      return this->accessor_regex_; +    } + +    inline bool options:: +    accessor_regex_specified () const +    { +      return this->accessor_regex_specified_; +    } + +    inline const NarrowStrings& options:: +    one_accessor_regex () const +    { +      return this->one_accessor_regex_; +    } + +    inline bool options:: +    one_accessor_regex_specified () const +    { +      return this->one_accessor_regex_specified_; +    } + +    inline const NarrowStrings& options:: +    opt_accessor_regex () const +    { +      return this->opt_accessor_regex_; +    } + +    inline bool options:: +    opt_accessor_regex_specified () const +    { +      return this->opt_accessor_regex_specified_; +    } + +    inline const NarrowStrings& options:: +    seq_accessor_regex () const +    { +      return this->seq_accessor_regex_; +    } + +    inline bool options:: +    seq_accessor_regex_specified () const +    { +      return this->seq_accessor_regex_specified_; +    } + +    inline const NarrowStrings& options:: +    modifier_regex () const +    { +      return this->modifier_regex_; +    } + +    inline bool options:: +    modifier_regex_specified () const +    { +      return this->modifier_regex_specified_; +    } + +    inline const NarrowStrings& options:: +    one_modifier_regex () const +    { +      return this->one_modifier_regex_; +    } + +    inline bool options:: +    one_modifier_regex_specified () const +    { +      return this->one_modifier_regex_specified_; +    } + +    inline const NarrowStrings& options:: +    opt_modifier_regex () const +    { +      return this->opt_modifier_regex_; +    } + +    inline bool options:: +    opt_modifier_regex_specified () const +    { +      return this->opt_modifier_regex_specified_; +    } + +    inline const NarrowStrings& options:: +    seq_modifier_regex () const +    { +      return this->seq_modifier_regex_; +    } + +    inline bool options:: +    seq_modifier_regex_specified () const +    { +      return this->seq_modifier_regex_specified_; +    } + +    inline const NarrowStrings& options:: +    parser_regex () const +    { +      return this->parser_regex_; +    } + +    inline bool options:: +    parser_regex_specified () const +    { +      return this->parser_regex_specified_; +    } + +    inline const NarrowStrings& options:: +    serializer_regex () const +    { +      return this->serializer_regex_; +    } + +    inline bool options:: +    serializer_regex_specified () const +    { +      return this->serializer_regex_specified_; +    } + +    inline const NarrowStrings& options:: +    const_regex () const +    { +      return this->const_regex_; +    } + +    inline bool options:: +    const_regex_specified () const +    { +      return this->const_regex_specified_; +    } + +    inline const NarrowStrings& options:: +    enumerator_regex () const +    { +      return this->enumerator_regex_; +    } + +    inline bool options:: +    enumerator_regex_specified () const +    { +      return this->enumerator_regex_specified_; +    } + +    inline const NarrowStrings& options:: +    element_type_regex () const +    { +      return this->element_type_regex_; +    } + +    inline bool options:: +    element_type_regex_specified () const +    { +      return this->element_type_regex_specified_; +    } + +    inline const bool& options:: +    name_regex_trace () const +    { +      return this->name_regex_trace_; +    } + +    inline const bool& options:: +    root_element_first () const +    { +      return this->root_element_first_; +    } + +    inline const bool& options:: +    root_element_last () const +    { +      return this->root_element_last_; +    } + +    inline const bool& options:: +    root_element_all () const +    { +      return this->root_element_all_; +    } + +    inline const bool& options:: +    root_element_none () const +    { +      return this->root_element_none_; +    } + +    inline const NarrowStrings& options:: +    root_element () const +    { +      return this->root_element_; +    } + +    inline bool options:: +    root_element_specified () const +    { +      return this->root_element_specified_; +    } + +    inline const NarrowStrings& options:: +    custom_type () const +    { +      return this->custom_type_; +    } + +    inline bool options:: +    custom_type_specified () const +    { +      return this->custom_type_specified_; +    } + +    inline const NarrowStrings& options:: +    custom_type_regex () const +    { +      return this->custom_type_regex_; +    } + +    inline bool options:: +    custom_type_regex_specified () const +    { +      return this->custom_type_regex_specified_; +    } + +    inline const std::size_t& options:: +    parts () const +    { +      return this->parts_; +    } + +    inline bool options:: +    parts_specified () const +    { +      return this->parts_specified_; +    } + +    inline const NarrowString& options:: +    parts_suffix () const +    { +      return this->parts_suffix_; +    } + +    inline bool options:: +    parts_suffix_specified () const +    { +      return this->parts_suffix_specified_; +    } +  } +} + +// Begin epilogue. +// +// +// End epilogue. diff --git a/xsd/pregenerated/xsd/options.cxx b/xsd/pregenerated/xsd/options.cxx new file mode 100644 index 0000000..3022ec4 --- /dev/null +++ b/xsd/pregenerated/xsd/options.cxx @@ -0,0 +1,1297 @@ +// -*- C++ -*- +// +// This file was generated by CLI, a command line interface +// compiler for C++. +// + +// Begin prologue. +// +#include <xsd/options-parser.hxx> +// +// End prologue. + +#include <xsd/options.hxx> + +#include <map> +#include <set> +#include <string> +#include <vector> +#include <utility> +#include <ostream> +#include <sstream> +#include <cstring> +#include <fstream> + +namespace cli +{ +  // unknown_option +  // +  unknown_option:: +  ~unknown_option () noexcept +  { +  } + +  void unknown_option:: +  print (::std::wostream& os) const +  { +    os << "unknown option '" << option ().c_str () << "'"; +  } + +  const char* unknown_option:: +  what () const noexcept +  { +    return "unknown option"; +  } + +  // unknown_argument +  // +  unknown_argument:: +  ~unknown_argument () noexcept +  { +  } + +  void unknown_argument:: +  print (::std::wostream& os) const +  { +    os << "unknown argument '" << argument ().c_str () << "'"; +  } + +  const char* unknown_argument:: +  what () const noexcept +  { +    return "unknown argument"; +  } + +  // missing_value +  // +  missing_value:: +  ~missing_value () noexcept +  { +  } + +  void missing_value:: +  print (::std::wostream& os) const +  { +    os << "missing value for option '" << option ().c_str () << "'"; +  } + +  const char* missing_value:: +  what () const noexcept +  { +    return "missing option value"; +  } + +  // invalid_value +  // +  invalid_value:: +  ~invalid_value () noexcept +  { +  } + +  void invalid_value:: +  print (::std::wostream& os) const +  { +    os << "invalid value '" << value ().c_str () << "' for option '" +       << option ().c_str () << "'"; + +    if (!message ().empty ()) +      os << ": " << message ().c_str (); +  } + +  const char* invalid_value:: +  what () const noexcept +  { +    return "invalid option value"; +  } + +  // eos_reached +  // +  void eos_reached:: +  print (::std::wostream& os) const +  { +    os << what (); +  } + +  const char* eos_reached:: +  what () const noexcept +  { +    return "end of argument stream reached"; +  } + +  // file_io_failure +  // +  file_io_failure:: +  ~file_io_failure () noexcept +  { +  } + +  void file_io_failure:: +  print (::std::wostream& os) const +  { +    os << "unable to open file '" << file ().c_str () << "' or read failure"; +  } + +  const char* file_io_failure:: +  what () const noexcept +  { +    return "unable to open file or read failure"; +  } + +  // unmatched_quote +  // +  unmatched_quote:: +  ~unmatched_quote () noexcept +  { +  } + +  void unmatched_quote:: +  print (::std::wostream& os) const +  { +    os << "unmatched quote in argument '" << argument ().c_str () << "'"; +  } + +  const char* unmatched_quote:: +  what () const noexcept +  { +    return "unmatched quote"; +  } + +  // scanner +  // +  scanner:: +  ~scanner () +  { +  } + +  // argv_scanner +  // +  bool argv_scanner:: +  more () +  { +    return i_ < argc_; +  } + +  const char* argv_scanner:: +  peek () +  { +    if (i_ < argc_) +      return argv_[i_]; +    else +      throw eos_reached (); +  } + +  const char* argv_scanner:: +  next () +  { +    if (i_ < argc_) +    { +      const char* r (argv_[i_]); + +      if (erase_) +      { +        for (int i (i_ + 1); i < argc_; ++i) +          argv_[i - 1] = argv_[i]; + +        --argc_; +        argv_[argc_] = 0; +      } +      else +        ++i_; + +      ++start_position_; +      return r; +    } +    else +      throw eos_reached (); +  } + +  void argv_scanner:: +  skip () +  { +    if (i_ < argc_) +    { +      ++i_; +      ++start_position_; +    } +    else +      throw eos_reached (); +  } + +  std::size_t argv_scanner:: +  position () +  { +    return start_position_; +  } + +  // argv_file_scanner +  // +  int argv_file_scanner::zero_argc_ = 0; +  std::string argv_file_scanner::empty_string_; + +  bool argv_file_scanner:: +  more () +  { +    if (!args_.empty ()) +      return true; + +    while (base::more ()) +    { +      // See if the next argument is the file option. +      // +      const char* a (base::peek ()); +      const option_info* oi = 0; +      const char* ov = 0; + +      if (!skip_) +      { +        if ((oi = find (a)) != 0) +        { +          base::next (); + +          if (!base::more ()) +            throw missing_value (a); + +          ov = base::next (); +        } +        else if (std::strncmp (a, "-", 1) == 0) +        { +          if ((ov = std::strchr (a, '=')) != 0) +          { +            std::string o (a, 0, ov - a); +            if ((oi = find (o.c_str ())) != 0) +            { +              base::next (); +              ++ov; +            } +          } +        } +      } + +      if (oi != 0) +      { +        if (oi->search_func != 0) +        { +          std::string f (oi->search_func (ov, oi->arg)); + +          if (!f.empty ()) +            load (f); +        } +        else +          load (ov); + +        if (!args_.empty ()) +          return true; +      } +      else +      { +        if (!skip_) +          skip_ = (std::strcmp (a, "--") == 0); + +        return true; +      } +    } + +    return false; +  } + +  const char* argv_file_scanner:: +  peek () +  { +    if (!more ()) +      throw eos_reached (); + +    return args_.empty () ? base::peek () : args_.front ().value.c_str (); +  } + +  const std::string& argv_file_scanner:: +  peek_file () +  { +    if (!more ()) +      throw eos_reached (); + +    return args_.empty () ? empty_string_ : *args_.front ().file; +  } + +  std::size_t argv_file_scanner:: +  peek_line () +  { +    if (!more ()) +      throw eos_reached (); + +    return args_.empty () ? 0 : args_.front ().line; +  } + +  const char* argv_file_scanner:: +  next () +  { +    if (!more ()) +      throw eos_reached (); + +    if (args_.empty ()) +      return base::next (); +    else +    { +      hold_[i_ == 0 ? ++i_ : --i_].swap (args_.front ().value); +      args_.pop_front (); +      ++start_position_; +      return hold_[i_].c_str (); +    } +  } + +  void argv_file_scanner:: +  skip () +  { +    if (!more ()) +      throw eos_reached (); + +    if (args_.empty ()) +      return base::skip (); +    else +    { +      args_.pop_front (); +      ++start_position_; +    } +  } + +  const argv_file_scanner::option_info* argv_file_scanner:: +  find (const char* a) const +  { +    for (std::size_t i (0); i < options_count_; ++i) +      if (std::strcmp (a, options_[i].option) == 0) +        return &options_[i]; + +    return 0; +  } + +  std::size_t argv_file_scanner:: +  position () +  { +    return start_position_; +  } + +  void argv_file_scanner:: +  load (const std::string& file) +  { +    using namespace std; + +    ifstream is (file.c_str ()); + +    if (!is.is_open ()) +      throw file_io_failure (file); + +    files_.push_back (file); + +    arg a; +    a.file = &*files_.rbegin (); + +    for (a.line = 1; !is.eof (); ++a.line) +    { +      string line; +      getline (is, line); + +      if (is.fail () && !is.eof ()) +        throw file_io_failure (file); + +      string::size_type n (line.size ()); + +      // Trim the line from leading and trailing whitespaces. +      // +      if (n != 0) +      { +        const char* f (line.c_str ()); +        const char* l (f + n); + +        const char* of (f); +        while (f < l && (*f == ' ' || *f == '\t' || *f == '\r')) +          ++f; + +        --l; + +        const char* ol (l); +        while (l > f && (*l == ' ' || *l == '\t' || *l == '\r')) +          --l; + +        if (f != of || l != ol) +          line = f <= l ? string (f, l - f + 1) : string (); +      } + +      // Ignore empty lines, those that start with #. +      // +      if (line.empty () || line[0] == '#') +        continue; + +      string::size_type p (string::npos); +      if (line.compare (0, 1, "-") == 0) +      { +        p = line.find (' '); + +        string::size_type q (line.find ('=')); +        if (q != string::npos && q < p) +          p = q; +      } + +      string s1; +      if (p != string::npos) +      { +        s1.assign (line, 0, p); + +        // Skip leading whitespaces in the argument. +        // +        if (line[p] == '=') +          ++p; +        else +        { +          n = line.size (); +          for (++p; p < n; ++p) +          { +            char c (line[p]); +            if (c != ' ' && c != '\t' && c != '\r') +              break; +          } +        } +      } +      else if (!skip_) +        skip_ = (line == "--"); + +      string s2 (line, p != string::npos ? p : 0); + +      // If the string (which is an option value or argument) is +      // wrapped in quotes, remove them. +      // +      n = s2.size (); +      char cf (s2[0]), cl (s2[n - 1]); + +      if (cf == '"' || cf == '\'' || cl == '"' || cl == '\'') +      { +        if (n == 1 || cf != cl) +          throw unmatched_quote (s2); + +        s2 = string (s2, 1, n - 2); +      } + +      if (!s1.empty ()) +      { +        // See if this is another file option. +        // +        const option_info* oi; +        if (!skip_ && (oi = find (s1.c_str ()))) +        { +          if (s2.empty ()) +            throw missing_value (oi->option); + +          if (oi->search_func != 0) +          { +            string f (oi->search_func (s2.c_str (), oi->arg)); +            if (!f.empty ()) +              load (f); +          } +          else +          { +            // If the path of the file being parsed is not simple and the +            // path of the file that needs to be loaded is relative, then +            // complete the latter using the former as a base. +            // +#ifndef _WIN32 +            string::size_type p (file.find_last_of ('/')); +            bool c (p != string::npos && s2[0] != '/'); +#else +            string::size_type p (file.find_last_of ("/\\")); +            bool c (p != string::npos && s2[1] != ':'); +#endif +            if (c) +              s2.insert (0, file, 0, p + 1); + +            load (s2); +          } + +          continue; +        } + +        a.value = s1; +        args_.push_back (a); +      } + +      a.value = s2; +      args_.push_back (a); +    } +  } + +  template <typename X> +  struct parser +  { +    static void +    parse (X& x, bool& xs, scanner& s) +    { +      using namespace std; + +      const char* o (s.next ()); +      if (s.more ()) +      { +        string v (s.next ()); +        istringstream is (v); +        if (!(is >> x && is.peek () == istringstream::traits_type::eof ())) +          throw invalid_value (o, v); +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <> +  struct parser<bool> +  { +    static void +    parse (bool& x, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +      { +        const char* v (s.next ()); + +        if (std::strcmp (v, "1")    == 0 || +            std::strcmp (v, "true") == 0 || +            std::strcmp (v, "TRUE") == 0 || +            std::strcmp (v, "True") == 0) +          x = true; +        else if (std::strcmp (v, "0")     == 0 || +                 std::strcmp (v, "false") == 0 || +                 std::strcmp (v, "FALSE") == 0 || +                 std::strcmp (v, "False") == 0) +          x = false; +        else +          throw invalid_value (o, v); +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <> +  struct parser<std::string> +  { +    static void +    parse (std::string& x, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +        x = s.next (); +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <typename X> +  struct parser<std::pair<X, std::size_t> > +  { +    static void +    parse (std::pair<X, std::size_t>& x, bool& xs, scanner& s) +    { +      x.second = s.position (); +      parser<X>::parse (x.first, xs, s); +    } +  }; + +  template <typename X> +  struct parser<std::vector<X> > +  { +    static void +    parse (std::vector<X>& c, bool& xs, scanner& s) +    { +      X x; +      bool dummy; +      parser<X>::parse (x, dummy, s); +      c.push_back (x); +      xs = true; +    } +  }; + +  template <typename X, typename C> +  struct parser<std::set<X, C> > +  { +    static void +    parse (std::set<X, C>& c, bool& xs, scanner& s) +    { +      X x; +      bool dummy; +      parser<X>::parse (x, dummy, s); +      c.insert (x); +      xs = true; +    } +  }; + +  template <typename K, typename V, typename C> +  struct parser<std::map<K, V, C> > +  { +    static void +    parse (std::map<K, V, C>& m, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +      { +        std::size_t pos (s.position ()); +        std::string ov (s.next ()); +        std::string::size_type p = ov.find ('='); + +        K k = K (); +        V v = V (); +        std::string kstr (ov, 0, p); +        std::string vstr (ov, (p != std::string::npos ? p + 1 : ov.size ())); + +        int ac (2); +        char* av[] = +        { +          const_cast<char*> (o), +          0 +        }; + +        bool dummy; +        if (!kstr.empty ()) +        { +          av[1] = const_cast<char*> (kstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<K>::parse (k, dummy, s); +        } + +        if (!vstr.empty ()) +        { +          av[1] = const_cast<char*> (vstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<V>::parse (v, dummy, s); +        } + +        m[k] = v; +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <typename K, typename V, typename C> +  struct parser<std::multimap<K, V, C> > +  { +    static void +    parse (std::multimap<K, V, C>& m, bool& xs, scanner& s) +    { +      const char* o (s.next ()); + +      if (s.more ()) +      { +        std::size_t pos (s.position ()); +        std::string ov (s.next ()); +        std::string::size_type p = ov.find ('='); + +        K k = K (); +        V v = V (); +        std::string kstr (ov, 0, p); +        std::string vstr (ov, (p != std::string::npos ? p + 1 : ov.size ())); + +        int ac (2); +        char* av[] = +        { +          const_cast<char*> (o), +          0 +        }; + +        bool dummy; +        if (!kstr.empty ()) +        { +          av[1] = const_cast<char*> (kstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<K>::parse (k, dummy, s); +        } + +        if (!vstr.empty ()) +        { +          av[1] = const_cast<char*> (vstr.c_str ()); +          argv_scanner s (0, ac, av, false, pos); +          parser<V>::parse (v, dummy, s); +        } + +        m.insert (typename std::multimap<K, V, C>::value_type (k, v)); +      } +      else +        throw missing_value (o); + +      xs = true; +    } +  }; + +  template <typename X, typename T, T X::*M> +  void +  thunk (X& x, scanner& s) +  { +    parser<T>::parse (x.*M, s); +  } + +  template <typename X, bool X::*M> +  void +  thunk (X& x, scanner& s) +  { +    s.next (); +    x.*M = true; +  } + +  template <typename X, typename T, T X::*M, bool X::*S> +  void +  thunk (X& x, scanner& s) +  { +    parser<T>::parse (x.*M, x.*S, s); +  } +} + +#include <map> + +// help_options +// + +help_options:: +help_options () +: build2_metadata_ (), +  build2_metadata_specified_ (false), +  help_ (), +  version_ (), +  proprietary_license_ () +{ +} + +help_options:: +help_options (int& argc, +              char** argv, +              bool erase, +              ::cli::unknown_mode opt, +              ::cli::unknown_mode arg) +: build2_metadata_ (), +  build2_metadata_specified_ (false), +  help_ (), +  version_ (), +  proprietary_license_ () +{ +  ::cli::argv_scanner s (argc, argv, erase); +  _parse (s, opt, arg); +} + +help_options:: +help_options (int start, +              int& argc, +              char** argv, +              bool erase, +              ::cli::unknown_mode opt, +              ::cli::unknown_mode arg) +: build2_metadata_ (), +  build2_metadata_specified_ (false), +  help_ (), +  version_ (), +  proprietary_license_ () +{ +  ::cli::argv_scanner s (start, argc, argv, erase); +  _parse (s, opt, arg); +} + +help_options:: +help_options (int& argc, +              char** argv, +              int& end, +              bool erase, +              ::cli::unknown_mode opt, +              ::cli::unknown_mode arg) +: build2_metadata_ (), +  build2_metadata_specified_ (false), +  help_ (), +  version_ (), +  proprietary_license_ () +{ +  ::cli::argv_scanner s (argc, argv, erase); +  _parse (s, opt, arg); +  end = s.end (); +} + +help_options:: +help_options (int start, +              int& argc, +              char** argv, +              int& end, +              bool erase, +              ::cli::unknown_mode opt, +              ::cli::unknown_mode arg) +: build2_metadata_ (), +  build2_metadata_specified_ (false), +  help_ (), +  version_ (), +  proprietary_license_ () +{ +  ::cli::argv_scanner s (start, argc, argv, erase); +  _parse (s, opt, arg); +  end = s.end (); +} + +help_options:: +help_options (::cli::scanner& s, +              ::cli::unknown_mode opt, +              ::cli::unknown_mode arg) +: build2_metadata_ (), +  build2_metadata_specified_ (false), +  help_ (), +  version_ (), +  proprietary_license_ () +{ +  _parse (s, opt, arg); +} + +::cli::usage_para help_options:: +print_usage (::std::wostream& os, ::cli::usage_para p) +{ +  CLI_POTENTIALLY_UNUSED (os); + +  return p; +} + +typedef +std::map<std::string, void (*) (help_options&, ::cli::scanner&)> +_cli_help_options_map; + +static _cli_help_options_map _cli_help_options_map_; + +struct _cli_help_options_map_init +{ +  _cli_help_options_map_init () +  { +    _cli_help_options_map_["--build2-metadata"] = +    &::cli::thunk< help_options, std::uint64_t, &help_options::build2_metadata_, +      &help_options::build2_metadata_specified_ >; +    _cli_help_options_map_["--help"] = +    &::cli::thunk< help_options, &help_options::help_ >; +    _cli_help_options_map_["--version"] = +    &::cli::thunk< help_options, &help_options::version_ >; +    _cli_help_options_map_["--proprietary-license"] = +    &::cli::thunk< help_options, &help_options::proprietary_license_ >; +  } +}; + +static _cli_help_options_map_init _cli_help_options_map_init_; + +bool help_options:: +_parse (const char* o, ::cli::scanner& s) +{ +  _cli_help_options_map::const_iterator i (_cli_help_options_map_.find (o)); + +  if (i != _cli_help_options_map_.end ()) +  { +    (*(i->second)) (*this, s); +    return true; +  } + +  return false; +} + +bool help_options:: +_parse (::cli::scanner& s, +        ::cli::unknown_mode opt_mode, +        ::cli::unknown_mode arg_mode) +{ +  // Can't skip combined flags (--no-combined-flags). +  // +  assert (opt_mode != ::cli::unknown_mode::skip); + +  bool r = false; +  bool opt = true; + +  while (s.more ()) +  { +    const char* o = s.peek (); + +    if (std::strcmp (o, "--") == 0) +    { +      opt = false; +      s.skip (); +      r = true; +      continue; +    } + +    if (opt) +    { +      if (_parse (o, s)) +      { +        r = true; +        continue; +      } + +      if (std::strncmp (o, "-", 1) == 0 && o[1] != '\0') +      { +        // Handle combined option values. +        // +        std::string co; +        if (const char* v = std::strchr (o, '=')) +        { +          co.assign (o, 0, v - o); +          ++v; + +          int ac (2); +          char* av[] = +          { +            const_cast<char*> (co.c_str ()), +            const_cast<char*> (v) +          }; + +          ::cli::argv_scanner ns (0, ac, av); + +          if (_parse (co.c_str (), ns)) +          { +            // Parsed the option but not its value? +            // +            if (ns.end () != 2) +              throw ::cli::invalid_value (co, v); + +            s.next (); +            r = true; +            continue; +          } +          else +          { +            // Set the unknown option and fall through. +            // +            o = co.c_str (); +          } +        } + +        // Handle combined flags. +        // +        char cf[3]; +        { +          const char* p = o + 1; +          for (; *p != '\0'; ++p) +          { +            if (!((*p >= 'a' && *p <= 'z') || +                  (*p >= 'A' && *p <= 'Z') || +                  (*p >= '0' && *p <= '9'))) +              break; +          } + +          if (*p == '\0') +          { +            for (p = o + 1; *p != '\0'; ++p) +            { +              std::strcpy (cf, "-"); +              cf[1] = *p; +              cf[2] = '\0'; + +              int ac (1); +              char* av[] = +              { +                cf +              }; + +              ::cli::argv_scanner ns (0, ac, av); + +              if (!_parse (cf, ns)) +                break; +            } + +            if (*p == '\0') +            { +              // All handled. +              // +              s.next (); +              r = true; +              continue; +            } +            else +            { +              // Set the unknown option and fall through. +              // +              o = cf; +            } +          } +        } + +        switch (opt_mode) +        { +          case ::cli::unknown_mode::skip: +          { +            s.skip (); +            r = true; +            continue; +          } +          case ::cli::unknown_mode::stop: +          { +            break; +          } +          case ::cli::unknown_mode::fail: +          { +            throw ::cli::unknown_option (o); +          } +        } + +        break; +      } +    } + +    switch (arg_mode) +    { +      case ::cli::unknown_mode::skip: +      { +        s.skip (); +        r = true; +        continue; +      } +      case ::cli::unknown_mode::stop: +      { +        break; +      } +      case ::cli::unknown_mode::fail: +      { +        throw ::cli::unknown_argument (o); +      } +    } + +    break; +  } + +  return r; +} + +// options +// + +options:: +options () +: disable_warning_ (), +  disable_warning_specified_ (false), +  options_file_ (), +  options_file_specified_ (false), +  show_sloc_ (), +  sloc_limit_ (), +  sloc_limit_specified_ (false), +  proprietary_license_ (), +  custom_literals_ (), +  custom_literals_specified_ (false), +  preserve_anonymous_ (), +  show_anonymous_ (), +  anonymous_regex_ (), +  anonymous_regex_specified_ (false), +  anonymous_regex_trace_ (), +  morph_anonymous_ (), +  location_map_ (), +  location_map_specified_ (false), +  location_regex_ (), +  location_regex_specified_ (false), +  location_regex_trace_ (), +  file_per_type_ (), +  type_file_regex_ (), +  type_file_regex_specified_ (false), +  type_file_regex_trace_ (), +  schema_file_regex_ (), +  schema_file_regex_specified_ (false), +  schema_file_regex_trace_ (), +  fat_type_file_ (), +  file_list_ (), +  file_list_specified_ (false), +  file_list_only_ (), +  file_list_prologue_ (), +  file_list_prologue_specified_ (false), +  file_list_epilogue_ (), +  file_list_epilogue_specified_ (false), +  file_list_delim_ ("\n"), +  file_list_delim_specified_ (false), +  disable_multi_import_ (), +  disable_full_check_ () +{ +} + +::cli::usage_para options:: +print_usage (::std::wostream& os, ::cli::usage_para p) +{ +  CLI_POTENTIALLY_UNUSED (os); + +  if (p == ::cli::usage_para::text) +    os << ::std::endl; + +  os << "--disable-warning <warn>     Disable printing warning with id <warn>." << ::std::endl; + +  os << "--options-file <file>        Read additional options from <file>." << ::std::endl; + +  os << "--show-sloc                  Show the number of generated physical source lines" << ::std::endl +     << "                             of code (SLOC)." << ::std::endl; + +  os << "--sloc-limit <num>           Check that the number of generated physical source" << ::std::endl +     << "                             lines of code (SLOC) does not exceed <num>." << ::std::endl; + +  os << "--proprietary-license        Indicate that the generated code is licensed under" << ::std::endl +     << "                             a proprietary license instead of the GPL." << ::std::endl; + +  os << "--custom-literals <file>     Load custom XML string to C++ literal mappings" << ::std::endl +     << "                             from <file>." << ::std::endl; + +  os << "--preserve-anonymous         Preserve anonymous types." << ::std::endl; + +  os << "--show-anonymous             Show elements and attributes that are of anonymous" << ::std::endl +     << "                             types." << ::std::endl; + +  os << "--anonymous-regex <regex>    Add <regex> to the list of regular expressions" << ::std::endl +     << "                             used to derive names for anonymous types from the" << ::std::endl +     << "                             enclosing attributes/elements." << ::std::endl; + +  os << "--anonymous-regex-trace      Trace the process of applying regular expressions" << ::std::endl +     << "                             specified with the --anonymous-regex option." << ::std::endl; + +  os << "--location-map <ol>=<nl>     Map the original schema location <ol> that is" << ::std::endl +     << "                             specified in the XML Schema include or import" << ::std::endl +     << "                             elements to new schema location <nl>." << ::std::endl; + +  os << "--location-regex <regex>     Add <regex> to the list of regular expressions" << ::std::endl +     << "                             used to map schema locations that are specified in" << ::std::endl +     << "                             the XML Schema include or import elements." << ::std::endl; + +  os << "--location-regex-trace       Trace the process of applying regular expressions" << ::std::endl +     << "                             specified with the --location-regex option." << ::std::endl; + +  os << "--file-per-type              Generate a separate set of C++ files for each type" << ::std::endl +     << "                             defined in XML Schema." << ::std::endl; + +  os << "--type-file-regex <regex>    Add <regex> to the list of regular expressions" << ::std::endl +     << "                             used to translate type names to file names when" << ::std::endl +     << "                             the --file-per-type option is specified." << ::std::endl; + +  os << "--type-file-regex-trace      Trace the process of applying regular expressions" << ::std::endl +     << "                             specified with the --type-file-regex option." << ::std::endl; + +  os << "--schema-file-regex <regex>  Add <regex> to the list of regular expressions" << ::std::endl +     << "                             used to translate schema file names when the" << ::std::endl +     << "                             --file-per-type option is specified." << ::std::endl; + +  os << "--schema-file-regex-trace    Trace the process of applying regular expressions" << ::std::endl +     << "                             specified with the --schema-file-regex option." << ::std::endl; + +  os << "--fat-type-file              Generate code corresponding to global elements" << ::std::endl +     << "                             into type files instead of schema files when the" << ::std::endl +     << "                             --type-file-regex option is specified." << ::std::endl; + +  os << "--file-list <file>           Write a list of generated C++ files to <file> or" << ::std::endl +     << "                             to stdout if <file> is -." << ::std::endl; + +  os << "--file-list-only             Only write the list of C++ files that would be" << ::std::endl +     << "                             generated without actually generating them." << ::std::endl; + +  os << "--file-list-prologue <text>  Insert <text> at the beginning of the file list." << ::std::endl; + +  os << "--file-list-epilogue <text>  Insert <text> at the end of the file list." << ::std::endl; + +  os << "--file-list-delim <text>     Delimit file names written to the file list with" << ::std::endl +     << "                             <text> instead of new lines." << ::std::endl; + +  p = ::cli::usage_para::option; + +  return p; +} + +typedef +std::map<std::string, void (*) (options&, ::cli::scanner&)> +_cli_options_map; + +static _cli_options_map _cli_options_map_; + +struct _cli_options_map_init +{ +  _cli_options_map_init () +  { +    _cli_options_map_["--disable-warning"] = +    &::cli::thunk< options, NarrowStrings, &options::disable_warning_, +      &options::disable_warning_specified_ >; +    _cli_options_map_["--options-file"] = +    &::cli::thunk< options, std::string, &options::options_file_, +      &options::options_file_specified_ >; +    _cli_options_map_["--show-sloc"] = +    &::cli::thunk< options, &options::show_sloc_ >; +    _cli_options_map_["--sloc-limit"] = +    &::cli::thunk< options, std::size_t, &options::sloc_limit_, +      &options::sloc_limit_specified_ >; +    _cli_options_map_["--proprietary-license"] = +    &::cli::thunk< options, &options::proprietary_license_ >; +    _cli_options_map_["--custom-literals"] = +    &::cli::thunk< options, NarrowString, &options::custom_literals_, +      &options::custom_literals_specified_ >; +    _cli_options_map_["--preserve-anonymous"] = +    &::cli::thunk< options, &options::preserve_anonymous_ >; +    _cli_options_map_["--show-anonymous"] = +    &::cli::thunk< options, &options::show_anonymous_ >; +    _cli_options_map_["--anonymous-regex"] = +    &::cli::thunk< options, NarrowStrings, &options::anonymous_regex_, +      &options::anonymous_regex_specified_ >; +    _cli_options_map_["--anonymous-regex-trace"] = +    &::cli::thunk< options, &options::anonymous_regex_trace_ >; +    _cli_options_map_["--morph-anonymous"] = +    &::cli::thunk< options, &options::morph_anonymous_ >; +    _cli_options_map_["--location-map"] = +    &::cli::thunk< options, NarrowStrings, &options::location_map_, +      &options::location_map_specified_ >; +    _cli_options_map_["--location-regex"] = +    &::cli::thunk< options, NarrowStrings, &options::location_regex_, +      &options::location_regex_specified_ >; +    _cli_options_map_["--location-regex-trace"] = +    &::cli::thunk< options, &options::location_regex_trace_ >; +    _cli_options_map_["--file-per-type"] = +    &::cli::thunk< options, &options::file_per_type_ >; +    _cli_options_map_["--type-file-regex"] = +    &::cli::thunk< options, NarrowStrings, &options::type_file_regex_, +      &options::type_file_regex_specified_ >; +    _cli_options_map_["--type-file-regex-trace"] = +    &::cli::thunk< options, &options::type_file_regex_trace_ >; +    _cli_options_map_["--schema-file-regex"] = +    &::cli::thunk< options, NarrowStrings, &options::schema_file_regex_, +      &options::schema_file_regex_specified_ >; +    _cli_options_map_["--schema-file-regex-trace"] = +    &::cli::thunk< options, &options::schema_file_regex_trace_ >; +    _cli_options_map_["--fat-type-file"] = +    &::cli::thunk< options, &options::fat_type_file_ >; +    _cli_options_map_["--file-list"] = +    &::cli::thunk< options, NarrowString, &options::file_list_, +      &options::file_list_specified_ >; +    _cli_options_map_["--file-list-only"] = +    &::cli::thunk< options, &options::file_list_only_ >; +    _cli_options_map_["--file-list-prologue"] = +    &::cli::thunk< options, NarrowString, &options::file_list_prologue_, +      &options::file_list_prologue_specified_ >; +    _cli_options_map_["--file-list-epilogue"] = +    &::cli::thunk< options, NarrowString, &options::file_list_epilogue_, +      &options::file_list_epilogue_specified_ >; +    _cli_options_map_["--file-list-delim"] = +    &::cli::thunk< options, NarrowString, &options::file_list_delim_, +      &options::file_list_delim_specified_ >; +    _cli_options_map_["--disable-multi-import"] = +    &::cli::thunk< options, &options::disable_multi_import_ >; +    _cli_options_map_["--disable-full-check"] = +    &::cli::thunk< options, &options::disable_full_check_ >; +  } +}; + +static _cli_options_map_init _cli_options_map_init_; + +bool options:: +_parse (const char* o, ::cli::scanner& s) +{ +  _cli_options_map::const_iterator i (_cli_options_map_.find (o)); + +  if (i != _cli_options_map_.end ()) +  { +    (*(i->second)) (*this, s); +    return true; +  } + +  return false; +} + +// Begin epilogue. +// +// +// End epilogue. + diff --git a/xsd/pregenerated/xsd/options.hxx b/xsd/pregenerated/xsd/options.hxx new file mode 100644 index 0000000..0f4383c --- /dev/null +++ b/xsd/pregenerated/xsd/options.hxx @@ -0,0 +1,702 @@ +// -*- C++ -*- +// +// This file was generated by CLI, a command line interface +// compiler for C++. +// + +#ifndef XSD_OPTIONS_HXX +#define XSD_OPTIONS_HXX + +// Begin prologue. +// +// +// End prologue. + +#include <list> +#include <deque> +#include <iosfwd> +#include <string> +#include <cstddef> +#include <exception> + +#ifndef CLI_POTENTIALLY_UNUSED +#  if defined(_MSC_VER) || defined(__xlC__) +#    define CLI_POTENTIALLY_UNUSED(x) (void*)&x +#  else +#    define CLI_POTENTIALLY_UNUSED(x) (void)x +#  endif +#endif + +namespace cli +{ +  class usage_para +  { +    public: +    enum value +    { +      none, +      text, +      option +    }; + +    usage_para (value); + +    operator value () const  +    { +      return v_; +    } + +    private: +    value v_; +  }; + +  class unknown_mode +  { +    public: +    enum value +    { +      skip, +      stop, +      fail +    }; + +    unknown_mode (value); + +    operator value () const  +    { +      return v_; +    } + +    private: +    value v_; +  }; + +  // Exceptions. +  // + +  class exception: public std::exception +  { +    public: +    virtual void +    print (::std::wostream&) const = 0; +  }; + +  ::std::wostream& +  operator<< (::std::wostream&, const exception&); + +  class unknown_option: public exception +  { +    public: +    virtual +    ~unknown_option () noexcept; + +    unknown_option (const std::string& option); + +    const std::string& +    option () const; + +    virtual void +    print (::std::wostream&) const; + +    virtual const char* +    what () const noexcept; + +    private: +    std::string option_; +  }; + +  class unknown_argument: public exception +  { +    public: +    virtual +    ~unknown_argument () noexcept; + +    unknown_argument (const std::string& argument); + +    const std::string& +    argument () const; + +    virtual void +    print (::std::wostream&) const; + +    virtual const char* +    what () const noexcept; + +    private: +    std::string argument_; +  }; + +  class missing_value: public exception +  { +    public: +    virtual +    ~missing_value () noexcept; + +    missing_value (const std::string& option); + +    const std::string& +    option () const; + +    virtual void +    print (::std::wostream&) const; + +    virtual const char* +    what () const noexcept; + +    private: +    std::string option_; +  }; + +  class invalid_value: public exception +  { +    public: +    virtual +    ~invalid_value () noexcept; + +    invalid_value (const std::string& option, +                   const std::string& value, +                   const std::string& message = std::string ()); + +    const std::string& +    option () const; + +    const std::string& +    value () const; + +    const std::string& +    message () const; + +    virtual void +    print (::std::wostream&) const; + +    virtual const char* +    what () const noexcept; + +    private: +    std::string option_; +    std::string value_; +    std::string message_; +  }; + +  class eos_reached: public exception +  { +    public: +    virtual void +    print (::std::wostream&) const; + +    virtual const char* +    what () const noexcept; +  }; + +  class file_io_failure: public exception +  { +    public: +    virtual +    ~file_io_failure () noexcept; + +    file_io_failure (const std::string& file); + +    const std::string& +    file () const; + +    virtual void +    print (::std::wostream&) const; + +    virtual const char* +    what () const noexcept; + +    private: +    std::string file_; +  }; + +  class unmatched_quote: public exception +  { +    public: +    virtual +    ~unmatched_quote () noexcept; + +    unmatched_quote (const std::string& argument); + +    const std::string& +    argument () const; + +    virtual void +    print (::std::wostream&) const; + +    virtual const char* +    what () const noexcept; + +    private: +    std::string argument_; +  }; + +  // Command line argument scanner interface. +  // +  // The values returned by next() are guaranteed to be valid +  // for the two previous arguments up until a call to a third +  // peek() or next(). +  // +  // The position() function returns a monotonically-increasing +  // number which, if stored, can later be used to determine the +  // relative position of the argument returned by the following +  // call to next(). Note that if multiple scanners are used to +  // extract arguments from multiple sources, then the end +  // position of the previous scanner should be used as the +  // start position of the next. +  // +  class scanner +  { +    public: +    virtual +    ~scanner (); + +    virtual bool +    more () = 0; + +    virtual const char* +    peek () = 0; + +    virtual const char* +    next () = 0; + +    virtual void +    skip () = 0; + +    virtual std::size_t +    position () = 0; +  }; + +  class argv_scanner: public scanner +  { +    public: +    argv_scanner (int& argc, +                  char** argv, +                  bool erase = false, +                  std::size_t start_position = 0); + +    argv_scanner (int start, +                  int& argc, +                  char** argv, +                  bool erase = false, +                  std::size_t start_position = 0); + +    int +    end () const; + +    virtual bool +    more (); + +    virtual const char* +    peek (); + +    virtual const char* +    next (); + +    virtual void +    skip (); + +    virtual std::size_t +    position (); + +    protected: +    std::size_t start_position_; +    int i_; +    int& argc_; +    char** argv_; +    bool erase_; +  }; + +  class argv_file_scanner: public argv_scanner +  { +    public: +    argv_file_scanner (int& argc, +                       char** argv, +                       const std::string& option, +                       bool erase = false, +                       std::size_t start_position = 0); + +    argv_file_scanner (int start, +                       int& argc, +                       char** argv, +                       const std::string& option, +                       bool erase = false, +                       std::size_t start_position = 0); + +    argv_file_scanner (const std::string& file, +                       const std::string& option, +                       std::size_t start_position = 0); + +    struct option_info +    { +      // If search_func is not NULL, it is called, with the arg +      // value as the second argument, to locate the options file. +      // If it returns an empty string, then the file is ignored. +      // +      const char* option; +      std::string (*search_func) (const char*, void* arg); +      void* arg; +    }; + +    argv_file_scanner (int& argc, +                        char** argv, +                        const option_info* options, +                        std::size_t options_count, +                        bool erase = false, +                        std::size_t start_position = 0); + +    argv_file_scanner (int start, +                       int& argc, +                       char** argv, +                       const option_info* options, +                       std::size_t options_count, +                       bool erase = false, +                       std::size_t start_position = 0); + +    argv_file_scanner (const std::string& file, +                       const option_info* options = 0, +                       std::size_t options_count = 0, +                       std::size_t start_position = 0); + +    virtual bool +    more (); + +    virtual const char* +    peek (); + +    virtual const char* +    next (); + +    virtual void +    skip (); + +    virtual std::size_t +    position (); + +    // Return the file path if the peeked at argument came from a file and +    // the empty string otherwise. The reference is guaranteed to be valid +    // till the end of the scanner lifetime. +    // +    const std::string& +    peek_file (); + +    // Return the 1-based line number if the peeked at argument came from +    // a file and zero otherwise. +    // +    std::size_t +    peek_line (); + +    private: +    const option_info* +    find (const char*) const; + +    void +    load (const std::string& file); + +    typedef argv_scanner base; + +    const std::string option_; +    option_info option_info_; +    const option_info* options_; +    std::size_t options_count_; + +    struct arg +    { +      std::string value; +      const std::string* file; +      std::size_t line; +    }; + +    std::deque<arg> args_; +    std::list<std::string> files_; + +    // Circular buffer of two arguments. +    // +    std::string hold_[2]; +    std::size_t i_; + +    bool skip_; + +    static int zero_argc_; +    static std::string empty_string_; +  }; + +  template <typename X> +  struct parser; +} + +#include <cstddef> + +#include <cstdint> + +#include <xsd/types.hxx> + +class help_options +{ +  public: +  help_options (); + +  help_options (int& argc, +                char** argv, +                bool erase = false, +                ::cli::unknown_mode option = ::cli::unknown_mode::fail, +                ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +  help_options (int start, +                int& argc, +                char** argv, +                bool erase = false, +                ::cli::unknown_mode option = ::cli::unknown_mode::fail, +                ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +  help_options (int& argc, +                char** argv, +                int& end, +                bool erase = false, +                ::cli::unknown_mode option = ::cli::unknown_mode::fail, +                ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +  help_options (int start, +                int& argc, +                char** argv, +                int& end, +                bool erase = false, +                ::cli::unknown_mode option = ::cli::unknown_mode::fail, +                ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +  help_options (::cli::scanner&, +                ::cli::unknown_mode option = ::cli::unknown_mode::fail, +                ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + +  // Option accessors. +  // +  const std::uint64_t& +  build2_metadata () const; + +  bool +  build2_metadata_specified () const; + +  const bool& +  help () const; + +  const bool& +  version () const; + +  const bool& +  proprietary_license () const; + +  // Print usage information. +  // +  static ::cli::usage_para +  print_usage (::std::wostream&, +               ::cli::usage_para = ::cli::usage_para::none); + +  // Implementation details. +  // +  protected: +  bool +  _parse (const char*, ::cli::scanner&); + +  private: +  bool +  _parse (::cli::scanner&, +          ::cli::unknown_mode option, +          ::cli::unknown_mode argument); + +  public: +  std::uint64_t build2_metadata_; +  bool build2_metadata_specified_; +  bool help_; +  bool version_; +  bool proprietary_license_; +}; + +class options +{ +  public: +  // Option accessors. +  // +  const NarrowStrings& +  disable_warning () const; + +  bool +  disable_warning_specified () const; + +  const std::string& +  options_file () const; + +  bool +  options_file_specified () const; + +  const bool& +  show_sloc () const; + +  const std::size_t& +  sloc_limit () const; + +  bool +  sloc_limit_specified () const; + +  const bool& +  proprietary_license () const; + +  const NarrowString& +  custom_literals () const; + +  bool +  custom_literals_specified () const; + +  const bool& +  preserve_anonymous () const; + +  const bool& +  show_anonymous () const; + +  const NarrowStrings& +  anonymous_regex () const; + +  bool +  anonymous_regex_specified () const; + +  const bool& +  anonymous_regex_trace () const; + +  const bool& +  morph_anonymous () const; + +  const NarrowStrings& +  location_map () const; + +  bool +  location_map_specified () const; + +  const NarrowStrings& +  location_regex () const; + +  bool +  location_regex_specified () const; + +  const bool& +  location_regex_trace () const; + +  const bool& +  file_per_type () const; + +  const NarrowStrings& +  type_file_regex () const; + +  bool +  type_file_regex_specified () const; + +  const bool& +  type_file_regex_trace () const; + +  const NarrowStrings& +  schema_file_regex () const; + +  bool +  schema_file_regex_specified () const; + +  const bool& +  schema_file_regex_trace () const; + +  const bool& +  fat_type_file () const; + +  const NarrowString& +  file_list () const; + +  bool +  file_list_specified () const; + +  const bool& +  file_list_only () const; + +  const NarrowString& +  file_list_prologue () const; + +  bool +  file_list_prologue_specified () const; + +  const NarrowString& +  file_list_epilogue () const; + +  bool +  file_list_epilogue_specified () const; + +  const NarrowString& +  file_list_delim () const; + +  bool +  file_list_delim_specified () const; + +  const bool& +  disable_multi_import () const; + +  const bool& +  disable_full_check () const; + +  // Print usage information. +  // +  static ::cli::usage_para +  print_usage (::std::wostream&, +               ::cli::usage_para = ::cli::usage_para::none); + +  // Implementation details. +  // +  protected: +  options (); + +  bool +  _parse (const char*, ::cli::scanner&); + +  public: +  NarrowStrings disable_warning_; +  bool disable_warning_specified_; +  std::string options_file_; +  bool options_file_specified_; +  bool show_sloc_; +  std::size_t sloc_limit_; +  bool sloc_limit_specified_; +  bool proprietary_license_; +  NarrowString custom_literals_; +  bool custom_literals_specified_; +  bool preserve_anonymous_; +  bool show_anonymous_; +  NarrowStrings anonymous_regex_; +  bool anonymous_regex_specified_; +  bool anonymous_regex_trace_; +  bool morph_anonymous_; +  NarrowStrings location_map_; +  bool location_map_specified_; +  NarrowStrings location_regex_; +  bool location_regex_specified_; +  bool location_regex_trace_; +  bool file_per_type_; +  NarrowStrings type_file_regex_; +  bool type_file_regex_specified_; +  bool type_file_regex_trace_; +  NarrowStrings schema_file_regex_; +  bool schema_file_regex_specified_; +  bool schema_file_regex_trace_; +  bool fat_type_file_; +  NarrowString file_list_; +  bool file_list_specified_; +  bool file_list_only_; +  NarrowString file_list_prologue_; +  bool file_list_prologue_specified_; +  NarrowString file_list_epilogue_; +  bool file_list_epilogue_specified_; +  NarrowString file_list_delim_; +  bool file_list_delim_specified_; +  bool disable_multi_import_; +  bool disable_full_check_; +}; + +#include <xsd/options.ixx> + +// Begin epilogue. +// +// +// End epilogue. + +#endif // XSD_OPTIONS_HXX diff --git a/xsd/pregenerated/xsd/options.ixx b/xsd/pregenerated/xsd/options.ixx new file mode 100644 index 0000000..d87e59c --- /dev/null +++ b/xsd/pregenerated/xsd/options.ixx @@ -0,0 +1,555 @@ +// -*- C++ -*- +// +// This file was generated by CLI, a command line interface +// compiler for C++. +// + +// Begin prologue. +// +// +// End prologue. + +#include <cassert> + +namespace cli +{ +  // usage_para +  // +  inline usage_para:: +  usage_para (value v) +  : v_ (v) +  { +  } + +  // unknown_mode +  // +  inline unknown_mode:: +  unknown_mode (value v) +  : v_ (v) +  { +  } + +  // exception +  // +  inline ::std::wostream& +  operator<< (::std::wostream& os, const exception& e) +  { +    e.print (os); +    return os; +  } + +  // unknown_option +  // +  inline unknown_option:: +  unknown_option (const std::string& option) +  : option_ (option) +  { +  } + +  inline const std::string& unknown_option:: +  option () const +  { +    return option_; +  } + +  // unknown_argument +  // +  inline unknown_argument:: +  unknown_argument (const std::string& argument) +  : argument_ (argument) +  { +  } + +  inline const std::string& unknown_argument:: +  argument () const +  { +    return argument_; +  } + +  // missing_value +  // +  inline missing_value:: +  missing_value (const std::string& option) +  : option_ (option) +  { +  } + +  inline const std::string& missing_value:: +  option () const +  { +    return option_; +  } + +  // invalid_value +  // +  inline invalid_value:: +  invalid_value (const std::string& option, +                 const std::string& value, +                 const std::string& message) +  : option_ (option), +    value_ (value), +    message_ (message) +  { +  } + +  inline const std::string& invalid_value:: +  option () const +  { +    return option_; +  } + +  inline const std::string& invalid_value:: +  value () const +  { +    return value_; +  } + +  inline const std::string& invalid_value:: +  message () const +  { +    return message_; +  } + +  // file_io_failure +  // +  inline file_io_failure:: +  file_io_failure (const std::string& file) +  : file_ (file) +  { +  } + +  inline const std::string& file_io_failure:: +  file () const +  { +    return file_; +  } + +  // unmatched_quote +  // +  inline unmatched_quote:: +  unmatched_quote (const std::string& argument) +  : argument_ (argument) +  { +  } + +  inline const std::string& unmatched_quote:: +  argument () const +  { +    return argument_; +  } + +  // argv_scanner +  // +  inline argv_scanner:: +  argv_scanner (int& argc, +                char** argv, +                bool erase, +                std::size_t sp) +  : start_position_ (sp + 1), +    i_ (1), +    argc_ (argc), +    argv_ (argv), +    erase_ (erase) +  { +  } + +  inline argv_scanner:: +  argv_scanner (int start, +                int& argc, +                char** argv, +                bool erase, +                std::size_t sp) +  : start_position_ (sp + static_cast<std::size_t> (start)), +    i_ (start), +    argc_ (argc), +    argv_ (argv), +    erase_ (erase) +  { +  } + +  inline int argv_scanner:: +  end () const +  { +    return i_; +  } + +  // argv_file_scanner +  // +  inline argv_file_scanner:: +  argv_file_scanner (int& argc, +                     char** argv, +                     const std::string& option, +                     bool erase, +                     std::size_t sp) +  : argv_scanner (argc, argv, erase, sp), +    option_ (option), +    options_ (&option_info_), +    options_count_ (1), +    i_ (1), +    skip_ (false) +  { +    option_info_.option = option_.c_str (); +    option_info_.search_func = 0; +  } + +  inline argv_file_scanner:: +  argv_file_scanner (int start, +                     int& argc, +                     char** argv, +                     const std::string& option, +                     bool erase, +                     std::size_t sp) +  : argv_scanner (start, argc, argv, erase, sp), +    option_ (option), +    options_ (&option_info_), +    options_count_ (1), +    i_ (1), +    skip_ (false) +  { +    option_info_.option = option_.c_str (); +    option_info_.search_func = 0; +  } + +  inline argv_file_scanner:: +  argv_file_scanner (const std::string& file, +                     const std::string& option, +                     std::size_t sp) +  : argv_scanner (0, zero_argc_, 0, sp), +    option_ (option), +    options_ (&option_info_), +    options_count_ (1), +    i_ (1), +    skip_ (false) +  { +    option_info_.option = option_.c_str (); +    option_info_.search_func = 0; + +    load (file); +  } + +  inline argv_file_scanner:: +  argv_file_scanner (int& argc, +                     char** argv, +                     const option_info* options, +                     std::size_t options_count, +                     bool erase, +                     std::size_t sp) +  : argv_scanner (argc, argv, erase, sp), +    options_ (options), +    options_count_ (options_count), +    i_ (1), +    skip_ (false) +  { +  } + +  inline argv_file_scanner:: +  argv_file_scanner (int start, +                     int& argc, +                     char** argv, +                     const option_info* options, +                     std::size_t options_count, +                     bool erase, +                     std::size_t sp) +  : argv_scanner (start, argc, argv, erase, sp), +    options_ (options), +    options_count_ (options_count), +    i_ (1), +    skip_ (false) +  { +  } + +  inline argv_file_scanner:: +  argv_file_scanner (const std::string& file, +                     const option_info* options, +                     std::size_t options_count, +                     std::size_t sp) +  : argv_scanner (0, zero_argc_, 0, sp), +    options_ (options), +    options_count_ (options_count), +    i_ (1), +    skip_ (false) +  { +    load (file); +  } +} + +// help_options +// + +inline const std::uint64_t& help_options:: +build2_metadata () const +{ +  return this->build2_metadata_; +} + +inline bool help_options:: +build2_metadata_specified () const +{ +  return this->build2_metadata_specified_; +} + +inline const bool& help_options:: +help () const +{ +  return this->help_; +} + +inline const bool& help_options:: +version () const +{ +  return this->version_; +} + +inline const bool& help_options:: +proprietary_license () const +{ +  return this->proprietary_license_; +} + +// options +// + +inline const NarrowStrings& options:: +disable_warning () const +{ +  return this->disable_warning_; +} + +inline bool options:: +disable_warning_specified () const +{ +  return this->disable_warning_specified_; +} + +inline const std::string& options:: +options_file () const +{ +  return this->options_file_; +} + +inline bool options:: +options_file_specified () const +{ +  return this->options_file_specified_; +} + +inline const bool& options:: +show_sloc () const +{ +  return this->show_sloc_; +} + +inline const std::size_t& options:: +sloc_limit () const +{ +  return this->sloc_limit_; +} + +inline bool options:: +sloc_limit_specified () const +{ +  return this->sloc_limit_specified_; +} + +inline const bool& options:: +proprietary_license () const +{ +  return this->proprietary_license_; +} + +inline const NarrowString& options:: +custom_literals () const +{ +  return this->custom_literals_; +} + +inline bool options:: +custom_literals_specified () const +{ +  return this->custom_literals_specified_; +} + +inline const bool& options:: +preserve_anonymous () const +{ +  return this->preserve_anonymous_; +} + +inline const bool& options:: +show_anonymous () const +{ +  return this->show_anonymous_; +} + +inline const NarrowStrings& options:: +anonymous_regex () const +{ +  return this->anonymous_regex_; +} + +inline bool options:: +anonymous_regex_specified () const +{ +  return this->anonymous_regex_specified_; +} + +inline const bool& options:: +anonymous_regex_trace () const +{ +  return this->anonymous_regex_trace_; +} + +inline const bool& options:: +morph_anonymous () const +{ +  return this->morph_anonymous_; +} + +inline const NarrowStrings& options:: +location_map () const +{ +  return this->location_map_; +} + +inline bool options:: +location_map_specified () const +{ +  return this->location_map_specified_; +} + +inline const NarrowStrings& options:: +location_regex () const +{ +  return this->location_regex_; +} + +inline bool options:: +location_regex_specified () const +{ +  return this->location_regex_specified_; +} + +inline const bool& options:: +location_regex_trace () const +{ +  return this->location_regex_trace_; +} + +inline const bool& options:: +file_per_type () const +{ +  return this->file_per_type_; +} + +inline const NarrowStrings& options:: +type_file_regex () const +{ +  return this->type_file_regex_; +} + +inline bool options:: +type_file_regex_specified () const +{ +  return this->type_file_regex_specified_; +} + +inline const bool& options:: +type_file_regex_trace () const +{ +  return this->type_file_regex_trace_; +} + +inline const NarrowStrings& options:: +schema_file_regex () const +{ +  return this->schema_file_regex_; +} + +inline bool options:: +schema_file_regex_specified () const +{ +  return this->schema_file_regex_specified_; +} + +inline const bool& options:: +schema_file_regex_trace () const +{ +  return this->schema_file_regex_trace_; +} + +inline const bool& options:: +fat_type_file () const +{ +  return this->fat_type_file_; +} + +inline const NarrowString& options:: +file_list () const +{ +  return this->file_list_; +} + +inline bool options:: +file_list_specified () const +{ +  return this->file_list_specified_; +} + +inline const bool& options:: +file_list_only () const +{ +  return this->file_list_only_; +} + +inline const NarrowString& options:: +file_list_prologue () const +{ +  return this->file_list_prologue_; +} + +inline bool options:: +file_list_prologue_specified () const +{ +  return this->file_list_prologue_specified_; +} + +inline const NarrowString& options:: +file_list_epilogue () const +{ +  return this->file_list_epilogue_; +} + +inline bool options:: +file_list_epilogue_specified () const +{ +  return this->file_list_epilogue_specified_; +} + +inline const NarrowString& options:: +file_list_delim () const +{ +  return this->file_list_delim_; +} + +inline bool options:: +file_list_delim_specified () const +{ +  return this->file_list_delim_specified_; +} + +inline const bool& options:: +disable_multi_import () const +{ +  return this->disable_multi_import_; +} + +inline const bool& options:: +disable_full_check () const +{ +  return this->disable_full_check_; +} + +// Begin epilogue. +// +// +// End epilogue. | 
