示例#1
0
// ////////////////////////////////////////////////////////////////////////////
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);
	}
}
示例#2
0
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);
}
示例#3
0
// ////////////////////////////////////////////////////////////////////////////
bool SubjectNameFlat::IsFullName() const
{
	return(!IsPattern());
}
示例#4
0
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));
};