|
|
|
/*
|
|
|
|
This file is part of the KDE project
|
|
|
|
Copyright (C) 2001, 2002, 2004 Nicolas GOUTTE <goutte@kde.org>
|
|
|
|
Copyright (c) 2001 IABG mbH. All rights reserved.
|
|
|
|
Contact: Wolf-Michael Bolle <Bolle@IABG.de>
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU Library General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Library General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
* Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
This file is based on the old file:
|
|
|
|
/home/kde/koffice/filters/kword/ascii/asciiexport.cc
|
|
|
|
|
|
|
|
The old file was copyrighted by
|
|
|
|
Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
|
|
|
|
Copyright (c) 2000 ID-PRO Deutschland GmbH. All rights reserved.
|
|
|
|
Contact: Wolf-Michael Bolle <Bolle@GMX.de>
|
|
|
|
|
|
|
|
The old file was licensed under the terms of the GNU Library General Public
|
|
|
|
License version 2.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include <tqdom.h>
|
|
|
|
|
|
|
|
#include "TagProcessing.h"
|
|
|
|
|
|
|
|
#define DEBUG_KWORD_TAGS
|
|
|
|
// #define DEBUG_KWORD_IGNORED_TAGS
|
|
|
|
|
|
|
|
|
|
|
|
void ProcessSubtags ( const TQDomNode &parentNode,
|
|
|
|
TQValueList<TagProcessing> &tagProcessingList,
|
|
|
|
KWEFKWordLeader *leader)
|
|
|
|
{
|
|
|
|
//kdDebug(30508) << "Starting ProcessSubtags for node: " << parentNode.nodeName() << endl;
|
|
|
|
|
|
|
|
TQDomNode childNode;
|
|
|
|
|
|
|
|
for ( childNode = parentNode.firstChild (); !childNode.isNull (); childNode = childNode.nextSibling () )
|
|
|
|
{
|
|
|
|
if ( childNode.isElement () )
|
|
|
|
{
|
|
|
|
bool found = false;
|
|
|
|
|
|
|
|
TQValueList<TagProcessing>::Iterator tagProcessingIt;
|
|
|
|
|
|
|
|
for ( tagProcessingIt = tagProcessingList.begin ();
|
|
|
|
tagProcessingIt != tagProcessingList.end ();
|
|
|
|
tagProcessingIt++ )
|
|
|
|
{
|
|
|
|
if ( childNode.nodeName () == (*tagProcessingIt).name )
|
|
|
|
{
|
|
|
|
found = true;
|
|
|
|
|
|
|
|
if ( (*tagProcessingIt).processor != NULL )
|
|
|
|
{
|
|
|
|
((*tagProcessingIt).processor) ( childNode, (*tagProcessingIt).data, leader );
|
|
|
|
}
|
|
|
|
#ifdef DEBUG_KWORD_IGNORED_TAGS
|
|
|
|
else
|
|
|
|
{
|
|
|
|
kdDebug(30508) << "Ignoring " << childNode.nodeName ()
|
|
|
|
<< " tag in " << parentNode.nodeName () << endl;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( !found )
|
|
|
|
{
|
|
|
|
kdDebug(30508) << "Unexpected tag " << childNode.nodeName ()
|
|
|
|
<< " in " << parentNode.nodeName () << "!" << endl;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//kdDebug(30508) << "Ending ProcessSubtags for node: " << parentNode.nodeName() << endl;
|
|
|
|
}
|
|
|
|
|
|
|
|
void AllowNoSubtags ( const TQDomNode& myNode, KWEFKWordLeader *leader )
|
|
|
|
{
|
|
|
|
#ifdef DEBUG_KWORD_TAGS
|
|
|
|
TQString outputText;
|
|
|
|
TQValueList<TagProcessing> tagProcessingList;
|
|
|
|
ProcessSubtags (myNode, tagProcessingList, leader);
|
|
|
|
#else
|
|
|
|
@_UNUSED( leader ):
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
AttrProcessing::AttrProcessing ( const TQString& n, const TQString& t, void *d )
|
|
|
|
: name (n), data (d)
|
|
|
|
{
|
|
|
|
if ( t == "int" )
|
|
|
|
type = AttrInt;
|
|
|
|
else if ( t == TQSTRING_OBJECT_NAME_STRING )
|
|
|
|
type = AttrTQString;
|
|
|
|
else if ( t == "double" )
|
|
|
|
type = AttrDouble;
|
|
|
|
else if ( t == "bool" )
|
|
|
|
type = AttrBool;
|
|
|
|
else if ( t.isEmpty() )
|
|
|
|
type = AttrNull;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
kdWarning(30508) << "Unknown type: " << t << " for element " << n << " assuming NULL" << endl;
|
|
|
|
type = AttrNull;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void ProcessAttributes ( const TQDomNode &myNode,
|
|
|
|
TQValueList<AttrProcessing> &attrProcessingList )
|
|
|
|
{
|
|
|
|
//kdDebug(30508) << "Starting ProcessAttributes for node: " << myNode.nodeName() << endl;
|
|
|
|
|
|
|
|
TQDomNamedNodeMap myAttribs ( myNode.attributes () );
|
|
|
|
//kdDebug(30508) << "Attributes = " << myAttribs.length () <<endl;
|
|
|
|
for ( uint i = 0; i < myAttribs.length (); i++ )
|
|
|
|
{
|
|
|
|
TQDomAttr myAttrib ( myAttribs.item (i).toAttr () );
|
|
|
|
|
|
|
|
if ( !myAttrib.isNull () )
|
|
|
|
{
|
|
|
|
bool found = false;
|
|
|
|
|
|
|
|
TQValueList<AttrProcessing>::Iterator attrProcessingIt;
|
|
|
|
|
|
|
|
for ( attrProcessingIt = attrProcessingList.begin ();
|
|
|
|
attrProcessingIt != attrProcessingList.end ();
|
|
|
|
attrProcessingIt++ )
|
|
|
|
{
|
|
|
|
//kdDebug(30508) << "NAME: " << myAttrib.name () << " == " << (*attrProcessingIt).name <<endl;
|
|
|
|
if ( myAttrib.name () == (*attrProcessingIt).name )
|
|
|
|
{
|
|
|
|
found = true;
|
|
|
|
|
|
|
|
if ( (*attrProcessingIt).data != NULL )
|
|
|
|
{
|
|
|
|
switch ( (*attrProcessingIt).type )
|
|
|
|
{
|
|
|
|
case AttrProcessing::AttrTQString:
|
|
|
|
{
|
|
|
|
*((TQString *) (*attrProcessingIt).data) = myAttrib.value ();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case AttrProcessing::AttrInt:
|
|
|
|
{
|
|
|
|
*((int *) (*attrProcessingIt).data) = myAttrib.value ().toInt ();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case AttrProcessing::AttrDouble:
|
|
|
|
{
|
|
|
|
*((double *) (*attrProcessingIt).data) = myAttrib.value ().toDouble ();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case AttrProcessing::AttrBool:
|
|
|
|
{
|
|
|
|
const TQString strAttr ( myAttrib.value().simplifyWhiteSpace() );
|
|
|
|
bool flag;
|
|
|
|
if ((strAttr=="yes")||(strAttr=="1")||(strAttr=="true"))
|
|
|
|
{
|
|
|
|
flag=true;
|
|
|
|
}
|
|
|
|
else if ((strAttr=="no")||(strAttr=="0")||(strAttr=="false"))
|
|
|
|
{
|
|
|
|
flag=false;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
flag=false;
|
|
|
|
kdWarning(30508) << "Unknown value for a boolean: " << strAttr
|
|
|
|
<< " in tag " << myNode.nodeName () << ", attribute "
|
|
|
|
<< myAttrib.name() << endl;
|
|
|
|
}
|
|
|
|
*((bool *) (*attrProcessingIt).data) = flag;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case AttrProcessing::AttrNull:
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
{
|
|
|
|
kdDebug(30508) << "Unexpected data type " << int( (*attrProcessingIt).type )
|
|
|
|
<< " in " << myNode.nodeName ()
|
|
|
|
<< " attribute " << (*attrProcessingIt).name
|
|
|
|
<< endl;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#ifdef DEBUG_KWORD_IGNORED_TAGS
|
|
|
|
else
|
|
|
|
{
|
|
|
|
kdDebug(30508) << "Ignoring " << myNode.nodeName()
|
|
|
|
<< " attribute " << (*attrProcessingIt).name
|
|
|
|
<< endl;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( !found )
|
|
|
|
{
|
|
|
|
kdWarning(30508) << "Unexpected attribute " << myAttrib.name ()
|
|
|
|
<< " in " << myNode.nodeName () << "!" << endl;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//kdDebug(30508) << "Ending ProcessAttributes for node: " << myNode.nodeName() << endl;
|
|
|
|
}
|
|
|
|
|
|
|
|
void AllowNoAttributes ( const TQDomNode & myNode )
|
|
|
|
{
|
|
|
|
#ifdef DEBUG_KWORD_TAGS
|
|
|
|
TQValueList<AttrProcessing> attrProcessingList;
|
|
|
|
ProcessAttributes (myNode, attrProcessingList);
|
|
|
|
#else
|
|
|
|
Q_UNUSED( myNode );
|
|
|
|
#endif
|
|
|
|
}
|