Subversion Repositories Scribus

Rev

Rev 9672 | Rev 13085 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
11127 jghali 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
7
#include <QDir>
8
#include <QFileInfo>
9
 
10
#include "ftface.h"
11
#include "scface_ps.h"
12
 
13
 
14
 
15
QStringList ScFace_postscript::findFontMetrics(const QString& fontPath)  const
16
{
17
        QStringList metricsFiles;
18
        QFileInfo fi(fontPath);
19
 
20
        QString fontDir  = fi.absolutePath();
21
        QString fontFile = fi.fileName();
22
 
23
        metricsFiles += findFontMetrics(fontDir, fontFile);
24
 
25
        //if no metrics found look in afm and pfm subdirs
26
        if ( metricsFiles.size() <= 0 )
27
        {
28
                QDir dir;
29
                if (dir.exists(fontDir + "/AFMs"))
30
                        metricsFiles += findFontMetrics(fontDir + "/AFMs", fontFile);
31
                if (dir.exists(fontDir + "/afm") && metricsFiles.size() <= 0)
32
                        metricsFiles += findFontMetrics(fontDir + "/afm", fontFile);
33
                if (dir.exists(fontDir + "/Pfm") && metricsFiles.size() <= 0)
34
                        metricsFiles += findFontMetrics(fontDir + "/Pfm", fontFile);
35
                if (dir.exists(fontDir + "/pfm") && metricsFiles.size() <= 0)
36
                        metricsFiles += findFontMetrics(fontDir + "/pfm", fontFile);
37
        }
38
 
39
        return metricsFiles;
40
}
41
 
42
QStringList ScFace_postscript::findFontMetrics(const QString& baseDir, const QString& baseName) const
43
{
44
        QStringList metricsFiles;
45
        QString     basePath = baseDir + "/" + baseName;
46
        QString     afnm = basePath.left(basePath.length()-3);
47
 
48
        // Look for afm files
49
        QString afmName(afnm+"afm");
50
        if(QFile::exists(afmName))
51
                metricsFiles.append(afmName);
52
        else
53
        {
54
                afmName = afnm+"Afm";
55
                if(QFile::exists(afmName))
56
                        metricsFiles.append(afmName);
57
                else
58
                {
59
                        afmName = afnm+"AFM";
60
                        if(QFile::exists(afmName))
61
                                metricsFiles.append(afmName);
62
                }
63
        }
64
 
65
        // Look for pfm files
66
        QString pfmName(afnm+"pfm");
67
        if(QFile::exists(pfmName))
68
                metricsFiles.append(pfmName);
69
        else
70
        {
71
                pfmName = afnm+"Pfm";
72
                if(QFile::exists(pfmName))
73
                        metricsFiles.append(pfmName);
74
                else
75
                {
76
                        afmName = afnm+"PFM";
77
                        if(QFile::exists(pfmName))
78
                                metricsFiles.append(pfmName);
79
                }
80
        }
81
 
82
        return metricsFiles;
83
}
84
 
85
bool ScFace_postscript::loadFontMetrics(FT_Face face, const QString& fontPath) const
86
{
87
        bool metricsFound = false;
88
        QStringList fontMetrics = findFontMetrics(fontPath);
89
        if (fontMetrics.size() > 0)
90
        {
91
                bool brokenMetric = false;
92
                QString metricsFile;
93
                for (int i = 0; i < fontMetrics.size(); ++i)
94
                {
95
                        metricsFile = fontMetrics.at(i);
96
                        if (FT_Attach_File(face, metricsFile.toLocal8Bit().constData()))
97
                        {
98
                                qDebug(QObject::tr("Font %1 has broken metrics in file %2, ignoring metrics").arg(fontPath).arg(metricsFile).toLatin1().constData());
99
                                brokenMetric = true;
100
                        }
101
                        else
102
                        {
103
                                if (brokenMetric)
104
                                        qDebug(QObject::tr("Valid metrics were found for font %1, using metrics in file %2").arg(fontFile).arg(metricsFile).toLatin1().constData());
105
                                metricsFound = true;
106
                                break;
107
                        }
108
                }
109
        }
110
        else
111
                qDebug(QObject::tr("No metrics found for font %1, ignoring font").arg(fontPath).toLatin1().constData());
112
        return metricsFound;
113
}