diff options
| author | craig <craig@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-01 11:40:09 +0000 |
|---|---|---|
| committer | craig <craig@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-01 11:40:09 +0000 |
| commit | 7ed83b6c6666eb8b6b104c211ae7e52907350372 (patch) | |
| tree | 4430b556abac0ad660a0aacf1887d77f85d8be02 /scribus/fonts/scface_ps.cpp | |
| download | scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.gz scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.xz scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.zip | |
Branch 1.3.5 tree to 1.4.x tree, goodbye 1.3.x
git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17163 11d20701-8431-0410-a711-e3c959e3b870
Diffstat (limited to 'scribus/fonts/scface_ps.cpp')
| -rw-r--r-- | scribus/fonts/scface_ps.cpp | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/scribus/fonts/scface_ps.cpp b/scribus/fonts/scface_ps.cpp new file mode 100644 index 0000000..949814f --- /dev/null +++ b/scribus/fonts/scface_ps.cpp @@ -0,0 +1,114 @@ +/* +For general Scribus (>=1.3.2) copyright and licensing information please refer +to the COPYING file provided with the program. Following this notice may exist +a copyright and/or license notice that predates the release of Scribus 1.3.2 +for which a new license (GPL+exception) is in place. +*/ +#include <QDebug> +#include <QDir> +#include <QFileInfo> + +#include "ftface.h" +#include "scface_ps.h" + + + +QStringList ScFace_postscript::findFontMetrics(const QString& fontPath) const +{ + QStringList metricsFiles; + QFileInfo fi(fontPath); + + QString fontDir = fi.absolutePath(); + QString fontFile = fi.fileName(); + + metricsFiles += findFontMetrics(fontDir, fontFile); + + //if no metrics found look in afm and pfm subdirs + if ( metricsFiles.size() <= 0 ) + { + QDir dir; + if (dir.exists(fontDir + "/AFMs")) + metricsFiles += findFontMetrics(fontDir + "/AFMs", fontFile); + if (dir.exists(fontDir + "/afm") && metricsFiles.size() <= 0) + metricsFiles += findFontMetrics(fontDir + "/afm", fontFile); + if (dir.exists(fontDir + "/Pfm") && metricsFiles.size() <= 0) + metricsFiles += findFontMetrics(fontDir + "/Pfm", fontFile); + if (dir.exists(fontDir + "/pfm") && metricsFiles.size() <= 0) + metricsFiles += findFontMetrics(fontDir + "/pfm", fontFile); + } + + return metricsFiles; +} + +QStringList ScFace_postscript::findFontMetrics(const QString& baseDir, const QString& baseName) const +{ + QStringList metricsFiles; + QString basePath = baseDir + "/" + baseName; + QString afnm = basePath.left(basePath.length()-3); + + // Look for afm files + QString afmName(afnm+"afm"); + if(QFile::exists(afmName)) + metricsFiles.append(afmName); + else + { + afmName = afnm+"Afm"; + if(QFile::exists(afmName)) + metricsFiles.append(afmName); + else + { + afmName = afnm+"AFM"; + if(QFile::exists(afmName)) + metricsFiles.append(afmName); + } + } + + // Look for pfm files + QString pfmName(afnm+"pfm"); + if(QFile::exists(pfmName)) + metricsFiles.append(pfmName); + else + { + pfmName = afnm+"Pfm"; + if(QFile::exists(pfmName)) + metricsFiles.append(pfmName); + else + { + afmName = afnm+"PFM"; + if(QFile::exists(pfmName)) + metricsFiles.append(pfmName); + } + } + + return metricsFiles; +} + +bool ScFace_postscript::loadFontMetrics(FT_Face face, const QString& fontPath) const +{ + bool metricsFound = false; + QStringList fontMetrics = findFontMetrics(fontPath); + if (fontMetrics.size() > 0) + { + bool brokenMetric = false; + QString metricsFile; + for (int i = 0; i < fontMetrics.size(); ++i) + { + metricsFile = fontMetrics.at(i); + if (FT_Attach_File(face, metricsFile.toLocal8Bit().constData())) + { + qDebug() << QObject::tr("Font %1 has broken metrics in file %2, ignoring metrics").arg(fontPath).arg(metricsFile); + brokenMetric = true; + } + else + { + if (brokenMetric) + qDebug() << QObject::tr("Valid metrics were found for font %1, using metrics in file %2").arg(fontFile).arg(metricsFile); + metricsFound = true; + break; + } + } + } + else + qDebug() << QObject::tr("No metrics found for font %1, ignoring font").arg(fontPath); + return metricsFound; +} |
