From 592587e0073cb6722f1fc9c0833d441ad5636358 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 11 Jun 2012 19:01:54 +0200 Subject: Initial work on CLI port Add options files with all the documentation. Move documentation and usage to use the new approach. Finally get rid of dependency on libbackend-elements. --- xsd/cxx/options.cli | 463 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 463 insertions(+) create mode 100644 xsd/cxx/options.cli (limited to 'xsd/cxx/options.cli') diff --git a/xsd/cxx/options.cli b/xsd/cxx/options.cli new file mode 100644 index 0000000..fa46f96 --- /dev/null +++ b/xsd/cxx/options.cli @@ -0,0 +1,463 @@ +// 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." + }; + }; +} -- cgit v1.1