summaryrefslogtreecommitdiffstats
path: root/filters/kword/latex/export/pixmapFrame.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filters/kword/latex/export/pixmapFrame.cpp')
-rw-r--r--filters/kword/latex/export/pixmapFrame.cpp200
1 files changed, 200 insertions, 0 deletions
diff --git a/filters/kword/latex/export/pixmapFrame.cpp b/filters/kword/latex/export/pixmapFrame.cpp
new file mode 100644
index 000000000..25f5951d7
--- /dev/null
+++ b/filters/kword/latex/export/pixmapFrame.cpp
@@ -0,0 +1,200 @@
+/*
+** A program to convert the XML rendered by KWord into LATEX.
+**
+** Copyright (C) 2000, 2002 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 <tqdir.h>
+#include <kdebug.h> /* for kdDebug() stream */
+#include <config.h>
+/* Needed to convert picture in eps file. Use ImageMagick. */
+#ifdef HAVE_MAGICK
+# include <stdio.h>
+# include <time.h>
+# include <sys/types.h>
+# include <magick/api.h>
+#endif
+
+#include "document.h"
+#include "pixmapFrame.h"
+#include "fileheader.h"
+
+/*******************************************/
+/* Constructor */
+/*******************************************/
+PixmapFrame::PixmapFrame()
+{
+}
+
+/*******************************************/
+/* Destructor */
+/*******************************************/
+PixmapFrame::~PixmapFrame()
+{
+ kdDebug(30522) << "Destruction of a pixmap" << endl;
+}
+void PixmapFrame::setKeepAspectRatio(const TQString ratio)
+{
+ if(ratio == "true")
+ _keepAspectRatio = true;
+ else
+ _keepAspectRatio = false;
+}
+
+/*******************************************/
+/* analyse */
+/*******************************************/
+/* Get informations about a pixmap stored */
+/* in the tared file. */
+/*******************************************/
+void PixmapFrame::analyse(const TQDomNode balise)
+{
+ /* MARKUP TYPE : FRAMESET INFO = TEXTE, ENTETE CONNUE */
+
+ /* Parameters Analyse */
+ Element::analyse(balise);
+
+ kdDebug(30522) << "FRAME ANALYSE (Pixmap)" << 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("PICTURE")== 0)
+ {
+ getPixmap(getChild(balise, "PICTURE"));
+ }
+
+ }
+ kdDebug(30522) << "END OF A FRAME" << endl;
+}
+
+/*******************************************/
+/* getPixmap */
+/*******************************************/
+/* Get informations about a pixmap stored */
+/* in the tared file. */
+/*******************************************/
+void PixmapFrame::getPixmap(const TQDomNode balise_initiale)
+{
+ kdDebug(30522) << "PIXMAP" << endl;
+ setKeepAspectRatio(getAttr(balise_initiale, "keepAspectRatio"));
+ TQDomNode balise = getChild(balise_initiale, "KEY");
+ setKey(getAttr(balise, "filename"));
+ FileHeader::instance()->useGraphics();
+ TQString file = getKey();
+ /* Remove the extension */
+ int posExt = file.findRev('.');
+ file.truncate(posExt);
+ /* Remove the path */
+ file = file.section('/', -1);
+ setFilenamePS(file + ".eps");
+ kdDebug(30522) << "PS : " << getFilenamePS() << endl;
+ kdDebug(30522) << "END PIXMAP" << endl;
+}
+
+/*******************************************/
+/* analyseParamFrame */
+/*******************************************/
+void PixmapFrame::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());
+}
+
+/**
+ * Convert a pixmap file in eps file. Use ImageMagick
+ */
+void PixmapFrame::convert()
+{
+#ifdef HAVE_MAGICK
+ kdDebug(30522) << "CONVERT PICTURE IN EPS" << endl;
+ ExceptionInfo exception;
+
+ Image* image;
+
+ ImageInfo
+ *image_info;
+
+ /*
+ Initialize the image info structure and read an image.
+ */
+ InitializeMagick(NULL);
+ GetExceptionInfo(&exception);
+ image_info = CloneImageInfo((ImageInfo *) NULL);
+ // 8 characters are deleted when readign the file picture name
+ TQString filename = "file:///" + getRoot()->extractData(getKey());
+ strncpy(image_info->filename, filename.latin1(), filename.length());
+ image = ReadImage(image_info, &exception);
+ if (image == (Image *) NULL)
+ MagickError(exception.severity, exception.reason, exception.description);
+ else
+ {
+ /*
+ Write the image as EPS and destroy it.
+ Copy image file in the same directory than the tex file.
+ */
+ TQString dir = "";
+ if( Config::instance()->getPicturesDir().isEmpty() ||
+ Config::instance()->getPicturesDir() == NULL)
+ {
+ dir = getFilename();
+ dir.truncate(getFilename().findRev('/'));
+ }
+ else
+ dir = Config::instance()->getPicturesDir();
+ kdDebug(30522) << "file " << getFilename() << endl;
+ kdDebug(30522) << "path " << dir << endl;
+ (void) strcpy(image->filename, (dir + "/" + getFilenamePS()).latin1());
+ WriteImage(image_info, image);
+ DestroyImage(image);
+ }
+ DestroyImageInfo(image_info);
+ DestroyExceptionInfo(&exception);
+ DestroyMagick();
+ kdDebug(30522) << "CONVERTION DONE" << endl;
+#endif
+}
+
+/*******************************************/
+/* generate */
+/*******************************************/
+/* Generate the text formated (if needed). */
+/*******************************************/
+void PixmapFrame::generate(TQTextStream &out)
+{
+ if(Config::instance()->convertPictures())
+ convert();
+
+ Config::instance()->writeIndent(out);
+ out << "\\includegraphics{" << getFilenamePS()<< "}" << endl;
+
+}
+