Beispiel #1
0
void CSentence::FindNames(yvector<CFioWordSequence>& foundNames, yvector<int>& potentialSurnames)
{
    try {
        InitNameTypes();
        CNameFinder nameFinder(m_Words);
        nameFinder.Run(foundNames, potentialSurnames);
    } catch (yexception& e) {
        PrintError("Error in CSentence::FindNames()", &e);
        throw;
    } catch (...) {
        PrintError("Error in CSentence::FindNames()", NULL);
        throw;
    }
}
Beispiel #2
0
void CSentence::AddFIOWS(const CFIOOccurence& fioOccurence, const SFullFIO& fio, int iSimilarOccurencesCount)
{
    TIntrusivePtr<CFioWordSequence> fioWS(new CFioWordSequence(fio));
    *(CFIOOccurence*)(fioWS.Get()) = fioOccurence;
    fioWS->PutWSType(FioWS);
    if (fio.m_Genders.any()) {
        THomonymGrammems gram = fioWS->GetGrammems();
        gram.Replace(NSpike::AllGenders, fio.m_Genders);
        fioWS->SetGrammems(gram);
    }

    fioWS->m_iSimilarOccurencesCount = iSimilarOccurencesCount;

    bool isManualFio = true;

    SWordHomonymNum wh = fioOccurence.m_NameMembers[Surname];
    if (wh.IsValid())
        if (m_Words.GetWord(wh).IsMultiWord())
            isManualFio = false;

    if (!fio.m_bFoundSurname &&
        fioOccurence.m_NameMembers[Surname].IsValid() &&
        !(fioOccurence.m_NameMembers[FirstName].IsValid() ||
            fioOccurence.m_NameMembers[InitialName].IsValid()) &&
            isManualFio) {
        CNameFinder nameFinder(m_Words);
        //если не смогли среди предсказанных фамилий
        //найти совпадающую с фамилией из fio, то вываливаемся
        if (!nameFinder.PredictSingleSurname(*fioWS, fio))
            return;
    }

    fioWS->ClearLemmas();
    if (!fio.m_strSurname.empty()) {
        Wtroka capLemma;
        if (fioOccurence.m_NameMembers[Surname].IsValid()) {
            const CWord& w = m_Words.GetWord(fioOccurence.m_NameMembers[Surname]);
            capLemma = GetCapitalizedLemma(w, -1, fio.m_strSurname);
        } else {
            capLemma = fio.m_strSurname;
            NStr::ToFirstUpper(capLemma);
        }
        fioWS->AddLemma(SWordSequenceLemma(fio.m_strSurname, capLemma));
    }
    if (!fio.m_strName.empty()) {
        Wtroka capLemma;
        if (fioOccurence.m_NameMembers[FirstName].IsValid()) {
            const CWord& w = m_Words.GetWord(fioOccurence.m_NameMembers[FirstName]);
            capLemma = GetCapitalizedLemma(w, -1, fio.m_strName);
        } else if (fioOccurence.m_NameMembers[InitialName].IsValid()) {
            const CWord& w = m_Words.GetWord(fioOccurence.m_NameMembers[InitialName]);
            capLemma = GetCapitalizedLemma(w, -1, fio.m_strName);
        } else {
            capLemma = fio.m_strName;
            TMorph::ToTitle(capLemma);

        }
        fioWS->AddLemma(SWordSequenceLemma(fio.m_strName, capLemma));
    }
    if (!fio.m_strPatronomyc.empty()) {
        Wtroka capLemma;
        if (fioOccurence.m_NameMembers[Patronomyc].IsValid()) {
            const CWord& w = m_Words.GetWord(fioOccurence.m_NameMembers[Patronomyc]);
            capLemma = GetCapitalizedLemma(w, -1, fio.m_strPatronomyc);
        } else if (fioOccurence.m_NameMembers[InitialPatronomyc].IsValid()) {
            const CWord& w = m_Words.GetWord(fioOccurence.m_NameMembers[InitialPatronomyc]);
            capLemma = GetCapitalizedLemma(w, -1, fio.m_strPatronomyc);
        } else {
            capLemma = fio.m_strPatronomyc;
            TMorph::ToTitle(capLemma);
        }

        fioWS->AddLemma(SWordSequenceLemma(fio.m_strPatronomyc, capLemma));
    }
    TakeFioWS(fioWS);
}
Beispiel #3
0
/**
 * HTMLCollection namedItem(long) method
 *
 * param - name - the name of the element to get
 * return - the first htmlelement in the tree with the given name
 */
JSBool jhtml_collection_namedItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
	WebcJSScript *jsscr = (WebcJSScript *) jhutil_GetContextPrivate(cx);
	WebcJSDocumentContext *jsmgr = (jsscr)? jsscr->GetJSMgr() : 0;
	if (!jsmgr)
	{
		return JS_FALSE;
	}
	HTMLDocument *pDoc = jsmgr->GetDocument();
	if (!pDoc)
	{
		return JS_FALSE;
	}
	HTMLElementType ele_type = HTML_ELEMENT_NONE;
	//if we have atleast one argument and it is a string
	if (argc > 0 && JSVAL_IS_STRINGABLE(argv[0]))
	{
		//conver the JSString to char *
		WEBC_CHAR *name = WEBC_JS_STRING_TO_WEBC_STRING(JS_ValueToString(cx, argv[0]));
		if (!name || !(*name))
		{
			*rval = JSVAL_NULL;
			return JS_TRUE;;
		}

		if (webc_c_stricmp(name, "toString")==0)
		{
				return JS_TRUE;
		}

		jhtml_collection *pColl = (jhtml_collection*)jhutil_GetPrivate(cx, obj);
		if (!pColl)
			return JS_TRUE;

		HTMLElement *pElem = 0;
		switch(pColl->finderType)
		{
			case DOCUMENT_IMAGES:
				ele_type = HTML_IMAGE_ELEMENT;
				break;

			case DOCUMENT_ANCHORS:
				ele_type = HTML_ANCHOR_ELEMENT;
				break;

			case TABLE_ROWS:
				ele_type = HTML_TABLE_ROW_ELEMENT;
				break;

			case TABLEROW_CELLS:
				ele_type = HTML_TABLE_CELL_ELEMENT;
				break;

			case MAP_AREAS:
				ele_type = HTML_AREA_ELEMENT;
				break;

			case SELECT_OPTIONS:
				ele_type = HTML_OPTION_ELEMENT;
				break;

			case WIN_FRAMES:
			{
			  #if (WEBC_SUPPORT_FRAMES)
				HTMLTypeAndNameOrIdFinder finder(name, HTML_FRAME_ELEMENT);
				pElem = pColl->pTop->FindElement(&finder,1, INCLUDE_SELF_ELEMENT_DEFAULT);
				if (pElem)
				{
					HTMLFrame *pFrame = (HTMLFrame *) pElem;
					if (pFrame->FrameDocument() && pFrame->FrameDocument()->GetJSMgr())
					{
						*rval = OBJECT_TO_JSVAL(pFrame->FrameDocument()->GetJSMgr()->GetGlobalObject());
						return JS_TRUE;
					}
				}
				*rval = JSVAL_NULL;
			  #endif // WEBC_SUPPORT_FRAMES

				return JS_TRUE;
			}

			case DOCUMENT_FORMS:
			{
				WebcJSScript *jsscr = (WebcJSScript *) jhutil_GetContextPrivate(cx);
				WebcJSDocumentContext *jsmgr = (jsscr)? jsscr->GetJSMgr() : 0;
				if (jsmgr)
				{
					HTMLNameOrIdFinder nameFinder(name);
					HTMLElementTypeFinder formFinder(HTML_FORM_ELEMENT);
					HTMLElementAndFinder formNameFinder(&nameFinder, &formFinder);

					HTMLDocument *pDoc = jsmgr->GetDocument();
					pElem = pDoc->FindElement(&formNameFinder);
				}
				break;
			}

			case DOCUMENT_ALL:
			{
				HTMLNameOrIdFinder  finder(name);
				pElem = pColl->pTop->FindElement(&finder,1, INCLUDE_SELF_ELEMENT_DEFAULT);
				break;
			}
			case DOCUMENT_IDS:
			{
				HTMLNameOrIdFinder  finder(name);
				pElem = pColl->pTop->FindElement(&finder,1, INCLUDE_SELF_ELEMENT_DEFAULT);
				break;
			}

			case ALL_BY_NAME:
			{
				HTMLElementByNameFinder finder(name);
				pElem = pColl->pTop->FindElement(&finder,1, INCLUDE_SELF_ELEMENT_DEFAULT);
				break;
			}

			case ALL_TAGS_BY_TAGNAME:
			{
				if(pColl && pColl->nameOfAll)
				{
					HTMLTagType hType = HTML_ParseTagType(pColl->nameOfAll, webc_strlen(pColl->nameOfAll));
					HTMLElementType eType = TagToHTMLElementType[hType];

					HTMLNameTypeFinder finder(name, eType);
					// TODO this should probably restrict to a specific tag name
					pElem = pColl->pTop->FindElement(&finder, 1, WEBC_FALSE);
				}
				break;
			}

			case ELEMENT_NODES:
			{
				HTMLNameOrIdFinder finder(name);
				pElem = pColl->pTop->FindElement(&finder,1, INCLUDE_SELF_NODES_DEFAULT);
				break;
			}

			case FORM_INPUTS:
			{
				//for this type of collection, the top will always be of type form
				HTMLForm *form = (HTMLForm *)pColl->pTop;
				if (form && name && *name)
				{
					pElem = jutils_CheckObjectList(form->GetFieldVector(), _matchInputByNameOrId, (WEBC_PFBYTE)name);
				}//end if
				break;
			}

			case DOCUMENT_STYLESHEETS:
			{
#if (WEBC_SUPPORT_STYLE_SHEETS)
				//GMP this needs to be revisited if CSS is changed to have more than 1 style sheet
#endif
				break;
			}

			case SSHEET_RULES:
			{
#if (WEBC_SUPPORT_STYLE_SHEETS)
				CSSDocumentContext *pCSSCx= pDoc->GetCSSContext();
	/*			if (pCSSCx)
				{
					int i = 0;
					vector_iterator pvi[1];
					CSSPropertyDescriptor * pCSSPD = pCSSCx->EnumFirstProperty(pvi);
					while (pCSSPD)
					{
						char *cName = pCSSPD->EnumFirstClass();
						while (cName)
						{
							if (tc_stricmp(cName, name) == 0)
							{
								*rval = OBJECT_TO_JSVAL(pCSSPD->GetJSObject());
								return JS_TRUE;
							}
							pCSSPD->EnumNextClass();
						}
						pCSSPD = pCSSCx->EnumNextProperty(pvi);
					}
				}*/
#endif //(WEBC_SUPPORT_STYLE_SHEETS)
				return JS_TRUE;
			}

			case RADIO_BUTTONS:
			{
				HTMLRadioButton *pRadio = (HTMLRadioButton *) pColl->pTop;

				if (name)
				{
					while (pRadio && pRadio->Value() && webc_stricmp(name, pRadio->Value()))
					{
						pRadio = (pRadio->mpGroupNext != pColl->pTop)? pRadio->mpGroupNext : 0;
					}
				}

				if (pRadio)
				{
					*rval = OBJECT_TO_JSVAL(pRadio->CreateJSObject());
					return JS_TRUE;
				}

				break;
			}

			default:
				break;
		}//end switch

		if (ele_type != HTML_ELEMENT_NONE)
		{
			HTMLTypeAndNameOrIdFinder finder(name, ele_type);
			pElem = pColl->pTop->FindElement(&finder,1, INCLUDE_SELF_ELEMENT_DEFAULT);
		}

		if (pElem)
		{
			*rval = OBJECT_TO_JSVAL(pElem->CreateJSObject());
		}

		return JS_TRUE;
	}//end if

	*rval = JSVAL_NULL;

	return JS_TRUE;
}