diff options
Diffstat (limited to 'filters/kspread/latex/export/formula.cpp')
-rw-r--r-- | filters/kspread/latex/export/formula.cpp | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/filters/kspread/latex/export/formula.cpp b/filters/kspread/latex/export/formula.cpp new file mode 100644 index 000000000..1d805a2a3 --- /dev/null +++ b/filters/kspread/latex/export/formula.cpp @@ -0,0 +1,168 @@ +/* +** A program to convert the XML rendered by KWord into LATEX. +** +** Copyright (C) 2000 Robert JACOLIN +** +** 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. +** +** To receive a copy of the GNU Library General Public License, write to the +** Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +** +*/ + +#include <stdlib.h> /* for atoi function */ +#include <kdebug.h> /* for kdDebug() stream */ +#include <tqptrstack.h> /* for getFormula() */ +#include <tqdom.h> +#include "formula.h" +#include <tdeapplication.h> + +#include <kformuladocument.h> +#include <kformulamimesource.h> + +/*******************************************/ +/* Constructor */ +/*******************************************/ +Formula::Formula() +{ + _left = 0; + _right = 0; + _top = 0; + _bottom = 0; + _runaround = TA_NONE; + _runaroundGap = 0; + _autoCreate = TC_EXTEND; + _newFrameBehaviour = TF_RECONNECT; + +} + +/*******************************************/ +/* analyse */ +/*******************************************/ +void Formula::analyse(const TQDomNode balise) +{ + + /* MARKUP TYPE : FRAMESET INFO = TEXTE, ENTETE CONNUE */ + + /* Parameters Analyse */ + Element::analyse(balise); + + kdDebug(30522) << "FRAME ANALYSE (Formula)" << endl; + + /* Chlidren markups Analyse */ + for(int index= 0; index < getNbChild(balise); index++) + { + if(getChildName(balise, index).compare("FRAME")== 0) + { + analyseParamFrame(balise); + } + else if(getChildName(balise, index).compare("FORMULA")== 0) + { + getFormula(getChild(getChild(balise, "FORMULA"), "FORMULA"), 0); + kdDebug(30522) << _formula << endl; + } + + } + kdDebug(30522) << "END OF A FRAME" << endl; +} + +/*******************************************/ +/* getFormula */ +/*******************************************/ +/* Get back the xml markup tree. */ +/*******************************************/ +void Formula::getFormula(TQDomNode p, int indent) +{ +/* while( p.) + {*/ + switch( p.nodeType() ) + { + case TQDomNode::TextNode: + _formula = _formula + TQString(p.toText().data()) + " "; + break; + /* case TT_Space: + _formula = _formula + p->zText; + //printf("%*s\"%s\"\n", indent, "", p->zText); + break; + case TT_EOL: + _formula = _formula + "\n"; + //printf("%*s\n", indent, ""); + break;*/ + case TQDomNode::ElementNode: + _formula = _formula + "<" + p.nodeName(); + TQDomNamedNodeMap attr = p.attributes(); + for(unsigned int index = 0; index < attr.length(); index++) + { // The attributes + _formula = _formula + " " + attr.item(index).nodeName(); + _formula = _formula + "=\"" + attr.item(index).nodeValue() + "\""; + } + if(p.childNodes().length() == 0) + _formula = _formula + "/>\n"; + else + { + _formula = _formula + ">\n"; + TQDomNodeList child = p.childNodes(); + for(unsigned int index = 0; index < child.length(); index++) + { + getFormula(child.item(index), indent+3); // The child elements + } + _formula = _formula + "</" + p.nodeName() + ">\n"; + } + break; + /*default: + kdError(30522) << "Can't happen" << endl; + break;*/ + } + /* p = p.nextSibling(); + }*/ +} + +/*******************************************/ +/* analyseParamFrame */ +/*******************************************/ +void Formula::analyseParamFrame(const TQDomNode balise) +{ + /*<FRAME left="28" top="42" right="566" bottom="798" runaround="1" />*/ + + _left = getAttr(balise, "left").toInt(); + _top = getAttr(balise, "top").toInt(); + _right = getAttr(balise, "right").toInt(); + _bottom = getAttr(balise, "bottom").toInt(); + setRunAround(getAttr(balise, "runaround").toInt()); + setAroundGap(getAttr(balise, "runaroundGap").toInt()); + setAutoCreate(getAttr(balise, "autoCreateNewFrame").toInt()); + setNewFrame(getAttr(balise, "newFrameBehaviour").toInt()); + setSheetSide(getAttr(balise, "sheetside").toInt()); +} + +/*******************************************/ +/* generate */ +/*******************************************/ +void Formula::generate(TQTextStream &out) +{ + kdDebug(30522) << "FORMULA GENERATION" << endl; + TQDomDocument doc; + doc.setContent(_formula); + + // a new KFormula::Document for every formula is not the best idea. + // better to have only one such beast for the whole document. + KFormula::Document formulaDoc( kapp->sessionConfig() ); + + KFormula::Container* formula = new KFormula::Container( &formulaDoc ); + if ( !formula->load( doc ) ) { + kdError(30522) << "Failed." << endl; + } + + out << "$" << formula->texString() << "$"; + delete formula; +} + |