bool KeywordFinder::findNextElement(const std::string& title, Element& foundElement) const { int foundPower = 0; std::string::size_type keywordsSize = 0; std::string::size_type index; if(title.size() < min_title_length) { return false; } std::string clean_title(title); clean_text(clean_title); for (TokenArray::const_iterator itKeywords = tokens.begin(); itKeywords != tokens.end(); ++itKeywords) { if ((index = clean_title.find(*itKeywords)) != std::string::npos && points_to_word(clean_title, index, itKeywords->size())) { foundPower++; keywordsSize += itKeywords->length(); } } if (foundPower > 0 && keywordsSize >= min_title_length) { const std::string::size_type max_length = myKeyword.length() < title.length() ? title.length() : myKeyword.length(); keywordsSize = 100 - max_length + keywordsSize + foundPower - 1; if (foundElement.power < foundPower || (foundElement.power == foundPower && keywordsSize > foundElement.KeywordsDiff)) { foundElement.power = foundPower; foundElement.KeywordsDiff = keywordsSize; return true; } } return false; }
static gchar* get_text_for_node(CongNodePtr node) { CongNodeType node_type; const gchar *colour_string; const gchar *string_colour_string; gchar *text = NULL; gchar *cleaned_text = NULL; node_type = cong_node_type(node); colour_string = cong_ui_get_colour_string(node_type); string_colour_string = "#00FF00"; /* FIXME: get this from the theme and/or GtkSourceView settings */ switch (node_type) { default: g_assert_not_reached(); case CONG_NODE_TYPE_UNKNOWN: text = g_strdup(_("UNKNOWN")); break; case CONG_NODE_TYPE_ELEMENT: { xmlAttrPtr attr_iter; const gchar* attname_col = cong_ui_get_colour_string(CONG_NODE_TYPE_ATTRIBUTE); const gchar* attval_col = string_colour_string; text = g_strdup_printf ("<span foreground=\"%s\"><%s", colour_string, cong_node_get_qualified_name (node)); /* Add attributes (if any): */ for (attr_iter = node->properties; attr_iter; attr_iter=attr_iter->next) { gchar *attribute = g_strdup_printf(" <span foreground=\"%s\">%s=<span foreground=\"%s\">\"%s\"</span></span>",attname_col, attr_iter->name, attval_col, attr_iter->children->content); cong_util_append(&text, attribute); g_free(attribute); } cong_util_append(&text, "></span>"); } break; case CONG_NODE_TYPE_ATTRIBUTE: text = g_strdup_printf("ATTRIBUTE"); break; case CONG_NODE_TYPE_TEXT: cleaned_text = clean_text((const gchar*)node->content); text = g_strdup_printf("%s \"<span foreground=\"%s\">%s</span>\"", _("Text:"), colour_string, cleaned_text); g_free(cleaned_text); break; case CONG_NODE_TYPE_CDATA_SECTION: cleaned_text = clean_text((const gchar*)node->content); text = g_strdup_printf("%s \"<span foreground=\"%s\">%s</span>\"", _("CDATA:"), colour_string, cleaned_text); g_free(cleaned_text); break; case CONG_NODE_TYPE_ENTITY_REF: text = g_strdup_printf("ENTITY REF: %s", node->name); break; case CONG_NODE_TYPE_ENTITY_NODE: text = g_strdup_printf("ENTITY"); break; case CONG_NODE_TYPE_PI: text = g_strdup_printf("PI"); break; case CONG_NODE_TYPE_COMMENT: cleaned_text = clean_text((const gchar*)node->content); text = g_strdup_printf("<span foreground=\"%s\"><!-- %s --></span>", colour_string, cleaned_text); g_free(cleaned_text); break; case CONG_NODE_TYPE_DOCUMENT: { xmlDocPtr doc = (xmlDocPtr)node; text = g_strdup_printf("<span foreground=\"%s\"><?xml version=" "<span foreground=\"%s\">\"%s\"</span>" " encoding=" "<span foreground=\"%s\">\"%s\"</span>" " standalone=" "<span foreground=\"%s\">\"%s\"</span>" "></span>", colour_string, string_colour_string, doc->version, string_colour_string, doc->encoding, string_colour_string, (doc->standalone?"yes":"no")); } break; case CONG_NODE_TYPE_DOCUMENT_TYPE: text = g_strdup_printf("DOCUMENT TYPE"); break; case CONG_NODE_TYPE_DOCUMENT_FRAG: text = g_strdup_printf("DOCUMENT FRAG"); break; case CONG_NODE_TYPE_NOTATION: text = g_strdup_printf("NOTATION"); break; case CONG_NODE_TYPE_HTML_DOCUMENT: text = g_strdup_printf("HTML DOCUMENT"); break; case CONG_NODE_TYPE_DTD: { text = g_strdup_printf("<!DOCTYPE %s>", node->name); /* FIXME: show any SYSTEM/PUBLIC DTD stuff */ } break; case CONG_NODE_TYPE_ELEMENT_DECL: text = g_strdup_printf("ELEMENT DECL"); break; case CONG_NODE_TYPE_ATRRIBUTE_DECL: text = g_strdup_printf("ATTRIBUTE DECL"); break; case CONG_NODE_TYPE_ENTITY_DECL: text = g_strdup_printf("<span><!ENTITY %s ...></span>", node->name); break; case CONG_NODE_TYPE_NAMESPACE_DECL: text = g_strdup_printf("NAMESPACE DECL"); break; case CONG_NODE_TYPE_XINCLUDE_START: text = g_strdup_printf("XINCLUDE START"); break; case CONG_NODE_TYPE_XINCLUDE_END: text = g_strdup_printf("XINCLUDE END"); break; } return (text); }
void KeywordFinder::splitToTokens(std::string& keyword) { clean_text(keyword); std::transform(keyword.begin(), keyword.end(), keyword.begin(), ::tolower); tokens = split(keyword.c_str(), ' '); }
bool check_revision(QString id , int revision_number) { int pageid; QEventLoop eventLoop; // "quit()" the event-loop, when the network request "finished()" QNetworkAccessManager mg; QObject::connect(&mg, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); // the HTTP request QString url = "http://en.wikitolearn.org/api.php?action=parse&pageid="+id+"&format=json"; QNetworkRequest re( ( url ) ); QNetworkReply *reply = mg.get(re); eventLoop.exec(); if (reply->error() == QNetworkReply::NoError) { //success //qDebug() << "Success" <<reply->readAll(); QString html = (QString)reply->readAll(); QJsonDocument jsonResponse = QJsonDocument::fromJson(html.toUtf8()); QJsonObject jsonObj = jsonResponse.object(); int revid = jsonObj["parse"].toObject()["revid"].toInt(); pageid = jsonObj["parse"].toObject()["pageid"].toInt(); QString page_title = jsonObj["parse"].toObject()["title"].toString(); qDebug() << jsonObj["parse"].toObject()["title"].toString(); if(revision_number == revid) { delete reply; return true ; } else { qDebug() << "update page"; QString text = jsonObj["parse"].toObject()["text"].toObject()["*"].toString(); text = clean_text(text); bool del = del_from_db(id,revid); //check if deletion was successfull if(del == true) { qDebug() << "deletion from DB done"; } else { qDebug() << "error in deletion from DB"; } QString pid = QString::number(pageid); del_file(pid); save_file( text , pageid , revision_number , page_title); } } return true; }
QString dbmanager::add(QString p_url) { QString text , page_title ; int pageid , revid; QString requested_url = "http://en.wikitolearn.org/api.php?action=parse&page="+p_url+"&format=json"; // create custom temporary event loop on stack QEventLoop eventLoop; // "quit()" the event-loop, when the network request "finished()" QNetworkAccessManager mgr; QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); // the HTTP request QNetworkRequest req( requested_url ); QNetworkReply *reply = mgr.get(req); eventLoop.exec(); if (reply->error() == QNetworkReply::NoError) { //success //qDebug() << "Success" <<reply->readAll(); QString html = (QString)reply->readAll(); QJsonDocument jsonResponse = QJsonDocument::fromJson(html.toUtf8()); QJsonObject jsonObj = jsonResponse.object(); /******************************************************************************** * API returns JSON . JSON needs to be parsed to get the contents from it * * contents that we need are html contents , pageid , revision number of page * * text == contains the html content of the specified page * * pageid == contains the page id of the page . * * revid == contains revision number of the page * * page_title == contains the title of the page * * ****************************************************************************** */ text = jsonObj["parse"].toObject()["text"].toObject()["*"].toString(); pageid = jsonObj["parse"].toObject()["pageid"].toInt(); revid = jsonObj["parse"].toObject()["revid"].toInt(); page_title = jsonObj["parse"].toObject()["title"].toString(); //clean the result from the API text = clean_text(text); // qDebug() << text; qDebug() <<pageid; delete reply; } else { //failure qDebug() << "Failure" <<reply->errorString(); delete reply; } // ******************* save file here **************** save_file(text , pageid , revid , page_title); static auto i = 0; return QString("%1: %2").arg(++i).arg(p_url); }