// file : xsd/cxx/options.cli // author : Boris Kolpackov // copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file include ; include ; include ; // std::size_t include ; // NarrowString include ; namespace CXX { class options: ::options = 0 { // Character type and encoding. // Cult::Types::NarrowString --char-type = "char" { "", "Generate code using the provided character instead of the default \cb{char}. Valid values are \cb{char} and \cb{wchar_t}." }; Cult::Types::NarrowString --char-encoding { "", "Specify the character encoding that should be used in the generated code. Valid values for the \cb{char} character type are \cb{utf8} (default), \cb{iso8859-1}, \cb{lcp} (Xerces-C++ local code page), and \cb{custom}. If you pass \cb{custom} as the value then you will need to include the transcoder implementation header for your encoding at the beginning of the generated header files (see the \cb{--hxx-prologue} option). For the \cb{wchar_t} character type the only valid value is \cb{auto} and the encoding is automatically selected between UTF-16 and UTF-32/UCS-4, depending on the \cb{wchar_t} type size." }; // Output options. // Cult::Types::NarrowString --output-dir { "", "Write generated files to instead of the current directory." }; // Extern XML Schema. // bool --generate-xml-schema { "Generate a C++ header file as if the schema being compiled defines the XML Schema namespace. For the C++/Tree mapping, the resulting file will contain definitions for all XML Schema built-in types. For the C++/Parser mapping, the resulting file will contain definitions for all the parser skeletons and implementations corresponding to the XML Schema built-in types. The schema file provided to the compiler need not exist and is only used to derive the name of the resulting header file. Use the \cb{--extern-xml-schema} option to include this file in the generated files for other schemas." }; Cult::Types::NarrowString --extern-xml-schema { "", "Include a header file derived from instead of generating the XML Schema namespace mapping inline. The provided file need not exist and is only used to derive the name of the included header file. Use the \cb{--generate-xml-schema} option to generate this header file." }; // Namespace mapping. // std::vector --namespace-map { "=", "Map XML Schema namespace to C++ namespace . Repeat this option to specify mapping for more than one XML Schema namespace. For example, the following option: \cb{--namespace-map http://example.com/foo/bar=foo::bar} Will map the \cb{http://example.com/foo/bar} XML Schema namespace to the \cb{foo::bar} C++ namespace." }; std::vector --namespace-regex { "", "Add to the list of regular expressions used to translate XML Schema namespace names to C++ namespace names. is a Perl-like regular expression in the form \c{\b{/}\i{pattern}\b{/}\i{replacement}\b{/}}. Any character can be used as a delimiter instead of \cb{/}. Escaping of the delimiter character in \ci{pattern} or \ci{replacement} is not supported. All the regular expressions are pushed into a stack with the last specified expression considered first. The first match that succeeds is used. Regular expressions are applied to a string in the form \c{\i{filename} \i{namespace}} For example, if you have file \cb{hello.xsd} with namespace \cb{http://example.com/hello} and you run \cb{xsd} on this file, then the string in question will be: \cb{hello.xsd. http://example.com/hello} For the built-in XML Schema namespace the string is: \cb{XMLSchema.xsd http://www.w3.org/2001/XMLSchema} The following three steps are performed for each regular expression until the match is found: 1. The expression is applied and if the result is empty the next expression is considered. 2. All \cb{/} are replaced with \cb{::}. 3. The result is verified to be a valid C++ scope name (e.g., \cb{foo::bar}). If this test succeeds, the result is used as a C++ namespace name. As an example, the following expression maps XML Schema namespaces in the form \cb{http://example.com/foo/bar} to C++ namespaces in the form \cb{foo::bar}: \cb{%.* http://example.com/(.+)%$1%} See also the REGEX AND SHELL QUOTING section below." }; bool --namespace-regex-trace { "Trace the process of applying regular expressions specified with the \cb{--namespace-regex} option. Use this option to find out why your regular expressions don't do what you expected them to do." }; // Reserved names. // std::vector --reserved-name { "[=]", "Add name to the list of names that should not be used as identifiers. The name can optionally be followed by \cb{=} and the replacement name that should be used instead. All the C++ keywords are already in this list." }; // Include options. // bool --include-with-brackets { "Use angle brackets (<>) instead of quotes (\"\") in generated \cb{#include} directives." }; Cult::Types::NarrowString --include-prefix { "", "Add to generated \cb{#include} directive paths. For example, if you had the following import element in your schema \cb{} and compiled this fragment with \cb{--include-prefix schemas/}, then the include directive in the generated code would be: \cb{#include \"schemas/base.hxx\"}" }; std::vector --include-regex { "", "Add to the list of regular expressions used to transform \cb{#include} directive paths. is a Perl-like regular expression in the form \c{\b{/}\i{pattern}\b{/}\i{replacement}\b{/}}. Any character can be used as a delimiter instead of \cb{/}. Escaping of the delimiter character in \ci{pattern} or \ci{replacement} is not supported. All the regular expressions are pushed into a stack with the last specified expression considered first. The first match that succeeds is used. As an example, the following expression transforms paths in the form \cb{schemas/foo/bar} to paths in the form \cb{generated/foo/bar}: \cb{%schemas/(.+)%generated/$1%} See also the REGEX AND SHELL QUOTING section below." }; bool --include-regex-trace { "Trace the process of applying regular expressions specified with the \cb{--include-regex} option. Use this option to find out why your regular expressions don't do what you expected them to do." }; Cult::Types::NarrowString --guard-prefix { "", "Add to generated header inclusion guards. The prefix is transformed to upper case and characters that are illegal in a preprocessor macro name are replaced with underscores. If this option is not specified then the directory part of the input schema file is used as a prefix." }; // File suffixes. // Cult::Types::NarrowString --hxx-suffix = ".hxx" { "", "Use the provided instead of the default \cb{.hxx} to construct the name of the header file. Note that this suffix is also used to construct names of header files corresponding to included/imported schemas." }; Cult::Types::NarrowString --ixx-suffix = ".ixx" { "", "Use the provided instead of the default \cb{.ixx} to construct the name of the inline file." }; Cult::Types::NarrowString --cxx-suffix = ".cxx" { "", "Use the provided instead of the default \cb{.cxx} to construct the name of the source file." }; Cult::Types::NarrowString --fwd-suffix = "-fwd.hxx" { "", "Use the provided instead of the default \cb{-fwd.hxx} to construct the name of the forward declaration file." }; Cult::Types::NarrowString --hxx-regex { "", "Use the provided expression to construct the name of the header file. is a Perl-like regular expression in the form \c{\b{/}\i{pattern}\b{/}\i{replacement}\b{/}}. Note that this expression is also used to construct names of header files corresponding to included/imported schemas. See also the REGEX AND SHELL QUOTING section below." }; Cult::Types::NarrowString --ixx-regex { "", "Use the provided expression to construct the name of the inline file. is a Perl-like regular expression in the form \c{\b{/}\i{pattern}\b{/}\i{replacement}\b{/}}. See also the REGEX AND SHELL QUOTING section below." }; Cult::Types::NarrowString --cxx-regex { "", "Use the provided expression to construct the name of the source file. is a Perl-like regular expression in the form \c{\b{/}\i{pattern}\b{/}\i{replacement}\b{/}}. See also the REGEX AND SHELL QUOTING section below." }; Cult::Types::NarrowString --fwd-regex { "", "Use the provided expression to construct the name of the forward declaration file. is a Perl-like regular expression in the form \c{\b{/}\i{pattern}\b{/}\i{replacement}\b{/}}. See also the REGEX AND SHELL QUOTING section below." }; // Prologues/epilogues. // std::vector --hxx-prologue { "", "Insert at the beginning of the header file." }; std::vector --ixx-prologue { "", "Insert at the beginning of the inline file." }; std::vector --cxx-prologue { "", "Insert at the beginning of the source file." }; std::vector --fwd-prologue { "", "Insert at the beginning of the forward declaration file." }; std::vector --prologue { "", "Insert at the beginning of each generated file for which there is no file-specific prologue." }; std::vector --hxx-epilogue { "", "Insert at the end of the header file." }; std::vector --ixx-epilogue { "", "Insert at the end of the inline file." }; std::vector --cxx-epilogue { "", "Insert at the end of the source file." }; std::vector --fwd-epilogue { "", "Insert at the end of the forward declaration file." }; std::vector --epilogue { "", "Insert at the end of each generated file for which there is no file-specific epilogue." }; Cult::Types::NarrowString --hxx-prologue-file { "", "Insert the content of the at the beginning of the header file." }; Cult::Types::NarrowString --ixx-prologue-file { "", "Insert the content of the at the beginning of the inline file." }; Cult::Types::NarrowString --cxx-prologue-file { "", "Insert the content of the at the beginning of the source file." }; Cult::Types::NarrowString --fwd-prologue-file { "", "Insert the content of the at the beginning of the forward declaration file." }; Cult::Types::NarrowString --prologue-file { "", "Insert the content of the at the beginning of each generated file for which there is no file-specific prologue file." }; Cult::Types::NarrowString --hxx-epilogue-file { "", "Insert the content of the at the end of the header file." }; Cult::Types::NarrowString --ixx-epilogue-file { "", "Insert the content of the at the end of the inline file." }; Cult::Types::NarrowString --cxx-epilogue-file { "", "Insert the content of the at the end of the source file." }; Cult::Types::NarrowString --fwd-epilogue-file { "", "Insert the content of the at the end of the forward declaration file." }; Cult::Types::NarrowString --epilogue-file { "", "Insert the content of the at the end of each generated file for which there is no file-specific epilogue file." }; // Export options. // Cult::Types::NarrowString --export-symbol { "", "Insert in places where DLL export/import control statements (\cb{__declspec(dllexport/dllimport)}) are necessary." }; bool --export-xml-schema { "Export/import types in the XML Schema namespace using the export symbol provided with the \cb{--export-symbol} option. The \cb{XSD_NO_EXPORT} macro can be used to omit this code during C++ compilation, which may be useful if you would like to use the same generated code across multiple platforms." }; bool --export-maps { "Export polymorphism support maps from a Win32 DLL into which this generated code is placed. This is necessary when your type hierarchy is split across several DLLs since otherwise each DLL will have its own set of maps. In this situation the generated code for the DLL which contains base types and/or substitution group heads should be compiled with this option and the generated code for all other DLLs should be compiled with \cb{--import-maps}. This option is only valid together with \cb{--generate-polymorphic}. The \cb{XSD_NO_EXPORT} macro can be used to omit this code during C++ compilation, which may be useful if you would like to use the same generated code across multiple platforms." }; bool --import-maps { "Import polymorphism support maps to a Win32 DLL or executable into which this generated code is linked. See the \cb{--export-maps} option documentation for details. This options is only valid together with \cb{--generate-polymorphic}. The \cb{XSD_NO_EXPORT} macro can be used to omit this code during C++ compilation, which may be useful if you would like to use the same generated code across multiple platforms." }; }; }