diff options
Diffstat (limited to 'filters/kword/libexport/ProcessDocument.cc')
-rw-r--r-- | filters/kword/libexport/ProcessDocument.cc | 1063 |
1 files changed, 0 insertions, 1063 deletions
diff --git a/filters/kword/libexport/ProcessDocument.cc b/filters/kword/libexport/ProcessDocument.cc deleted file mode 100644 index 3a626f7f1..000000000 --- a/filters/kword/libexport/ProcessDocument.cc +++ /dev/null @@ -1,1063 +0,0 @@ -/* - 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 <Wolf-Michael.Bolle@GMX.de> - - The old file was licensed under the terms of the GNU Library General Public - License version 2. -*/ - -/* - Part of the code is based on code licensed under the terms of the - GNU Library General Public License version 2: - Copyright 2001 Michael Johnson <mikej@xnet.com> -*/ - -#include <tqdom.h> -#include <tqvaluelist.h> - -#include <kdebug.h> - -#include "KWEFStructures.h" -#include "TagProcessing.h" -#include "ProcessDocument.h" -#include "KWEFKWordLeader.h" - - -// == KOFFICE DOCUMENT INFORMATION == - -// TODO: verify that all document info is read! - -void ProcessTextTag ( TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -{ - TQString *tagText = (TQString *) tagData; - - *tagText = myNode.toElement().text(); // Get the text, also from a CDATA section - - TQValueList<TagProcessing> tagProcessingList; - tagProcessingList.append ( TagProcessing ( "xml:space" ) ); - ProcessSubtags (myNode, tagProcessingList, leader); - - AllowNoSubtags (myNode, leader); -} - -static void ProcessAboutTag ( TQDomNode myNode, - void *tagData, - KWEFKWordLeader *leader ) -{ - KWEFDocumentInfo *docInfo = (KWEFDocumentInfo *) tagData; - - AllowNoAttributes (myNode); - - TQValueList<TagProcessing> tagProcessingList; - tagProcessingList.append ( TagProcessing ( "title", ProcessTextTag, &docInfo->title ) ); - tagProcessingList.append ( TagProcessing ( "abstract", ProcessTextTag, &docInfo->abstract ) ); - tagProcessingList.append ( TagProcessing ( "keyword", ProcessTextTag, &docInfo->keywords ) ); - tagProcessingList.append ( TagProcessing ( "subject", ProcessTextTag, &docInfo->subject ) ); - ProcessSubtags (myNode, tagProcessingList, leader); -} - - -static void ProcessAuthorTag ( TQDomNode myNode, - void *tagData, - KWEFKWordLeader *leader ) -{ - KWEFDocumentInfo *docInfo = (KWEFDocumentInfo *) tagData; - - AllowNoAttributes (myNode); - - TQValueList<TagProcessing> tagProcessingList; - tagProcessingList.append ( TagProcessing ( "full-name", ProcessTextTag, &docInfo->fullName ) ); - tagProcessingList.append ( TagProcessing ( "title", ProcessTextTag, &docInfo->jobTitle ) ); - tagProcessingList.append ( TagProcessing ( "company", ProcessTextTag, &docInfo->company ) ); - tagProcessingList.append ( TagProcessing ( "email", ProcessTextTag, &docInfo->email ) ); - tagProcessingList.append ( TagProcessing ( "telephone", ProcessTextTag, &docInfo->telephone ) ); - tagProcessingList.append ( TagProcessing ( "telephone-work", ProcessTextTag, &docInfo->telephonework ) ); - tagProcessingList.append ( TagProcessing ( "fax", ProcessTextTag, &docInfo->fax ) ); - tagProcessingList.append ( TagProcessing ( "country", ProcessTextTag, &docInfo->country ) ); - tagProcessingList.append ( TagProcessing ( "postal-code", ProcessTextTag, &docInfo->postalCode ) ); - tagProcessingList.append ( TagProcessing ( "city", ProcessTextTag, &docInfo->city ) ); - tagProcessingList.append ( TagProcessing ( "street", ProcessTextTag, &docInfo->street ) ); - tagProcessingList.append ( TagProcessing ( "initial", ProcessTextTag, &docInfo->initial ) ); - tagProcessingList.append ( TagProcessing ( "position", ProcessTextTag, &docInfo->position ) ); - ProcessSubtags (myNode, tagProcessingList, leader); -} - - -void ProcessDocumentInfoTag ( TQDomNode myNode, - void *, - KWEFKWordLeader *leader ) -{ - AllowNoAttributes (myNode); - - KWEFDocumentInfo docInfo; - - TQValueList<TagProcessing> tagProcessingList; - tagProcessingList.append ( TagProcessing ( "log" ) ); - tagProcessingList.append ( TagProcessing ( "author", ProcessAuthorTag, &docInfo ) ); - tagProcessingList.append ( TagProcessing ( "about", ProcessAboutTag, &docInfo ) ); - ProcessSubtags (myNode, tagProcessingList, leader); - - leader->doFullDocumentInfo (docInfo); -} - - -// == KWORD == - -// Every tag has its own processing function. All of those functions -// have the same parameters since the functions are passed to -// ProcessSubtags throuch the TagProcessing class. The top level -// function is ProcessDocTag and can be called with the node returned -// by TQDomDocument::documentElement (). The tagData argument can be -// used to either pass variables down to the subtags or to allow -// subtags to return values. As a bare minimum the tag processing -// functions must handle the tag's attributes and the tag's subtags -// (which it can choose to ignore). Currently implemented is -// processing for the following tags and attributes: -// -// TODO: make this list up-to-date -// -// DOC -// FRAMESETS -// FRAMESET -// PARAGRAPH -// TEXT - Text Element -// FORMATS -// FORMAT id=1 pos= len= -// LAYOUT -// NAME value= - - -// -------------------------------------------------------------------------------- - - -static void ProcessOneAttrTag ( TQDomNode myNode, - TQString attrName, - TQString attrType, - void *attrData, - KWEFKWordLeader *leader ) -{ - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing (attrName, attrType, attrData); - ProcessAttributes (myNode, attrProcessingList); - - AllowNoSubtags (myNode, leader); -} - - -static void ProcessColorAttrTag ( TQDomNode myNode, void *tagData, KWEFKWordLeader * ) -{ - TQColor *attrValue = (TQColor *) tagData; - - int red, green, blue; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing ( "red", red ); - attrProcessingList << AttrProcessing ( "green", green ); - attrProcessingList << AttrProcessing ( "blue", blue ); - ProcessAttributes (myNode, attrProcessingList); - - attrValue->setRgb (red, green, blue); -} - - -static void ProcessBoolIntAttrTag ( TQDomNode myNode, - TQString attrName, - void *attrData, - KWEFKWordLeader *leader ) -{ - ProcessOneAttrTag (myNode, attrName, "bool", attrData, leader); -} - - -// -------------------------------------------------------------------------------- - - -static void ProcessIntValueTag (TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -{ - ProcessOneAttrTag (myNode, "value", "int", tagData, leader); -} - - -static void ProcessBoolIntValueTag ( TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -{ - ProcessBoolIntAttrTag (myNode, "value", tagData, leader); -} - - -static void ProcessStringValueTag ( TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -{ - ProcessOneAttrTag (myNode, "value", TQSTRING_OBJECT_NAME_STRING, tagData, leader); -} - -static void ProcessStringNameTag (TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -{ - ProcessOneAttrTag (myNode, "name", TQSTRING_OBJECT_NAME_STRING, tagData, leader); -} - - -// -------------------------------------------------------------------------------- - - -static void ProcessOldLayoutChildTag (TQDomNode myNode, void *tagData, KWEFKWordLeader* /*leader*/) -{ - TQValueList<AttrProcessing> attrProcessingList; - - double* d = (double*) ( tagData ); - *d = 0.0; // Put a sensible default - - attrProcessingList - << AttrProcessing ( "pt", *d ) - << AttrProcessing ( "inch" ) - << AttrProcessing ( "mm" ) - ; - ProcessAttributes (myNode, attrProcessingList); -} - -static void ProcessUnderlineTag (TQDomNode myNode, void *tagData, KWEFKWordLeader* /*leader*/ ) -{ - TextFormatting* text=(TextFormatting*) tagData; - TQString str,style; - TQString strColor; - - text->underlineWord = false; - - TQValueList<AttrProcessing> attrProcessingList; - - attrProcessingList - << AttrProcessing ( "value", str ) - << AttrProcessing ( "styleline", style ) - << AttrProcessing ( "wordbyword", text->underlineWord ) - << AttrProcessing ( "underlinecolor", strColor ) - ; - ProcessAttributes (myNode, attrProcessingList); - - str=str.stripWhiteSpace(); - text->underlineValue=str; - if ( (str=="0") || (str.isEmpty()) ) - { - text->underline=false; - } - else - { - // We assume that anything else is underlined - text->underline=true; - text->underlineStyle = style; - text->underlineColor.setNamedColor(strColor); - } -} - -static void ProcessStrikeoutTag (TQDomNode myNode, void *tagData, KWEFKWordLeader* /*leader*/ ) -{ - TextFormatting* text=(TextFormatting*) tagData; - TQString type, linestyle; - - text->strikeoutWord = false; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing ("value" , type ); - attrProcessingList << AttrProcessing ("styleline" , linestyle ); - attrProcessingList << AttrProcessing ( "wordbyword", text->strikeoutWord ); - ProcessAttributes (myNode, attrProcessingList); - - if( type.isEmpty() || ( type == "0" ) ) - text->strikeout = false; - else - { - text->strikeout = true; - text->strikeoutType = type; - text->strikeoutLineStyle = linestyle; - if( text->strikeoutType == "1" ) - text->strikeoutType = "single"; - if( text->strikeoutLineStyle.isEmpty() ) - text->strikeoutLineStyle = "solid"; - } -} - - -void ProcessAnchorTag ( TQDomNode myNode, - void *tagData, - KWEFKWordLeader *leader ) -{ - TQString *instance = (TQString *) tagData; - - TQString type; - *instance = TQString(); - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing ( "type", type ) - << AttrProcessing ( "instance", TQSTRING_OBJECT_NAME_STRING, instance ); - ProcessAttributes (myNode, attrProcessingList); - - if ( type != "frameset" ) - { - kdWarning (30508) << "Unknown ANCHOR type " << type << "!" << endl; - } - - if ( (*instance).isEmpty () ) - { - kdWarning (30508) << "Bad ANCHOR instance name!" << endl; - } - - AllowNoSubtags (myNode, leader); -} - - -static void ProcessLinkTag (TQDomNode myNode, void *tagData, KWEFKWordLeader *) -{ - VariableData *variable = (VariableData *) tagData; - - TQString linkName, hrefName; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList.append ( AttrProcessing ("linkName", linkName) ); - attrProcessingList.append ( AttrProcessing ("hrefName", hrefName) ); - ProcessAttributes (myNode, attrProcessingList); - - variable->setLink(linkName, hrefName); -} - - -static void ProcessPgNumTag (TQDomNode myNode, void *tagData, KWEFKWordLeader *) -{ - VariableData *variable = (VariableData *) tagData; - - TQString subtype, value; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList.append ( AttrProcessing ("subtype", subtype) ); - attrProcessingList.append ( AttrProcessing ("value", value ) ); - ProcessAttributes (myNode, attrProcessingList); - - variable->setPgNum(subtype, value); -} - - -static void ProcessTypeTag (TQDomNode myNode, void *tagData, KWEFKWordLeader *) -{ - VariableData *variable = (VariableData *) tagData; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList.append ( AttrProcessing ("key", variable->m_key ) ); - attrProcessingList.append ( AttrProcessing ("text", variable->m_text) ); - attrProcessingList.append ( AttrProcessing ("type", variable->m_type) ); - ProcessAttributes (myNode, attrProcessingList); -} - -static void ProcessFieldTag (TQDomNode myNode, void *tagData, KWEFKWordLeader *) -{ - VariableData *variable = (VariableData *) tagData; - int subtype; - TQString name, value; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList.append ( AttrProcessing ("subtype", subtype) ); - attrProcessingList.append ( AttrProcessing ("value", value ) ); - ProcessAttributes (myNode, attrProcessingList); - - switch( subtype ) - { - case 0: name = "fileName"; break; - case 1: name = "dirName"; break; - case 2: name = "authorName"; break; - case 3: name = "authorEmail"; break; - case 4: name = "authorCompany"; break; - case 10: name = "docTitle"; break; - case 11: name = "docAbstract"; break; - case 16: name = "authorInitial"; break; - default: break; - } - - if(!name.isEmpty()) - variable->setField(name, value); -} - -static void ProcessFootnoteTag (TQDomNode myNode, void *tagData, KWEFKWordLeader *leader) -{ - VariableData *variable = (VariableData *) tagData; - TQString frameset, value, numberingtype, notetype; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList - << AttrProcessing ( "value", value ) - << AttrProcessing ( "numberingtype", numberingtype ) - << AttrProcessing ( "frameset", frameset ) - << AttrProcessing ( "notetype", notetype ) - ; - ProcessAttributes (myNode, attrProcessingList); - - // search for frameset in the footnoteList - for(unsigned i=0;i<leader->footnoteList.count();i++) - { - if( leader->footnoteList[i].frameName == frameset ) - { - variable->setFootnote( notetype, numberingtype, value, &leader->footnoteList[i].para ); - break; - } - } -} - -static void ProcessNoteTag (TQDomNode myNode, void *tagData, KWEFKWordLeader *leader) -{ - VariableData *variable = (VariableData *) tagData; - - TQString note; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList - << AttrProcessing ( "note", note ) - ; - ProcessAttributes (myNode, attrProcessingList); - - // set it even if note is empty - variable->setGenericData( "note", note ); -} - -// ### TODO: some files have not a <VARIABLE> tag but its supposed children are directly children of <FORMAT id="4"> -static void ProcessVariableTag (TQDomNode myNode, void* tagData, KWEFKWordLeader* leader) -{ - VariableData *variable = (VariableData *) tagData; - - TQValueList<TagProcessing> tagProcessingList; - // "TYPE|PGNUM|DATE|TIME|CUSTOM|SERIALLETTER|FIELD|LINK|NOTE" - tagProcessingList - << TagProcessing ( "TYPE", ProcessTypeTag, variable ) - << TagProcessing ( "PGNUM", ProcessPgNumTag, variable ) - << TagProcessing ( "DATE" ) - << TagProcessing ( "TIME" ) - << TagProcessing ( "CUSTOM" ) - << TagProcessing ( "SERIALLETTER" ) - << TagProcessing ( "FIELD", ProcessFieldTag, variable ) - << TagProcessing ( "LINK", ProcessLinkTag, variable ) - << TagProcessing ( "NOTE", ProcessNoteTag, variable ) - << TagProcessing ( "FOOTNOTE", ProcessFootnoteTag, variable ) - ; - ProcessSubtags (myNode, tagProcessingList, leader); -} - -static void AppendTagProcessingFormatOne(TQValueList<TagProcessing>& tagProcessingList, FormatData& formatData) -{ - tagProcessingList - << TagProcessing ( "COLOR", ProcessColorAttrTag, &formatData.text.fgColor ) - << TagProcessing ( "FONT", ProcessStringNameTag, &formatData.text.fontName ) - << TagProcessing ( "SIZE", ProcessIntValueTag, &formatData.text.fontSize ) - << TagProcessing ( "WEIGHT", ProcessIntValueTag, &formatData.text.weight ) - << TagProcessing ( "ITALIC", ProcessBoolIntValueTag, &formatData.text.italic ) - << TagProcessing ( "UNDERLINE", ProcessUnderlineTag, &formatData.text ) - << TagProcessing ( "STRIKEOUT", ProcessStrikeoutTag, &formatData.text ) - << TagProcessing ( "VERTALIGN", ProcessIntValueTag, &formatData.text.verticalAlignment ) - << TagProcessing ( "SHADOW" ) - << TagProcessing ( "FONTATTRIBUTE", ProcessStringValueTag, &formatData.text.fontAttribute ) - << TagProcessing ( "LANGUAGE", ProcessStringValueTag, &formatData.text.language ) - << TagProcessing ( "ANCHOR" ) - << TagProcessing ( "IMAGE" ) - << TagProcessing ( "PICTURE" ) - << TagProcessing ( "VARIABLE" ) - << TagProcessing ( "TEXTBACKGROUNDCOLOR", ProcessColorAttrTag, &formatData.text.bgColor ) - << TagProcessing ( "OFFSETFROMBASELINE" ) - << TagProcessing ( "CHARSET" ) // Old KWord documents or KWord's RTF import filter - ; - - if ( formatData.text.language == "xx" ) - { - // The text language should have been named "x-test" or so to follow the specification - // As it does not, we need to convert it. - formatData.text.language = "en_US"; - } -} - - -static void SubProcessFormatOneTag(TQDomNode myNode, - ValueListFormatData *formatDataList, int formatPos, int formatLen, - KWEFKWordLeader *leader) -{ - if ( formatPos == -1 || formatLen == -1 ) - { - // We have no position and no length defined - // It can happen in a child of <STYLE>, just put secure values - formatPos=0; - formatLen=0; - kdDebug (30508) << "Missing formatting! Style? " - << myNode.nodeName() - << " = " << myNode.nodeValue() - << endl; - - // In the old syntax (KWord 0.8), the comment would be displayed for each paragraph, so do not show it. - if ( ! leader->m_oldSyntax ) - kdDebug (30508) << "Missing formatting for <FORMAT> (style or syntax version 1 ?)" << endl; - } - - FormatData formatData(1, formatPos, formatLen); - TQValueList<TagProcessing> tagProcessingList; - AppendTagProcessingFormatOne(tagProcessingList,formatData); - ProcessSubtags (myNode, tagProcessingList, leader); - - (*formatDataList) << formatData; -} - - -static void SubProcessFormatTwoTag(TQDomNode myNode, - ValueListFormatData *formatDataList, int formatPos, int formatLen, - KWEFKWordLeader *leader) -{ - if ( (formatPos == -1) ) - { - // We have no position defined - kdWarning(30508) << "Missing text image position!" << endl; - return; - } - // In KWord 0.8, the len attribute was not defined - if (formatLen == -1) - formatLen = 1; - - FormatData formatData(2, formatPos, formatLen); - TQValueList<TagProcessing> tagProcessingList; - - TQString fileName; // KWord 0.8 - KoPictureKey key; // Re-saved by KWord 1.2 or KWord 1.3 - tagProcessingList.append(TagProcessing( "FILENAME", ProcessStringValueTag, &fileName)); - tagProcessingList.append(TagProcessing( "PICTURE", ProcessImageTag, &key )); - ProcessSubtags (myNode, tagProcessingList, leader); - - if ( !fileName.isEmpty() ) - { - kdDebug(30508) << "KWord 0.8 text image: " << fileName << endl; - key = KoPictureKey( fileName ); - } - else - { - kdDebug(30508) << "KWord 1.2/1.3 text image: " << key.toString() << endl; - } - - formatData.frameAnchor.key = key; - formatData.frameAnchor.picture.key = key; - - (*formatDataList) << formatData; -} - - -static void SubProcessFormatThreeTag(TQDomNode myNode, - ValueListFormatData *formatDataList, int formatPos, int /*formatLen*/, - KWEFKWordLeader *leader) -{ - if ( (formatPos == -1) ) // formatLen is never there but is 1. - { - // We have no position and no length defined - kdWarning(30508) << "Missing variable formatting!" << endl; - return; - } - AllowNoSubtags (myNode, leader); - - const FormatData formatData(3, formatPos, 1); - (*formatDataList) << formatData; -} - -static void SubProcessFormatFourTag(TQDomNode myNode, - ValueListFormatData *formatDataList, int formatPos, int formatLen, - KWEFKWordLeader *leader) -{ - if ( (formatPos == -1) || (formatLen == -1) ) - { - // We have no position and no length defined - kdWarning(30508) << "Missing variable formatting!" << endl; - return; - } - FormatData formatData(4, formatPos, formatLen); - TQValueList<TagProcessing> tagProcessingList; - tagProcessingList.append(TagProcessing("VARIABLE", ProcessVariableTag, &formatData.variable)); - // As variables can have a formating too, we have to process formating - AppendTagProcessingFormatOne(tagProcessingList,formatData); - ProcessSubtags (myNode, tagProcessingList, leader); - - (*formatDataList) << formatData; -} - - -static void SubProcessFormatSixTag(TQDomNode myNode, - ValueListFormatData *formatDataList, int formatPos, int formatLen, - KWEFKWordLeader *leader) -{ - if ( formatPos != -1 && formatLen != -1 ) - { - TQString instance; - - TQValueList<TagProcessing> tagProcessingList; - // TODO: We can have all layout information as in regular texts - // They simply apply to the table frames - // FONT is just the first that we've come across so far - tagProcessingList << TagProcessing ( "FONT" ) - << TagProcessing ( "ANCHOR", ProcessAnchorTag, &instance ); - ProcessSubtags (myNode, tagProcessingList, leader); -#if 0 - kdDebug (30508) << "DEBUG: Adding frame anchor " << instance << endl; -#endif - - (*formatDataList) << FormatData ( formatPos, formatLen, FrameAnchor (instance) ); - } - else - { - kdWarning (30508) << "Missing or bad anchor formatting!" << endl; - } -} - -static void ProcessFormatTag (TQDomNode myNode, void *tagData, KWEFKWordLeader *leader) -{ - ValueListFormatData *formatDataList = (ValueListFormatData *) tagData; - int formatId = -1; - int formatPos = -1; - int formatLen = -1; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing ( "id", formatId ); - attrProcessingList << AttrProcessing ( "pos", formatPos ); - attrProcessingList << AttrProcessing ( "len", formatLen ); - ProcessAttributes (myNode, attrProcessingList); - - if ( ( formatId == -1 ) && ( leader->m_oldSyntax ) ) - { - formatId = 1; // KWord 0.8 did not define it in <LAYOUT> - } - - switch ( formatId ) - { - case 1: // regular texts - { - SubProcessFormatOneTag(myNode, formatDataList, formatPos, formatLen, leader); - break; - } - case 2: // text image (KWord 0.8) - { - SubProcessFormatTwoTag(myNode, formatDataList, formatPos, formatLen, leader); - break; - } - case 3: // KWord 0.8 tabulator - { - SubProcessFormatThreeTag(myNode, formatDataList, formatPos, formatLen, leader); - break; - } - case 4: // variables - { - SubProcessFormatFourTag(myNode, formatDataList, formatPos, formatLen, leader); - break; - } - case 6: // anchors - { - SubProcessFormatSixTag(myNode, formatDataList, formatPos, formatLen, leader); - break; - } - case -1: - { - kdWarning (30508) << "FORMAT attribute id value not set!" << endl; - AllowNoSubtags (myNode, leader); - break; - } - case 5: // KWord 0.8 footnote - default: - kdWarning(30508) << "Unexpected FORMAT attribute id value " << formatId << endl; - AllowNoSubtags (myNode, leader); - } - -} - - -void ProcessFormatsTag ( TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -{ - ValueListFormatData *formatDataList = (ValueListFormatData *) tagData; - - AllowNoAttributes (myNode); - - (*formatDataList).clear (); - TQValueList<TagProcessing> tagProcessingList; - tagProcessingList << TagProcessing ( "FORMAT", ProcessFormatTag, formatDataList ); - ProcessSubtags (myNode, tagProcessingList, leader); -} - - -// -------------------------------------------------------------------------------- - - -static void ProcessCounterTag ( TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -{ - CounterData *counter = (CounterData *) tagData; - - // Be extra careful with data declared as enum (it could be very different from an int) - int counterStyle = counter->style; - int counterNumbering = counter->numbering; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing ( "type", counterStyle ); - attrProcessingList << AttrProcessing ( "depth", counter->depth ); - attrProcessingList << AttrProcessing ( "bullet", counter->customCharacter ); - attrProcessingList << AttrProcessing ( "start", counter->start ); - attrProcessingList << AttrProcessing ( "numberingtype", counterNumbering ); - attrProcessingList << AttrProcessing ( "lefttext", counter->lefttext ); - attrProcessingList << AttrProcessing ( "righttext", counter->righttext ); - attrProcessingList << AttrProcessing ( "bulletfont", counter->customFont ); - attrProcessingList << AttrProcessing ( "customdef" ); - attrProcessingList << AttrProcessing ( "text", counter->text ); - attrProcessingList << AttrProcessing ( "display-levels" ); - attrProcessingList << AttrProcessing ( "align" ); - ProcessAttributes (myNode, attrProcessingList); - - counter->style = CounterData::Style( counterStyle ); - counter->numbering = CounterData::Numbering( counterNumbering ); - - AllowNoSubtags (myNode, leader); -} - - -static void ProcessLayoutTabulatorTag ( TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -{ - TabulatorList* tabulatorList = (TabulatorList*) tagData; - - TabulatorData tabulator; - - TQValueList<AttrProcessing> attrProcessingList; - - attrProcessingList - << AttrProcessing ( "ptpos", tabulator.m_ptpos ) - << AttrProcessing ( "type", tabulator.m_type ) - << AttrProcessing ( "filling", tabulator.m_filling ) - << AttrProcessing ( "width", tabulator.m_width ) - << AttrProcessing ( "alignchar" ) - ; - - if ( leader->m_oldSyntax ) - { - // Avoid too many warning - attrProcessingList - << AttrProcessing ( "mmpos" ) - << AttrProcessing ( "inchpos" ) // Never ever use it, as this value is mostly wrong (e.g. 1.1009e+15) - ; - } - - ProcessAttributes (myNode, attrProcessingList); - tabulatorList->append(tabulator); - - AllowNoSubtags (myNode, leader); -} - - -static void ProcessIndentsTag (TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -{ - LayoutData *layout = (LayoutData *) tagData; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing ("first" , layout->indentFirst ); - attrProcessingList << AttrProcessing ("left" , layout->indentLeft ); - attrProcessingList << AttrProcessing ("right" , layout->indentRight ); - ProcessAttributes (myNode, attrProcessingList); - - AllowNoSubtags (myNode, leader); -} - - -static void ProcessLayoutOffsetTag ( TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -{ - LayoutData *layout = (LayoutData *) tagData; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing ("after" , layout->marginBottom ); - attrProcessingList << AttrProcessing ("before" , layout->marginTop ); - ProcessAttributes (myNode, attrProcessingList); - - AllowNoSubtags (myNode, leader); -} - - -static void ProcessLineBreakingTag ( TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -{ - LayoutData *layout = (LayoutData *) tagData; - - TQString strBefore, strAfter; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing ( "linesTogether", layout->keepLinesTogether ); - attrProcessingList << AttrProcessing ( "hardFrameBreak", layout->pageBreakBefore ); - attrProcessingList << AttrProcessing ( "hardFrameBreakAfter", layout->pageBreakAfter ); - attrProcessingList << AttrProcessing ( "keepWithNext" ); // RTF import filter - ProcessAttributes (myNode, attrProcessingList); - - AllowNoSubtags (myNode, leader); -} - - -static void ProcessShadowTag ( TQDomNode myNode, void *tagData, KWEFKWordLeader *leader) -{ - LayoutData *layout = (LayoutData *) tagData; - - int red=0; - int green=0; - int blue=0; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing ( "distance", layout->shadowDistance ); - attrProcessingList << AttrProcessing ( "direction", layout->shadowDirection ); - attrProcessingList << AttrProcessing ( "red", red ); - attrProcessingList << AttrProcessing ( "green", green ); - attrProcessingList << AttrProcessing ( "blue", blue ); - ProcessAttributes (myNode, attrProcessingList); - - layout->shadowColor.setRgb(red,green,blue); - - AllowNoSubtags (myNode, leader); -} - -static void ProcessAnyBorderTag ( TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -{ - BorderData *border = static_cast <BorderData*> (tagData); - - int red=0; - int green=0; - int blue=0; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing ( "red", red ); - attrProcessingList << AttrProcessing ( "green", green ); - attrProcessingList << AttrProcessing ( "blue", blue ); - attrProcessingList << AttrProcessing ( "style", border->style ); - attrProcessingList << AttrProcessing ( "width", border->width ); - ProcessAttributes (myNode, attrProcessingList); - - border->color.setRgb(red,green,blue); - - AllowNoSubtags (myNode, leader); -} - -static void ProcessFollowingTag ( TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -{ - ProcessOneAttrTag (myNode, "name", TQSTRING_OBJECT_NAME_STRING, tagData, leader); -} - -static void ProcessLinespacingTag (TQDomNode myNode, void *tagData, KWEFKWordLeader* /*leader*/ ) -{ - LayoutData *layout = (LayoutData *) tagData; - TQString oldValue, spacingType; - double spacingValue; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing ("value" , oldValue ); - attrProcessingList << AttrProcessing ("type" , spacingType ); - attrProcessingList << AttrProcessing ("spacingvalue" , spacingValue ); - ProcessAttributes (myNode, attrProcessingList); - - // KWord pre-1.2 uses only the "value" attribute (stored in oldValue) - // while 1.2 uses mainly "type" and "spacingvalue", while keeping "value" for compatibility - - if ( spacingType.isEmpty() ) - { - // for old format - if( oldValue == "oneandhalf" ) - layout->lineSpacingType = LayoutData::LS_ONEANDHALF; - else if ( oldValue == "double" ) - layout->lineSpacingType = LayoutData::LS_DOUBLE; - else - { - bool ok = false; - const double size = oldValue.toDouble( &ok ); - if ( ok && ( size >= 0.0 ) ) // 0 is allowed but negative values are not - { - // We have a valid size - layout->lineSpacingType = LayoutData::LS_CUSTOM; // set to custom - layout->lineSpacing = size; - } - else - layout->lineSpacingType = LayoutData::LS_SINGLE; // assume single linespace - } - } - else - { - // for new format - if( spacingType == "oneandhalf" ) - layout->lineSpacingType = LayoutData::LS_ONEANDHALF; - else if ( spacingType == "double" ) - layout->lineSpacingType = LayoutData::LS_DOUBLE; - else if ( spacingType == "custom" ) - layout->lineSpacingType = LayoutData::LS_CUSTOM; - else if ( spacingType == "atleast" ) - layout->lineSpacingType = LayoutData::LS_ATLEAST; - else if ( spacingType == "multiple" ) - layout->lineSpacingType = LayoutData::LS_MULTIPLE; - else if ( spacingType == "fixed" ) - layout->lineSpacingType = LayoutData::LS_FIXED; - else - layout->lineSpacingType = LayoutData::LS_SINGLE; // assume single linespace - layout->lineSpacing = spacingValue; - } -} - -static void ProcessLineSpaceTag (TQDomNode myNode, void *tagData, KWEFKWordLeader* /*leader*/ ) -{ - // <LINESPACE> is an old tag, of before syntax 1 - LayoutData *layout = (LayoutData *) tagData; - double spacingValue = 0.0; - - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing ( "pt", spacingValue ); - attrProcessingList << AttrProcessing ( "mm" ); - attrProcessingList << AttrProcessing ( "inch" ); - ProcessAttributes (myNode, attrProcessingList); - - layout->lineSpacingType = LayoutData::LS_CUSTOM; // set to custom - layout->lineSpacing = spacingValue; -} - -static void ProcessFlowTag ( TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -{ - LayoutData *layout = (LayoutData *) tagData; - - TQString oldAlign, normalAlign; - - TQValueList<AttrProcessing> attrProcessingList; - if ( leader->m_oldSyntax ) - { - // KWord 0.8 - attrProcessingList << AttrProcessing ( "value", oldAlign ); // KWord 0.8 - } - // New syntax and some files from syntax 1 - attrProcessingList << AttrProcessing ( "align", normalAlign ); - attrProcessingList << AttrProcessing ( "dir" ); // ### TODO - ProcessAttributes (myNode, attrProcessingList); - - if ( leader->m_oldSyntax && normalAlign.isEmpty() ) - { - if ( oldAlign.isEmpty() ) - { - layout->alignment = "left"; // KWord 0.8 did not support right-to-left - } - else - { - const int align = oldAlign.toInt(); - if ( ( align < 0 ) || ( align > 3) ) - { - kdWarning(30508) << "KWord 0.8 flow unknown: " << oldAlign << endl; - layout->alignment = "left"; // Unknown, so assume left - } - else - { - const char* flows[]={"left", "right", "center", "justify" }; - layout->alignment = flows[ align ]; - } - } - kdDebug(30508) << "KWord 0.8 flow: " << oldAlign << " corrected: " << layout->alignment << endl; - } - else - { - layout->alignment = normalAlign; - } - -} - - -void ProcessLayoutTag ( TQDomNode myNode, void *tagData, KWEFKWordLeader *leader ) -// Processes <LAYOUT> and <STYLE> -{ - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing ( "outline" ); // Only in <STYLE> - ProcessAttributes (myNode, attrProcessingList); - - LayoutData *layout = (LayoutData *) tagData; - - ValueListFormatData formatDataList; - - TQValueList<TagProcessing> tagProcessingList; - tagProcessingList << TagProcessing ( "NAME", ProcessStringValueTag, &layout->styleName ); - tagProcessingList << TagProcessing ( "FOLLOWING", ProcessFollowingTag, &layout->styleFollowing ); - tagProcessingList << TagProcessing ( "FLOW", ProcessFlowTag, layout ); - tagProcessingList << TagProcessing ( "INDENTS", ProcessIndentsTag, layout ); - tagProcessingList << TagProcessing ( "OFFSETS", ProcessLayoutOffsetTag, layout ); - tagProcessingList << TagProcessing ( "LINESPACING", ProcessLinespacingTag, layout ); - tagProcessingList << TagProcessing ( "PAGEBREAKING", ProcessLineBreakingTag, layout ); - tagProcessingList << TagProcessing ( "LEFTBORDER", ProcessAnyBorderTag, &layout->leftBorder ); - tagProcessingList << TagProcessing ( "RIGHTBORDER", ProcessAnyBorderTag, &layout->rightBorder ); - tagProcessingList << TagProcessing ( "TOPBORDER", ProcessAnyBorderTag, &layout->topBorder ); - tagProcessingList << TagProcessing ( "BOTTOMBORDER", ProcessAnyBorderTag, &layout->bottomBorder ); - tagProcessingList << TagProcessing ( "COUNTER", ProcessCounterTag, &layout->counter ); - tagProcessingList << TagProcessing ( "FORMAT", ProcessFormatTag, &formatDataList ); - tagProcessingList << TagProcessing ( "TABULATOR", ProcessLayoutTabulatorTag, &layout->tabulatorList ); - tagProcessingList << TagProcessing ( "SHADOW", ProcessShadowTag, layout ); - - if ( leader->m_oldSyntax ) - { - layout->indentLeft = 0.0; // ### TODO: needed or not? - tagProcessingList - << TagProcessing ( "OHEAD", ProcessOldLayoutChildTag, &layout->marginTop ) - << TagProcessing ( "OFOOT", ProcessOldLayoutChildTag, &layout->marginBottom ) - << TagProcessing ( "ILEFT", ProcessOldLayoutChildTag, &layout->indentLeft ) - << TagProcessing ( "IFIRST", ProcessOldLayoutChildTag, &layout->indentFirst ) - << TagProcessing ( "LINESPACE", ProcessLineSpaceTag, layout ) - ; - } - - ProcessSubtags (myNode, tagProcessingList, leader); - - - if ( formatDataList.isEmpty () ) - { - kdWarning (30508) << "No FORMAT tag within LAYOUT/STYLE!" << endl; - } - else - { - layout->formatData = formatDataList.first (); - - if ( formatDataList.count () > 1 ) - { - kdWarning (30508) << "More than one FORMAT tag within LAYOUT/STYLE!" << endl; - } - } - - if ( layout->styleName.isEmpty () ) - { - layout->styleName = "Standard"; - kdWarning (30508) << "Empty layout name!" << endl; - } - -} - - -static void ProcessImageKeyTag ( TQDomNode myNode, - void *tagData, KWEFKWordLeader *) -{ - KoPictureKey *key = (KoPictureKey*) tagData; - - // Let KoPicture do the loading - key->loadAttributes(myNode.toElement()); -} - -void ProcessImageTag ( TQDomNode myNode, - void *tagData, KWEFKWordLeader *leader ) -{ // <PICTURE> - TQValueList<AttrProcessing> attrProcessingList; - attrProcessingList << AttrProcessing ( "keepAspectRatio" ); - ProcessAttributes (myNode, attrProcessingList); - - TQValueList<TagProcessing> tagProcessingList; - tagProcessingList << TagProcessing ( "KEY", ProcessImageKeyTag, tagData ); - ProcessSubtags (myNode, tagProcessingList, leader); -} - |