static QString getFamilyName(const FT_Face face) { QString familyName(face->family_name); QVector<FT_SfntName> names; for (FT_UInt i = 0; i < FT_Get_Sfnt_Name_Count(face); i++) { FT_SfntName name; if (!FT_Get_Sfnt_Name(face, i, &name)) { switch (name.name_id) { case TT_NAME_ID_FONT_FAMILY: case TT_NAME_ID_PREFERRED_FAMILY: if (name.platform_id != TT_PLATFORM_MACINTOSH) names.append(name); break; default: break; } } } if (!names.isEmpty()) { std::sort(names.begin(), names.end(), nameComp); foreach (const FT_SfntName& name, names) { QString string(decodeNameRecord(name)); if (!string.isEmpty()) { familyName = string; break; } }
shared_ptr<SwapIndex> SwapIndex::clone(const Handle<YieldTermStructure>& forwarding) const { if (exogenousDiscount_) return shared_ptr<SwapIndex>(new SwapIndex(familyName(), tenor(), fixingDays(), currency(), fixingCalendar(), fixedLegTenor(), fixedLegConvention(), dayCounter(), iborIndex_->clone(forwarding), discount_)); else return shared_ptr<SwapIndex>(new SwapIndex(familyName(), tenor(), fixingDays(), currency(), fixingCalendar(), fixedLegTenor(), fixedLegConvention(), dayCounter(), iborIndex_->clone(forwarding))); }
ext::shared_ptr<IborIndex> Libor::clone( const Handle<YieldTermStructure>& h) const { return ext::shared_ptr<IborIndex>(new Libor(familyName(), tenor(), fixingDays(), currency(), financialCenterCalendar_, dayCounter(), h)); }
boost::shared_ptr<IborIndex> OvernightIndex::clone( const Handle<YieldTermStructure>& h) const { return boost::shared_ptr<IborIndex>( new OvernightIndex(familyName(), fixingDays(), currency(), fixingCalendar(), dayCounter(), h)); }
boost::shared_ptr<IborIndex> IborIndex::clone( const Handle<YieldTermStructure>& h) const { return boost::shared_ptr<IborIndex>( new IborIndex(familyName(), tenor(), fixingDays(), currency(), fixingCalendar(), businessDayConvention(), endOfMonth(), dayCounter(), h)); }
const FontData* FontCache::getFontDataForCharacters(const Font& font, const UChar* characters, int length) { // IMLangFontLink::MapFont Method does what we want. IMLangFontLink2* langFontLink = getFontLinkInterface(); if (!langFontLink) return 0; FontData* fontData = 0; HDC hdc = GetDC(0); HFONT primaryFont = font.primaryFont()->m_font.hfont(); HGDIOBJ oldFont = SelectObject(hdc, primaryFont); HFONT hfont = 0; DWORD acpCodePages; langFontLink->CodePageToCodePages(CP_ACP, &acpCodePages); DWORD actualCodePages; long cchActual; langFontLink->GetStrCodePages(characters, length, acpCodePages, &actualCodePages, &cchActual); if (cchActual) { HFONT result; if (langFontLink->MapFont(hdc, actualCodePages, characters[0], &result) == S_OK) { // Fill in a log font with the returned font from MLang, and then use that to create a new font. LOGFONT lf; GetObject(result, sizeof(LOGFONT), &lf); langFontLink->ReleaseFont(result); hfont = CreateFontIndirect(&lf); SelectObject(hdc, hfont); WCHAR name[LF_FACESIZE]; GetTextFace(hdc, LF_FACESIZE, name); String familyName(name); if (!familyName.isEmpty()) { FontPlatformData* result = getCachedFontPlatformData(font.fontDescription(), familyName); if (result) fontData = getCachedFontData(result); } } } SelectObject(hdc, oldFont); if (hfont) DeleteObject(hfont); ReleaseDC(0, hdc); return fontData; }
void NameEditDialog::formattedNameTypeChanged() { QString name; if ( formattedNameType() == CustomName ) name = mCustomFormattedName; else { KABC::Addressee addr; addr.setPrefix( prefix() ); addr.setFamilyName( familyName() ); addr.setAdditionalName( additionalName() ); addr.setGivenName( givenName() ); addr.setSuffix( suffix() ); addr.setOrganization( mAddressee.organization() ); name = formattedName( addr, formattedNameType() ); } mFormattedNameEdit->setText( name ); }
SkAdvancedTypefaceMetrics* DWriteFontTypeface::onGetAdvancedTypefaceMetrics( PerGlyphInfo perGlyphInfo, const uint32_t* glyphIDs, uint32_t glyphIDsCount) const { SkAdvancedTypefaceMetrics* info = nullptr; HRESULT hr = S_OK; const unsigned glyphCount = fDWriteFontFace->GetGlyphCount(); DWRITE_FONT_METRICS dwfm; fDWriteFontFace->GetMetrics(&dwfm); info = new SkAdvancedTypefaceMetrics; info->fEmSize = dwfm.designUnitsPerEm; info->fLastGlyphID = SkToU16(glyphCount - 1); info->fAscent = SkToS16(dwfm.ascent); info->fDescent = SkToS16(dwfm.descent); info->fCapHeight = SkToS16(dwfm.capHeight); // SkAdvancedTypefaceMetrics::fFontName is in theory supposed to be // the PostScript name of the font. However, due to the way it is currently // used, it must actually be a family name. SkTScopedComPtr<IDWriteLocalizedStrings> familyNames; hr = fDWriteFontFamily->GetFamilyNames(&familyNames); UINT32 familyNameLen; hr = familyNames->GetStringLength(0, &familyNameLen); SkSMallocWCHAR familyName(familyNameLen+1); hr = familyNames->GetString(0, familyName.get(), familyNameLen+1); hr = sk_wchar_to_skstring(familyName.get(), familyNameLen, &info->fFontName); if (perGlyphInfo & kToUnicode_PerGlyphInfo) { populate_glyph_to_unicode(fDWriteFontFace.get(), glyphCount, &(info->fGlyphToUnicode)); } DWRITE_FONT_FACE_TYPE fontType = fDWriteFontFace->GetType(); if (fontType != DWRITE_FONT_FACE_TYPE_TRUETYPE && fontType != DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION) { return info; } // Simulated fonts aren't really TrueType fonts. if (fDWriteFontFace->GetSimulations() == DWRITE_FONT_SIMULATIONS_NONE) { info->fType = SkAdvancedTypefaceMetrics::kTrueType_Font; } AutoTDWriteTable<SkOTTableHead> headTable(fDWriteFontFace.get()); AutoTDWriteTable<SkOTTablePostScript> postTable(fDWriteFontFace.get()); AutoTDWriteTable<SkOTTableHorizontalHeader> hheaTable(fDWriteFontFace.get()); AutoTDWriteTable<SkOTTableOS2> os2Table(fDWriteFontFace.get()); if (!headTable.fExists || !postTable.fExists || !hheaTable.fExists || !os2Table.fExists) { return info; } //There exist CJK fonts which set the IsFixedPitch and Monospace bits, //but have full width, latin half-width, and half-width kana. bool fixedWidth = (postTable->isFixedPitch && (1 == SkEndian_SwapBE16(hheaTable->numberOfHMetrics))); //Monospace if (fixedWidth) { info->fStyle |= SkAdvancedTypefaceMetrics::kFixedPitch_Style; } //Italic if (os2Table->version.v0.fsSelection.field.Italic) { info->fStyle |= SkAdvancedTypefaceMetrics::kItalic_Style; } //Serif using SerifStyle = SkPanose::Data::TextAndDisplay::SerifStyle; SerifStyle serifStyle = os2Table->version.v0.panose.data.textAndDisplay.bSerifStyle; if (SkPanose::FamilyType::TextAndDisplay == os2Table->version.v0.panose.bFamilyType) { if (SerifStyle::Cove == serifStyle || SerifStyle::ObtuseCove == serifStyle || SerifStyle::SquareCove == serifStyle || SerifStyle::ObtuseSquareCove == serifStyle || SerifStyle::Square == serifStyle || SerifStyle::Thin == serifStyle || SerifStyle::Bone == serifStyle || SerifStyle::Exaggerated == serifStyle || SerifStyle::Triangle == serifStyle) { info->fStyle |= SkAdvancedTypefaceMetrics::kSerif_Style; } //Script } else if (SkPanose::FamilyType::Script == os2Table->version.v0.panose.bFamilyType) { info->fStyle |= SkAdvancedTypefaceMetrics::kScript_Style; } info->fItalicAngle = SkEndian_SwapBE32(postTable->italicAngle) >> 16; info->fBBox = SkIRect::MakeLTRB((int32_t)SkEndian_SwapBE16((uint16_t)headTable->xMin), (int32_t)SkEndian_SwapBE16((uint16_t)headTable->yMax), (int32_t)SkEndian_SwapBE16((uint16_t)headTable->xMax), (int32_t)SkEndian_SwapBE16((uint16_t)headTable->yMin)); return info; }
SkTypeface::LocalizedStrings* TestTypeface::onCreateFamilyNameIterator() const { SkString familyName(fTestFont->fName); SkString language("und"); // undetermined return new SkOTUtils::LocalizedStrings_SingleName(familyName, language); }
AuthenticationResultPtr OAuth2Response::parseTokenResponse(TokenResponsePtr tokenResponse, CallStatePtr/* callState*/) { Logger::info(Tag(), "parseTokenResponse"); AuthenticationResultPtr result = nullptr; if (!tokenResponse->accessToken.empty()) { auto curTimeUts = QDateTime::currentDateTimeUtc(); Logger::info(Tag(), "curTimeUTC: %; expiresIn: %", curTimeUts.toString("HH:mm:ss MM.dd.yy").toStdString(), tokenResponse->expiresIn); auto expiresUtc = curTimeUts.addSecs(tokenResponse->expiresIn); DateTimeOffset expiresOn = expiresUtc.toTime_t(); Logger::info(Tag(), "tonken expiresOn: % (%)", expiresUtc.toString("HH:mm:ss MM.dd.yy").toStdString(), expiresOn); result = std::make_shared<AuthenticationResult>(tokenResponse->tokenType, tokenResponse->accessToken, tokenResponse->refreshToken, expiresOn); // This is only needed for AcquireTokenByAuthorizationCode in which parameter resource is optional and we need // to get it from the STS response. result->resource(tokenResponse->resource); result->isMultipleResourceRefreshToken(!tokenResponse->refreshToken.empty() && !tokenResponse->resource.empty()); IdTokenPtr idToken = OAuth2Response::parseIdToken(tokenResponse->idToken); if (idToken != nullptr) { String tenantId = idToken->tenantId; String uniqueId; String displayableId; if (!idToken->objectId.empty()) { uniqueId = idToken->objectId; } else if (!idToken->subject.empty()) { uniqueId = idToken->subject; } if (!idToken->UPN.empty()) { displayableId = idToken->UPN; } else if (!idToken->email.empty()) { displayableId = idToken->email; } String givenName = idToken->givenName; String familyName = idToken->familyName; String identityProvider = idToken->identityProvider.empty() ? idToken->issuer : idToken->identityProvider; DateTimeOffset passwordExpiresOn = 0; if (idToken->passwordExpiration > 0) { passwordExpiresOn = QDateTime::currentDateTimeUtc().addSecs(idToken->passwordExpiration).toTime_t(); } String changePasswordUri; if (!idToken->passwordChangeUrl.empty()) { changePasswordUri = idToken->passwordChangeUrl; } auto userInfo = std::make_shared<UserInfo>(); userInfo->uniqueId(uniqueId); userInfo->displayableId(displayableId); userInfo->givenName(givenName); userInfo->familyName(familyName); userInfo->identityProvider(identityProvider); userInfo->passwordExpiresOn(passwordExpiresOn); userInfo->passwordChangeUrl(changePasswordUri); result->updateTenantAndUserInfo(tenantId, tokenResponse->idToken, userInfo ); } } else if (!tokenResponse->error.empty()) { Logger::error(Tag(), "error: %, description: %", tokenResponse->error, tokenResponse->errorDescription); throw RmsauthException(tokenResponse->error, tokenResponse->errorDescription); } else { throw RmsauthException(Constants::rmsauthError().Unknown); } return result; }
SkAdvancedTypefaceMetrics* DWriteFontTypeface::onGetAdvancedTypefaceMetrics( PerGlyphInfo perGlyphInfo, const uint32_t* glyphIDs, uint32_t glyphIDsCount) const { SkAdvancedTypefaceMetrics* info = nullptr; HRESULT hr = S_OK; const unsigned glyphCount = fDWriteFontFace->GetGlyphCount(); DWRITE_FONT_METRICS dwfm; fDWriteFontFace->GetMetrics(&dwfm); info = new SkAdvancedTypefaceMetrics; info->fEmSize = dwfm.designUnitsPerEm; info->fLastGlyphID = SkToU16(glyphCount - 1); // SkAdvancedTypefaceMetrics::fFontName is in theory supposed to be // the PostScript name of the font. However, due to the way it is currently // used, it must actually be a family name. SkTScopedComPtr<IDWriteLocalizedStrings> familyNames; hr = fDWriteFontFamily->GetFamilyNames(&familyNames); UINT32 familyNameLen; hr = familyNames->GetStringLength(0, &familyNameLen); SkSMallocWCHAR familyName(familyNameLen+1); hr = familyNames->GetString(0, familyName.get(), familyNameLen+1); hr = sk_wchar_to_skstring(familyName.get(), familyNameLen, &info->fFontName); if (perGlyphInfo & kToUnicode_PerGlyphInfo) { populate_glyph_to_unicode(fDWriteFontFace.get(), glyphCount, &(info->fGlyphToUnicode)); } DWRITE_FONT_FACE_TYPE fontType = fDWriteFontFace->GetType(); if (fontType == DWRITE_FONT_FACE_TYPE_TRUETYPE || fontType == DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION) { info->fType = SkAdvancedTypefaceMetrics::kTrueType_Font; } else { info->fAscent = dwfm.ascent; info->fDescent = dwfm.descent; info->fCapHeight = dwfm.capHeight; return info; } AutoTDWriteTable<SkOTTableHead> headTable(fDWriteFontFace.get()); AutoTDWriteTable<SkOTTablePostScript> postTable(fDWriteFontFace.get()); AutoTDWriteTable<SkOTTableHorizontalHeader> hheaTable(fDWriteFontFace.get()); AutoTDWriteTable<SkOTTableOS2> os2Table(fDWriteFontFace.get()); if (!headTable.fExists || !postTable.fExists || !hheaTable.fExists || !os2Table.fExists) { info->fAscent = dwfm.ascent; info->fDescent = dwfm.descent; info->fCapHeight = dwfm.capHeight; return info; } //There exist CJK fonts which set the IsFixedPitch and Monospace bits, //but have full width, latin half-width, and half-width kana. bool fixedWidth = (postTable->isFixedPitch && (1 == SkEndian_SwapBE16(hheaTable->numberOfHMetrics))); //Monospace if (fixedWidth) { info->fStyle |= SkAdvancedTypefaceMetrics::kFixedPitch_Style; } //Italic if (os2Table->version.v0.fsSelection.field.Italic) { info->fStyle |= SkAdvancedTypefaceMetrics::kItalic_Style; } //Script if (SkPanose::FamilyType::Script == os2Table->version.v0.panose.bFamilyType.value) { info->fStyle |= SkAdvancedTypefaceMetrics::kScript_Style; //Serif } else if (SkPanose::FamilyType::TextAndDisplay == os2Table->version.v0.panose.bFamilyType.value && SkPanose::Data::TextAndDisplay::SerifStyle::Triangle <= os2Table->version.v0.panose.data.textAndDisplay.bSerifStyle.value && SkPanose::Data::TextAndDisplay::SerifStyle::NoFit != os2Table->version.v0.panose.data.textAndDisplay.bSerifStyle.value) { info->fStyle |= SkAdvancedTypefaceMetrics::kSerif_Style; } info->fItalicAngle = SkEndian_SwapBE32(postTable->italicAngle) >> 16; info->fAscent = SkToS16(dwfm.ascent); info->fDescent = SkToS16(dwfm.descent); info->fCapHeight = SkToS16(dwfm.capHeight); info->fBBox = SkIRect::MakeLTRB((int32_t)SkEndian_SwapBE16((uint16_t)headTable->xMin), (int32_t)SkEndian_SwapBE16((uint16_t)headTable->yMax), (int32_t)SkEndian_SwapBE16((uint16_t)headTable->xMax), (int32_t)SkEndian_SwapBE16((uint16_t)headTable->yMin)); //TODO: is this even desired? It seems PDF only wants this value for Type1 //fonts, and we only get here for TrueType fonts. info->fStemV = 0; /* // Figure out a good guess for StemV - Min width of i, I, !, 1. // This probably isn't very good with an italic font. int16_t min_width = SHRT_MAX; info->fStemV = 0; char stem_chars[] = {'i', 'I', '!', '1'}; for (size_t i = 0; i < SK_ARRAY_COUNT(stem_chars); i++) { ABC abcWidths; if (GetCharABCWidths(hdc, stem_chars[i], stem_chars[i], &abcWidths)) { int16_t width = abcWidths.abcB; if (width > 0 && width < min_width) { min_width = width; info->fStemV = min_width; } } } */ if (perGlyphInfo & kHAdvance_PerGlyphInfo) { if (fixedWidth) { SkAdvancedTypefaceMetrics::WidthRange range(0); int16_t advance; getWidthAdvance(fDWriteFontFace.get(), 1, &advance); range.fAdvance.append(1, &advance); SkAdvancedTypefaceMetrics::FinishRange( &range, 0, SkAdvancedTypefaceMetrics::WidthRange::kDefault); info->fGlyphWidths.emplace_back(std::move(range)); } else { IDWriteFontFace* borrowedFontFace = fDWriteFontFace.get(); info->setGlyphWidths( glyphCount, glyphIDs, glyphIDsCount, SkAdvancedTypefaceMetrics::GetAdvance([borrowedFontFace](int gId, int16_t* data) { return getWidthAdvance(borrowedFontFace, gId, data); }) ); } } return info; }
std::string IptcDataSets::makeKey(uint16 number, uint16 recordId) { return std::string(familyName()) + "." + std::string(recordName(recordId)) + "." + std::string(dataSetName(number, recordId)); }
std::string IptcDataSets::makeKey(const DataSet& dataSet) { return std::string(familyName()) + "." + std::string(recordName(dataSet.recordId_)) + "." + dataSet.name_; }
QString EmbeddedFont::changeFamilyName(const QString &newFamilyName) { TableDirectory *nameTableDirectoryEntry = tableDirectoryEntry("name"); if (nameTableDirectoryEntry == 0) return QString(); QString oldFamilyName = familyName(nameTableDirectoryEntry); // Reserve size for name table header, five required name records and string const int requiredRecordCount = 5; quint16 nameIds[requiredRecordCount] = { 1, 2, 3, 4, 6 }; int sizeOfHeader = sizeof(NameTable) + sizeof(NameRecord) * requiredRecordCount; int newFamilyNameSize = newFamilyName.size() * sizeof(quint16); const QString regularString = QString::fromLatin1("Regular"); int regularStringSize = regularString.size() * sizeof(quint16); // Align table size of table to 32 bits (pad with 0) int fullSize = ((sizeOfHeader + newFamilyNameSize + regularStringSize) & ~3) + 4; QByteArray newNameTable(fullSize, char(0)); { NameTable *nameTable = reinterpret_cast<NameTable *>(newNameTable.data()); nameTable->count = requiredRecordCount; nameTable->stringOffset = sizeOfHeader; NameRecord *nameRecord = reinterpret_cast<NameRecord *>(nameTable + 1); for (int i=0; i<requiredRecordCount; ++i, nameRecord++) { nameRecord->nameID = nameIds[i]; nameRecord->encodingID = 1; nameRecord->languageID = 0x0409; nameRecord->platformID = 3; nameRecord->length = newFamilyNameSize; // Special case for sub-family if (nameIds[i] == 4) { nameRecord->offset = newFamilyNameSize; nameRecord->length = regularStringSize; } } // nameRecord now points to string data BigEndian<quint16> *stringStorage = reinterpret_cast<BigEndian<quint16> *>(nameRecord); const quint16 *sourceString = newFamilyName.utf16(); for (int i=0; i<newFamilyName.size(); ++i) stringStorage[i] = sourceString[i]; stringStorage += newFamilyName.size(); sourceString = regularString.utf16(); for (int i=0; i<regularString.size(); ++i) stringStorage[i] = sourceString[i]; } quint32 *p = reinterpret_cast<quint32 *>(newNameTable.data()); quint32 *tableEnd = reinterpret_cast<quint32 *>(newNameTable.data() + fullSize); quint32 checkSum = 0; while (p < tableEnd) checkSum += *(p++); nameTableDirectoryEntry->checkSum = checkSum; nameTableDirectoryEntry->offset = m_fontData.size(); nameTableDirectoryEntry->length = fullSize; m_fontData.append(newNameTable); return oldFamilyName; }