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.
74 lines
1.9 KiB
74 lines
1.9 KiB
|
|
#include <kdebug.h> |
|
#include <kprocess.h> |
|
#include <qapplication.h> |
|
|
|
#include "fontpool.h" |
|
|
|
void fontPool::setResolution( int basedpi ) |
|
{ |
|
Resolution = basedpi; |
|
} |
|
|
|
void fontPool::setMetafontMode( const QString &mode ) |
|
{ |
|
MetafontMode = mode; |
|
} |
|
|
|
void fontPool::setMakePK(int flag) |
|
{ |
|
makepk = flag; |
|
kdDebug() << "MakeTexPK " << flag << endl; |
|
} |
|
|
|
void fontPool::appendx(const struct font *fontp) |
|
{ |
|
this->append(fontp); |
|
|
|
// Find the font name. We use the external program "kpsewhich" for |
|
// that purpose. |
|
|
|
// Our way of running the process is, of course, a terrible |
|
// hack. Currently, it takes 50% of CPU time just to check if the |
|
// Process is still alive. I will change that as soon as |
|
// possible. ---Stefan Kebekus. |
|
|
|
KShellProcess proc; |
|
qApp->connect(&proc, SIGNAL(receivedStdout(KProcess *, char *, int)), |
|
fontp, SLOT(font_name_receiver(KProcess *, char *, int))); |
|
|
|
// First try if the font is a virtual font |
|
proc.clearArguments(); |
|
proc << "kpsewhich"; |
|
proc << "--format vf"; |
|
proc << fontp->fontname; |
|
proc.start(KProcess::NotifyOnExit, KProcess::All); |
|
while(proc.isRunning()) |
|
qApp->processEvents(); |
|
|
|
// Font not found? Then check if the font is a regular font. |
|
if (fontp->filename.isEmpty()) { |
|
proc.clearArguments(); |
|
proc << "kpsewhich"; |
|
proc << QString("--dpi %1").arg(Resolution); |
|
proc << QString("--mode %1").arg(MetafontMode); |
|
proc << "--format pk"; |
|
if (makepk == 0) |
|
proc << "--no-mktex pk"; |
|
else |
|
proc << "--mktex pk"; |
|
proc << QString("%1.%2").arg(fontp->fontname).arg((int)(fontp->fsize + 0.5)); |
|
proc.start(KProcess::NotifyOnExit, KProcess::All); |
|
while(proc.isRunning()) |
|
qApp->processEvents(); |
|
} |
|
} |
|
|
|
|
|
void fontPool::status(void) |
|
{ |
|
struct font *fontp; |
|
|
|
for ( fontp=this->first(); fontp != 0; fontp=this->next() ) |
|
kdDebug() << fontp->fontname << ": " << fontp->flags << endl; |
|
}
|
|
|