WebSearchableFormData::WebSearchableFormData(const WebFormElement& form, const WebInputElement& selectedInputElement) { RefPtr<HTMLFormElement> formElement = form.operator PassRefPtr<HTMLFormElement>(); const Frame* frame = formElement->document()->frame(); if (!frame) return; HTMLInputElement* inputElement = selectedInputElement.operator PassRefPtr<HTMLInputElement>().get(); // Only consider forms that GET data. // Allow HTTPS only when an input element is provided. if (equalIgnoringCase(formElement->getAttribute(methodAttr), "post") || (!IsHTTPFormSubmit(formElement.get()) && !inputElement)) return; Vector<char> encodedString; TextEncoding encoding; GetFormEncoding(formElement.get(), &encoding); if (!encoding.isValid()) { // Need a valid encoding to encode the form elements. // If the encoding isn't found webkit ends up replacing the params with // empty strings. So, we don't try to do anything here. return; } // Look for a suitable search text field in the form when a // selectedInputElement is not provided. if (!inputElement) { inputElement = findSuitableSearchInputElement(formElement.get()); // Return if no suitable text element has been found. if (!inputElement) return; } HTMLFormControlElement* firstSubmitButton = GetButtonToActivate(formElement.get()); if (firstSubmitButton) { // The form does not have an active submit button, make the first button // active. We need to do this, otherwise the URL will not contain the // name of the submit button. firstSubmitButton->setActivatedSubmit(true); } bool isValidSearchString = buildSearchString(formElement.get(), &encodedString, &encoding, inputElement); if (firstSubmitButton) firstSubmitButton->setActivatedSubmit(false); // Return if the search string is not valid. if (!isValidSearchString) return; String action(formElement->action()); KURL url(frame->loader()->completeURL(action.isNull() ? "" : action)); RefPtr<FormData> formData = FormData::create(encodedString); url.setQuery(formData->flattenToString()); m_url = url; m_encoding = String(encoding.name()); }
bool PluginLoader::findAllPlugins() { if (!scyllaPluginList.empty()) { scyllaPluginList.clear(); } if (!imprecPluginList.empty()) { imprecPluginList.clear(); } if (!buildSearchString()) { return false; } if (!searchForPlugin(scyllaPluginList, dirSearchString, true)) { return false; } #ifndef _WIN64 if (!buildSearchStringImprecPlugins()) { return false; } if (!searchForPlugin(imprecPluginList, dirSearchString, false)) { return false; } #endif return true; }
//новая версия грамматического анализатора. //текст реконструируется на основе вероятностного анализа результатов распознавания //с применением взаимной корреляции частей разных букв. Слоги и слова реконструируются //на основе вероятносного анализа корпуса тибетских текстов и правил построения шрифта. void GLogicProcessor::classification(vector<stringOCR>&strArray, vector<OCRMatch>&matchLine, GBitmap* lineImg32, string &mainString, int sizeLine, int lineIndex){ int print=0; vector<OCRMatch>dLine; TIME_START y0Base=strArray[lineIndex].LimY0; y1Base=strArray[lineIndex].LimY1; DR("@@@y0Base"<<y0Base<<" y1Base="<<y1Base<<" s="<<matchLine.size()) GBitmap *letterAImg=GBitmap::create(lineImg32->columns(),lineImg32->rows(),BITMAP_32); GBitmap *letterBImg=GBitmap::create(lineImg32->columns(),lineImg32->rows(),BITMAP_32); #ifdef MAIN_MODE //for(int i=0;i<matchLine.size();i++)if(matchLine[i].letterIndex==15650){cout<<"@@@@@";exit(0);} //drawGrapeLine(matchLine); exit(0); sort(matchLine.begin(),matchLine.end(),sortMatchX0); //cout<<"strArray.size()="<<strArray[0].size()<<" matchLine.size()="<<matchLine.size()<<endl; if(!matchLine.size()||!strArray.size())return; // for(int i=0;i<matchLine.size();i++){ matchLine[i].correlationNew=0; if(!matchLine[i].correlation)continue; matchLine[i].status=0; } //drawGrapeLine(matchLine); exit(0); compressMatch(matchLine); //drawGrapeLine(matchLine); exit(0); //на этом этапе в matchLine записано около 50 результатов на одну букву текста //заменяем одинаковые буквы на букву с наибольшей корреляцией и наибольшей общей площадью совпадающей с изображением на странице. //также для каждой гипотезы распознанной буквы проверяем перекрытие с соседними буквами //оставляем только те буквы, которые лучше описывают соответствующие площади буквы области изображения. letterNeighborsNew(matchLine,lineImg32,letterAImg,letterBImg); //drawGrapeLine(matchLine); exit(0); #ifdef STACK_MODE //saveMatch(matchLine,"/2_2.match"); #endif for(int i=0;i<matchLine.size();i++){ if(matchLine[i].correlation){ matchLine[i].status=0; if(matchLine[i].OCRIndex!=3&&matchLine[i].correlationNew)matchLine[i].correlation=matchLine[i].correlationNew; dLine.push_back(matchLine[i]); } } DR("done match processing line.size()="<<dLine.size()) sort(dLine.begin(),dLine.end(),sortMatchX0); DR("@@@@@ SAVE MATCH") #ifdef STACK_MODE //saveMatch(dLine,"/2.match"); #endif #endif #ifdef STACK_MODE //readMatch(dLine,"/2.match"); #endif //компрессия. Все одинаковые буквы в пределах габарита буквы //заменяются на одну букву с макcмимальной корреляцией compressMatch(dLine); //drawGrapeLine(dLine); exit(0); collectStackLetter(strArray,dLine, matchLine,lineImg32,letterAImg,letterBImg,lineIndex); //cout<<"COLLECT"; TIME_PRINT_ //exit(0); //drawGrapeLine(dLine);exit(0); compressMatch(dLine); //drawGrapeLine(dLine);exit(0); //анализ готовых стеков. //проверяем есть ли над или под одиночной буквой коренные буквы или огласовки с высокой корреляцией. //если есть, то букву считаем частью стека и убираем как строительный блок OpenType. //testStackLetter(dLine,lineImg32,letterAImg,letterBImg); //drawGrapeLine(dLine); exit(0); letterAImg->destroy(); letterBImg->destroy(); string strW; vector<uint>letterX; vector<OCRMatch>line; vector<OCRMatch>resultLine; map<vector<int>,ulong>searchResult; buildSearchString(dLine,line,letterX,strW); cout<<strW<<endl<<endl; //drawGrapeLine(line); exit(0); textCorpusGMap->getOCRStackKey(strW,letterX,searchResult, ANY_MATCH); //inputData.log<<" 2"<<endl;inputData.log.flush(); for (int i=0;i<line.size();i++){ if(!line[i].correlation)continue; //cout<<line[i].name; line[i].name=Unicode_to_UTF(line[i].wName); //cout<<" -- "<<line[i].name; line[i].name=YagpoToUni(line[i].name); //cout<<" -- "<<line[i].name<<endl; resultLine.push_back(line[i]); } //logicProcessor->drawGrapeLine(line); //exit(0); //inputData.log<<" 3"<<endl;inputData.log.flush(); //renderDictSearch(searchResult,line,resultLine,matchLine); //mainString+="<br>"+lineString+"original<br>"; if(print){ cout<<"RENDER "; TIME_PRINT_ } strArray[lineIndex].line=dLine; //сохраняем для вывода в HTML //logicProcessor->drawGrapeLine(dLine); //exit(0); //inputData.log<<" 4"<<endl;inputData.log.flush(); }