summaryrefslogtreecommitdiffstats
path: root/examples/xml
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-07-10 15:24:15 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-07-10 15:24:15 -0500
commitbd0f3345a938b35ce6a12f6150373b0955b8dd12 (patch)
tree7a520322212d48ebcb9fbe1087e7fca28b76185c /examples/xml
downloadqt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.tar.gz
qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.zip
Add Qt3 development HEAD version
Diffstat (limited to 'examples/xml')
-rw-r--r--examples/xml/outliner/main.cpp22
-rw-r--r--examples/xml/outliner/outliner.doc40
-rw-r--r--examples/xml/outliner/outliner.pro11
-rw-r--r--examples/xml/outliner/outlinetree.cpp103
-rw-r--r--examples/xml/outliner/outlinetree.h30
-rw-r--r--examples/xml/outliner/todos.opml55
-rw-r--r--examples/xml/tagreader-with-features/fnord.xml13
-rw-r--r--examples/xml/tagreader-with-features/structureparser.cpp56
-rw-r--r--examples/xml/tagreader-with-features/structureparser.h29
-rw-r--r--examples/xml/tagreader-with-features/tagreader-with-features.pro11
-rw-r--r--examples/xml/tagreader-with-features/tagreader.cpp74
-rw-r--r--examples/xml/tagreader-with-features/tagreader.doc40
-rw-r--r--examples/xml/tagreader/animals.xml7
-rw-r--r--examples/xml/tagreader/structureparser.cpp34
-rw-r--r--examples/xml/tagreader/structureparser.h29
-rw-r--r--examples/xml/tagreader/tagreader.cpp30
-rw-r--r--examples/xml/tagreader/tagreader.doc35
-rw-r--r--examples/xml/tagreader/tagreader.pro11
18 files changed, 630 insertions, 0 deletions
diff --git a/examples/xml/outliner/main.cpp b/examples/xml/outliner/main.cpp
new file mode 100644
index 0000000..47e3bea
--- /dev/null
+++ b/examples/xml/outliner/main.cpp
@@ -0,0 +1,22 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for Qt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#include <qapplication.h>
+#include "outlinetree.h"
+
+int main( int argc, char **argv )
+{
+ QApplication a( argc, argv );
+
+ OutlineTree outline( "todos.opml" );
+ a.setMainWidget( &outline );
+ outline.show();
+
+ return a.exec();
+}
diff --git a/examples/xml/outliner/outliner.doc b/examples/xml/outliner/outliner.doc
new file mode 100644
index 0000000..c21043d
--- /dev/null
+++ b/examples/xml/outliner/outliner.doc
@@ -0,0 +1,40 @@
+/*
+*/
+
+/*! \page outliner-example.html
+
+ \ingroup xml-examples
+
+ \title Outliner to show use of DOM
+
+ This example presents a small outliner program to show the basic usage of
+ the \link xml.html#dom DOM classes \endlink. The format of the outlines
+ is the OPML format as described in http://www.opml.org/spec.
+
+ This example shows how to load a DOM tree from an XML file and how to
+ traverse it.
+
+ <hr>
+
+ Sample XML file (todos.opml):
+
+ \include xml/outliner/todos.opml
+
+ <hr>
+
+ Header file (outlinetree.h):
+
+ \include xml/outliner/outlinetree.h
+
+ <hr>
+
+ Implementation (outlinetree.cpp):
+
+ \include xml/outliner/outlinetree.cpp
+
+ <hr>
+
+ Main (main.cpp):
+
+ \include xml/outliner/main.cpp
+*/
diff --git a/examples/xml/outliner/outliner.pro b/examples/xml/outliner/outliner.pro
new file mode 100644
index 0000000..1dcdc44
--- /dev/null
+++ b/examples/xml/outliner/outliner.pro
@@ -0,0 +1,11 @@
+TEMPLATE = app
+TARGET = outliner
+
+CONFIG += qt warn_on release
+
+REQUIRES = xml large-config
+
+HEADERS = outlinetree.h
+SOURCES = main.cpp \
+ outlinetree.cpp
+INTERFACES =
diff --git a/examples/xml/outliner/outlinetree.cpp b/examples/xml/outliner/outlinetree.cpp
new file mode 100644
index 0000000..726955b
--- /dev/null
+++ b/examples/xml/outliner/outlinetree.cpp
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for Qt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#include "outlinetree.h"
+#include <qfile.h>
+#include <qmessagebox.h>
+
+OutlineTree::OutlineTree( const QString fileName, QWidget *parent, const char *name )
+ : QListView( parent, name )
+{
+ // div. configuration of the list view
+ addColumn( "Outlines" );
+ setSorting( -1 );
+ setRootIsDecorated( TRUE );
+
+ // read the XML file and create DOM tree
+ QFile opmlFile( fileName );
+ if ( !opmlFile.open( IO_ReadOnly ) ) {
+ QMessageBox::critical( 0,
+ tr( "Critical Error" ),
+ tr( "Cannot open file %1" ).arg( fileName ) );
+ return;
+ }
+ if ( !domTree.setContent( &opmlFile ) ) {
+ QMessageBox::critical( 0,
+ tr( "Critical Error" ),
+ tr( "Parsing error for file %1" ).arg( fileName ) );
+ opmlFile.close();
+ return;
+ }
+ opmlFile.close();
+
+ // get the header information from the DOM
+ QDomElement root = domTree.documentElement();
+ QDomNode node;
+ node = root.firstChild();
+ while ( !node.isNull() ) {
+ if ( node.isElement() && node.nodeName() == "head" ) {
+ QDomElement header = node.toElement();
+ getHeaderInformation( header );
+ break;
+ }
+ node = node.nextSibling();
+ }
+ // create the tree view out of the DOM
+ node = root.firstChild();
+ while ( !node.isNull() ) {
+ if ( node.isElement() && node.nodeName() == "body" ) {
+ QDomElement body = node.toElement();
+ buildTree( 0, body );
+ break;
+ }
+ node = node.nextSibling();
+ }
+}
+
+OutlineTree::~OutlineTree()
+{
+}
+
+void OutlineTree::getHeaderInformation( const QDomElement &header )
+{
+ // visit all children of the header element and look if you can make
+ // something with it
+ QDomNode node = header.firstChild();
+ while ( !node.isNull() ) {
+ if ( node.isElement() ) {
+ // case for the different header entries
+ if ( node.nodeName() == "title" ) {
+ QDomText textChild = node.firstChild().toText();
+ if ( !textChild.isNull() ) {
+ setColumnText( 0, textChild.nodeValue() );
+ }
+ }
+ }
+ node = node.nextSibling();
+ }
+}
+
+void OutlineTree::buildTree( QListViewItem *parentItem, const QDomElement &parentElement )
+{
+ QListViewItem *thisItem = 0;
+ QDomNode node = parentElement.firstChild();
+ while ( !node.isNull() ) {
+ if ( node.isElement() && node.nodeName() == "outline" ) {
+ // add a new list view item for the outline
+ if ( parentItem == 0 )
+ thisItem = new QListViewItem( this, thisItem );
+ else
+ thisItem = new QListViewItem( parentItem, thisItem );
+ thisItem->setText( 0, node.toElement().attribute( "text" ) );
+ // recursive build of the tree
+ buildTree( thisItem, node.toElement() );
+ }
+ node = node.nextSibling();
+ }
+}
diff --git a/examples/xml/outliner/outlinetree.h b/examples/xml/outliner/outlinetree.h
new file mode 100644
index 0000000..ab2f920
--- /dev/null
+++ b/examples/xml/outliner/outlinetree.h
@@ -0,0 +1,30 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for Qt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#ifndef OUTLINETREE_H
+#define OUTLINETREE_H
+
+#include <qlistview.h>
+#include <qdom.h>
+
+class OutlineTree : public QListView
+{
+ Q_OBJECT
+
+public:
+ OutlineTree( const QString fileName, QWidget *parent = 0, const char *name = 0 );
+ ~OutlineTree();
+
+private:
+ QDomDocument domTree;
+ void getHeaderInformation( const QDomElement &header );
+ void buildTree( QListViewItem *parentItem, const QDomElement &parentElement );
+};
+
+#endif // OUTLINETREE_H
diff --git a/examples/xml/outliner/todos.opml b/examples/xml/outliner/todos.opml
new file mode 100644
index 0000000..6279390
--- /dev/null
+++ b/examples/xml/outliner/todos.opml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<opml version="1.0">
+ <head>
+ <title>Todo List</title>
+ <dateCreated>Tue, 31 Oct 2000 17:00:17 CET</dateCreated>
+ <dateModified>Tue, 31 Oct 2000 17:00:17 CET</dateModified>
+ <ownerName>Arthur Dent</ownerName>
+ <ownerEmail>info@trolltech.com</ownerEmail>
+ </head>
+ <body>
+ <outline text="Background">
+ <outline text="This is an example todo list."/>
+ </outline>
+ <outline text="Books to read">
+ <outline text="Science Fiction">
+ <outline text="Philip K. Dick">
+ <outline text="Do Androids Dream of Electical Sheep?"/>
+ <outline text="The Three Stigmata of Palmer Eldritch"/>
+ </outline>
+ <outline text="Robert A. Heinlein">
+ <outline text="Stranger in a Strange Land"/>
+ </outline>
+ <outline text="Isaac Asimov">
+ <outline text="Foundation and Empire"/>
+ </outline>
+ </outline>
+ <outline text="Qt Books (in English)">
+ <outline text="Blanchette &amp; Summerfield: C++ GUI Programming with Qt 3"/>
+ <outline text="Dalheimer: Programming with Qt"/>
+ <outline text="Griffith: KDE 2/Qt Programming Bible"/>
+ <outline text="Hughes: Linux Rapid Application Development"/>
+ <outline text="Solin: Qt Programming in 24 hours"/>
+ <outline text="Ward: Qt 2 Programming for Linux and Windows 2000"/>
+ </outline>
+ </outline>
+ <outline text="Shopping list">
+ <outline text="General">
+ <outline text="Towel"/>
+ <outline text="Hair dryer"/>
+ <outline text="Underpants"/>
+ </outline>
+ <outline text="For Sunday">
+ <outline text="Beef"/>
+ <outline text="Rice"/>
+ <outline text="Carrots"/>
+ <outline text="Beans"/>
+ <outline text="Beer"/>
+ <outline text="Wine"/>
+ <outline text="Orange juice"/>
+ </outline>
+ </outline>
+ <outline text="Write a letter to Ford">
+ </outline>
+ </body>
+</opml>
diff --git a/examples/xml/tagreader-with-features/fnord.xml b/examples/xml/tagreader-with-features/fnord.xml
new file mode 100644
index 0000000..4d1303d
--- /dev/null
+++ b/examples/xml/tagreader-with-features/fnord.xml
@@ -0,0 +1,13 @@
+<document xmlns:book = 'http://trolltech.com/fnord/book/'
+ xmlns = 'http://trolltech.com/fnord/' >
+<book>
+ <book:title>Practical XML</book:title>
+ <book:author xmlns:fnord = 'http://trolltech.com/fnord/'
+ title="Ms"
+ fnord:title="Goddess"
+ name="Eris Kallisti"/>
+ <chapter>
+ <title>A Namespace Called fnord</title>
+ </chapter>
+</book>
+</document>
diff --git a/examples/xml/tagreader-with-features/structureparser.cpp b/examples/xml/tagreader-with-features/structureparser.cpp
new file mode 100644
index 0000000..ea6c1de
--- /dev/null
+++ b/examples/xml/tagreader-with-features/structureparser.cpp
@@ -0,0 +1,56 @@
+/*
+*/
+
+#include "structureparser.h"
+
+#include <qstring.h>
+#include <qlistview.h>
+
+StructureParser::StructureParser( QListView * t )
+ : QXmlDefaultHandler()
+{
+ setListView( t );
+}
+
+void StructureParser::setListView( QListView * t )
+{
+ table = t;
+ table->setSorting( -1 );
+ table->addColumn( "Qualified name" );
+ table->addColumn( "Namespace" );
+}
+
+bool StructureParser::startElement( const QString& namespaceURI,
+ const QString& ,
+ const QString& qName,
+ const QXmlAttributes& attributes)
+{
+ QListViewItem * element;
+
+ if ( ! stack.isEmpty() ){
+ QListViewItem *lastChild = stack.top()->firstChild();
+ if ( lastChild ) {
+ while ( lastChild->nextSibling() )
+ lastChild = lastChild->nextSibling();
+ }
+ element = new QListViewItem( stack.top(), lastChild, qName, namespaceURI );
+ } else {
+ element = new QListViewItem( table, qName, namespaceURI );
+ }
+ stack.push( element );
+ element->setOpen( TRUE );
+
+ if ( attributes.length() > 0 ) {
+ for ( int i = 0 ; i < attributes.length(); i++ ) {
+ new QListViewItem( element, attributes.qName(i), attributes.uri(i) );
+ }
+ }
+ return TRUE;
+}
+
+bool StructureParser::endElement( const QString&, const QString&,
+ const QString& )
+{
+ stack.pop();
+ return TRUE;
+}
diff --git a/examples/xml/tagreader-with-features/structureparser.h b/examples/xml/tagreader-with-features/structureparser.h
new file mode 100644
index 0000000..32ada29
--- /dev/null
+++ b/examples/xml/tagreader-with-features/structureparser.h
@@ -0,0 +1,29 @@
+/*
+*/
+
+#ifndef STRUCTUREPARSER_H
+#define STRUCTUREPARSER_H
+
+#include <qxml.h>
+#include <qptrstack.h>
+
+class QListView;
+class QListViewItem;
+class QString;
+
+class StructureParser: public QXmlDefaultHandler
+{
+public:
+ StructureParser( QListView * );
+ bool startElement( const QString&, const QString&, const QString& ,
+ const QXmlAttributes& );
+ bool endElement( const QString&, const QString&, const QString& );
+
+ void setListView( QListView * );
+
+private:
+ QPtrStack<QListViewItem> stack;
+ QListView * table;
+};
+
+#endif
diff --git a/examples/xml/tagreader-with-features/tagreader-with-features.pro b/examples/xml/tagreader-with-features/tagreader-with-features.pro
new file mode 100644
index 0000000..ffe7648
--- /dev/null
+++ b/examples/xml/tagreader-with-features/tagreader-with-features.pro
@@ -0,0 +1,11 @@
+TEMPLATE = app
+TARGET = tagreader-with-features
+
+CONFIG += qt warn_on release
+
+REQUIRES = xml large-config
+
+HEADERS = structureparser.h
+SOURCES = tagreader.cpp \
+ structureparser.cpp
+INTERFACES =
diff --git a/examples/xml/tagreader-with-features/tagreader.cpp b/examples/xml/tagreader-with-features/tagreader.cpp
new file mode 100644
index 0000000..32a7da0
--- /dev/null
+++ b/examples/xml/tagreader-with-features/tagreader.cpp
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for Qt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#include "structureparser.h"
+#include <qapplication.h>
+#include <qfile.h>
+#include <qxml.h>
+#include <qlistview.h>
+#include <qgrid.h>
+#include <qmainwindow.h>
+#include <qlabel.h>
+
+int main( int argc, char **argv )
+{
+ QApplication app( argc, argv );
+
+ QFile xmlFile( argc == 2 ? argv[1] : "fnord.xml" );
+ QXmlInputSource source( &xmlFile );
+
+ QXmlSimpleReader reader;
+
+ QGrid * container = new QGrid( 3 );
+
+ QListView * nameSpace = new QListView( container, "table_namespace" );
+ StructureParser * handler = new StructureParser( nameSpace );
+ reader.setContentHandler( handler );
+ reader.parse( source );
+
+ QListView * namespacePrefix = new QListView( container,
+ "table_namespace_prefix" );
+ handler->setListView( namespacePrefix );
+ reader.setFeature( "http://xml.org/sax/features/namespace-prefixes",
+ TRUE );
+ source.reset();
+ reader.parse( source );
+
+ QListView * prefix = new QListView( container, "table_prefix");
+ handler->setListView( prefix );
+ reader.setFeature( "http://xml.org/sax/features/namespaces", FALSE );
+ source.reset();
+ reader.parse( source );
+
+ // namespace label
+ (void) new QLabel(
+ "Default:\n"
+ "http://xml.org/sax/features/namespaces: TRUE\n"
+ "http://xml.org/sax/features/namespace-prefixes: FALSE\n",
+ container );
+
+ // namespace prefix label
+ (void) new QLabel(
+ "\n"
+ "http://xml.org/sax/features/namespaces: TRUE\n"
+ "http://xml.org/sax/features/namespace-prefixes: TRUE\n",
+ container );
+
+ // prefix label
+ (void) new QLabel(
+ "\n"
+ "http://xml.org/sax/features/namespaces: FALSE\n"
+ "http://xml.org/sax/features/namespace-prefixes: TRUE\n",
+ container );
+
+
+ app.setMainWidget( container );
+ container->show();
+ return app.exec();
+}
diff --git a/examples/xml/tagreader-with-features/tagreader.doc b/examples/xml/tagreader-with-features/tagreader.doc
new file mode 100644
index 0000000..1d11dc2
--- /dev/null
+++ b/examples/xml/tagreader-with-features/tagreader.doc
@@ -0,0 +1,40 @@
+/*
+*/
+
+/*! \page tagreader-with-features-example.html
+
+ \ingroup xml-examples
+
+ \title Demonstration of SAX2 features
+
+ This example presents a small \link xml.html#sax2 SAX2 \endlink
+ reader that outputs the qualified names and the
+ respective namespace URIs of all elements and attributes in an
+ XML file. Additionally the tree structure of the document is displayed.
+
+ In three listviews the program shows the different output of the reader
+ depending on how the SAX2 \link xml.html#sax2Namespaces features \endlink
+ \e http://xml.org/sax/features/namespaces and
+ \e http://xml.org/sax/features/namespace-prefixes are set.
+
+ This example is thoroughly explained in a
+ \link xml-sax-features-walkthrough.html walkthrough. \endlink
+
+ <hr>
+
+ Header file:
+
+ \include xml/tagreader-with-features/structureparser.h
+
+ <hr>
+
+ Implementation:
+
+ \include xml/tagreader-with-features/structureparser.cpp
+
+ <hr>
+
+ Main:
+
+ \include xml/tagreader-with-features/tagreader.cpp
+*/
diff --git a/examples/xml/tagreader/animals.xml b/examples/xml/tagreader/animals.xml
new file mode 100644
index 0000000..e128490
--- /dev/null
+++ b/examples/xml/tagreader/animals.xml
@@ -0,0 +1,7 @@
+<animals>
+<mammals>
+ <monkeys> <gorilla/> <orangutan/> </monkeys>
+</mammals>
+<birds> <pigeon/> <penguin/> </birds>
+</animals>
+
diff --git a/examples/xml/tagreader/structureparser.cpp b/examples/xml/tagreader/structureparser.cpp
new file mode 100644
index 0000000..dd222b6
--- /dev/null
+++ b/examples/xml/tagreader/structureparser.cpp
@@ -0,0 +1,34 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for Qt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#include "structureparser.h"
+
+#include <stdio.h>
+#include <qstring.h>
+
+bool StructureParser::startDocument()
+{
+ indent = "";
+ return TRUE;
+}
+
+bool StructureParser::startElement( const QString&, const QString&,
+ const QString& qName,
+ const QXmlAttributes& )
+{
+ printf( "%s%s\n", (const char*)indent, (const char*)qName );
+ indent += " ";
+ return TRUE;
+}
+
+bool StructureParser::endElement( const QString&, const QString&, const QString& )
+{
+ indent.remove( (uint)0, 4 );
+ return TRUE;
+}
diff --git a/examples/xml/tagreader/structureparser.h b/examples/xml/tagreader/structureparser.h
new file mode 100644
index 0000000..31a6eb7
--- /dev/null
+++ b/examples/xml/tagreader/structureparser.h
@@ -0,0 +1,29 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for Qt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#ifndef STRUCTUREPARSER_H
+#define STRUCTUREPARSER_H
+
+#include <qxml.h>
+
+class QString;
+
+class StructureParser : public QXmlDefaultHandler
+{
+public:
+ bool startDocument();
+ bool startElement( const QString&, const QString&, const QString& ,
+ const QXmlAttributes& );
+ bool endElement( const QString&, const QString&, const QString& );
+
+private:
+ QString indent;
+};
+
+#endif
diff --git a/examples/xml/tagreader/tagreader.cpp b/examples/xml/tagreader/tagreader.cpp
new file mode 100644
index 0000000..d337b1f
--- /dev/null
+++ b/examples/xml/tagreader/tagreader.cpp
@@ -0,0 +1,30 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for Qt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#include "structureparser.h"
+#include <qfile.h>
+#include <qxml.h>
+#include <qwindowdefs.h>
+
+int main( int argc, char **argv )
+{
+ if ( argc < 2 ) {
+ fprintf( stderr, "Usage: %s <xmlfile> [<xmlfile> ...]\n", argv[0] );
+ return 1;
+ }
+ StructureParser handler;
+ QXmlSimpleReader reader;
+ reader.setContentHandler( &handler );
+ for ( int i=1; i < argc; i++ ) {
+ QFile xmlFile( argv[i] );
+ QXmlInputSource source( &xmlFile );
+ reader.parse( source );
+ }
+ return 0;
+}
diff --git a/examples/xml/tagreader/tagreader.doc b/examples/xml/tagreader/tagreader.doc
new file mode 100644
index 0000000..9a0bad0
--- /dev/null
+++ b/examples/xml/tagreader/tagreader.doc
@@ -0,0 +1,35 @@
+/*
+*/
+
+/*! \page tagreader-example.html
+
+ \ingroup xml-examples
+
+ \title A tiny SAX2 parser
+
+ This example presents a small \link xml.html#sax2 SAX2 \endlink
+ reader that outputs the names of all elements in an
+ XML document on the command line. The element names are
+ indented corresponding to their nesting
+
+ This example is thoroughly explained in a
+ \link xml-sax-walkthrough.html walkthrough. \endlink
+
+ <hr>
+
+ Header file:
+
+ \include xml/tagreader/structureparser.h
+
+ <hr>
+
+ Implementation:
+
+ \include xml/tagreader/structureparser.cpp
+
+ <hr>
+
+ Main:
+
+ \include xml/tagreader/tagreader.cpp
+*/
diff --git a/examples/xml/tagreader/tagreader.pro b/examples/xml/tagreader/tagreader.pro
new file mode 100644
index 0000000..b6ebf8b
--- /dev/null
+++ b/examples/xml/tagreader/tagreader.pro
@@ -0,0 +1,11 @@
+TEMPLATE = app
+TARGET = tagreader
+
+CONFIG += qt console warn_on release
+
+REQUIRES = xml large-config
+
+HEADERS = structureparser.h
+SOURCES = tagreader.cpp \
+ structureparser.cpp
+INTERFACES =