// //////////////////////////////////////////////////////////////////////////// void SubjectNameFlat::CheckPattern() { if (!IsPattern()) { std::ostringstream error_text; error_text << "Subject name '" << ToString() << "' is not an explicit Rendezvous subject name pattern."; // CODE NOTE: Should throw RvBadSubjectException throw RvException(error_text); } }
void DiffSyntax::Do(const wchar *ln, const wchar *end, CodeEditor *editor, int line, int tabsize, int pos) { const int lineLength = FindTheNumberOfCharsToLineEnd(ln, end); if(IsPattern(ln, end, "---") || IsPattern(ln, end, "***")) { const wchar *lnPrefix = end - 4; if(lnPrefix >= ln) { if (IsPattern(lnPrefix, end, "----") || IsPattern(lnPrefix, end, "****")) { Put(INK_DIFF_HEADER, lineLength); return; } } Put(INK_DIFF_FILE_INFO, lineLength); } else if(IsPattern(ln, end, "====") || IsPattern(ln, end, "index")) Put(INK_DIFF_FILE_INFO, lineLength); else if(IsPattern(ln, end, "+++")) Put(INK_DIFF_HEADER, lineLength); else if(IsPattern(ln, end, "@@")) Put(INK_DIFF_HEADER, lineLength); else if(IsDigit(*ln)) Put(INK_DIFF_HEADER, lineLength); else if(*ln == '+' || *ln == '>') Put(INK_DIFF_ADDED, lineLength); else if(*ln == '-' || *ln == '<' || *ln == '!') Put(INK_DIFF_REMOVED, lineLength); else if(*ln == ' ') Put(INK_NORMAL, lineLength); else Put(INK_DIFF_COMMENT, lineLength); }
// //////////////////////////////////////////////////////////////////////////// bool SubjectNameFlat::IsFullName() const { return(!IsPattern()); }
void CRusSemStructure::BuildVerbLexFunctParameterForTheNodes (long SitNodeNo, long ParamNodeNo) { const CRusSemNode& SitNode = m_Nodes[SitNodeNo]; const CRusSemNode& ParamNode = m_Nodes[ParamNodeNo]; vector<CLexicalFunctionField>::const_iterator It = find(SitNode.m_LexFunctFields.begin(), SitNode.m_LexFunctFields.end(), ParamNode.m_Words[ParamNode.m_MainWordNo].m_Lemma); if (It == SitNode.m_LexFunctFields.end()) { // поищем среди эквивалентов const CRusSemWord& W = ParamNode.m_Words[ParamNode.m_MainWordNo]; for (long j=0; j < W.m_WordEquals.size(); j++) { It = find(SitNode.m_LexFunctFields.begin(), SitNode.m_LexFunctFields.end(), W.m_WordEquals[j]); if (It != SitNode.m_LexFunctFields.end()) break; } }; /* параметр может быть словосочетанием Например: IncepOper1 (ответственность) = взять_на_себя */ if (It == SitNode.m_LexFunctFields.end()) if (ParamNode.GetType() == CollocRoss) { // берем TITLЕ string UnitStr = GetRoss(CollocRoss)->GetEntryStr(ParamNode.GetInterp()->m_UnitNo); EngRusMakeUpper(UnitStr); It = find(SitNode.m_LexFunctFields.begin(), SitNode.m_LexFunctFields.end(), UnitStr); }; /* строим LF SO.Oper типа "постановка вопроса" */ bool bS0 = false; if (It == SitNode.m_LexFunctFields.end()) { // поищем среди V0 for (long j=0; j < ParamNode.m_VerbsOfS0.size(); j++) { It = find(SitNode.m_LexFunctFields.begin(), SitNode.m_LexFunctFields.end(), ParamNode.m_VerbsOfS0[j]); if (It != SitNode.m_LexFunctFields.end()) { bS0 = true; break; } } }; if (It == SitNode.m_LexFunctFields.end()) return; if ( !IsParameterOfVerb(It->m_LexFunct) && (It->m_LexFunct != "S0.Oper1") ) return; // если не совпало по номеру значения if (It->m_MeanNum != -1) if (ParamNode.GetInterp() != 0) if ( GetRoss(ParamNode.GetInterp()->m_DictType)->GetUnitMeanNum(ParamNode.GetInterp()->m_UnitNo) != It->m_MeanNum) return; /* Для Func надо проверить, что слово-ситуация имеет номинатив */ if (!bS0) if (IsFunc(It->m_LexFunct)) if ( !SitNode.HasOneGrammem (rNominativ) ) return; /* для Оперов загружаем вторую валентность, и проверям, что слово-ситуация подпадает под этот шаблон. Проверку не нужно делать, если мы имеем дело с S0.Oper Проверку не нужно делать, если мы строим межклаузную LF например: "реформы, проведенные в прошлом году" */ if (!bS0) if (ParamNode.m_ClauseNo == SitNode.m_ClauseNo) if (IsOper(It->m_LexFunct)) { long j=0; for (;j < ParamNode.m_NotProhibitedValSets.size(); j++) { CSemPattern P; if (ParamNode.m_NotProhibitedValSets[j].size() < 2) continue; GetActantPattern (ParamNodeNo, ParamNode.m_NotProhibitedValSets[j][1], P); string SyntacticRelation; CSynRealization SyntacticRealization; if (IsPattern (P, SitNodeNo, SyntacticRelation, SyntacticRealization) ) break; }; if (j == ParamNode.m_NotProhibitedValSets.size()) { if ( (It->m_Prep.m_UnitNo == ErrUnitNo) || !SitNode.HasThePrep(It->m_Prep.m_UnitNo) ) return; }; }; //ведем стрелку от слова ситуации в присвязочный глагол string LexFunctName = It->m_LexFunct; if (bS0) LexFunctName = "S0."+LexFunctName; m_LexFuncts.push_back (CLexFunctRel(SitNodeNo, ParamNodeNo, LexFunctName)); };