summaryrefslogtreecommitdiff
path: root/xsd/cxx/tree/generator.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-06-11 19:01:54 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-06-11 19:15:28 +0200
commit592587e0073cb6722f1fc9c0833d441ad5636358 (patch)
tree98bc152bf5ff7ee45190139640d68806ce2cd80f /xsd/cxx/tree/generator.cxx
parent676cf6420dbc11c15322ca528386a8032b9872a0 (diff)
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.
Diffstat (limited to 'xsd/cxx/tree/generator.cxx')
-rw-r--r--xsd/cxx/tree/generator.cxx537
1 files changed, 3 insertions, 534 deletions
diff --git a/xsd/cxx/tree/generator.cxx b/xsd/cxx/tree/generator.cxx
index 5fe4af5..7a6759b 100644
--- a/xsd/cxx/tree/generator.cxx
+++ b/xsd/cxx/tree/generator.cxx
@@ -16,8 +16,6 @@
#include <cutl/compiler/cxx-indenter.hxx>
#include <cutl/compiler/sloc-counter.hxx>
-#include <backend-elements/indentation/clip.hxx>
-
#include <xsd-frontend/semantic-graph.hxx>
#include <cxx/tree/generator.hxx>
@@ -47,7 +45,7 @@
#include <cxx/tree/stream-insertion-source.hxx>
#include <cxx/tree/stream-extraction-source.hxx>
-#include <usage.hxx>
+#include <cxx/tree/options.hxx>
#include "../../../libxsd/xsd/cxx/version.hxx"
@@ -223,536 +221,8 @@ namespace CXX
Void Tree::Generator::
usage ()
{
- std::wostream& o (wcout);
- ::CLI::Indent::Clip< ::CLI::OptionsUsage, WideChar> clip (o);
-
- o << "--char-type <type>" << endl
- << " Use <type> as the base character type. Valid\n"
- << " values are 'char' (default) and 'wchar_t'."
- << endl;
-
- o << "--char-encoding <enc>" << endl
- << " Specify the character encoding that should be used\n"
- << " in the object model. Valid values for the 'char'\n"
- << " character type are 'utf8' (default), 'iso8859-1',\n"
- << " 'lcp', and 'custom'. For the 'wchar_t' character\n"
- << " type the only valid value is 'auto'."
- << endl;
-
- o << "--output-dir <dir>" << endl
- << " Write generated files to <dir> instead of current\n"
- << " directory."
- << endl;
-
- o << "--generate-polymorphic" << endl
- << " Generate polymorphism-aware code. Specify this\n"
- << " option if you use substitution groups or xsi:type."
- << endl;
-
- o << "--polymorphic-type <type>" << endl
- << " Indicate that <type> is a root of a polymorphic\n"
- << " type hierarchy."
- << endl;
-
- o << "--polymorphic-type-all" << endl
- << " Indicate that all types should be treated as\n"
- << " polymorphic."
- << endl;
-
- o << "--generate-serialization" << endl
- << " Generate serialization functions. They convert an\n"
- << " in-memory representation back to XML."
- << endl;
-
- o << "--generate-inline" << endl
- << " Generate certain functions inline."
- << endl;
-
- o << "--generate-ostream" << endl
- << " Generate ostream insertion operators."
- << endl;
-
- o << "--generate-doxygen" << endl
- << " Generate documentation comments in the Doxygen\n"
- << " format."
- << endl;
-
- o << "--generate-comparison" << endl
- << " Generate comparison operators."
- << endl;
-
- o << "--generate-default-ctor" << endl
- << " Generate default constructors even for types that\n"
- << " have required members."
- << endl;
-
- o << "--generate-from-base-ctor" << endl
- << " Generate from-base constructors."
- << endl;
-
- o << "--suppress-assignment" << endl
- << " Suppress the generation of copy assignment\n"
- << " operators for complex types."
- << endl;
-
- o << "--generate-detach" << endl
- << " Generate detach functions for required members."
- << endl;
-
- o << "--generate-wildcard" << endl
- << " Generate accessors/modifiers as well as parsing\n"
- << " and serialization code for XML Schema wildcards."
- << endl;
-
- o << "--generate-insertion <os>" << endl
- << " Generate data representation stream insertion\n"
- << " operators for the <os> output stream type."
- << endl;
-
- o << "--generate-extraction <is>" << endl
- << " Generate data representation stream extraction\n"
- << " constructors for the <is> input stream type."
- << endl;
-
- o << "--generate-forward" << endl
- << " Generate forward declaration file."
- << endl;
-
- o << "--generate-xml-schema" << endl
- << " Generate a C++ header file as if the schema being\n"
- << " compiled defines the XML Schema namespace."
- << endl;
-
- o << "--extern-xml-schema <file>" << endl
- << " Generate code as if the XML Schema namespace was\n"
- << " defined in <file> and xsd:included in the schema\n"
- << " being compiled."
- << endl;
-
- o << "--suppress-parsing" << endl
- << " Suppress the generation of parsing functions."
- << endl;
-
- o << "--generate-element-type" << endl
- << " Generate types instead of parsing/serialization\n"
- << " functions for root elements."
- << endl;
-
- o << "--generate-element-map" << endl
- << " Generate a root element map that allows uniform\n"
- << " parsing/serialization of multiple root elements.\n"
- << endl;
-
- o << "--generate-intellisense" << endl
- << " Generate workarounds for IntelliSense bugs in\n"
- << " Visual Studio 2005 (8.0)."
- << endl;
-
- o << "--omit-default-attributes" << endl
- << " Omit attributes with default and fixed values\n"
- << " from serialized XML documents."
- << endl;
-
- o << "--namespace-map <xns>=<cns>" << endl
- << " Map XML Schema namespace <xns> to C++ namespace\n"
- << " <cns>. Repeat this option to specify mapping for\n"
- << " more than one XML Schema namespace."
- << endl;
-
- o << "--namespace-regex <regex>" << endl
- << " Add <regex> to the list of regular expressions\n"
- << " used to translate XML Schema namespace names to\n"
- << " C++ namespace names."
- << endl;
-
- o << "--namespace-regex-trace" << endl
- << " Trace the process of applying regular expressions\n"
- << " specified with the --namespace-regex option."
- << endl;
-
- o << "--reserved-name <name>" << endl
- << " Add <name> to the list of names that should not\n"
- << " be used as identifiers. The name can optionally\n"
- << " be followed by '=' and the replacement name that\n"
- << " should be used instead."
- << endl;
-
- o << "--type-naming <style>" << endl
- << " Specify the type naming convention that should be\n"
- << " used in the generated code. Valid styles are 'knr'\n"
- << " (default), 'ucc', and 'java'."
- << endl;
-
- o << "--function-naming <style>" << endl
- << " Specify the function naming convention that should\n"
- << " be used in the generated code. Valid styles are\n"
- << " 'knr' (default), 'lcc', and 'java'."
- << endl;
-
- o << "--type-regex <expr>" << endl
- << " Add <expr> to the list of regular expressions\n"
- << " used to translate XML Schema type names to C++\n"
- << " type names."
- << endl;
-
- o << "--accessor-regex <expr>" << endl
- << " Add <expr> to the list of regular expressions\n"
- << " used to translate XML Schema names of elements and\n"
- << " attributes to C++ accessor function names."
- << endl;
-
- o << "--one-accessor-regex <expr>" << endl
- << " Add <expr> to the list of regular expressions\n"
- << " used to translate XML Schema names of elements\n"
- << " and attributes with cardinality one to C++\n"
- << " accessor function names."
- << endl;
-
- o << "--opt-accessor-regex <expr>" << endl
- << " Add <expr> to the list of regular expressions\n"
- << " used to translate XML Schema names of elements\n"
- << " and attributes with cardinality optional to C++\n"
- << " accessor function names."
- << endl;
-
- o << "--seq-accessor-regex <expr>" << endl
- << " Add <expr> to the list of regular expressions\n"
- << " used to translate XML Schema names of elements\n"
- << " and attributes with cardinality sequence to C++\n"
- << " accessor function names."
- << endl;
-
- o << "--modifier-regex <expr>" << endl
- << " Add <expr> to the list of regular expressions\n"
- << " used to translate XML Schema names of elements and\n"
- << " attributes to C++ modifier function names."
- << endl;
-
- o << "--one-modifier-regex <expr>" << endl
- << " Add <expr> to the list of regular expressions\n"
- << " used to translate XML Schema names of elements\n"
- << " and attributes with cardinality one to C++\n"
- << " modifier function names."
- << endl;
-
- o << "--opt-modifier-regex <expr>" << endl
- << " Add <expr> to the list of regular expressions\n"
- << " used to translate XML Schema names of elements\n"
- << " and attributes with cardinality optional to C++\n"
- << " modifier function names."
- << endl;
-
- o << "--seq-modifier-regex <expr>" << endl
- << " Add <expr> to the list of regular expressions\n"
- << " used to translate XML Schema names of elements\n"
- << " and attributes with cardinality sequence to C++\n"
- << " modifier function names."
- << endl;
-
- o << "--parser-regex <expr>" << endl
- << " Add <expr> to the list of regular expressions\n"
- << " used to translate XML Schema element names to\n"
- << " C++ parsing function names."
- << endl;
-
- o << "--serializer-regex <expr>" << endl
- << " Add <expr> to the list of regular expressions\n"
- << " used to translate XML Schema element names to\n"
- << " C++ serialization function names."
- << endl;
-
- o << "--enumerator-regex <expr>" << endl
- << " Add <expr> to the list of regular expressions\n"
- << " used to translate XML Schema enumeration values\n"
- << " to C++ enumerator names."
- << endl;
-
- o << "--element-type-regex <expr>" << endl
- << " Add <expr> to the list of regular expressions\n"
- << " used to translate XML Schema element names to\n"
- << " C++ element type names."
- << endl;
-
- o << "--name-regex-trace" << endl
- << " Trace the process of applying regular expressions\n"
- << " specified with the name transformation options."
- << endl;
-
- o << "--include-with-brackets" << endl
- << " Use angle brackets (<>) instead of quotes (\"\") in\n"
- << " generated #include directives."
- << endl;
-
- o << "--include-prefix <prefix>" << endl
- << " Add <prefix> to generated #include directive\n"
- << " paths."
- << endl;
-
- o << "--include-regex <regex>" << endl
- << " Add <regex> to the list of regular expressions\n"
- << " used to transform #include directive paths."
- << endl;
-
- o << "--include-regex-trace" << endl
- << " Trace the process of applying regular expressions\n"
- << " specified with the --include-regex option."
- << endl;
-
- o << "--guard-prefix <prefix>" << endl
- << " Add <prefix> to generated header inclusion guards."
- << endl;
-
- o << "--root-element-first" << endl
- << " Treat only the first global element as a document\n"
- << " root."
- << endl;
-
- o << "--root-element-last" << endl
- << " Treat only the last global element as a document\n"
- << " root."
- << endl;
-
- o << "--root-element-all" << endl
- << " Treat all global elements as document roots."
- << endl;
-
- o << "--root-element-none" << endl
- << " Don't treat any global elements as document roots."
- << endl;
-
- o << "--root-element <element>" << endl
- << " Treat only <element> as a document root. Repeat\n"
- << " this option to specify more than one root element."
- << endl;
-
- o << "--custom-type <map>" << endl
- << " Use a custom C++ type instead of the generated\n"
- << " class. The <map> argument is in the form\n"
- << " name[=type[/base]], where <name> is a type name as\n"
- << " defined in XML Schema, <type> is a C++ type name\n"
- << " that should be used instead, and optional <base>\n"
- << " is a C++ name that should be given to the C++\n"
- << " class generated from the XML Schema definition\n"
- << " which is normally used as a base for the custom\n"
- << " type."
- << endl;
-
- o << "--custom-type-regex <regex>" << endl
- << " Use custom C++ types instead of the generated\n"
- << " classes. The <regex> argument is in the form\n"
- << " /name/[type/[base/]], where <name> is a regex\n"
- << " pattern that will be matched against type names\n"
- << " as defined in XML Schema, <type> is a C++ type\n"
- << " name that should be used instead, and optional\n"
- << " <base> is a C++ name that should be given to\n"
- << " the C++ class generated from the XML Schema\n"
- << " definition."
- << endl;
-
- o << "--hxx-suffix <suffix>" << endl
- << " Use <suffix> instead of the default '.hxx' to\n"
- << " construct the name of the header file."
- << endl;
-
- o << "--ixx-suffix <suffix>" << endl
- << " Use <suffix> instead of the default '.ixx' to\n"
- << " construct the name of the inline file."
- << endl;
-
- o << "--cxx-suffix <suffix>" << endl
- << " Use <suffix> instead of the default '.cxx' to\n"
- << " construct the name of the source file."
- << endl;
-
- o << "--fwd-suffix <suffix>" << endl
- << " Use <suffix> instead of the default '-fwd.hxx'\n"
- << " to construct the name of the forward declaration\n"
- << " file."
- << endl;
-
- o << "--hxx-regex <regex>" << endl
- << " Use <regex> to construct the name of the header\n"
- << " file."
- << endl;
-
- o << "--ixx-regex <regex>" << endl
- << " Use <regex> to construct the name of the inline\n"
- << " file."
- << endl;
-
- o << "--cxx-regex <regex>" << endl
- << " Use <regex> to construct the name of the source\n"
- << " file."
- << endl;
-
- o << "--fwd-regex <regex>" << endl
- << " Use <regex> to construct the name of the forward\n"
- << " declaration file."
- << endl;
-
- // Prologues.
- //
- o << "--hxx-prologue <text>" << endl
- << " Insert <text> at the beginning of the header file."
- << endl;
-
- o << "--ixx-prologue <text>" << endl
- << " Insert <text> at the beginning of the inline file."
- << endl;
-
- o << "--cxx-prologue <text>" << endl
- << " Insert <text> at the beginning of the source file."
- << endl;
-
- o << "--fwd-prologue <text>" << endl
- << " Insert <text> at the beginning of the forward\n"
- << " declaration file."
- << endl;
-
- o << "--prologue <text>" << endl
- << " Insert <text> at the beginning of each generated\n"
- << " file for which there is no file-specific prologue."
- << endl;
-
-
- // Epilogues.
- //
- o << "--hxx-epilogue <text>" << endl
- << " Insert <text> at the end of the header file."
- << endl;
-
- o << "--ixx-epilogue <text>" << endl
- << " Insert <text> at the end of the inline file."
- << endl;
-
- o << "--cxx-epilogue <text>" << endl
- << " Insert <text> at the end of the source file."
- << endl;
-
- o << "--fwd-epilogue <text>" << endl
- << " Insert <text> at the end of the forward\n"
- << " declaration file."
- << endl;
-
- o << "--epilogue <text>" << endl
- << " Insert <text> at the end of each generated file\n"
- << " for which there is no file-specific epilogue."
- << endl;
-
-
- // Prologue files.
- //
- o << "--hxx-prologue-file <file>" << endl
- << " Insert the content of the <file> at the beginning\n"
- << " of the header file."
- << endl;
-
- o << "--ixx-prologue-file <file>" << endl
- << " Insert the content of the <file> at the beginning\n"
- << " of the inline file."
- << endl;
-
- o << "--cxx-prologue-file <file>" << endl
- << " Insert the content of the <file> at the beginning\n"
- << " of the source file."
- << endl;
-
- o << "--fwd-prologue-file <file>" << endl
- << " Insert the content of the <file> at the beginning\n"
- << " of the forward declaration file."
- << endl;
-
- o << "--prologue-file <file>" << endl
- << " Insert the content of the <file> at the beginning\n"
- << " of each generated file for which there is no file-\n"
- << " specific prologue file."
- << endl;
-
- // Epilogue files.
- //
- o << "--hxx-epilogue-file <file>" << endl
- << " Insert the content of the <file> at the end of\n"
- << " the header file."
- << endl;
-
- o << "--ixx-epilogue-file <file>" << endl
- << " Insert the content of the <file> at the end of\n"
- << " the inline file."
- << endl;
-
- o << "--cxx-epilogue-file <file>" << endl
- << " Insert the content of the <file> at the end of\n"
- << " the source file."
- << endl;
-
- o << "--fwd-epilogue-file <file>" << endl
- << " Insert the content of the <file> at the end of\n"
- << " the forward declaration file."
- << endl;
-
- o << "--epilogue-file <file>" << endl
- << " Insert the content of the <file> at the end of\n"
- << " each generated file for which there is no file-\n"
- << " specific epilogue file."
- << endl;
-
- // Misc.
- //
- o << "--parts <num>" << endl
- << " Split generated source code into <num> parts."
- << endl;
-
- o << "--parts-suffix <suffix>" << endl
- << " Use <suffix> instead of the default '-' to\n"
- << " separate the file name from the part number."
- << endl;
-
- o << "--custom-literals <file>" << endl
- << " Load custom XML string to C++ literal mappings\n"
- << " from <file>."
- << endl;
-
- o << "--export-symbol <symbol>" << endl
- << " Export symbol for Win32 DLL export/import control."
- << endl;
-
- o << "--export-xml-schema" << endl
- << " Export/import types in the XML Schema namespace."
- << endl;
-
- o << "--export-maps" << endl
- << " Export polymorphism support maps from Win32 DLL."
- << endl;
-
- o << "--import-maps" << endl
- << " Import polymorphism support maps from Win32 DLL."
- << endl;
-
- o << "--show-anonymous" << endl
- << " Show elements and attributes that are of anonymous\n"
- << " types."
- << endl;
-
- o << "--show-sloc" << endl
- << " Show the number of generated physical source lines\n"
- << " of code (SLOC)."
- << endl;
-
- o << "--sloc-limit <num>" << endl
- << " Check that the number of generated physical source\n"
- << " lines of code (SLOC) does not exceed <num>."
- << endl;
-
- o << "--options-file <file>" << endl
- << " Read additional options from <file>. Each option\n"
- << " should appear on a separate line optionally\n"
- << " followed by space and an argument."
- << endl;
-
- o << "--proprietary-license" << endl
- << " Indicate that the generated code is licensed under\n"
- << " a proprietary license instead of the GPL."
- << endl;
+ CXX::Tree::options::print_usage (wcout);
+ CXX::options::print_usage (wcout);
}
Tree::CLI::OptionsSpec Tree::Generator::
@@ -852,7 +322,6 @@ namespace CXX
AutoUnlinks& unlinks)
{
using std::ios_base;
- namespace Indentation = BackendElements::Indentation;
typedef cutl::re::regexsub Regex;