⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qtdom_qt.cpp

📁 php-4.4.7学习linux时下载的源代码
💻 CPP
字号:
// // $Id: qtdom_qt.cpp,v 1.2 2001/01/04 12:30:19 amos Exp $//// Jan Borsodi <jb@ez.no>// Created on: <09-Nov-2000 11:18:46 root>//extern "C"{//#include "php.h"//#include "php_ini.h"//#include "php_qtdom.h"#include "qtdom_qt.h"}//#if HAVE_QTDOM#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;    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;}/*!  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;    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;}/*!  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 0;    QDomNode *q_node = (QDomNode *)node->Q_Node;    if ( !q_node )        return 0;    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 0;    QDomNode *q_node = (QDomNode *)node->Q_Node;    if ( !q_node )        return 0;    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;    QDomNode *q_node = (QDomNode *)node->Q_Node;    QDomNamedNodeMap *map = new QDomNamedNodeMap( q_node->attributes() );    attr->Q_Node = map;    attr->Count = map->length();    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 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 );}/*!  Frees an attribute map.*/extern "C" void qdom_do_attributes_free( struct qdom_attribute *attr ){    if ( !attr )        return;    QDomNamedNodeMap *map = (QDomNamedNodeMap *)attr->Q_Node;    delete map;    delete attr;}/*!  Makes a copy of a node.*/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;}/*!  Frees a node.*/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;}/*!  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 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;}/*!  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 )    {        *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;    }}/*!  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;    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;}/*!  Frees a qdom_doc struct.*/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;}/*!  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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -