//
// $Id$
//
-// 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"
//#if HAVE_QTDOM
-// #include "ezxmlparser.hpp"
#include <qdom.h>
#include <qstring.h>
#include <qglobal.h>
struct qdom_node *qdom_to_node( QDomNode *node );
+/*!
+ Initialises certain global variables, they are:
+ g_qdom_message_log : A global variable for handling error logs and message handler function.
+*/
+
+extern "C" void qdom_init()
+{
+ g_qdom_message_log = new qdom_message;
+ g_qdom_message_log->Log = 0;
+ g_qdom_message_log->OldHandler = 0;
+}
+
+/*!
+ Frees global variables initialised in the init function.
+*/
+
+extern "C" void qdom_shutdown()
+{
+ if ( g_qdom_message_log->Log )
+ delete []g_qdom_message_log->Log;
+ delete g_qdom_message_log;
+ g_qdom_message_log = 0;
+}
+
+/*!
+ Copies the version number for Qt into the \c ver variable,
+ the variable must be allocated by user and must have enough characters (20 should suffice).
+*/
+
extern "C" void qdom_do_version( char **ver )
{
strcpy( *ver, QT_VERSION_STR );
}
+/*!
+ Moves the DOM node to the next sibling if any and returns the node.
+*/
+
extern "C" struct qdom_node *qdom_do_next_node( struct qdom_node *node )
{
QDomNode *q_node = (QDomNode *)node->Q_Node;
return node;
}
+/*!
+ Finds the first child of the current node and returns it if any.
+*/
+
extern "C" struct qdom_node *qdom_do_first_child( struct qdom_node *node )
{
QDomNode *q_node = (QDomNode *)node->Q_Node;
return node;
}
+/*!
+ Returns the number of the children for the current node.
+*/
+
extern "C" int qdom_do_node_children_count( struct qdom_node *node )
{
if ( !node )
return q_node->childNodes().count();
}
+/*!
+ Returns the number of attributes for the current node.
+*/
+
extern "C" int qdom_do_node_attribute_count( struct qdom_node *node )
{
if ( !node )
return q_node->attributes().length();
}
+/*!
+ Returns the attribute map for the current node.
+*/
+
extern "C" struct qdom_attribute *qdom_do_node_attributes( struct qdom_node *node )
{
struct qdom_attribute *attr = new struct qdom_attribute;
return attr;
}
+/*!
+ Returns the node at a given index taken from the attribute list if any.
+*/
+
extern "C" struct qdom_node *qdom_do_attribute_at( struct qdom_attribute *attr, int index )
{
if ( !attr )
return qdom_to_node( &node );
}
+/*!
+ Frees an attribute map.
+*/
+
extern "C" void qdom_do_attributes_free( struct qdom_attribute *attr )
{
if ( !attr )
delete attr;
}
+/*!
+ Makes a copy of a node.
+*/
+
extern "C" struct qdom_node *qdom_do_copy_node( struct qdom_node *node )
{
if ( !node )
return tmp;
}
+/*!
+ Frees a node.
+*/
+
extern "C" void qdom_do_node_free( struct qdom_node *node )
{
if ( !node )
delete node;
}
+/*!
+ Wraps a qdom_node struct around a QDomNode object which can be used by the C code.
+*/
+
struct qdom_node *qdom_to_node( QDomNode *node )
{
if ( !node )
return q_node;
}
+/*!
+ Copies the doctype name taken from the the qdom_doc object to the
+ \c name variable, the variable is initialised by the function.
+*/
+
extern "C" void qdom_do_doc_type( struct qdom_doc *doc, char **name )
{
if ( !doc )
}
}
+/*!
+ Initialises a qdom_doc struct with the string taken from \c arg.
+*/
+
extern "C" struct qdom_doc *qdom_do_init( const char *arg )
{
struct qdom_doc *doc = new struct qdom_doc;
return doc;
}
+/*!
+ Frees a qdom_doc struct.
+*/
+
extern "C" void qdom_do_free( struct qdom_doc *doc )
{
QDomNode *node = (QDomNode *)doc->CurrentNode;
delete doc;
}
+/*!
+ The custom message output used for catching Qt error messages when parsing with QDOM.
+*/
+
+void qdom_messageOutput( QtMsgType , const char *msg )
+{
+ if ( !g_qdom_message_log )
+ return;
+ int msg_len = strlen( msg );
+ int log_len = 0;
+ if ( g_qdom_message_log->Log )
+ log_len = strlen( g_qdom_message_log->Log );
+ int total_len = log_len+msg_len+2;
+ char *log = new char[total_len];
+ if ( g_qdom_message_log->Log )
+ strncpy( log, g_qdom_message_log->Log, log_len );
+ strncpy( log+log_len, msg, msg_len );
+ log[log_len+msg_len] = '\n';
+ log[total_len - 1] = '\0';
+ if ( g_qdom_message_log->Log )
+ delete []g_qdom_message_log->Log;
+ g_qdom_message_log->Log = log;
+}
+
+/*!
+ Installs the custom message handler and clears the log entries.
+*/
+
+extern "C" void qdom_do_install_message_handler()
+{
+ if ( !g_qdom_message_log )
+ g_qdom_message_log = new qdom_message;
+ msg_handler *old_handler = new msg_handler;
+ g_qdom_message_log->OldHandler = (void *)old_handler;
+ if ( g_qdom_message_log->Log )
+ delete []g_qdom_message_log->Log;
+ g_qdom_message_log->Log = 0;
+ *old_handler = qInstallMsgHandler( qdom_messageOutput );
+}
+
+/*!
+ Frees the custom message handler.
+*/
+
+extern "C" void qdom_do_free_message_handler()
+{
+ msg_handler *old_handler = (msg_handler *)g_qdom_message_log->OldHandler;
+ qInstallMsgHandler( *old_handler );
+}
+
+/*!
+ Returns the string containg the error log, or 0 if no log is available.
+*/
+
+extern "C" char *qdom_error_log()
+{
+ if ( !g_qdom_message_log )
+ return 0;
+ return g_qdom_message_log->Log;
+}
+
//#endif // HAVE_QTDOM