summaryrefslogtreecommitdiffstats
path: root/scribus/fonts/scface_ps.cpp
diff options
context:
space:
mode:
authorcraig <craig@11d20701-8431-0410-a711-e3c959e3b870>2012-01-01 11:40:09 +0000
committercraig <craig@11d20701-8431-0410-a711-e3c959e3b870>2012-01-01 11:40:09 +0000
commit7ed83b6c6666eb8b6b104c211ae7e52907350372 (patch)
tree4430b556abac0ad660a0aacf1887d77f85d8be02 /scribus/fonts/scface_ps.cpp
downloadscribus-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.cpp114
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;
+}