summaryrefslogtreecommitdiff
path: root/examples/cxx/parser/library
diff options
context:
space:
mode:
Diffstat (limited to 'examples/cxx/parser/library')
-rw-r--r--examples/cxx/parser/library/README44
-rw-r--r--examples/cxx/parser/library/driver.cxx109
-rw-r--r--examples/cxx/parser/library/library-pimpl.cxx183
-rw-r--r--examples/cxx/parser/library/library-pimpl.hxx135
-rw-r--r--examples/cxx/parser/library/library.hxx241
-rw-r--r--examples/cxx/parser/library/library.map15
-rw-r--r--examples/cxx/parser/library/library.xml52
-rw-r--r--examples/cxx/parser/library/library.xsd78
-rw-r--r--examples/cxx/parser/library/makefile109
9 files changed, 0 insertions, 966 deletions
diff --git a/examples/cxx/parser/library/README b/examples/cxx/parser/library/README
deleted file mode 100644
index 3f515f6..0000000
--- a/examples/cxx/parser/library/README
+++ /dev/null
@@ -1,44 +0,0 @@
-This example shows how to use the C++/Parser mapping to construct
-a custom in-memory object model from XML instance documents.
-
-The example consists of the following files:
-
-library.xsd
- XML Schema which describes a library of books.
-
-library.xml
- Sample XML instance document.
-
-library.hxx
- Types that describe a library of books in C++. These are
- hand-written.
-
-library.map
- Type map. It maps XML Schema types defined in library.xsd
- to the C++ types defined in library.hxx.
-
-library-pskel.hxx
-library-pskel.ixx
-library-pskel.cxx
- Parser skeletons generated by XSD from library.xsd and
- library.map.
-
-library-pimpl.hxx
-library-pimpl.cxx
- Parser implementations that construct the custom in-memory
- object model from an XML instance using the types from
- library.hxx. These are hand-written implementations of
- the parser skeletons defined in library-pskel.hxx.
-
-driver.cxx
- Driver for the example. It first constructs a parser
- instance from all the individual parsers found in
- library-pimpl.hxx. In then invokes this parser instance
- to parse the input file and produce the in-memory
- object model. Finally, it prints the contents of the
- in-memory object model to STDERR.
-
-To run the example on the sample XML instance document simply
-execute:
-
-$ ./driver library.xml
diff --git a/examples/cxx/parser/library/driver.cxx b/examples/cxx/parser/library/driver.cxx
deleted file mode 100644
index 3b63801..0000000
--- a/examples/cxx/parser/library/driver.cxx
+++ /dev/null
@@ -1,109 +0,0 @@
-// file : examples/cxx/parser/library/driver.cxx
-// copyright : not copyrighted - public domain
-
-#include <iostream>
-
-#include "library.hxx"
-#include "library-pimpl.hxx"
-
-using std::cerr;
-using std::endl;
-
-int
-main (int argc, char* argv[])
-{
- if (argc != 2)
- {
- cerr << "usage: " << argv[0] << " library.xml" << endl;
- return 1;
- }
-
- try
- {
- using namespace library;
-
-
- // Construct the parser.
- //
- xml_schema::id_pimpl id_p;
- xml_schema::idref_pimpl idref_p;
- xml_schema::string_pimpl string_p;
- xml_schema::boolean_pimpl boolean_p;
-
- isbn_pimpl isbn_p;
-
- title_pimpl title_p;
- title_p.lang_parser (string_p);
-
- genre_pimpl genre_p;
-
- author_pimpl author_p;
- author_p.parsers (string_p, // name
- string_p, // born
- string_p, // died
- idref_p); // recommends
-
- book_pimpl book_p;
- book_p.parsers (isbn_p, // isbn
- title_p, // title
- genre_p, // genre
- author_p, // author
- boolean_p, // available
- id_p); // id
-
- catalog_pimpl catalog_p;
- catalog_p.book_parser (book_p);
-
-
- // Parse the XML instance document.
- //
- xml_schema::document doc_p (
- catalog_p,
- "http://www.codesynthesis.com/library", // root element namespace
- "catalog"); // root element name
-
- catalog_p.pre ();
- doc_p.parse (argv[1]);
- catalog c (catalog_p.post_catalog ());
-
-
- // Let's print what we've got.
- //
- for (catalog::const_iterator bi (c.begin ()); bi != c.end (); ++bi)
- {
- cerr << endl
- << "ID : " << bi->id () << endl
- << "ISBN : " << bi->isbn () << endl
- << "Title : " << bi->title () << endl
- << "Genre : " << bi->genre () << endl;
-
- for (book::authors::const_iterator ai (bi->author ().begin ());
- ai != bi->author ().end ();
- ++ai)
- {
- cerr << "Author : " << ai->name () << endl;
- cerr << " Born : " << ai->born () << endl;
-
- if (!ai->died ().empty ())
- cerr << " Died : " << ai->died () << endl;
-
- if (!ai->recommends ().empty ())
- {
- cerr << " Recommends : " << ai->recommends () << endl;
- }
- }
-
- cerr << "Available : " << std::boolalpha << bi->available () << endl;
- }
- }
- 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/examples/cxx/parser/library/library-pimpl.cxx b/examples/cxx/parser/library/library-pimpl.cxx
deleted file mode 100644
index 7a1e484..0000000
--- a/examples/cxx/parser/library/library-pimpl.cxx
+++ /dev/null
@@ -1,183 +0,0 @@
-// file : examples/cxx/parser/library/library-pimpl.cxx
-// copyright : not copyrighted - public domain
-
-#include "library-pimpl.hxx"
-
-namespace library
-{
- // isbn_impl
- //
- isbn isbn_pimpl::
- post_isbn ()
- {
- return post_unsigned_int ();
- }
-
- // title_pimpl
- //
- void title_pimpl::
- _pre ()
- {
- title_.lang ("");
- }
-
- void title_pimpl::
- lang (const std::string& lang)
- {
- title_.lang (lang);
- }
-
- title title_pimpl::
- post_title ()
- {
- title_.assign (post_string ());
- return title_;
- }
-
- // genre_pimpl
- //
- genre genre_pimpl::
- post_genre ()
- {
- genre r (romance);
- std::string v (post_string ());
-
- if (v == "romance") r = romance; else
- if (v == "fiction") r = fiction; else
- if (v == "horror") r = horror; else
- if (v == "history") r = history; else
- if (v == "philosophy") r = philosophy;
-
- return r;
- }
-
- // person_pimpl
- //
- void person_pimpl::
- _pre ()
- {
- person_.died ("");
- }
-
- void person_pimpl::
- name (const std::string& name)
- {
- person_.name (name);
- }
-
- void person_pimpl::
- born (const std::string& born)
- {
- person_.born (born);
- }
-
- void person_pimpl::
- died (const std::string& died)
- {
- person_.died (died);
- }
-
- person person_pimpl::
- post_person ()
- {
- return person_;
- }
-
- // author_pimpl
- //
- void author_pimpl::
- _pre ()
- {
- person_pimpl::_pre ();
- author_.recommends ("");
- }
-
- void author_pimpl::
- recommends (const std::string& recommends)
- {
- author_.recommends (recommends);
- }
-
- author author_pimpl::
- post_author ()
- {
- person p (post_person ());
-
- author_.name (p.name ());
- author_.born (p.born ());
- author_.died (p.died ());
-
- return author_;
- }
-
- // book_pimpl
- //
- void book_pimpl::
- _pre ()
- {
- book_.author ().clear ();
- }
-
- void book_pimpl::
- isbn (library::isbn isbn)
- {
- book_.isbn (isbn);
- }
-
- void book_pimpl::
- title (const library::title& title)
- {
- book_.title (title);
- }
-
- void book_pimpl::
- genre (library::genre genre)
- {
- book_.genre (genre);
- }
-
- void book_pimpl::
- author (const library::author& author)
- {
- book_.author ().push_back (author);
- }
-
- void book_pimpl::
- available (bool available)
- {
- book_.available (available);
- }
-
- void book_pimpl::
- id (const std::string& id)
- {
- book_.id (id);
- }
-
- book book_pimpl::
- post_book ()
- {
- return book_;
- }
-
- // catalog_pimpl
- //
- void catalog_pimpl::
- _pre ()
- {
- catalog_.clear ();
- }
-
- void catalog_pimpl::
- book (const library::book& book)
- {
- catalog_.push_back (book);
- }
-
- catalog catalog_pimpl::
- post_catalog ()
- {
- return catalog_;
- }
-}
-
diff --git a/examples/cxx/parser/library/library-pimpl.hxx b/examples/cxx/parser/library/library-pimpl.hxx
deleted file mode 100644
index 5d0dcc1..0000000
--- a/examples/cxx/parser/library/library-pimpl.hxx
+++ /dev/null
@@ -1,135 +0,0 @@
-// file : examples/cxx/parser/library/library-pimpl.hxx
-// copyright : not copyrighted - public domain
-
-#ifndef LIBRARY_PIMPL_HXX
-#define LIBRARY_PIMPL_HXX
-
-#include "library.hxx"
-#include "library-pskel.hxx"
-
-namespace library
-{
- //
- //
- struct isbn_pimpl: isbn_pskel, xml_schema::unsigned_int_pimpl
- {
- virtual isbn
- post_isbn ();
- };
-
- //
- //
- struct title_pimpl: title_pskel, xml_schema::string_pimpl
- {
- virtual void
- _pre ();
-
- virtual void
- lang (const std::string&);
-
- virtual title
- post_title ();
-
- private:
- title title_;
- };
-
- //
- //
- struct genre_pimpl: genre_pskel, xml_schema::string_pimpl
- {
- virtual genre
- post_genre ();
- };
-
- //
- //
- struct person_pimpl: virtual person_pskel
- {
- virtual void
- _pre ();
-
- virtual void
- name (const std::string&);
-
- virtual void
- born (const std::string&);
-
- virtual void
- died (const std::string&);
-
- virtual person
- post_person ();
-
- private:
- person person_;
- };
-
- //
- //
- struct author_pimpl: author_pskel, person_pimpl
- {
- virtual void
- _pre ();
-
- virtual void
- recommends (const std::string&);
-
- virtual author
- post_author ();
-
- private:
- author author_;
- };
-
- //
- //
- struct book_pimpl: book_pskel
- {
- virtual void
- _pre ();
-
- virtual void
- isbn (library::isbn);
-
- virtual void
- title (const library::title&);
-
- virtual void
- genre (library::genre);
-
- virtual void
- author (const library::author&);
-
- virtual void
- available (bool);
-
- virtual void
- id (const std::string&);
-
- virtual book
- post_book ();
-
- private:
- book book_;
- };
-
- //
- //
- struct catalog_pimpl: catalog_pskel
- {
- virtual void
- _pre ();
-
- virtual void
- book (const library::book&);
-
- virtual catalog
- post_catalog ();
-
- private:
- catalog catalog_;
- };
-}
-
-#endif // LIBRARY_PIMPL_HXX
diff --git a/examples/cxx/parser/library/library.hxx b/examples/cxx/parser/library/library.hxx
deleted file mode 100644
index 552e7a5..0000000
--- a/examples/cxx/parser/library/library.hxx
+++ /dev/null
@@ -1,241 +0,0 @@
-// file : examples/cxx/parser/library/library.hxx
-// copyright : not copyrighted - public domain
-
-#ifndef LIBRARY_HXX
-#define LIBRARY_HXX
-
-#include <string>
-#include <vector>
-
-namespace library
-{
- //
- //
- typedef unsigned int isbn;
-
-
- //
- //
- struct title: std::string
- {
- // lang
- //
- const std::string&
- lang () const
- {
- return lang_;
- }
-
- void
- lang (const std::string& lang)
- {
- lang_ = lang;
- }
-
- private:
- std::string lang_;
- };
-
-
- //
- //
- enum genre
- {
- romance,
- fiction,
- horror,
- history,
- philosophy
- };
-
-
- //
- //
- struct person
- {
- // name
- //
- const std::string&
- name () const
- {
- return name_;
- }
-
- void
- name (const std::string& name)
- {
- name_ = name;
- }
-
- // born
- //
- const std::string&
- born () const
- {
- return born_;
- }
-
- void
- born (const std::string& born)
- {
- born_ = born;
- }
-
-
- // died
- //
- const std::string&
- died () const
- {
- return died_;
- }
-
- void
- died (const std::string& died)
- {
- died_ = died;
- }
-
- private:
- std::string name_;
- std::string born_;
- std::string died_;
- };
-
-
- //
- //
- struct author: person
- {
- // recommends
- //
- const std::string&
- recommends () const
- {
- return recommends_;
- }
-
- void
- recommends (const std::string& recommends)
- {
- recommends_ = recommends;
- }
-
- private:
- std::string recommends_;
- };
-
-
- //
- //
- struct book
- {
- // isbn
- //
- library::isbn
- isbn () const
- {
- return isbn_;
- }
-
- void
- isbn (const library::isbn& isbn)
- {
- isbn_ = isbn;
- }
-
-
- // title
- //
- library::title
- title () const
- {
- return title_;
- }
-
- void
- title (const library::title& title)
- {
- title_ = title;
- }
-
-
- // genre
- //
- library::genre
- genre () const
- {
- return genre_;
- }
-
- void
- genre (const library::genre& genre)
- {
- genre_ = genre;
- }
-
-
- // author
- //
- typedef std::vector<library::author> authors;
-
- const authors&
- author () const
- {
- return author_;
- }
-
- authors&
- author ()
- {
- return author_;
- }
-
-
- // available
- //
- bool
- available () const
- {
- return available_;
- }
-
- void
- available (bool available)
- {
- available_ = available;
- }
-
-
- // id
- //
- const std::string&
- id () const
- {
- return id_;
- }
-
- void
- id (const std::string& id)
- {
- id_ = id;
- }
-
- private:
- library::isbn isbn_;
- library::title title_;
- library::genre genre_;
-
- authors author_;
-
- bool available_;
- std::string id_;
- };
-
-
- //
- //
- typedef std::vector<book> catalog;
-}
-
-#endif // LIBRARY_HXX
diff --git a/examples/cxx/parser/library/library.map b/examples/cxx/parser/library/library.map
deleted file mode 100644
index 3a49b49..0000000
--- a/examples/cxx/parser/library/library.map
+++ /dev/null
@@ -1,15 +0,0 @@
-# file : examples/cxx/parser/library/library.map
-# copyright : not copyrighted - public domain
-
-namespace http://www.codesynthesis.com/library ::library
-{
- include "library.hxx";
-
- isbn isbn isbn;
- title title;
- genre genre genre;
- person person;
- author author;
- book book;
- catalog catalog;
-}
diff --git a/examples/cxx/parser/library/library.xml b/examples/cxx/parser/library/library.xml
deleted file mode 100644
index b1ac98c..0000000
--- a/examples/cxx/parser/library/library.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-file : examples/cxx/parser/library/library.xml
-copyright : not copyrighted - public domain
-
--->
-
-<lib:catalog xmlns:lib="http://www.codesynthesis.com/library"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.codesynthesis.com/library library.xsd">
-
- <book id="MM" available="false">
- <isbn>0679760806</isbn>
- <title>The Master and Margarita</title>
- <genre>fiction</genre>
-
- <author recommends="WP">
- <name>Mikhail Bulgakov</name>
- <born>1891-05-15</born>
- <died>1940-03-10</died>
- </author>
- </book>
-
-
- <book id="WP" available="true" >
- <isbn>0679600841</isbn>
- <title>War and Peace</title>
- <genre>history</genre>
-
- <author recommends="CP">
- <name>Leo Tolstoy</name>
- <born>1828-09-09</born>
- <died>1910-11-20</died>
- </author>
- </book>
-
-
- <book id="CP" available="false">
- <isbn>0679420290</isbn>
- <title>Crime and Punishment</title>
- <genre>philosophy</genre>
-
- <author>
- <name>Fyodor Dostoevsky</name>
- <born>1821-11-11</born>
- <died>1881-02-09</died>
- </author>
- </book>
-
-</lib:catalog>
diff --git a/examples/cxx/parser/library/library.xsd b/examples/cxx/parser/library/library.xsd
deleted file mode 100644
index 71e4005..0000000
--- a/examples/cxx/parser/library/library.xsd
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-file : examples/cxx/parser/library/library.xsd
-copyright : not copyrighted - public domain
-
--->
-
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:lib="http://www.codesynthesis.com/library"
- targetNamespace="http://www.codesynthesis.com/library">
-
- <xsd:simpleType name="isbn">
- <xsd:restriction base="xsd:unsignedInt"/>
- </xsd:simpleType>
-
-
- <xsd:complexType name="title">
- <xsd:simpleContent>
- <xsd:extension base="xsd:string">
- <xsd:attribute name="lang" type="xsd:string"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
-
- <xsd:simpleType name="genre">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="romance"/>
- <xsd:enumeration value="fiction"/>
- <xsd:enumeration value="horror"/>
- <xsd:enumeration value="history"/>
- <xsd:enumeration value="philosophy"/>
- </xsd:restriction>
- </xsd:simpleType>
-
-
- <xsd:complexType name="person">
- <xsd:sequence>
- <xsd:element name="name" type="xsd:string"/>
- <xsd:element name="born" type="xsd:string"/>
- <xsd:element name="died" type="xsd:string" minOccurs="0"/>
- </xsd:sequence>
- </xsd:complexType>
-
-
- <xsd:complexType name="author">
- <xsd:complexContent>
- <xsd:extension base="lib:person">
- <xsd:attribute name="recommends" type="xsd:IDREF"/> <!-- Book -->
- </xsd:extension>
- </xsd:complexContent>
- </xsd:complexType>
-
-
- <xsd:complexType name="book">
- <xsd:sequence>
- <xsd:element name="isbn" type="lib:isbn"/>
- <xsd:element name="title" type="lib:title"/>
- <xsd:element name="genre" type="lib:genre"/>
- <xsd:element name="author" type="lib:author" maxOccurs="unbounded"/>
- </xsd:sequence>
- <xsd:attribute name="available" type="xsd:boolean" use="required"/>
- <xsd:attribute name="id" type="xsd:ID" use="required"/>
- </xsd:complexType>
-
-
- <xsd:complexType name="catalog">
- <xsd:sequence>
- <xsd:element name="book" type="lib:book" maxOccurs="unbounded"/>
- </xsd:sequence>
- </xsd:complexType>
-
-
- <xsd:element name="catalog" type="lib:catalog"/>
-
-</xsd:schema>
diff --git a/examples/cxx/parser/library/makefile b/examples/cxx/parser/library/makefile
deleted file mode 100644
index fc6cdaf..0000000
--- a/examples/cxx/parser/library/makefile
+++ /dev/null
@@ -1,109 +0,0 @@
-# file : examples/cxx/parser/library/makefile
-# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
-
-include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make
-
-xsd := library.xsd
-cxx := driver.cxx library-pimpl.cxx
-
-obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o))
-dep := $(obj:.o=.o.d)
-
-driver := $(out_base)/driver
-install := $(out_base)/.install
-dist := $(out_base)/.dist
-dist-win := $(out_base)/.dist-win
-clean := $(out_base)/.clean
-
-
-# Import.
-#
-$(call import,\
- $(scf_root)/import/libxerces-c/stub.make,\
- l: xerces_c.l,cpp-options: xerces_c.l.cpp-options)
-
-
-# Build.
-#
-$(driver): $(obj) $(xerces_c.l)
-
-$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd
-$(obj) $(dep): $(xerces_c.l.cpp-options)
-
-genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx)
-gen := $(addprefix $(out_base)/,$(genf))
-
-$(gen): xsd := $(out_root)/xsd/xsd
-$(gen): xsd_options += --generate-inline --type-map $(src_base)/library.map
-$(gen): $(out_root)/xsd/xsd $(src_base)/library.map
-
-$(call include-dep,$(dep),$(obj),$(gen))
-
-# Convenience alias for default target.
-#
-$(out_base)/: $(driver)
-
-
-# Install & Dist.
-#
-dist-common := $(out_base)/.dist-common
-
-$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base))
-
-$(install):
- $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README)
- $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx)
- $(call install-data,$(src_base)/library.xsd,$(install_doc_dir)/xsd/$(path)/library.xsd)
- $(call install-data,$(src_base)/library.xml,$(install_doc_dir)/xsd/$(path)/library.xml)
- $(call install-data,$(src_base)/library.map,$(install_doc_dir)/xsd/$(path)/library.map)
- $(call install-data,$(src_base)/library.hxx,$(install_doc_dir)/xsd/$(path)/library.hxx)
- $(call install-data,$(src_base)/library-pimpl.hxx,$(install_doc_dir)/xsd/$(path)/library-pimpl.hxx)
- $(call install-data,$(src_base)/library-pimpl.cxx,$(install_doc_dir)/xsd/$(path)/library-pimpl.cxx)
-
-$(dist-common):
- $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx)
- $(call install-data,$(src_base)/library.xsd,$(dist_prefix)/$(path)/library.xsd)
- $(call install-data,$(src_base)/library.xml,$(dist_prefix)/$(path)/library.xml)
- $(call install-data,$(src_base)/library.map,$(dist_prefix)/$(path)/library.map)
- $(call install-data,$(src_base)/library.hxx,$(dist_prefix)/$(path)/library.hxx)
- $(call install-data,$(src_base)/library-pimpl.hxx,$(dist_prefix)/$(path)/library-pimpl.hxx)
- $(call install-data,$(src_base)/library-pimpl.cxx,$(dist_prefix)/$(path)/library-pimpl.cxx)
-
-$(dist): $(dist-common)
- $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README)
-
-$(dist-win): $(dist-common)
- $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt)
- $(call message,,todos $(dist_prefix)/$(path)/README.txt)
-
-# Clean.
-#
-$(clean): $(driver).o.clean \
- $(addsuffix .cxx.clean,$(obj)) \
- $(addsuffix .cxx.clean,$(dep)) \
- $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean))
-
-# Generated .gitignore.
-#
-ifeq ($(out_base),$(src_base))
-$(gen): | $(out_base)/.gitignore
-$(driver): | $(out_base)/.gitignore
-
-$(out_base)/.gitignore: files := driver $(genf)
-$(clean): $(out_base)/.gitignore.clean
-
-$(call include,$(bld_root)/git/gitignore.make)
-endif
-
-# How to.
-#
-$(call include,$(bld_root)/cxx/o-e.make)
-$(call include,$(bld_root)/cxx/cxx-o.make)
-$(call include,$(bld_root)/cxx/cxx-d.make)
-$(call include,$(bld_root)/install.make)
-$(call include,$(scf_root)/xsd/parser/xsd-cxx.make)
-
-
-# Dependencies.
-#
-$(call import,$(src_root)/xsd/makefile)