bool CanBeFileName(const CGraphmatFile& F, size_t LB) { return ( F.HasDescr (LB, OLLE) || F.HasDescr (LB, ORLE) || F.HasDescr (LB, ODgCh) || F.HasDescr (LB, ODg) || ( ((F.GetUnits()[LB].GetTokenLength()) == 1) && (((unsigned char)F.GetUnits()[LB].GetToken()[0]) == '*') ) || ( (F.GetUnits()[LB].GetTokenLength() == 2) && ((unsigned char)F.GetUnits()[LB].GetToken()[0] == '.') && ((unsigned char)F.GetUnits()[LB].GetToken()[1] == '.') ) ); };
static void InitEnglishNameSlot (CGraphmatFile& C) { for (size_t i=1; i< C.GetUnits().size(); i++) if ( !C.GetUnits()[i].IsSoft() && !C.HasDescr(i,OPun) ) { if (C.HasDescr(i, OLw)) continue; const char* UpperUnit = C.GetUppercaseToken(i); vector<CEnglishName>::const_iterator It = lower_bound (C.m_pDicts->m_EnglishNames.begin(), C.m_pDicts->m_EnglishNames.end(), UpperUnit, EnglishNameLess); if ( (It != C.m_pDicts->m_EnglishNames.end()) && !strcmp(It->name, UpperUnit) ) C.GetUnit(i).SetEnglishName(); }; };
/* Building units like "Bill Bush" */ static bool DealSimpleEnglishNames (CGraphmatFile& C, size_t StartPos, size_t EndPos) { size_t i = StartPos; if (!(C.GetUnits()[i].IsEnglishName())) return false; for (i++;(i<EndPos) && C.GetUnits()[i].IsSoft(); i++) if ( C.GetUnits()[i].IsParagraphTag() || C.HasDescr(i, OPar) ) return false; if ( (i == EndPos) || !C.HasDescr(i, OLLE) || !C.HasDescr(i, OUpLw) ) return false; if (C.HasGrouped(StartPos,i+1)) return false; C.SetDes (StartPos, OFAM1); C.SetDes (i, OFAM2); C.SetState(StartPos,i+1,stGrouped); return true; };
bool CanBeRussianInitial(const CGraphmatFile&C, size_t LineNo) { return C.HasDescr(LineNo,OUp) && C.GetUnits()[LineNo].GetTokenLength()==1 && C.HasDescr(LineNo,ORLE) ; };