33#include <QCoreApplication>
41#include <QTextDocument>
42#include <QImageWriter>
44#include <QTemporaryDir>
51#include "klffilterprocess.h"
52#include "klfuserscript.h"
54#include "klfbackend_p.h"
84#ifdef KLF_EXTRA_SEARCH_PATHS
85# define EXTRA_PATHS_PRE KLF_EXTRA_SEARCH_PATHS ,
88# define EXTRA_PATHS_PRE
93#if defined(Q_OS_WIN32) || defined(Q_OS_WIN64)
98static const char * standard_extra_paths[] = {
100 "C:\\Program Files*\\MiKTeX*\\miktex\\bin",
101 "C:\\texlive\\*\\bin\\win*",
102 "C:\\Program Files*\\gs*\\gs*\\bin",
105#elif defined(KLF_WS_MAC)
110static const char * standard_extra_paths[] = {
112 "/usr/texbin:/Library/TeX/texbin:/usr/local/bin:/opt/local/bin:/sw/bin:/sw/usr/bin",
120static const char * standard_extra_paths[] = {
130KLFAbstractLatexMetaInfo::KLFAbstractLatexMetaInfo()
133KLFAbstractLatexMetaInfo::~KLFAbstractLatexMetaInfo()
143 saveField(
"Application",
144 QObject::tr(
"Created with KLatexFormula version %1",
"KLFBackend::saveOutputToFile")
145 .arg(KLF_VERSION_STRING));
147 saveField(
"InputLatex", in.
latex);
148 saveField(
"InputMathMode", in.
mathmode);
149 saveField(
"InputPreamble", in.
preamble);
151 saveField(
"InputFgColor",
QString(
"rgb(%1, %2, %3)").arg(qRed(in.fg_color))
152 .
arg(qGreen(in.fg_color)).
arg(qBlue(in.fg_color)));
153 saveField(
"InputBgColor",
QString(
"rgba(%1, %2, %3, %4)").arg(qRed(in.
bg_color))
158 saveField(
"InputBypassTemplate", boolstr[(
int)in.
bypassTemplate]);
162 saveField(
"InputUserScriptParams", usparams);
167 saveField(
"SettingsOutlineFonts", boolstr[(
int)settings.
outlineFonts]);
169 saveField(
"SettingsWantRaw", boolstr[(
int)settings.
wantRaw]);
170 saveField(
"SettingsWantPDF", boolstr[(
int)settings.
wantPDF]);
171 saveField(
"SettingsWantSVG", boolstr[(
int)settings.
wantSVG]);
173 klfDbg(
"saved meta-info.") ;
177KLFImageLatexMetaInfo::KLFImageLatexMetaInfo(
QImage *imgwrite) : _w(imgwrite) { }
179void KLFImageLatexMetaInfo::saveField(
const QString& k,
const QString& v)
196 for (i = 0; i < v.
length(); ++i) {
197 if (v[i] < 0 || v[i] > 126) {
207 for (i = 0; i < vdata.
size(); ++i) {
210 if (
QChar(vdata[i]).isLetterOrNumber() || c ==
' ' || c ==
'.' || c ==
',' || c ==
'/')
225 klfDbg(
"escaping char: (int)c="<<(
int)c<<
" (uint)c="<<uint(c)<<
", octal="<<
klfFmtCC(
"%03o", (uint)c));
230 return "("+escaped+
")";
240 for (i = 0; i < (vdata.
size()-1); i += 2) {
241 hex +=
klfFmt(
"%02x%02x ", (
unsigned int)(
unsigned char)vdata[i], (
unsigned int)(
unsigned char)vdata[i+1]);
243 return "<" + hex +
">";
248KLFPdfmarksWriteLatexMetaInfo::KLFPdfmarksWriteLatexMetaInfo(
QByteArray *
string)
256 "/pdfmark where { pop } { /globaldict where { pop globaldict } { userdict } ifelse "
257 "/pdfmark /cleartomark load put } ifelse\n"
267void KLFPdfmarksWriteLatexMetaInfo::saveField(
const QString& k,
const QString& v)
271void KLFPdfmarksWriteLatexMetaInfo::finish()
273 _s->
append(
" /DOCINFO pdfmark\n");
277 QByteArray datavalue = klf_escape_ps_string(v);
279 _s->
append(
" /"+k+
" " + datavalue +
"\n");
317KLFBackend::TemplateGenerator::TemplateGenerator()
320KLFBackend::TemplateGenerator::~TemplateGenerator()
324KLFBackend::DefaultTemplateGenerator::DefaultTemplateGenerator()
327KLFBackend::DefaultTemplateGenerator::~DefaultTemplateGenerator()
341 s +=
"\\documentclass{article}\n"
342 "\\usepackage[dvips]{color}\n";
345 "\\begin{document}\n"
346 "\\thispagestyle{empty}\n";
347 if (
in.fontsize > 0) {
348 s +=
QString(
"\\fontsize{%1}{%2}\\selectfont\n").
arg(
in.fontsize, 0,
'f', 2).
arg(
in.fontsize*1.2, 0,
'f', 2);
350 s +=
QString(
"\\definecolor{klffgcolor}{rgb}{%1,%2,%3}\n").
arg(
qRed(
in.fg_color)/255.0)
352 s +=
QString(
"\\definecolor{klfbgcolor}{rgb}{%1,%2,%3}\n").
arg(
qRed(
in.bg_color)/255.0)
355 s +=
"\\pagecolor{klfbgcolor}\n";
356 s +=
"{\\color{klffgcolor} ";
370KLFBackend::KLFBackend()
377#define D_RX "([0-9eE.-]+)"
381 double x1, x2, y1, y2;
390static void correct_eps_bbox(
const QByteArray& epsdata,
394static void replace_svg_width_or_height(
QByteArray *svgdata,
const char *
attr,
double val);
411 <<
"latex" <<
"dvi" <<
"eps-raw" <<
"eps-bbox" <<
"eps-processed"
412 <<
"png" <<
"pdf" <<
"svg-gs" <<
"svg" ;
437 s <<
"eps-processed";
439 s <<
"eps-processed";
441 s <<
"eps-processed";
470 klfWarning(
"User Script Skipped format "<<s<<
" which is necessary for "<<
forwhat) ;
477#define ASSERT_HAVE_FORMATS_FOR(forwhat) \
478 { if (!assert_have_formats_for(us_outputs, us_skipfmts, forwhat)) { \
479 res.status = KLFERR_USERSCRIPT_BADSKIPFORMATS; \
480 res.errorstr = QObject::tr("User Script broke dependencies in skip-formats list", "KLFBackend"); \
510 QStringList() <<
"PATH" <<
"TEXINPUTS" <<
"BIBINPUTS",
514 klfDbg(
"execution environment for sub-processes is "<<settings.
execenv) ;
536 res.
errorstr =
QObject::tr(
"Can't query version of ghostscript located at `%1'.",
"KLFBackend")
605 ver.replace(
".",
"x");
652 if (!
in.bypassTemplate) {
663 bool r = file.
open(QIODevice::WriteOnly);
670 if (!
in.bypassTemplate) {
674 klfDbg(
"using custom template generator") ;
680 stream <<
t->generateTemplate(
in, settings);
705 res.
status = KLFERR_USERSCRIPT_BADKLFVERSION;
706 res.
errorstr =
QObject::tr(
"User Script `%1' is not compatible with current version of KLatexFormula.",
712 res.
status = KLFERR_USERSCRIPT_BADCATEGORY;
722 <<
"KLF_TEMPDIR=" + settings.
tempdir
725 <<
"KLF_GS=" + settings.
gsexec
729 << klfInputToEnvironmentForUserScript(
in)
731 << klfSettingsToEnvironmentForUserScript(settings)
734 <<
"KLF_FN_TEX=" +
fnTex
735 <<
"KLF_FN_LATEX=" +
fnTex
736 <<
"KLF_FN_DVI=" +
fnDvi
742 <<
"KLF_FN_PDF=" +
fnPdf
744 <<
"KLF_FN_SVG=" +
fnSvg
752 p.setProcessAppEvents(
false);
795 klfWarning(
"Can't handle output format from user script: "<<
fmt) ;
822 klfWarning(
"User Script Info: Unknown format to skip: "<<
fmt) ;
833 klfWarning(
"User Script Info: format " <<
fmt <<
" provided by script is also marked "
834 "as to be skipped!") ;
854 switch (
p.resultStatus()) {
856 case KLFFP_NOEXIT: res.
status = KLFERR_USERSCRIPT_NONORMALEXIT;
break;
858 case KLFFP_NODATA: res.
status = KLFERR_USERSCRIPT_NOOUTPUT;
break;
859 case KLFFP_DATAREADFAIL: res.
status = KLFERR_USERSCRIPT_OUTPUTREADFAIL;
break;
892 klfWarning(
"Promised format " <<
fmt <<
" did not appear after calling user script.") ;
903 klfDbg(
"preparing to launch latex.") ;
924 p.errorToOutput(&res);
931 ASSERT_HAVE_FORMATS_FOR(
"eps-raw") ;
963 p.errorToOutput(&res);
981 ASSERT_HAVE_FORMATS_FOR(
"eps-bbox") ;
1054 ASSERT_HAVE_FORMATS_FOR(
"eps-processed") ;
1094 res.
errorstr =
QObject::tr(
"Installed Ghostscript version %1 may not be used to create font outlines."
1095 " Please upgrade to gs >= 9.15 (or downgrade to gs <= 9.07).",
1104 <<
"-q" <<
"-dBATCH" <<
"-");
1108 p.errorToOutput(&res);
1122 ASSERT_HAVE_FORMATS_FOR(
"png") ;
1145 <<
"-dNOPAUSE" <<
"-dSAFER" <<
"-dTextAlphaBits=4" <<
"-dGraphicsAlphaBits=4"
1148 p.addArgv(
"-sDEVICE=png16m");
1150 p.addArgv(
"-sDEVICE=pngalpha");
1156 p.errorToOutput(&res);
1164 klfWarning(
"PNG format was skipped by user script. The QImage object will be invalid.") ;
1170 klfWarning(
"PNG format is required to initialize the QImage object, but was not generated by user script.") ;
1186 buf.open(QIODevice::WriteOnly);
1190 klfWarning(
"Can't save \"final\" PNG data.") ;
1195 klfDbg(
"prepared final PNG data.") ;
1200 ASSERT_HAVE_FORMATS_FOR(
"pdf") ;
1204 bool r =
fpdfmarks.open(QIODevice::WriteOnly);
1213 pdfmetainfo.savePDFField(
"Keywords",
"KLatexFormula KLF LaTeX equation formula");
1236 <<
"-dNOPAUSE" <<
"-dSAFER" <<
"-sDEVICE=pdfwrite"
1243 p.errorToOutput(&res);
1250 if (!has_userscript_output(
us_outputs,
"svg-gs") &&
1253 ASSERT_HAVE_FORMATS_FOR(
"svg-gs") ;
1279 p.addArgv(
QStringList() <<
"-dNOCACHE" <<
"-dNOPAUSE" <<
"-dSAFER" <<
"-dEPSCrop" <<
"-sDEVICE=svg"
1281 <<
"-q" <<
"-dBATCH" <<
"-");
1286 p.errorToOutput(&res);
1293 ASSERT_HAVE_FORMATS_FOR(
"svg") ;
1310 klfDbg(
"end of function.") ;
1339 p.setOutputStdout(
true);
1340 p.setOutputStderr(
true);
1344 p.setArgv(
QStringList() << settings.
gsexec <<
"-dNOPAUSE" <<
"-dSAFER" <<
"-sDEVICE=bbox" <<
"-q" <<
"-dBATCH"
1356 QRegExp rx_gsbbox(
"%%HiResBoundingBox\\s*:\\s+" D_RX
"\\s+" D_RX
"\\s+" D_RX
"\\s+" D_RX
"");
1360 resError->errorstr =
QObject::tr(
"Ghostscript did not provide parsable BBox output!",
"KLFBackend");
1387static bool s_starts_with(
const char * x,
int len_x,
const char *
test,
int len_test)
1398 static const char *
hibboxtag =
"%%HiResBoundingBox:";
1399 static const char *
bboxtag =
"%%BoundingBox:";
1405 buf.setData(epsdata);
1406 bool r =
buf.open(QIODevice::ReadOnly | QIODevice::Text);
1408 klfWarning(
"What's going on!!?! can't open buffer for reading? Will Fail!!!") ;
1412 QObject::tr(
"DVIPS did not provide parsable %%BoundingBox: in its output!",
"KLFBackend");
1422 klfDbg(
"stopped looking for hires-bbox.") ;
1435 klfDbg(
"got hires-bbox.") ;
1447 klfDbg(
"got normal bbox.") ;
1476 static const char *
bboxdecl =
"%%BoundingBox:";
1484 char nl[] =
"\0\0\0";
1495 nl[0] =
'\r',
nl[1] =
'\n';
1509 "%%%%BoundingBox: 0 0 %d %d%s"
1510 "%%%%HiResBoundingBox: 0 0 %s %s%s",
1527 "%s %s %s setrgbcolor "
1546 "%%%%PageBoundingBox 0 0 %d %d%s"
1547 "<< /PageSize [%d %d] >> setpagedevice%s"
1570 neweps.replace(
i, len, buffer);
1582 klfDebugf((
"New eps bbox is [0 0 %.6g %.6g] with translate [%.6g %.6g] and scale %.6g.",
1589static void replace_svg_width_or_height(
QByteArray *svgdata,
const char *
attreq,
double val)
1610 return a.latex ==
b.latex &&
1611 a.mathmode ==
b.mathmode &&
1612 a.preamble ==
b.preamble &&
1613 fabs(
a.fontsize -
b.fontsize) < 0.001 &&
1614 a.fg_color ==
b.fg_color &&
1615 a.bg_color ==
b.bg_color &&
1617 fabs(
a.vectorscale -
b.vectorscale) < 0.001 &&
1618 a.bypassTemplate ==
b.bypassTemplate &&
1619 a.userScript ==
b.userScript;
1625 a.tempdir ==
b.tempdir &&
1626 a.latexexec ==
b.latexexec &&
1627 a.dvipsexec ==
b.dvipsexec &&
1628 a.gsexec ==
b.gsexec &&
1629 a.epstopdfexec ==
b.epstopdfexec &&
1630 a.tborderoffset ==
b.tborderoffset &&
1631 a.rborderoffset ==
b.rborderoffset &&
1632 a.bborderoffset ==
b.bborderoffset &&
1633 a.lborderoffset ==
b.lborderoffset &&
1634 a.calcEpsBoundingBox ==
b.calcEpsBoundingBox &&
1635 a.outlineFonts ==
b.outlineFonts &&
1636 a.wantRaw ==
b.wantRaw &&
1637 a.wantPDF ==
b.wantPDF &&
1638 a.wantSVG ==
b.wantSVG &&
1639 a.execenv ==
b.execenv &&
1640 a.templateGenerator ==
b.templateGenerator ;
1650 fmts <<
"PNG" <<
"PS" <<
"EPS" <<
"DVI" <<
"PDF" <<
"SVG";
1654 f =
f.trimmed().toUpper();
1675 formats <<
"PS" <<
"EPS";
1681 f =
f.trimmed().toUpper();
1701 }
else if (
format ==
"DVI") {
1703 }
else if (
format ==
"PDF") {
1706 "KLFBackend::saveOutputToFile");
1713 }
else if (
format ==
"SVG") {
1716 "KLFBackend::saveOutputToFile");
1727 "KLFBackend::saveOutputToDevice").
arg(
format);
1753 if (fileName.
isEmpty() || fileName ==
"-") {
1754 if ( !
fout.open(
stdout, QIODevice::WriteOnly) ) {
1756 "KLFBackend::saveOutputToFile").
arg(
fout.error());
1763 fout.setFileName(fileName);
1764 if ( !
fout.open(QIODevice::WriteOnly) ) {
1766 "KLFBackend::saveOutputToFile")
1785 for (
k = 0; standard_extra_paths[
k] !=
NULL; ++
k) {
1812 { & settings->
gsexec, progGS },
1859 klfWarning(
"Cannot get 'gs' devices information with "<<(settings->
gsexec+
" --version/--help"));
1861 }
else if (gsInfo[settings->
gsexec].availdevices.
contains(
"svg")) {
1876 if (
gsfi.fileName() ==
"mgs.exe") {
1882 klfDbg(
"Adjusting environment for mgs.exe: `MIKTEX_GS_LIB="+
mgsenv+
"'") ;
1913 p.setExecEnviron(settings->
execenv);
1916 p.setProcessAppEvents(
false);
1943 p.setExecEnviron(
ee);
1946 p.setProcessAppEvents(
false);
1960 klfWarning(
"Unable to parse gs' available devices.") ;
1970 klfDbg(
"Detected devices: "<<availdevices) ;
1991 i.availdevices = availdevices;
2006 <<
"KLF_SETTINGS_CALCEPSBOUNDINGBOX=" +
QString::fromLatin1(settings.calcEpsBoundingBox ?
"1" :
"0")
2007 <<
"KLF_SETTINGS_WANT_RAW=" +
QString::fromLatin1(settings.wantRaw ?
"1" :
"0")
2008 <<
"KLF_SETTINGS_WANT_PDF=" +
QString::fromLatin1(settings.wantPDF ?
"1" :
"0")
2009 <<
"KLF_SETTINGS_WANT_SVG=" +
QString::fromLatin1(settings.wantSVG ?
"1" :
"0");
2020 env <<
"KLF_INPUT_LATEX=" +
in.latex
2021 <<
"KLF_INPUT_MATHMODE=" +
in.mathmode
2022 <<
"KLF_INPUT_PREAMBLE=" +
in.preamble
2024 <<
"KLF_INPUT_FG_COLOR_WEB=" +
QColor(
in.fg_color).
name()
2025 <<
"KLF_INPUT_FG_COLOR_RGBA=" +
fgcol
2027 <<
"KLF_INPUT_BG_COLOR_WEB=" +
QColor(
in.bg_color).name()
2028 <<
"KLF_INPUT_BG_COLOR_RGBA=" +
bgcol
2029 <<
"KLF_INPUT_DPI=" +
QString::number(
in.dpi)
2030 <<
"KLF_INPUT_VECTORSCALE=" +
klfFmt(
"%.6g",
in.vectorscale)
2031 <<
"KLF_INPUT_USERSCRIPT=" +
in.userScript
2032 <<
"KLF_INPUT_BYPASS_TEMPLATE=" +
QString::number(
in.bypassTemplate)
virtual QString generateTemplate(const klfInput &input, const klfSettings &settings)
static QStringList availableSaveFormats(const klfOutput *output=NULL)
Get a list of available output formats.
static bool detectOptionSettings(klfSettings *settings, bool isMainThread=true)
Detects additional options (e.g. klfSettings::wantSVG) that depend on specific program versions.
static bool detectSettings(klfSettings *settings, const QString &extraPath=QString(), bool isMainThread=true)
Detects the system settings and stores the guessed values in settings.
static klfOutput getLatexFormula(const klfInput &in, const klfSettings &settings, bool isMainThread=true)
The function that processes everything.
static bool saveOutputToDevice(const klfOutput &output, QIODevice *device, const QString &format=QString("PNG"), QString *errorString=NULL)
Saves the given output into the given device.
static bool saveOutputToFile(const klfOutput &output, const QString &fileName, const QString &format=QString(), QString *errorString=NULL)
Save the output to image file.
Definition of class KLFBackend.
#define KLFERR_GSPOSTPROC_NOOUTPUT
Program 'gs' didn't provide any data after post-processing EPS file.
#define KLFERR_GSPNG_NONORMALEXIT
Program 'gs' didn't exit noramally (crashed) while generating PNG (see also KLFERR_PROGERR_GSPNG)
#define KLFERR_PROGERR_GSPOSTPROC
gs exited with non-zero status while post-processing EPS file (page size, font outlines)
#define KLFERR_GSPDF_NOOUTPUT
No PDF file appeared after running 'gs'.
#define KLFERR_LATEX_NOOUTPUT
No .dvi file appeared after runnig latex program.
#define KLFERR_GSBBOX_NOOUTPUT
Program 'gs' didn't provide any output.
#define KLFERR_GSPOSTPROC_NONORMALEXIT
Program 'gs' crashed while post-processing EPS file (see also KLFERR_PROGERR_GSPOSTPROC)
#define KLFERR_GSSVG_NONORMALEXIT
Program 'gs' didn't exit noramally (crashed) while generating SVG (see also KLFERR_PROGERR_GSSVG)
#define KLFERR_PROGERR_LATEX
latex exited with a non-zero status
#define KLFERR_MISSINGMATHMODETHREEDOTS
The "..." is missing in math mode string.
#define KLFERR_PROGERR_GSPDF
gs exited with non-zero status while producing PDF
#define KLFERR_GSBBOX_NOBBOX
Program 'gs' calculating bbox didn't provide parsable output.
#define KLFERR_GSBBOX_NORUN
Program 'gs' cannot be executed to calculate bounding box.
#define KLFERR_LATEX_OUTPUTREADFAIL
Error while opening .dvi file for reading.
#define KLFERR_PROGERR_GSPNG
gs exited with a non-zero status while producing PNG
#define KLFERR_NOLATEXPROG
obsolete, same as KLFERR_LATEX_NORUN
#define KLFERR_LATEX_NORUN
Error while launching the given latex program.
#define KLFERR_DVIPS_OUTPUTREADFAIL
Error while opening .eps file for reading.
#define KLFERR_GSPOSTPROC_NORUN
Program 'gs' cannot be executed to post-process EPS file (page size, outline fonts)
#define KLFERR_GSSVG_NOOUTPUT
No SVG file appeared after running 'gs'.
#define KLFERR_GSSVG_NORUN
Program 'gs' couldn't be executed to generate SVG.
#define KLFERR_NODVIPSPROG
obsolete, same as KLFERR_DVIPS_NORUN
#define KLFERR_PROGERR_USERSCRIPT
user wrapper script exited with non-zero status
#define KLFERR_DVIPS_OUTPUTNOBBOX
Error while reading/parsing %BoundingBox: in dvips output.
#define KLFERR_DVIPS_NORUN
Error while launching the given dvips program.
#define KLFERR_GSPNG_NOOUTPUT
No PNG file appeared after running 'gs'.
#define KLFERR_USERSCRIPT_NORUN
Failed to execute user wrapper script.
#define KLFERR_GSPNG_OUTPUTREADFAIL
Failed to read PNG file produced by 'gs'.
#define KLFERR_DVIPS_NONORMALEXIT
dvips program did not exit properly (program killed) (see also KLFERR_PROGERR_DVIPS)
#define KLFERR_GSBBOX_NONORMALEXIT
Program 'gs' crashed while calculating bbox (see also KLFERR_PROGERR_GSBBOX)
#define KLFERR_GSPNG_NORUN
Program 'gs' couldn't be executed to generate PNG.
#define KLFERR_NOERROR
No Error.
#define KLFERR_PROGERR_DVIPS
dvips exited with a non-zero status
#define KLFERR_GSPDF_NORUN
Program 'gs' couldn't be executed to generate PDF.
#define KLFERR_PDFMARKSWRITEFAIL
Error while opening pdfmarks file for writing.
#define KLFERR_GSPDF_NONORMALEXIT
Program 'gs' didn't exit noramally (crashed) while generating PDF (see also KLFERR_PROGERR_GSPDF)
#define KLFERR_GSSVG_OUTPUTREADFAIL
Failed to read SVG file produced by 'gs'.
KLF_EXPORT bool operator==(const KLFBackend::klfInput &a, const KLFBackend::klfInput &b)
#define KLFERR_GSPDF_OUTPUTREADFAIL
Failed to read PDF file produced by 'gs'.
#define KLFERR_PROGERR_GSBBOX
gs exited with non-zero status while calculating bbox of EPS file generated by dvips
KLF_EXPORT bool klf_detect_execenv(KLFBackend::klfSettings *settings)
detects any additional settings to environment variables
#define KLFERR_NOGSVERSION
Failed to query gs version.
#define KLFERR_LATEX_NONORMALEXIT
latex program did not exit properly (program killed) (see also KLFERR_PROGERR_LATEX)
#define KLFERR_GSPOSTPROC_NOOUTLINEFONTS
'gs' cannot outline fonts: need version <= 9.07 (pswrite -dNOCACHE) or >= 9.15 (ps2write -dNoOutputFo...
#define KLFERR_DVIPS_NOOUTPUT
no .eps file appeared after running dvips program
#define KLFERR_TEMPDIR_FAIL
Failed to create the temporary directory.
#define KLFERR_NOGSPROG
obsolete, same as KLFERR_GSPNG_NORUN
#define KLFERR_MISSINGLATEXFORMULA
No LaTeX formula is specified (empty string)
#define KLFERR_PROGERR_GSSVG
gs exited with non-zero status while producing SVG
#define KLFERR_GSSVG_NOSVG
This version of gs cannot produce SVG.
#define KLFERR_GSPOSTPROC_OUTPUTREADFAIL
Couldn't read output provided by 'gs' program after post-processing EPS file.
#define KLFERR_TEXWRITEFAIL
Error while opening .tex file for writing.
Defines the KLFBlockProcess class.
KLF_EXPORT QByteArray klfEscapedToData(const QByteArray &data, char escapechar)
KLF_EXPORT QByteArray klfDataToEscaped(const QByteArray &value_ba, char escapechar)
KLF_EXPORT QByteArray klfSaveVariantToText(const QVariant &value, bool saveListAndMapsAsXML, QByteArray *savedType, QByteArray *savedListOrMapType)
#define KLF_DEBUG_TIME_BLOCK(msg)
#define klfWarning(streamableItems)
#define KLF_DEBUG_BLOCK(msg)
#define KLF_ASSERT_NOT_NULL(ptr, msg, failaction)
#define KLF_ASSERT_CONDITION(expr, msg, failaction)
#define klfDbg(streamableItems)
#define klfDebugf(arglist)
KLF_EXPORT int klfVersionCompare(const QString &v1, const QString &v2)
KLF_EXPORT QByteArray klfFmt(const char *fmt, va_list pp)
KLF_EXPORT void klfSetEnvironmentVariable(QStringList *env, const QString &var, const QString &value)
void klfMergeEnvironment(QStringList *env, const QStringList &addvars, const QStringList &pathvars, uint actions)
KLF_EXPORT QStringList klfCurrentEnvironment()
KLF_EXPORT QString klfSearchPath(const QString &programName, const QString &extra_path)
QVariantMap klfMapToVariantMap(const QMap< QString, T > &map)
QByteArray & append(char ch)
QByteArray & replace(int pos, int len, const char *after)
QString fromNativeSeparators(const QString &pathName)
QString toNativeSeparators(const QString &pathName)
virtual bool open(OpenMode mode)
bool load(QIODevice *device, const char *format)
bool loadFromData(const uchar *data, int len, const char *format)
bool save(const QString &fileName, const char *format, int quality) const
void setText(const QString &key, const QString &text)
QString text(const QString &key) const
qint64 write(const char *data, qint64 maxSize)
const_iterator constBegin() const
const_iterator constEnd() const
bool contains(const Key &key) const
const Key key(const T &value, const Key &defaultKey) const
int remove(const Key &key)
const T value(const Key &key, const T &defaultValue) const
QString tr(const char *sourceText, const char *disambiguation, int n)
QProcessEnvironment systemEnvironment()
bool contains(const T &value) const
QSet< T > fromList(const QList< T > &list)
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const
QString fromLatin1(const char *str, int size)
QString fromUtf8(const char *str, int size)
QString number(int n, int base)
QByteArray toLatin1() const
QByteArray toUtf8() const
bool contains(const QString &str, Qt::CaseSensitivity cs) const
QString join(const QString &separator) const
QTextCodec * codecForName(const QByteArray &name)
QByteArray fromUnicode(const QString &str) const
KLFBackend::getLatexFormula() result.
klfSettings settings
The settings that this output was generated with.
double height_pt
Width in points of the resulting equation.
QByteArray pdfdata
data for a pdf file
QByteArray epsdata_raw
data for an (eps-)postscript file.
QByteArray epsdata_bbox
data for an (eps-)postscript file.
QByteArray pngdata
the data for a png file (re-processed with meta information)
int status
A code describing the status of the request.
klfInput input
The input parameters used to generate this output.
QByteArray epsdata
data for an (eps-)postscript file.
QByteArray pngdata_raw
the data for a png file (exact gs output content)
double width_pt
Width in points of the resulting equation.
QImage result
The actual resulting image.
QByteArray svgdata
data for a SVG file, if ghostscript supports SVG
QByteArray dvidata
The DVI file data outputted by latex executable.
QString errorstr
An explicit error string.
General settings for KLFBackend::getLatexFormula()
TemplateGenerator * templateGenerator