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; } }
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); }
/** * 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; }