/*--------------------------------------------------------------------------------------------*/ void GdlGlyphDefn::GetMachineClasses(FsmMachineClass ** ppfsmcAssignments, Set<FsmMachineClass *> & setpfsmc) { for (int iw = 0; iw < m_vwGlyphIDs.Size(); iw++) { utf16 wGlyphID = m_vwGlyphIDs[iw]; FsmMachineClass * pfsmc = ppfsmcAssignments[wGlyphID]; if (!setpfsmc.IsMember(pfsmc)) setpfsmc.Insert(pfsmc); } }
bool Set<T,H,Eq>::Equals(Set<T, H, Eq> & itset) { AssertObj(this); if (Size() != itset.Size()) return false; iterator it = Begin(); iterator itEnd = End(); for ( ; it != itEnd; ++it) { if (!itset.IsMember(*it)) return false; } return true; }
/*---------------------------------------------------------------------------------------------- Check for various error conditions. ----------------------------------------------------------------------------------------------*/ bool GdlFeatureDefn::ErrorCheck() { if (m_fStdLang) { Assert(m_vpfset.Size() == 0); m_fIDSet = true; return true; } // Feature with no ID: fatal error if (m_fIDSet == false) { g_errorList.AddError(3158, this, "No id specified for feature ", m_staName); m_fFatalError = true; return false; } // Duplicate IDs in feature settings: fatal error Set<int> setnIDs; for (int ifset = 0; ifset < m_vpfset.Size(); ++ifset) { int nValue = m_vpfset[ifset]->m_nValue; if (setnIDs.IsMember(nValue)) { g_errorList.AddError(3159, m_vpfset[ifset], "Duplicate feature setting values in ", m_staName); m_fFatalError = true; return false; } setnIDs.Insert(nValue); } // Feature with only one setting: warning if (m_vpfset.Size() == 1) g_errorList.AddWarning(3525, this, "Only one setting given for feature ", m_staName); return true; }
bool GdlRenderer::PreCompileFeatures(GrcManager * pcman, GrcFont * pfont, int * pfxdFeatVersion) { *pfxdFeatVersion = 0x00010000; int nInternalID = 0; Set<unsigned int> setID; for (int ipfeat = 0; ipfeat < m_vpfeat.Size(); ipfeat++) { GdlFeatureDefn * pfeat = m_vpfeat[ipfeat]; unsigned int nID = pfeat->ID(); if (setID.IsMember(nID)) { char rgch[20]; if (nID > 0x00FFFFFF) { char rgchID[5]; memcpy(rgch, &nID, 4); rgchID[0] = rgch[3]; rgchID[1] = rgch[2]; rgchID[2] = rgch[1]; rgchID[3] = rgch[0]; rgchID[4] = 0; StrAnsi staTmp = "'"; staTmp.Append(rgchID); staTmp.Append("'"); memcpy(rgch, staTmp.Chars(), staTmp.Length() + 1); } else itoa(nID, rgch, 10); g_errorList.AddError(3152, pfeat, "Duplicate feature ID: ", rgch); } else setID.Insert(nID); if (pfeat->ErrorCheck()) { pfeat->SetStdStyleFlag(); pfeat->FillInBoolean(pcman->SymbolTable()); pfeat->ErrorCheckContd(); pfeat->CalculateDefault(); pfeat->AssignInternalID(nInternalID); pfeat->RecordDebugInfo(); } if (nID > 0x0000FFFF) *pfxdFeatVersion = 0x00020000; nInternalID++; } if (m_vpfeat.Size() > kMaxFeatures) { char rgchMax[20]; itoa(kMaxFeatures, rgchMax, 10); char rgchCount[20]; itoa(m_vpfeat.Size(), rgchCount, 10); g_errorList.AddError(3153, NULL, "Number of features (", rgchCount, ") exceeds maximum of ", rgchMax); } return true; }