HTRecord* HTRecord::getInstance(Symbols* symbols, CARD16 index, CARD16 lastSSIndex) { // 0 CARD16 word = symbols->file->getCARD16(); bool anyInternal = bitField(word, 0); bool anyPublic = bitField(word, 1); CARD16 link = bitField(word, 2, 15); // 1 CARD16 ssIndex = symbols->file->getCARD16(); // ss.substring(lastSSIndex, data.ssIndex); QString value = symbols->ss.mid(lastSSIndex, ssIndex - lastSSIndex); return new HTRecord(symbols, index, anyInternal, anyPublic, link, ssIndex, value); }
static QByteArray getWritingSystems(QFontEngine *fontEngine) { QByteArray os2Table = fontEngine->getSfntTable(MAKE_TAG('O', 'S', '/', '2')); if (os2Table.isEmpty()) return QByteArray(); const uchar *data = reinterpret_cast<const uchar *>(os2Table.constData()); quint32 unicodeRange[4] = { qFromBigEndian<quint32>(data + 42), qFromBigEndian<quint32>(data + 46), qFromBigEndian<quint32>(data + 50), qFromBigEndian<quint32>(data + 54) }; quint32 codePageRange[2] = { qFromBigEndian<quint32>(data + 78), qFromBigEndian<quint32>(data + 82) }; QList<QFontDatabase::WritingSystem> systems = determineWritingSystemsFromTrueTypeBits(unicodeRange, codePageRange); QByteArray bitField((QFontDatabase::WritingSystemsCount + 7) / 8, 0); for (int i = 0; i < systems.count(); ++i) { int bitPos = systems.at(i); bitField[bitPos / 8] = bitField.at(bitPos / 8) | (1 << (bitPos % 8)); } return bitField; }
int TimeCode::binaryGroup (int group) const { if (group < 1 || group > 8) throw Iex::ArgExc ("Cannot extract binary group from time code " "user data. Group number is out of range."); int minBit = 4 * (group - 1); int maxBit = minBit + 3; return int (bitField (_user, minBit, maxBit)); }
bool TimeCode::bgf2 () const { return bool (bitField (_time, 31, 31)); }
bool TimeCode::bgf1 () const { return bool (bitField (_time, 30, 30)); }
bool TimeCode::bgf0 () const { return bool (bitField (_time, 23, 23)); }
bool TimeCode::fieldPhase () const { return bool (bitField (_time, 15, 15)); }
bool TimeCode::colorFrame () const { return bool (bitField (_time, 7, 7)); }
bool TimeCode::dropFrame () const { return bool (bitField (_time, 6, 6)); }
int TimeCode::frame () const { return bcdToBinary (bitField (_time, 0, 5)); }
int TimeCode::seconds () const { return bcdToBinary (bitField (_time, 8, 14)); }
int TimeCode::minutes () const { return bcdToBinary (bitField (_time, 16, 22)); }
int TimeCode::hours () const { return bcdToBinary (bitField (_time, 24, 29)); }
Symbols::Symbols(BCD* bcd_, int symbolBase_) : bcd(bcd_) { bcd = bcd_; file = bcd->file; symbolBase = symbolBase_; offsetBase = (symbolBase - ALTO_BIAS) * WORDS_PER_PAGE; file->position(offsetBase); versionIdent = file->getCARD16(); if (versionIdent != VersionID) { logger.fatal("versionIdent %d", versionIdent); logger.fatal("symbolBase %d", symbolBase); ERROR(); } version = Stamp::getInstance(bcd) ; creator = Stamp::getInstance(bcd) ; sourceVersion = Stamp::getInstance(bcd) ; logger.info("version %s", version->toString().toLocal8Bit().constData()); logger.info("creator %s", creator->toString().toLocal8Bit().constData()); logger.info("source %s", sourceVersion->toString().toLocal8Bit().constData()); CARD16 word = file->getCARD16(); definitionsFile = bitField(word, 15); logger.info("definitionFile %d", definitionsFile); directoryCtx = CTXIndex::getInstance(this, bitField(word, 1, 15)); logger.info("directoryCtx %s", directoryCtx->toString().toLocal8Bit().constData()); importCtx = CTXIndex::getInstance(this, file->getCARD16()); logger.info("importCtx %s", importCtx->toString().toLocal8Bit().constData()); outerCtx = CTXIndex::getInstance(this, file->getCARD16()); logger.info("outerCtx %s", outerCtx->toString().toLocal8Bit().constData()); hvBlock = BlockDescriptor::getInstance(bcd); logger.info("hvBlock %s", hvBlock->toString().toLocal8Bit().constData()); htBlock = BlockDescriptor::getInstance(bcd); logger.info("htBlock %s", htBlock->toString().toLocal8Bit().constData()); ssBlock = BlockDescriptor::getInstance(bcd); logger.info("ssBlock %s", ssBlock->toString().toLocal8Bit().constData()); outerPackBlock = BlockDescriptor::getInstance(bcd); // logger.info("outerPackBlock %s", outerPackBlock->toString().toLocal8Bit().constData()); innerPackBlock = BlockDescriptor::getInstance(bcd); // logger.info("innerPackBlock %s", innerPackBlock->toString().toLocal8Bit().constData()); constBlock = BlockDescriptor::getInstance(bcd); // logger.info("constBlock %s", constBlock->toString().toLocal8Bit().constData()); seBlock = BlockDescriptor::getInstance(bcd); logger.info("seBlock %s", seBlock->toString().toLocal8Bit().constData()); ctxBlock = BlockDescriptor::getInstance(bcd); logger.info("ctxBlock %s", ctxBlock->toString().toLocal8Bit().constData()); mdBlock = BlockDescriptor::getInstance(bcd); logger.info("mdBlock %s", mdBlock->toString().toLocal8Bit().constData()); bodyBlock = BlockDescriptor::getInstance(bcd); logger.info("bodyBlock %s", bodyBlock->toString().toLocal8Bit().constData()); extBlock = BlockDescriptor::getInstance(bcd); // logger.info("extBlock %s", extBlock->toString().toLocal8Bit().constData()); treeBlock = BlockDescriptor::getInstance(bcd); // logger.info("treeBlock %s", treeBlock->toString().toLocal8Bit().constData()); litBlock = BlockDescriptor::getInstance(bcd); // logger.info("litBlock %s", litBlock->toString().toLocal8Bit().constData()); sLitBlock = BlockDescriptor::getInstance(bcd); // logger.info("sLitBlock %s", sLitBlock->toString().toLocal8Bit().constData()); epMapBlock = BlockDescriptor::getInstance(bcd); // logger.info("epMapBlock %s", epMapBlock->toString().toLocal8Bit().constData()); spareBlock = BlockDescriptor::getInstance(bcd); // logger.info("spareBlock %s", spareBlock->toString().toLocal8Bit().constData()); fgRelPgBase = file->getCARD16(); // logger.info("fgRelPgBase %d", fgRelPgBase); fgPgCount = file->getCARD16(); // logger.info("fgPgCount %d", fgPgCount); // Read block initializeSS(ssBlock); initializeHT(htBlock); initializeMD(mdBlock); initializeCTX(ctxBlock); initializeSE(seBlock); initializeBT(bodyBlock); initializeLT(litBlock); initializeExt(extBlock); initializeTree(treeBlock); BTIndex::checkAll(); CTXIndex::checkAll(); ExtIndex::checkAll(); HTIndex::checkAll(); LTIndex::checkAll(); MDIndex::checkAll(); SEIndex::checkAll(); TreeIndex::checkAll(); };