From 5e527213a2430bb3018e5eebd909aef294edf9b5 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Fri, 18 Dec 2020 18:48:46 +0300 Subject: Switch to build2 --- xsd-examples/cxx/parser/hello/README | 28 +++++++++++++ xsd-examples/cxx/parser/hello/buildfile | 24 ++++++++++++ xsd-examples/cxx/parser/hello/driver.cxx | 67 ++++++++++++++++++++++++++++++++ xsd-examples/cxx/parser/hello/hello.xml | 19 +++++++++ xsd-examples/cxx/parser/hello/hello.xsd | 21 ++++++++++ 5 files changed, 159 insertions(+) create mode 100644 xsd-examples/cxx/parser/hello/README create mode 100644 xsd-examples/cxx/parser/hello/buildfile create mode 100644 xsd-examples/cxx/parser/hello/driver.cxx create mode 100644 xsd-examples/cxx/parser/hello/hello.xml create mode 100644 xsd-examples/cxx/parser/hello/hello.xsd (limited to 'xsd-examples/cxx/parser/hello') diff --git a/xsd-examples/cxx/parser/hello/README b/xsd-examples/cxx/parser/hello/README new file mode 100644 index 0000000..97449de --- /dev/null +++ b/xsd-examples/cxx/parser/hello/README @@ -0,0 +1,28 @@ +This is a "Hello, world!" example that shows how to use the +C++/Parser mapping to parse XML instance documents. + +The example consists of the following files: + +hello.xsd + XML Schema which describes "hello" instance documents. + +hello.xml + Sample XML instance document. + +hello-pskel.hxx +hello-pskel.cxx + Parser skeletons generated by XSD from hello.xsd. + +driver.cxx + A parser implementation and a driver for the example. The + parser implementation simply prints the data to STDERR. + The driver first constructs a parser instance from the + parser implementation mentioned above and a couple of + predefined parsers for the XML Schema built-in types. + In then invokes this parser instance to parse the input + file. + +To run the example on the sample XML instance document simply +execute: + +$ ./driver hello.xml diff --git a/xsd-examples/cxx/parser/hello/buildfile b/xsd-examples/cxx/parser/hello/buildfile new file mode 100644 index 0000000..2df4a7f --- /dev/null +++ b/xsd-examples/cxx/parser/hello/buildfile @@ -0,0 +1,24 @@ +# file : cxx/parser/hello/buildfile +# license : not copyrighted - public domain + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +./: exe{driver} doc{README} + +exe{driver}: {hxx cxx}{* -hello-pskel} {hxx ixx cxx}{hello-pskel} $libs + +exe{driver}: xml{hello}: test.input = true + +<{hxx ixx cxx}{hello-pskel}>: xsd{hello} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-examples/cxx/parser/hello/driver.cxx b/xsd-examples/cxx/parser/hello/driver.cxx new file mode 100644 index 0000000..024d2fc --- /dev/null +++ b/xsd-examples/cxx/parser/hello/driver.cxx @@ -0,0 +1,67 @@ +// file : cxx/parser/hello/driver.cxx +// copyright : not copyrighted - public domain + +#include +#include + +#include "hello-pskel.hxx" + +using namespace std; + +struct hello_pimpl: hello_pskel +{ + virtual void + greeting (const string& greeting) + { + greeting_ = greeting; + } + + virtual void + name (const string& name) + { + cout << greeting_ << ", " << name << "!" << endl; + } + +private: + string greeting_; +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " hello.xml" << endl; + return 1; + } + + try + { + // Construct the parser. + // + xml_schema::string_pimpl string_p; + hello_pimpl hello_p; + + hello_p.greeting_parser (string_p); + hello_p.name_parser (string_p); + + // Parse the XML instance document. The second argument to the + // document's constructor is the document's root element name. + // + xml_schema::document doc_p (hello_p, "hello"); + + hello_p.pre (); + doc_p.parse (argv[1]); + hello_p.post_hello (); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + return 1; + } +} diff --git a/xsd-examples/cxx/parser/hello/hello.xml b/xsd-examples/cxx/parser/hello/hello.xml new file mode 100644 index 0000000..1f5adad --- /dev/null +++ b/xsd-examples/cxx/parser/hello/hello.xml @@ -0,0 +1,19 @@ + + + + + + + Hello + + sun + moon + world + + diff --git a/xsd-examples/cxx/parser/hello/hello.xsd b/xsd-examples/cxx/parser/hello/hello.xsd new file mode 100644 index 0000000..81907d6 --- /dev/null +++ b/xsd-examples/cxx/parser/hello/hello.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + -- cgit v1.1