You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/filters/kspread/latex/export/format.cc

204 lines
5.0 KiB

/*
** A program to convert the XML rendered by KWord into LATEX.
**
** Copyright (C) 2002, 2003 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>
#include <kdebug.h>
#include "column.h"
#include "fileheader.h" /* for the use of _header (color and underlined) */
#include "format.h"
#include "row.h"
Format::Format()
{
_multirow = -1;
_brushStyle = -1;
_isValidFormat = false;
_bottomBorder = NULL;
_topBorder = NULL;
_rightBorder = NULL;
_leftBorder = NULL;
}
Format::~Format()
{
delete _bottomBorder;
delete _topBorder;
delete _leftBorder;
delete _rightBorder;
}
bool Format::hasTopBorder() const
{
if(_topBorder == NULL)
return false;
else
return (_topBorder->getStyle() > 0);
}
bool Format::hasBottomBorder() const
{
if(_bottomBorder == NULL)
return false;
else
return (_bottomBorder->getStyle() > 0);
}
bool Format::hasLeftBorder() const
{
if(_leftBorder == NULL)
return false;
else
return (_leftBorder->getStyle() > 0);
}
bool Format::hasRightBorder() const
{
if(_rightBorder == NULL)
return false;
else
return (_rightBorder->getStyle() > 0);
}
/* Get the set of info. about a text format */
void Format::analyse(const TQDomNode balise)
{
/* <format brushstyle="5" brushcolor="#a70bc3" bgcolor="#ffffff" alignY="2" align="4" > */
if( !getAttr(balise, "brushstyle").isEmpty() )
{
_isValidFormat = true;
setBrushStyle(getAttr(balise, "brushstyle").toInt());
FileHeader::instance()->useColor();
setBrushColor(getAttr(balise, "brushcolor"));
setBgColor(getAttr(balise, "bgcolor"));
setAlignY(getAttr(balise, "alignY").toLong());
setAlign(getAttr(balise, "align").toLong());
}
if(isChild(balise, "pen"))
analysePen(getChild(balise, "pen"));
if(isChild(balise, "bottom-border"))
{
kdDebug(30522) << "bottom-border" << endl;
_isValidFormat = true;
_bottomBorder = new Pen();
_bottomBorder->analyse(getChild(getChild(balise, "bottom-border"), "pen"));
}
if(isChild(balise, "top-border"))
{
kdDebug(30522) << "top-border" << endl;
_isValidFormat = true;
_topBorder = new Pen();
_topBorder->analyse(getChild(getChild(balise, "top-border"), "pen"));
}
if(isChild(balise, "left-border"))
{
kdDebug(30522) << "left-border" << endl;
_isValidFormat = true;
_leftBorder = new Pen();
_leftBorder->analyse(getChild(getChild(balise, "left-border"), "pen"));
}
if(isChild(balise, "right-border"))
{
kdDebug(30522) << "right-border" << endl;
_isValidFormat = true;
_rightBorder = new Pen();
_rightBorder->analyse(getChild(getChild(balise, "right-border"), "pen"));
}
}
void Format::analysePen(const TQDomNode balise)
{
/* <pen width="0" style="1" color="#000000" /> */
_isValidFormat = true;
setPenWidth(getAttr(balise, "width").toDouble());
setPenStyle(getAttr(balise, "style").toInt());
setPenColor(getAttr(balise, "color"));
}
void Format::analyseFont(const TQDomNode balise)
{
/* <font size="18" family="Helvetica" weight="50" /> */
setFontSize(getAttr(balise, "size").toInt());
setFontFamily(getAttr(balise, "family"));
setFontWeight(getAttr(balise, "weight").toInt());
}
void Format::generate(TQTextStream& out, Column* col, Row* row)
{
if(hasLeftBorder())
out << "|";
if(isValidFormat() && getBrushStyle() >= 1)
{
out << ">{\\columncolor";
generateColor(out);
out << "}";
}
else if(col != NULL)
{
if(col->getBrushStyle() >= 1)
{
out << ">{\\columncolor";
col->generateColor(out);
out << "}";
}
}
else if(row != NULL)
{
if(row->getBrushStyle() >= 1)
{
out << ">{\\columncolor";
row->generateColor(out);
out << "}";
}
}
if ( col != NULL )
out << "m{" << col->getWidth() << "pt}";
if(hasRightBorder())
out << "|";
}
void Format::generateTextFormat(TQTextStream& out, TQString text)
{
if(getPenStyle() > 0)
{
float red = ((float) getPenColor().red()) / 255;
float green = ((float) getPenColor().green()) / 255;
float blue = ((float) getPenColor().blue()) / 255;
out << "\\textcolor[rgb]{"<< red << ", " << green <<
", " << blue << "}{" << text << "}" << endl;
}
}
void Format::generateColor(TQTextStream& out)
{
if(getBrushStyle() >= 1)
{
float red = ((float) getBrushColor().red()) / 255;
float green = ((float) getBrushColor().green()) / 255;
float blue = ((float) getBrushColor().blue()) / 255;
out << "[rgb]{" << red << ", " << green <<
", " << blue << "}%" << endl;
}
}