#include "support/convert.h"
#include "support/debug.h"
#include "support/filetools.h"
+#include "support/gettext.h"
#include "support/lstrings.h"
#include "support/Systemcall.h"
#include "support/Package.h"
using namespace lyx::support;
QString const math_fonts[] = {"cmex10", "cmmi10", "cmr10", "cmsy10",
- "esint10", "eufm10", "msam10", "msbm10", "rsfs10", "wasy10"};
+ "esint10", "eufm10", "msam10", "msbm10", "rsfs10", "stmary10",
+ "wasy10"};
int const num_math_fonts = sizeof(math_fonts) / sizeof(*math_fonts);
namespace lyx {
{ MSB_FAMILY, "msbm10", "-*-msbm10-*-*-*-*-*-*-*-*-*-*-*-*" },
{ EUFRAK_FAMILY,"eufm10", "-*-eufm10-medium-*-*-*-*-*-*-*-*-*-*-*" },
{ RSFS_FAMILY, "rsfs10", "-*-rsfs10-medium-*-*-*-*-*-*-*-*-*-*-*" },
+ { STMARY_FAMILY,"stmary10","-*-stmary10-medium-*-*-*-*-*-*-*-*-*-*-*" },
{ WASY_FAMILY, "wasy10", "-*-wasy10-medium-*-*-*-*-*-*-*-*-*-*-*" },
{ ESINT_FAMILY, "esint10","-*-esint10-medium-*-*-*-*-*-*-*-*-*-*-*" }
};
size_t const nr_symbol_fonts = sizeof(symbol_fonts) / sizeof(symbol_fonts[0]);
/// BUTT ugly !
-static GuiFontInfo * fontinfo_[NUM_FAMILIES][2][4][10];
+static GuiFontInfo * fontinfo_[NUM_FAMILIES][NUM_SERIES][NUM_SHAPE][NUM_SIZE];
-/// Get font info (font + metrics) for the given LyX font.
+// Get font info (font + metrics) for the given LyX font.
// if not cached, create it.
GuiFontInfo & fontinfo(FontInfo const & f)
{
- LASSERT(f.family() < NUM_FAMILIES, /**/);
- LASSERT(f.series() < 2, /**/);
- LASSERT(f.realShape() < 4, /**/);
- LASSERT(f.size() < 10, /**/);
+ // LASSERT: Is there anything we might do here besides crash?
+ LBUFERR(f.family() < NUM_FAMILIES);
+ LBUFERR(f.series() < NUM_SERIES);
+ LBUFERR(f.realShape() < NUM_SHAPE);
+ LBUFERR(f.size() < NUM_SIZE);
// fi is a reference to the pointer type (GuiFontInfo *) in the
// fontinfo_ table.
GuiFontInfo * & fi =
}
+#if 0
bool isSymbolFamily(FontFamily family)
{
return family >= SYMBOL_FAMILY && family <= ESINT_FAMILY;
}
+#endif
static bool isChosenFont(QFont & font, QString const & family)
toqstr(addPath(package().system_support().absFileName(), "fonts"));
for (int i = 0 ; i < num_math_fonts; ++i) {
- QString const font_file = fonts_dir + '/' + math_fonts[i] + ".ttf";
+ QString const font_file = fonts_dir + math_fonts[i] + ".ttf";
int fontID = QFontDatabase::addApplicationFont(font_file);
LYXERR(Debug::FONT, "Adding font " << font_file
}
for (int i1 = 0; i1 < NUM_FAMILIES; ++i1)
- for (int i2 = 0; i2 < 2; ++i2)
- for (int i3 = 0; i3 < 4; ++i3)
- for (int i4 = 0; i4 < 10; ++i4)
+ for (int i2 = 0; i2 < NUM_SERIES; ++i2)
+ for (int i3 = 0; i3 < NUM_SHAPE; ++i3)
+ for (int i4 = 0; i4 < NUM_SIZE; ++i4)
fontinfo_[i1][i2][i3][i4] = 0;
}
void FontLoader::update()
{
for (int i1 = 0; i1 < NUM_FAMILIES; ++i1)
- for (int i2 = 0; i2 < 2; ++i2)
- for (int i3 = 0; i3 < 4; ++i3)
- for (int i4 = 0; i4 < 10; ++i4) {
+ for (int i2 = 0; i2 < NUM_SERIES; ++i2)
+ for (int i3 = 0; i3 < NUM_SHAPE; ++i3)
+ for (int i4 = 0; i4 < NUM_SIZE; ++i4) {
delete fontinfo_[i1][i2][i3][i4];
fontinfo_[i1][i2][i3][i4] = 0;
}
switch (f.realShape()) {
case ITALIC_SHAPE:
+ font.setStyle(QFont::StyleItalic);
+ break;
case SLANTED_SHAPE:
- font.setItalic(true);
+ font.setStyle(QFont::StyleOblique);
+ break;
+ case SMALLCAPS_SHAPE:
+ font.setCapitalization(QFont::SmallCaps);
break;
default:
break;
LYXERR(Debug::FONT, "The font has size: " << font.pointSizeF());
- if (f.realShape() != SMALLCAPS_SHAPE) {
- metrics = GuiFontMetrics(font);
- } else {
- // handle small caps ourselves ...
- FontInfo smallfont = f;
- smallfont.decSize().decSize().setShape(UP_SHAPE);
- QFont font2(font);
- font2.setKerning(false);
- font2.setPointSizeF(convert<double>(lyxrc.font_sizes[smallfont.size()])
- * lyxrc.zoom / 100.0);
-
- metrics = GuiFontMetrics(font, font2);
- }
+ metrics = GuiFontMetrics(font);
}
bool FontLoader::available(FontInfo const & f)
{
+ // FIXME THREAD
static vector<int> cache_set(NUM_FAMILIES, false);
static vector<int> cache(NUM_FAMILIES, false);
FontFamily family = f.family();
+#ifdef Q_WS_MACX
+ // Apple ships a font name "Symbol", which has more or less the same
+ // glyphs as the original PostScript Symbol font, but it uses a different
+ // encoding (see https://en.wikipedia.org/wiki/Symbol_(typeface)#cite_note-2).
+ // Since we expect the font specific encoding of the original
+ // PostScript Symbol font, we can't use the one provided on OS X.
+ // See also the discussion in bug 7954.
+ if (f.family() == SYMBOL_FAMILY)
+ return false;
+#endif
if (cache_set[family])
return cache[family];
cache_set[family] = true;
}
+bool FontLoader::canBeDisplayed(char_type c)
+{
+ // bug 8493
+ if (c == 0x0009)
+ // FIXME check whether this is still needed for Qt5
+ return false;
+#if QT_VERSION < 0x050000 && defined(QT_MAC_USE_COCOA) && (QT_MAC_USE_COCOA > 0)
+ // bug 7954, see also comment in GuiPainter::text()
+ if (c == 0x00ad)
+ return false;
+#endif
+ return true;
+}
+
+
FontMetrics const & FontLoader::metrics(FontInfo const & f)
{
return fontinfo(f).metrics;