void Font::validate(LaTeXFeatures & features) const { BufferParams const & bparams = features.bufferParams(); Language const * doc_language = bparams.language; if (bits_.noun() == FONT_ON) { LYXERR(Debug::LATEX, "font.noun: " << bits_.noun()); features.require("noun"); LYXERR(Debug::LATEX, "Noun enabled. Font: " << to_utf8(stateText(0))); } if (bits_.underbar() == FONT_ON) { LYXERR(Debug::LATEX, "font.underline: " << bits_.underbar()); features.require("ulem"); LYXERR(Debug::LATEX, "Underline enabled. Font: " << to_utf8(stateText(0))); } if (bits_.strikeout() == FONT_ON) { LYXERR(Debug::LATEX, "font.strikeout: " << bits_.strikeout()); features.require("ulem"); LYXERR(Debug::LATEX, "Strikeout enabled. Font: " << to_utf8(stateText(0))); } if (bits_.uuline() == FONT_ON) { LYXERR(Debug::LATEX, "font.uuline: " << bits_.uuline()); features.require("ulem"); LYXERR(Debug::LATEX, "Double underline enabled. Font: " << to_utf8(stateText(0))); } if (bits_.uwave() == FONT_ON) { LYXERR(Debug::LATEX, "font.uwave: " << bits_.uwave()); features.require("ulem"); LYXERR(Debug::LATEX, "Wavy underline enabled. Font: " << to_utf8(stateText(0))); } switch (bits_.color()) { case Color_none: case Color_inherit: case Color_ignore: // probably we should put here all interface colors used for // font displaying! For now I just add this ones I know of (Jug) case Color_latex: case Color_notelabel: break; default: features.require("color"); LYXERR(Debug::LATEX, "Color enabled. Font: " << to_utf8(stateText(0))); } // FIXME: Do something for background and soul package? if (((features.usePolyglossia() && lang_->polyglossia() != doc_language->polyglossia()) || (features.useBabel() && lang_->babel() != doc_language->babel()) || (doc_language->encoding()->package() == Encoding::CJK && lang_ != doc_language)) && lang_ != ignore_language && lang_ != latex_language) { features.useLanguage(lang_); LYXERR(Debug::LATEX, "Found language " << lang_->lang()); } }
GuiFontInfo::GuiFontInfo(FontInfo const & f) : metrics(QFont()) { font.setKerning(false); QString const pat = symbolFamily(f.family()); if (!pat.isEmpty()) { bool ok; font = symbolFont(pat, &ok); } else { switch (f.family()) { case ROMAN_FAMILY: { QString family = makeFontName(toqstr(lyxrc.roman_font_name), toqstr(lyxrc.roman_font_foundry)); font.setFamily(family); #ifdef Q_WS_MACX #if QT_VERSION >= 0x040300 //&& QT_VERSION < 0x040800 // Workaround for a Qt bug, see http://www.lyx.org/trac/ticket/3684 // and http://bugreports.qt.nokia.com/browse/QTBUG-11145. // FIXME: Check whether this is really fixed in Qt 4.8 if (family == "Times" && !font.exactMatch()) font.setFamily("Times New Roman"); #endif #endif break; } case SANS_FAMILY: font.setFamily(makeFontName(toqstr(lyxrc.sans_font_name), toqstr(lyxrc.sans_font_foundry))); break; case TYPEWRITER_FAMILY: font.setFamily(makeFontName(toqstr(lyxrc.typewriter_font_name), toqstr(lyxrc.typewriter_font_foundry))); break; default: break; } } switch (f.series()) { case MEDIUM_SERIES: font.setWeight(QFont::Normal); break; case BOLD_SERIES: font.setWeight(QFont::Bold); break; default: break; } switch (f.realShape()) { case ITALIC_SHAPE: case SLANTED_SHAPE: font.setItalic(true); break; default: break; } LYXERR(Debug::FONT, "Font '" << stateText(f) << "' matched by\n" << font.family()); // Is this an exact match? if (font.exactMatch()) LYXERR(Debug::FONT, "This font is an exact match"); else LYXERR(Debug::FONT, "This font is NOT an exact match"); LYXERR(Debug::FONT, "XFLD: " << font.rawName()); font.setPointSizeF(convert<double>(lyxrc.font_sizes[f.size()]) * lyxrc.zoom / 100.0); 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); } }