[KLF Backend][KLF Tools][KLF Home]
KLatexFormula Project
klfbackend.h
Go to the documentation of this file.
1 /***************************************************************************
2  * file klfbackend.h
3  * This file is part of the KLatexFormula Project.
4  * Copyright (C) 2011 by Philippe Faist
5  * philippe.faist@bluewin.ch
6  * *
7  * This program is free software; you can redistribute it and/or modify *
8  * it under the terms of the GNU General Public License as published by *
9  * the Free Software Foundation; either version 2 of the License, or *
10  * (at your option) any later version. *
11  * *
12  * This program is distributed in the hope that it will be useful, *
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15  * GNU General Public License for more details. *
16  * *
17  * You should have received a copy of the GNU General Public License *
18  * along with this program; if not, write to the *
19  * Free Software Foundation, Inc., *
20  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
21  ***************************************************************************/
22 /* $Id: klfbackend.h 969 2016-12-29 07:44:24Z phfaist $ */
23 
24 #ifndef KLFBACKEND_H
25 #define KLFBACKEND_H
26 
27 #include <QString>
28 #include <QStringList>
29 #include <QByteArray>
30 #include <QImage>
31 #include <QMutex>
32 #include <QMap>
33 #include <QVariant>
34 
35 #include <klfdefs.h>
36 #include <klfpobj.h>
37 #include <klfutil.h> // KLFRefPtr
38 
40 
45 #define KLFERR_NOERROR 0
47 
49 #define KLFERR_TEMPDIR_FAIL -48
50 #define KLFERR_MISSINGLATEXFORMULA -1
52 #define KLFERR_MISSINGMATHMODETHREEDOTS -2
54 #define KLFERR_TEXWRITEFAIL -3
56 #define KLFERR_LATEX_NORUN -4
58 #define KLFERR_NOLATEXPROG KLFERR_LATEX_NORUN
60 #define KLFERR_LATEX_NONORMALEXIT -5
62 #define KLFERR_LATEXNONORMALEXIT KLFERR_LATEX_NONORMALEXIT
64 #define KLFERR_LATEX_NOOUTPUT -6
66 #define KLFERR_NODVIFILE KLFERR_LATEX_NOOUTPUT
68 #define KLFERR_LATEX_OUTPUTREADFAIL -24
70 #define KLFERR_DVIREADFAIL KLFERR_LATEX_OUTPUTREADFAIL
72 #define KLFERR_DVIPS_NORUN -7
74 #define KLFERR_NODVIPSPROG KLFERR_DVIPS_NORUN
76 #define KLFERR_DVIPS_NONORMALEXIT -8
78 #define KLFERR_DVIPSNONORMALEXIT KLFERR_DVIPS_NONORMALEXIT
80 #define KLFERR_DVIPS_NOOUTPUT -9
82 #define KLFERR_NOEPSFILE KLFERR_DVIPS_NOOUTPUT
84 #define KLFERR_DVIPS_OUTPUTREADFAIL -10
86 #define KLFERR_EPSREADFAIL KLFERR_DVIPS_OUTPUTREADFAIL
88 #define KLFERR_DVIPS_OUTPUTNOBBOX -11
90 #define KLFERR_NOEPSBBOX KLFERR_DVIPS_OUTPUTNOBBOX
92 #define KLFERR_GSBBOX_NORUN -25
94 #define KLFERR_GSBBOX_NONORMALEXIT -26
96 #define KLFERR_GSBBOX_NOOUTPUT -27
98 #define KLFERR_GSBBOX_NOBBOX -28
100 #define KLFERR_GSPOSTPROC_NORUN -29
102 #define KLFERR_GSPOSTPROC_NONORMALEXIT -30
104 #define KLFERR_GSPOSTPROC_NOOUTPUT -22
106 #define KLFERR_GSPOSTPROC_NOOUTLINEFONTS -49
108 #define KLFERR_NOEPSFILE_OF KLFERR_GSPOSTPROC_NOOUTPUT
110 #define KLFERR_GSPOSTPROC_OUTPUTREADFAIL -23
112 #define KLFERR_EPSREADFAIL_OF KLFERR_GSPOSTPROC_OUTPUTREADFAIL
114 #define KLFERR_GSPNG_NORUN -14
116 #define KLFERR_NOGSPROG KLFERR_GSPNG_NORUN
118 #define KLFERR_GSPNG_NONORMALEXIT -15
120 #define KLFERR_GSNONORMALEXIT KLFERR_GSPNG_NONORMALEXIT
122 #define KLFERR_GSPNG_NOOUTPUT -16
124 #define KLFERR_NOPNGFILE KLFERR_GSPNG_NOOUTPUT
126 #define KLFERR_GSPNG_OUTPUTREADFAIL -17
128 #define KLFERR_PNGREADFAIL KLFERR_GSPNG_OUTPUTREADFAIL
130 #define KLFERR_PDFMARKSWRITEFAIL -47
132 #define KLFERR_GSPDF_NORUN -31
134 #define KLFERR_GSPDF_NONORMALEXIT -19
136 #define KLFERR_EPSTOPDFNONORMALEXIT KLFERR_GSPDF_NONORMALEXIT
138 #define KLFERR_GSPDF_NOOUTPUT -20
140 #define KLFERR_NOPDFFILE KLFERR_GSPDF_NOOUTPUT
142 #define KLFERR_GSPDF_OUTPUTREADFAIL -21
144 #define KLFERR_PDFREADFAIL KLFERR_GSPDF_OUTPUTREADFAIL
146 #define KLFERR_NOGSVERSION -32
148 #define KLFERR_GSSVG_NOSVG -33
150 #define KLFERR_GSSVG_NORUN -34
152 #define KLFERR_GSSVG_NONORMALEXIT -35
154 #define KLFERR_GSSVG_NOOUTPUT -36
156 #define KLFERR_GSSVG_OUTPUTREADFAIL -37
158 #define KLFERR_USERSCRIPT_NORUN -38
160 #define KLFERR_USERSCRIPT_NONORMALEXIT -39
161 #define KLFERR_USERSCRIPT_NOSCRIPTINFO -40
162 #define KLFERR_USERSCRIPT_INVALIDSCRIPTINFO -41
163 #define KLFERR_USERSCRIPT_NOOUTPUT -42
164 #define KLFERR_USERSCRIPT_OUTPUTREADFAIL -43
165 #define KLFERR_USERSCRIPT_BADKLFVERSION -44
166 #define KLFERR_USERSCRIPT_BADSKIPFORMATS -45
167 #define KLFERR_USERSCRIPT_BADCATEGORY -46
168 // last error defined: -49
169 
170 
171 
173 #define KLFERR_PROGERR_LATEX 1
174 #define KLFERR_PROGERR_DVIPS 2
176 #define KLFERR_PROGERR_GSBBOX 6
178 #define KLFERR_PROGERR_GSPOSTPROC 5
180 #define KLFERR_PROGERR_GS_OF KLFERR_PROGERR_GSPOSTPROC
182 #define KLFERR_PROGERR_GSPNG 3
184 #define KLFERR_PROGERR_GS KLFERR_PROGERR_GSPNG
186 #define KLFERR_PROGERR_GSPDF 4
188 #define KLFERR_PROGERR_EPSTOPDF KLFERR_PROGERR_GSPDF
190 #define KLFERR_PROGERR_GSSVG 7
192 #define KLFERR_PROGERR_USERSCRIPT 8
194 // last error defined: 8
195 
196 
198 
207 {
208 public:
209 
210  class TemplateGenerator;
211 
213 
218  struct klfSettings
219  {
221  klfSettings() : tborderoffset(0), rborderoffset(0), bborderoffset(0), lborderoffset(0),
222  calcEpsBoundingBox(true), outlineFonts(true),
223  wantRaw(false), wantPDF(true), wantSVG(true), execenv(),
224  templateGenerator(NULL) { }
225 
244 
261 
265 
274 
277  bool wantRaw;
278 
281  bool wantPDF;
282 
285  bool wantSVG;
286 
290 
295 
301  };
302 
304 
306  struct klfInput
307  {
309  klfInput() : fontsize(-1), fg_color(0x00), bg_color(0xffffffff), dpi(600), vectorscale(1.0),
310  bypassTemplate(false) { }
326  double fontsize;
327 
328  unsigned long fg_color;
334  unsigned long bg_color;
337  int dpi;
338 
340  double vectorscale;
341 
349 
357 
365  };
366 
368 
370  struct klfOutput
371  {
381  int status;
382 
391 
394 
399 
451  double width_pt;
453  double height_pt;
454  };
455 
517  static klfOutput getLatexFormula(const klfInput& in, const klfSettings& settings,
518  bool isMainThread = true);
519 
534  static QStringList availableSaveFormats(const klfOutput * output = NULL) ;
535 
540  static QStringList availableSaveFormats(const klfOutput& output) ;
541 
568  static bool saveOutputToFile(const klfOutput& output, const QString& fileName,
569  const QString& format = QString(), QString* errorString = NULL);
570 
576  static bool saveOutputToDevice(const klfOutput& output, QIODevice *device,
577  const QString& format = QString("PNG"), QString* errorString = NULL);
578 
593  static bool detectSettings(klfSettings *settings, const QString& extraPath = QString(),
594  bool isMainThread = true);
595 
618  static bool detectOptionSettings(klfSettings *settings, bool isMainThread = true);
619 
621  static QStringList userScriptSettingsToEnvironment(const QMap<QString,QString>& userScriptSettings);
622 
623 
625  public:
627  virtual ~TemplateGenerator();
628 
629  virtual QString generateTemplate(const klfInput& input, const klfSettings& settings) = 0;
630  };
631 
633  public:
635  virtual ~DefaultTemplateGenerator();
636 
637  virtual QString generateTemplate(const klfInput& input, const klfSettings& settings);
638  };
639 
640 
641 
642 private:
643  KLFBackend();
644 };
645 
646 
647 
651 
672 
673 
674 
675 
676 
677 KLF_EXPORT QStringList klfSettingsToEnvironmentForUserScript(const KLFBackend::klfSettings& settings);
678 KLF_EXPORT QStringList klfInputToEnvironmentForUserScript(const KLFBackend::klfInput& in);
679 
680 
681 
688 {
689 public:
691  virtual ~KLFAbstractLatexMetaInfo();
692 
693  virtual QString loadField(const QString& key) = 0;
694  virtual void saveField(const QString& key, const QString& value) = 0;
695 
696  virtual void saveMetaInfo(const KLFBackend::klfInput& in, const KLFBackend::klfSettings& settings) ;
697 };
698 
700 {
701 public:
703 
704  QString loadField(const QString &k);
705  void saveField(const QString& k, const QString& v);
706 
707 private:
708  QImage *_w;
709 };
710 
711 
729 {
730 public:
732 
733  void saveField(const QString& k, const QString& v);
734  void finish();
735 
737  void savePDFField(const QString& k, const QString& v);
738 
740  QString loadField(const QString& );
741 
742 private:
743  QByteArray * _s;
744 };
745 
746 
747 
748 
749 
750 #endif
Specific input to KLFBackend::getLatexFormula()
Definition: klfbackend.h:306
QMap< QString, QString > userScriptInterpreters
Definition: klfbackend.h:300
QMap< QString, QString > userScriptParam
Arbitrary parameters to pass to user script.
Definition: klfbackend.h:364
QByteArray pdfdata
data for a pdf file
Definition: klfbackend.h:447
double width_pt
Width in points of the resulting equation.
Definition: klfbackend.h:451
Reading and writing klfbackend meta-info.
Definition: klfbackend.h:687
int status
A code describing the status of the request.
Definition: klfbackend.h:381
klfSettings settings
The settings that this output was generated with.
Definition: klfbackend.h:398
unsigned long bg_color
Definition: klfbackend.h:334
Write metainfo to PDF files via pdfmarks for ghostscript.
Definition: klfbackend.h:728
QByteArray pngdata
the data for a png file (re-processed with meta information)
Definition: klfbackend.h:428
TemplateGenerator * templateGenerator
Definition: klfbackend.h:294
QByteArray pngdata_raw
the data for a png file (exact gs output content)
Definition: klfbackend.h:408
klfInput input
The input parameters used to generate this output.
Definition: klfbackend.h:396
#define KLF_EXPORT
QString userScript
A Path to a user script that acts as wrapper around LaTeX.
Definition: klfbackend.h:356
The main engine for KLatexFormula.
Definition: klfbackend.h:206
QByteArray epsdata
data for an (eps-)postscript file.
Definition: klfbackend.h:445
const char * key
QByteArray epsdata_raw
data for an (eps-)postscript file.
Definition: klfbackend.h:434
double height_pt
Width in points of the resulting equation.
Definition: klfbackend.h:453
QImage result
The actual resulting image.
Definition: klfbackend.h:393
KLF_EXPORT bool operator==(const KLFBackend::klfInput &a, const KLFBackend::klfInput &b)
QString errorstr
An explicit error string.
Definition: klfbackend.h:390
KLFBackend::getLatexFormula() result.
Definition: klfbackend.h:370
QByteArray dvidata
The DVI file data outputted by latex executable.
Definition: klfbackend.h:401
QByteArray epsdata_bbox
data for an (eps-)postscript file.
Definition: klfbackend.h:441
KLF_EXPORT bool klf_detect_execenv(KLFBackend::klfSettings *settings)
detects any additional settings to environment variables
QByteArray svgdata
data for a SVG file, if ghostscript supports SVG
Definition: klfbackend.h:449
General settings for KLFBackend::getLatexFormula()
Definition: klfbackend.h:218

Generated by doxygen 1.8.13