cvs: php4 /ext/qtdom qtdom_qt.cpp qtdom_qt.h
| From: | Jan Borsodi | Date: | Wed, 15 Nov 2000 19:01:46 +0000 |
| Subject: | cvs: php4 /ext/qtdom qtdom_qt.cpp qtdom_qt.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-2622@lists.php.net to get a copy of this message | ||
amos Wed Nov 15 11:01:46 2000 EDT
Added files:
/php4/ext/qtdom qtdom_qt.cpp qtdom_qt.h
Log:
Initial import, since PHP cannot be compiled with a C++ compiler all C++ specific calls had to be
moved to a separate file without any php includes.
It has several C functions which are used for initiating a QDomDocument and traversing it.
Index: php4/ext/qtdom/qtdom_qt.cpp
+++ php4/ext/qtdom/qtdom_qt.cpp
//
// $Id: qtdom_qt.cpp,v 1.1 2000/11/15 19:01:43 amos Exp $
//
// Implementation of ||| class
//
// Jan Borsodi <jb@ez.no>
// Created on: <09-Nov-2000 11:18:46 root>
//
// Copyright (C) 1999-2000 eZ Systems. All rights reserved.
//
extern "C"
{
//#include "php.h"
//#include "php_ini.h"
//#include "php_qtdom.h"
#include "qtdom_qt.h"
}
//#if HAVE_QTDOM
// #include "ezxmlparser.hpp"
#include <qdom.h>
#include <qstring.h>
#include <qglobal.h>
struct qdom_node *qdom_to_node( QDomNode *node );
extern "C" void qdom_do_version( char **ver )
{
strcpy( *ver, QT_VERSION_STR );
}
extern "C" struct qdom_node *qdom_do_next_node( struct qdom_node *node )
{
QDomNode *q_node = (QDomNode *)node->Q_Node;
if ( !q_node )
return 0;
if ( q_node->isNull() )
return 0;
*q_node = q_node->nextSibling();
if ( q_node->isNull() )
return 0;
node->Type = q_node->nodeType();
const char *name = q_node->nodeName().latin1();
node->Name = new char[q_node->nodeName().length()+1];
strcpy( node->Name, name );
const char *content = q_node->nodeValue().latin1();
node->Content = new char[q_node->nodeValue().length()+1];
strcpy( node->Content, content );
return node;
}
extern "C" struct qdom_node *qdom_do_first_child( struct qdom_node *node )
{
QDomNode *q_node = (QDomNode *)node->Q_Node;
if ( !q_node )
return 0;
if ( q_node->isNull() )
return 0;
*q_node = q_node->firstChild();
if ( q_node->isNull() )
return 0;
node->Type = q_node->nodeType();
const char *name = q_node->nodeName().latin1();
node->Name = new char[q_node->nodeName().length()+1];
strcpy( node->Name, name );
const char *content = q_node->nodeValue().latin1();
node->Content = new char[q_node->nodeValue().length()+1];
strcpy( node->Content, content );
return node;
}
extern "C" int qdom_do_node_children_count( struct qdom_node *node )
{
if ( !node )
return 0;
QDomNode *q_node = (QDomNode *)node->Q_Node;
if ( !q_node )
return 0;
return q_node->childNodes().count();
}
extern "C" int qdom_do_node_attribute_count( struct qdom_node *node )
{
if ( !node )
return 0;
QDomNode *q_node = (QDomNode *)node->Q_Node;
if ( !q_node )
return 0;
return q_node->attributes().length();
}
extern "C" struct qdom_attribute *qdom_do_node_attributes( struct qdom_node *node )
{
struct qdom_attribute *attr = new struct qdom_attribute;
QDomNode *q_node = (QDomNode *)node->Q_Node;
QDomNamedNodeMap *map = new QDomNamedNodeMap( q_node->attributes() );
attr->Q_Node = map;
attr->Count = map->length();
return attr;
}
extern "C" struct qdom_node *qdom_do_attribute_at( struct qdom_attribute *attr, int index
)
{
if ( !attr )
return 0;
QDomNamedNodeMap *map = (QDomNamedNodeMap *)attr->Q_Node;
if ( index < 0 || index >= map->length() )
return 0;
QDomNode node = map->item( index );
return qdom_to_node( &node );
}
extern "C" void qdom_do_attributes_free( struct qdom_attribute *attr )
{
if ( !attr )
return;
QDomNamedNodeMap *map = (QDomNamedNodeMap *)attr->Q_Node;
delete map;
delete attr;
}
extern "C" struct qdom_node *qdom_do_copy_node( struct qdom_node *node )
{
if ( !node )
return 0;
struct qdom_node *tmp = new struct qdom_node;
if ( node->Name )
{
tmp->Name = new char[strlen(node->Name)+1];
strcpy( tmp->Name, node->Name );
}
else
tmp->Name = 0;
if ( node->Content )
{
tmp->Content = new char[strlen(node->Content)+1];
strcpy( tmp->Content, node->Content );
}
else
tmp->Content = 0;
if ( node->Q_Node )
{
QDomNode *q_node = (QDomNode *)node->Q_Node;
tmp->Q_Node = new QDomNode( *q_node );
}
else
tmp->Q_Node = 0;
tmp->Type = node->Type;
return tmp;
}
extern "C" void qdom_do_node_free( struct qdom_node *node )
{
if ( !node )
return;
delete []node->Name;
delete []node->Content;
QDomNode *q_node = (QDomNode *)node->Q_Node;
delete q_node;
delete node;
}
struct qdom_node *qdom_to_node( QDomNode *node )
{
if ( !node )
return 0;
qdom_node *q_node = new struct qdom_node;
q_node->Type = node->nodeType();
const char *name = node->nodeName().latin1();
q_node->Name = new char[node->nodeName().length()+1];
strcpy( q_node->Name, name );
const char *content = node->nodeValue().latin1();
q_node->Content = new char[node->nodeValue().length()+1];
strcpy( q_node->Content, content );
q_node->Q_Node = new QDomNode( *node );
return q_node;
}
extern "C" void qdom_do_doc_type( struct qdom_doc *doc, char **name )
{
if ( !doc )
{
*name = 0;
return;
}
QDomDocument *document = (QDomDocument *)doc->Document;
QString str = document->doctype().name();
const char *q_name = str.latin1();
if ( q_name )
{
*name = new char[strlen(q_name)+1];
strcpy( *name, q_name );
}
else
{
*name = 0;
}
}
extern "C" struct qdom_doc *qdom_do_init( const char *arg )
{
struct qdom_doc *doc = new struct qdom_doc;
QDomDocument *document = new QDomDocument();
document->setContent( QString( arg ) );
QDomNode *node = new QDomNode;
*node = document->documentElement();
doc->Document = document;
doc->CurrentNode = node;
doc->Children = qdom_to_node( node );
return doc;
}
extern "C" void qdom_do_free( struct qdom_doc *doc )
{
QDomNode *node = (QDomNode *)doc->CurrentNode;
QDomDocument *document = (QDomDocument *)doc->Document;
delete document;
delete node;
delete doc->Children;
delete doc;
}
//#endif // HAVE_QTDOM
Index: php4/ext/qtdom/qtdom_qt.h
+++ php4/ext/qtdom/qtdom_qt.h
// -*- Mode: C++ -*-
//
// $Id: qtdom_qt.h,v 1.1 2000/11/15 19:01:43 amos Exp $
//
// Definition of ||| class
//
// <real-name> <<mail-name>>
// Created on: <09-Nov-2000 12:00:24 root>
//
// Copyright (C) 1999-2000 eZ Systems. All rights reserved.
//
// IMPORTANT NOTE: You may NOT copy this file or any part of it into
// your own programs or libraries.
//
#ifndef QDOM_QT_H
#define QDOM_QT_H
struct qdom_node
{
int Type;
char *Name;
char *Content;
void *Q_Node;
};
struct qdom_attribute
{
int Count;
void *Q_Node;
};
struct qdom_doc
{
void *Document;
void *CurrentNode;
struct qdom_node *Children;
};
void qdom_do_version( char **ver );
struct qdom_node *qdom_do_next_node( struct qdom_node *node );
struct qdom_node *qdom_do_first_child( struct qdom_node *node );
struct qdom_attribute *qdom_do_node_attributes( struct qdom_node *node );
struct qdom_node *qdom_do_attribute_at( struct qdom_attribute *attr, int index );
void qdom_do_attributes_free( struct qdom_attribute *node );
int qdom_do_node_children_count( struct qdom_node *node );
int qdom_do_node_attribute_count( struct qdom_node *node );
struct qdom_node *qdom_do_copy_node( struct qdom_node *node );
void qdom_do_node_free( struct qdom_node *node );
void qdom_do_doc_type( struct qdom_doc *doc, char **name );
struct qdom_doc *qdom_do_init( const char *arg );
void qdom_do_free( struct qdom_doc *doc );
#endif // QDOM_QT_H