Exemple #1
0
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()); 
}
Exemple #2
0
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;
}
Exemple #3
0
//новая версия грамматического анализатора.
//текст реконструируется на основе вероятностного анализа результатов распознавания
//с применением взаимной корреляции частей разных букв. Слоги и слова реконструируются
//на основе вероятносного анализа корпуса тибетских текстов и правил построения шрифта.
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();

}