static void AddServiceItem(ServiceItem serviceItem) { serviceItems.Add(serviceItem); int index; foreach (string subject in serviceItem.SupportedSubjects) { index = subjects.BinarySearch(subject); if (index < 0) { subjects.Insert(~index, subject); } } }
public static string GetServiceItemType(ServiceItem serviceItem) { string result; if (serviceItem is Translator) { result = LangPack.TranslateString("Translator"); } else if (serviceItem is AntonymsDictionary) { result = LangPack.TranslateString("Dictionary of antonyms"); } else if (serviceItem is SynonymsDictionary) { result = LangPack.TranslateString("Dictionary of synonyms"); } else if (serviceItem is PhraseologicalDictionary) { result = LangPack.TranslateString("Phraseological dictionary"); } else if (serviceItem is Encyclopedia) { result = LangPack.TranslateString("Encyclopedia"); } else if (serviceItem is MonolingualSearchEngine || serviceItem is BilingualSearchEngine) { result = LangPack.TranslateString("Search Engine"); } else if (serviceItem is MonolingualDictionary) { result = LangPack.TranslateString("Monolingual dictionary"); } else if (serviceItem is BilingualPhrasesDictionary) { result = LangPack.TranslateString("Bilingual phrases dictionary"); } else if (serviceItem is BilingualSentensesDictionary) { result = LangPack.TranslateString("Bilingual sentenses dictionary"); } else { result = LangPack.TranslateString("Bilingual dictionary"); } return(result); }
public static string GetServiceIconCellHtml(ServiceItem serviceItem, bool useOuterIconUrl) { if (serviceItem == null) { throw new ArgumentNullException("service"); } string result = string.Format(CultureInfo.InvariantCulture, IconFormat, serviceItem.Service.Url, serviceItem.Service.Copyright, ServiceSettingsContainer.GetServiceItemType(serviceItem), useOuterIconUrl ? serviceItem.Service.IconUrl : WebUI.ResultsWebServer.GetIconUrl(serviceItem.Service.Name)); return(result); }
internal static void DoTranslate(IDictDServiceItem dictServiceItem, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { ServiceItem si = dictServiceItem as ServiceItem; DictionaryClient dc = null; try { dc = DictDClientsPool.GetPooledClient(dictServiceItem.Urls); DefinitionCollection definitions = dc.GetDefinitions(phrase, si.Name); string translation; if (definitions != null && definitions.Count > 0) { foreach (Definition df in definitions) { translation = "html!<div style='width:{allowed_width}px;overflow:scroll;overflow-y:hidden;overflow-x:auto;'><pre>" + df.Description.Replace("\r\n", "<br />") + " </pre></div>"; result.Translations.Add(translation); } } else { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } } catch (DictionaryServerException e) { if (e.ErrorCode == 552) //No definitions found { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { throw; } } finally { if (dc != null) { DictDClientsPool.PushPooledClient(dc); } } }
public static void InitServiceItem(ServiceItem serviceItem) { serviceItem.AddSupportedSubject(SubjectConstants.Common); serviceItem.AddSupportedTranslationToEnglish(Language.Russian); serviceItem.AddSupportedTranslationFromEnglish(Language.Russian); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Russian, Language.German)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.German, Language.Russian)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Russian, Language.Spanish)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Spanish, Language.Russian)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Russian, Language.French)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.French, Language.Russian)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Russian, Language.Dutch)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Dutch, Language.Russian)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Russian, Language.Italian)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Italian, Language.Russian)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Russian, Language.Latvian)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Latvian, Language.Russian)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Russian, Language.Estonian)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Estonian, Language.Russian)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Russian, Language.Japanese)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Japanese, Language.Russian)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Russian, Language.Afrikaans)); serviceItem.AddSupportedTranslation(new LanguagePair(Language.Afrikaans, Language.Russian)); serviceItem.AddSupportedTranslationToEnglish(Language.German); serviceItem.AddSupportedTranslationFromEnglish(Language.German); serviceItem.AddSupportedTranslationToEnglish(Language.Japanese); serviceItem.AddSupportedTranslationFromEnglish(Language.Japanese); serviceItem.CharsLimit = 50; serviceItem.LinesLimit = 1; }
public static void AddTranslationCell(WebBrowser wBrowser, bool isClean, string dataCellHtml, ServiceItem serviceItem, bool useOuterIconUrl) { string iconCellHtml = HtmlHelper.GetServiceIconCellHtml(serviceItem, useOuterIconUrl); AddTranslationCell(wBrowser, null, isClean, dataCellHtml, iconCellHtml); }
public static void AddTranslationCell(WebBrowser wBrowser, bool isClean, string dataCellHtml, ServiceItem serviceItem) { AddTranslationCell(wBrowser, isClean, dataCellHtml, serviceItem, false); }
public static Result GetCachedResult(ServiceItem serviceItem, string phrase, LanguagePair languagesPair, string subject) { if (!useCache) { return(new Result(serviceItem, phrase, languagesPair, subject)); } string key = phrase.Trim().ToLowerInvariant(); if (key.Length > 500) { key = key.Substring(0, 500); } ResultsHashtable collection; bool collection_exists = true; lock (cache) { if (!cache.TryGetValue(key, out collection)) { collection = new ResultsHashtable(); cache.Add(key, collection); collection_exists = false; } } int hash = Result.GetHashCode(serviceItem.FullName, languagesPair, subject); bool needed_new_result = !collection_exists; Result res = null; lock (collection) { if (!needed_new_result) { if (!collection.TryGetValue(hash, out res)) { needed_new_result = true; } else { needed_new_result = (res.Error != null && !res.ResultNotFound) || res.Phrase != phrase; } } if (needed_new_result) { res = new Result(serviceItem, phrase, languagesPair, subject); collection[hash] = res; lock (results_history) { results_history.Add(res); } } else { res.LastUsed = DateTime.Now; lock (results_history) { results_history.Remove(res); results_history.Add(res); } } } return(res); }
public static void DoTranslate(ServiceItem searchEngine, string searchHost, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string link_f = "http://{0}.{1}/wiki/{2}"; string lang = WikiUtils.ConvertLanguage(languagesPair.To); string link = string.Format(link_f, lang, searchHost, phrase); result.EditArticleUrl = link; Result searchResult = searchEngine.Translate(phrase, languagesPair, subject, networkSetting); if (!searchResult.IsHasData() || searchResult.Translations.Count < 1) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } string url = StringParser.Parse("<a href=\"", "\">", searchResult.Translations[0]); string searched_name = url.Substring(url.LastIndexOf("/") + 1); if (string.Compare(phrase, searched_name, true) != 0) { //check second line if (searchResult.Translations.Count < 2) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { url = StringParser.Parse("<a href=\"", "\">", searchResult.Translations[1]); searched_name = url.Substring(url.LastIndexOf("/") + 1); if (string.Compare(phrase, searched_name, true) != 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } } } link = string.Format(link_f, lang, searchHost, searched_name, searched_name); result.EditArticleUrl = link; //http://en.wikipedia.org/w/api.php?action=parse&prop=text&format=xml&page=Ukraine string query = "http://{0}.{1}/w/api.php?action=parse&prop=text|revid&format=xml&page={2}"; query = string.Format(query, lang, searchHost, HttpUtility.UrlEncode(searched_name)); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); string responseFromServer = helper.GetResponse(); if (responseFromServer.IndexOf("<parse revid=\"0\">") >= 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } string res = StringParser.Parse("<text", "</text>", responseFromServer); res = StringParser.ExtractRight(">", res); res = res.Replace("width: 100%", "width: 95%"); res = res.Replace("float:right;", "float: right;margin-right: 0.5em;"); res = "html!<div style='width:{allowed_width}px;overflow:scroll;overflow-y:hidden;overflow-x:auto;'>" + HttpUtility.HtmlDecode(res) + " </div>"; res = res.Replace("<h1>", ""); res = res.Replace("</h1>", ""); res = res.Replace("<h2>", ""); res = res.Replace("</h2>", ""); res = res.Replace("<h3>", ""); res = res.Replace("</h3>", ""); res = res.Replace("<h4>", ""); res = res.Replace("</h4>", ""); res = StringParser.RemoveAll("<span class=\"editsection\">[<a", "</a>]", res); res = StringParser.RemoveAll("href=\"#", "\"", res); res = StringParser.RemoveAll("<script type=", "</script>", res); res = StringParser.RemoveAll("<button onclick=", "</button>", res); url = string.Format("a href=\"http://{0}.{1}/", lang, searchHost); res = res.Replace("a href=\"/", url); url = string.Format("img src=\"http://{0}.{1}/", lang, searchHost); res = res.Replace("img src=\"/", url); result.Translations.Add(res); }
public ServiceItemData(ServiceItem serviceItem, LanguagePair languagePair, string subject) : base(serviceItem.FullName, subject) { this.languagePair = languagePair; this.ServiceItem = serviceItem; }
public Result(ServiceItem serviceItem, string phrase, LanguagePair languagesPair, string subject) : base(serviceItem, languagesPair, subject) { this.phrase = phrase; childs = new ResultCollection(this); }
public ServiceItemSetting(LanguagePair languagePair, string subject, ServiceItem serviceItem, NetworkSetting networkSetting) : base(serviceItem, languagePair, subject) { this.networkSetting = networkSetting; }
public static string GetServiceIconCellHtml(ServiceItem serviceItem) { return(GetServiceIconCellHtml(serviceItem, false)); }
public static void DoTranslateDictionary(ServiceItem serviceItem, string url, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = string.Format(url, EncodePhrase(phrase, languagesPair)); query += ConvertLanguagesPair(languagesPair); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet, GetEncoding(languagesPair)); if (languagesPair.From == Language.Japanese || languagesPair.To == Language.Japanese) { helper.StreamConvertor = new EucJPStreamFixer(); } string responseFromServer = helper.GetResponse(); if ((responseFromServer.IndexOf("ask in forum</a>") >= 0 && responseFromServer.IndexOf(" single words found") < 0) || (responseFromServer.IndexOf("спросить в форуме</a>") >= 0 && responseFromServer.IndexOf(" найдены отдельные слова") < 0) || responseFromServer.IndexOf("<table border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">") < 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { string translation = StringParser.Parse("createAutoComplete();", "</table>", responseFromServer); translation = translation.Replace("</TD>", "</td>"); translation = translation.Replace("<TD width", "<td width"); translation = translation.Replace("</td><tr>", "</td></tr><tr>"); translation = translation.Replace("</a><tr>", "</a></td></tr><tr>"); translation = translation.Replace("\"><tr>", "\"></td></tr><tr>"); translation = translation.Replace("</td>\r\n </tr>", "</td></tr>"); StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<tr>", "</td></tr>"); string subpart; string subphrase = ""; string subtranslation; string abbreviation; Result subres = null; Result subsubres = null; foreach (string part in translations) { subpart = part; if (subpart.StartsWith("<td bgcolor=\"#DBDBDB\" width=\"100%\" colspan=\"2\">")) { //new subres subpart = subpart.Replace("<td bgcolor=\"#DBDBDB\" width=\"100%\" colspan=\"2\">", ""); subphrase = StringParser.Parse("\">", "</a>", subpart); subphrase = StringParser.RemoveAll("<span", ">", subphrase); subphrase = StringParser.RemoveAll("<a", ">", subphrase); subphrase = subphrase.Replace("<FONT SIZE=2>", ""); subphrase = subphrase.Replace("</FONT>", ""); if (subpart.Contains("<em>")) { abbreviation = StringParser.Parse("<em>", "</em>", subpart); } else { abbreviation = ""; } subres = serviceItem.CreateNewResult(subphrase, languagesPair, subject); subres.Abbreviation = abbreviation; subres.ArticleUrl = query; //subres.ArticleUrlCaption = phrase; result.Childs.Add(subres); } else { if (!subpart.Contains("title=\"")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } abbreviation = StringParser.Parse("title=\"", "\"", subpart); abbreviation += "("; abbreviation += StringParser.Parse("<i>", "</i>", subpart); abbreviation += ")"; //subsubres = serviceItem.CreateNewResult("", languagesPair, subject); //subsubres.Abbreviation = abbreviation; subsubres = serviceItem.CreateNewResult(abbreviation, languagesPair, subject); subsubres.ArticleUrl = "http://www.multitran.ru/c/" + StringParser.Parse("href=\"", "\"", subpart); subres.Childs.Add(subsubres); subtranslation = subpart.Substring(subpart.IndexOf("<td>") + 4); subtranslation = StringParser.RemoveAll("<span", ">", subtranslation); subtranslation = subtranslation.Replace("<a href=\"m.exe?t=", "<end><begin><a"); subtranslation = StringParser.RemoveAll("<a", ">", subtranslation); subtranslation = subtranslation.Replace("</a>", ""); subtranslation = subtranslation.Replace("<i>", ""); subtranslation = subtranslation.Replace("</i>", ""); subtranslation = subtranslation.Replace("</span>", ""); subtranslation = subtranslation.Replace("<sub>", ""); subtranslation = subtranslation.Replace("</sub>", ""); subtranslation = subtranslation.Replace("<b>", ""); subtranslation = subtranslation.Replace("</b>", ""); subtranslation += "<end>"; parser = new StringParser(subtranslation); string[] subtranslations = parser.ReadItemsList("<begin>", "<end>"); foreach (string sub in subtranslations) { subtranslation = sub.Trim(); if (subtranslation.EndsWith(";")) { subtranslation = subtranslation.Substring(0, subtranslation.Length - 1); } subsubres.Translations.Add(subtranslation); } } } } }
public static void InitServiceItem(ServiceItem serviceItem) { serviceItem.CharsLimit = 3000; serviceItem.AddSupportedSubject(SubjectConstants.Common); }
public static void DoTranslate(ServiceItem serviceItem, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { bool synonimsDictionary = languagesPair.From == Language.Polish && languagesPair.To == Language.Polish; string query = "http://megaslownik.pl/slownik/{0}/,{1}"; query = string.Format(query, MegaslownikTools.ConvertLanguagePair(languagesPair), HttpUtility.UrlEncode(phrase)); result.ArticleUrl = query; result.ArticleUrlCaption = phrase; WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); string responseFromServer = helper.GetResponse(); if (responseFromServer.Contains("<div class=\"slowo\">\r\n Szukanego słowa nie ma w MEGAsłowniku.\r\n")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } result.HasAudio = responseFromServer.Contains("class=\"ikona_sluchaj2\">"); string[] translations = StringParser.ParseItemsList("<div class=\"definicja\">", "</div>", responseFromServer); if (translations.Length == 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } string subsubtranslation; string[] subtranslations; foreach (string translation in translations) { subtranslations = StringParser.ParseItemsList("<a href=\"/slownik", "</a>", translation); foreach (string subtranslation in subtranslations) { subsubtranslation = StringParser.ExtractRight(">", subtranslation); subsubtranslation = StringParser.RemoveAll("<", ">", subsubtranslation); result.Translations.Add(subsubtranslation); } } //synonims translations = StringParser.ParseItemsList("<div class=\"synonim\">synonimy:", "</div>", responseFromServer); foreach (string translation in translations) { subtranslations = StringParser.ParseItemsList("<a href=\"/slownik", "</a>", translation); foreach (string subtranslation in subtranslations) { subsubtranslation = StringParser.ExtractRight(">", subtranslation); subsubtranslation = StringParser.RemoveAll("<", ">", subsubtranslation); if (!result.Translations.Contains(subsubtranslation)) { result.Translations.Add(subsubtranslation); } } } //additional links if (!synonimsDictionary) { string[] links = StringParser.ParseItemsList("<li ><a href=\"/slownik/", "</li>", responseFromServer); string linkUrl, linkText, subphrase, subtrans; Result child; foreach (string link in links) { linkUrl = "http://megaslownik.pl/slownik/" + StringParser.ExtractLeft("\"", link); linkText = StringParser.ExtractRight(">", link); linkText = StringParser.RemoveAll("<", ">", linkText); if (linkText.Contains("»") && linkText.Contains(phrase)) { subphrase = StringParser.ExtractLeft("»", linkText); subtrans = StringParser.ExtractRight("»", linkText); child = serviceItem.CreateNewResult(subphrase, languagesPair, subject); result.Childs.Add(child); child.Translations.Add(subtrans); child.ArticleUrl = linkUrl; child.ArticleUrlCaption = subphrase; } } links = StringParser.ParseItemsList("<li><a href=\"/slownik/", "</li>", responseFromServer); foreach (string link in links) { linkUrl = "http://megaslownik.pl/slownik/" + StringParser.ExtractLeft("\"", link); linkText = StringParser.ExtractRight(">", link); linkText = StringParser.RemoveAll("<", ">", linkText); if (linkText.Contains("»") && linkText.Contains(phrase)) { subphrase = StringParser.ExtractLeft("»", linkText); subtrans = StringParser.ExtractRight("»", linkText); child = serviceItem.CreateNewResult(subphrase, languagesPair, subject); result.Childs.Add(child); child.Translations.Add(subtrans); child.ArticleUrl = linkUrl; child.ArticleUrlCaption = subphrase; } //result.RelatedLinks.Add(linkText, linkUrl); } } else { //synonyms string[] links = StringParser.ParseItemsList("<li ><a href=\"/slownik/", "</li>", responseFromServer); string linkUrl, linkText; foreach (string link in links) { linkUrl = "http://megaslownik.pl/slownik/" + StringParser.ExtractLeft("\"", link); linkText = StringParser.ExtractRight(">", link); linkText = StringParser.RemoveAll("<", ">", linkText); if (linkText.Contains(phrase)) { result.RelatedLinks.Add(linkText, linkUrl); } } links = StringParser.ParseItemsList("<li><a href=\"/slownik/", "</li>", responseFromServer); foreach (string link in links) { linkUrl = "http://megaslownik.pl/slownik/" + StringParser.ExtractLeft("\"", link); linkText = StringParser.ExtractRight(">", link); linkText = StringParser.RemoveAll("<", ">", linkText); if (linkText.Contains(phrase)) { result.RelatedLinks.Add(linkText, linkUrl); } } } }
public static void DoTranslateSentences(ServiceItem serviceItem, string url, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = string.Format(url, HttpUtility.UrlEncode(phrase, Encoding.GetEncoding(1251))); query += ConvertLanguagesPair(languagesPair); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet, Encoding.GetEncoding(1251)); string responseFromServer = helper.GetResponse(); if (responseFromServer.IndexOf("</form>") < 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { result.EditArticleUrl = query; string translation = StringParser.Parse("</form>", "<table", responseFromServer); translation = translation.Replace("<p>", "<end><begin>"); translation += "<end>"; StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<begin>", "<end>"); string subpart; string subphrase = ""; string subtranslation; Result subsubres = null; foreach (string part in translations) { subpart = part; if (subpart.Contains("title=\"")) { subphrase = StringParser.Parse("title=\"", "\"", subpart); } else { subphrase = phrase; } subtranslation = StringParser.RemoveAll("<span", ">", subpart); subtranslation = StringParser.RemoveAll("<a", ">", subtranslation); subtranslation = subtranslation.Replace("</a>", ""); subtranslation = subtranslation.Replace("<i>", ""); subtranslation = subtranslation.Replace("</i>", ""); subtranslation = subtranslation.Replace("</span>", ""); subtranslation = subtranslation.Replace("<sub>", ""); subtranslation = subtranslation.Replace("</sub>", ""); subtranslation = subtranslation.Replace("<b>", ""); subtranslation = subtranslation.Replace("</b>", ""); subtranslation = subtranslation.Replace(">>", ""); subsubres = serviceItem.CreateNewResult(subphrase, languagesPair, subject); result.Childs.Add(subsubres); int idx = subtranslation.IndexOf("\n"); if (idx < 0) { subsubres.Translations.Add("Parse error. Can't found '\\n' in " + subtranslation); } else { subsubres.Translations.Add(subtranslation.Substring(0, idx)); subsubres.Translations.Add(subtranslation.Substring(idx + 1).Trim()); } } } }
public static void DoTranslatePhrases(ServiceItem serviceItem, string url, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = string.Format(url, EncodePhrase(phrase, languagesPair)); query += ConvertLanguagesPair(languagesPair); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet, GetEncoding(languagesPair)); result.ArticleUrl = query; result.ArticleUrlCaption = phrase; if (languagesPair.From == Language.Japanese || languagesPair.To == Language.Japanese) { helper.StreamConvertor = new EucJPStreamFixer(); } string responseFromServer = helper.GetResponse(); if ((responseFromServer.IndexOf("ask in forum</a>") >= 0 && responseFromServer.IndexOf(" single words found") < 0) || (responseFromServer.IndexOf("спросить в форуме</a>") >= 0 && responseFromServer.IndexOf(" найдены отдельные слова") < 0) || responseFromServer.IndexOf("<table cellspacing=\"0\" border=\"0\" width=\"100%\">") < 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { string translation = StringParser.Parse("createAutoComplete();", "<script><!--", responseFromServer); translation = translation.Replace("</TD>", "</td>"); translation = translation.Replace("<TD width", "<td width"); translation = translation.Replace("</td><tr>", "</td></tr><tr>"); translation = translation.Replace("</a><tr>", "</a></td></tr><tr>"); translation = translation.Replace("\"><tr>", "\"></td></tr><tr>"); translation = translation.Replace("</tr></td>", "</td></tr>"); StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<tr>", "</td></tr>"); string subpart; string subphrase = ""; string subtranslation; string abbreviation; Result subsubres = null; string subres_url; foreach (string part in translations) { if (!part.Contains("<td width=\"5%\">")) { continue; } subpart = part; subphrase = StringParser.Parse("<td width=\"5%\">", "</td>", subpart); subres_url = StringParser.Parse("href=\"", "\"", subphrase); subphrase = StringParser.RemoveAll("<span", ">", subphrase); subphrase = StringParser.RemoveAll("<a", ">", subphrase); subphrase = subphrase.Replace("</a>", ""); subphrase = subphrase.Replace("<i>", ""); subphrase = subphrase.Replace("</i>", ""); subphrase = subphrase.Replace("</span>", ""); subphrase = subphrase.Replace("<sub>", ""); subphrase = subphrase.Replace("</sub>", ""); subphrase = subphrase.Replace("<b>", ""); subphrase = subphrase.Replace("</b>", ""); abbreviation = StringParser.Parse("<i>", "</i>", subpart); subsubres = serviceItem.CreateNewResult(subphrase, languagesPair, subject); subsubres.Abbreviation = abbreviation; subsubres.ArticleUrl = "http://www.multitran.ru/c/" + subres_url; result.Childs.Add(subsubres); subtranslation = subpart + "<end>"; subtranslation = StringParser.Parse("<td width=\"20%\">", "</td>", subtranslation); subtranslation = StringParser.RemoveAll("<span", ">", subtranslation); subtranslation = StringParser.RemoveAll("<a", ">", subtranslation); subtranslation = StringParser.RemoveAll("<td", ">", subtranslation); subtranslation = subtranslation.Replace("</td>", " "); subtranslation = subtranslation.Replace("</a>", ""); subtranslation = subtranslation.Replace("<i>", ""); subtranslation = subtranslation.Replace("</i>", ""); subtranslation = subtranslation.Replace("</span>", ""); subtranslation = subtranslation.Replace("<sub>", ""); subtranslation = subtranslation.Replace("</sub>", ""); subtranslation = subtranslation.Replace("<b>", ""); subtranslation = subtranslation.Replace("</b>", ""); subsubres.Translations.Add(subtranslation); subtranslation = subpart + "<end>"; subtranslation = StringParser.Parse("<td width=\"75%\">", "<end>", subtranslation); subtranslation = StringParser.RemoveAll("<span", ">", subtranslation); subtranslation = StringParser.RemoveAll("<a", ">", subtranslation); subtranslation = StringParser.RemoveAll("<td", ">", subtranslation); subtranslation = subtranslation.Replace("</td>", " "); subtranslation = subtranslation.Replace("</a>", ""); subtranslation = subtranslation.Replace("<i>", ""); subtranslation = subtranslation.Replace("</i>", ""); subtranslation = subtranslation.Replace("</span>", ""); subtranslation = subtranslation.Replace("<sub>", ""); subtranslation = subtranslation.Replace("</sub>", ""); subtranslation = subtranslation.Replace("<b>", ""); subtranslation = subtranslation.Replace("</b>", ""); subsubres.Translations.Add(subtranslation); } } }
static void GenerateServiceItemSell(WebBrowser wBrowser, ServiceItem si, string parentName, bool first, bool generateLangs) { StringBuilder htmlString = new StringBuilder(); htmlString.AppendFormat(CultureInfo.InvariantCulture, HtmlHelper.ServiceNameFormat, si.Service.Url, HttpUtility.HtmlEncode(si.Service.Url.AbsoluteUri)); htmlString.Append(", "); if (!string.IsNullOrEmpty(si.Description)) { htmlString.Append(LangPack.TranslateString(si.Description) + " - "); } htmlString.Append(LangPack.TranslateString(si.Service.FullName)); if (si is MonolingualDictionary) { htmlString.Append(", "); htmlString.Append(LangPack.TranslateLanguage(si.SupportedTranslations[0].From)); } htmlString.Append(", "); htmlString.Append(ServiceSettingsContainer.GetServiceItemType(si)); if (si.SupportedSubjects.Count > 1) { htmlString.Append(", " + LangPack.TranslateString("Subjects") + " : "); htmlString.Append(LangPack.TranslateString(SubjectConstants.Common)); foreach (string subject in si.SupportedSubjects) { if (subject != SubjectConstants.Common) { htmlString.Append(", "); htmlString.Append(LangPack.TranslateString(subject)); } } } htmlString.Append(", "); htmlString.Append(HttpUtility.HtmlEncode(si.Service.Copyright)); if (si is MonolingualDictionary || !generateLangs) { HtmlHelper.AddTranslationCell(wBrowser, parentName, first, htmlString.ToString(), si, true); return; } //count langs without gb\us english int pairsCount = 0; foreach (LanguagePair lp in si.SupportedTranslations) { if (lp.From != Language.English_GB && lp.From != Language.English_US && lp.To != Language.English_GB && lp.To != Language.English_US) { pairsCount++; } } string langNodeName = si.FullName + "_langs"; htmlString.Append("<br>" + GenerateTopNode(langNodeName, LangPack.TranslateString("Languages") + GetLangsPairsCount(pairsCount), 0.5)); HtmlHelper.AddTranslationCell(wBrowser, parentName, first, htmlString.ToString(), si, true); SortedDictionary <string, SortedDictionary <string, string> > langs = new SortedDictionary <string, SortedDictionary <string, string> >(); foreach (LanguagePair lp in si.SupportedTranslations) { if (lp.From == Language.English_GB || lp.From == Language.English_US || lp.To == Language.English_GB || lp.To == Language.English_US) { continue; } string fromlang = LangPack.TranslateLanguage(lp.From); SortedDictionary <string, string> inner_list; if (!langs.TryGetValue(fromlang, out inner_list)) { inner_list = new SortedDictionary <string, string>(); langs.Add(fromlang, inner_list); } inner_list.Add(LangPack.TranslateLanguage(lp.To), ""); } if (si.SupportedTranslations.Count <= 10) { htmlString = new StringBuilder(); foreach (KeyValuePair <string, SortedDictionary <string, string> > kvp_langs in langs) { foreach (KeyValuePair <string, string> kvp_to_langs in kvp_langs.Value) { htmlString.Append("<li>" + kvp_langs.Key + "->" + kvp_to_langs.Key + "</li>"); } } HtmlHelper.SetNodeInnerHtml(wBrowser, langNodeName, htmlString.ToString()); } else { htmlString = new StringBuilder(); foreach (KeyValuePair <string, SortedDictionary <string, string> > kvp_langs in langs) { string nodeName = si.FullName + "_lang_" + kvp_langs.Key; nodeName = nodeName.Replace("'", "_"); htmlString.Append(GenerateTopNode(nodeName, kvp_langs.Key + "->" + GetLangsPairsCount(kvp_langs.Value.Count), 1)); } HtmlHelper.SetNodeInnerHtml(wBrowser, langNodeName, htmlString.ToString()); foreach (KeyValuePair <string, SortedDictionary <string, string> > kvp_langs in langs) { string nodeName = si.FullName + "_lang_" + kvp_langs.Key; nodeName = nodeName.Replace("'", "_"); htmlString = new StringBuilder(); foreach (KeyValuePair <string, string> kvp_to_langs in kvp_langs.Value) { htmlString.Append("<li>" + kvp_to_langs.Key + "</li>"); } HtmlHelper.SetNodeInnerHtml(wBrowser, nodeName, htmlString.ToString()); } } }
public static void DoTranslate(ServiceItem serviceItem, string host, string bookName, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = host + "/{0}"; //ISO-8859-1 query = string.Format(query, HttpUtility.UrlEncode(phrase, System.Text.Encoding.UTF8)); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); //helper.UseGoogleCache = true; string responseFromServer = helper.GetResponse(); if (responseFromServer.IndexOf("The word you've entered isn't in the dictionary.") >= 0 || responseFromServer.IndexOf("No entries found.\n<br/>") >= 0 || responseFromServer.IndexOf("The word you've entered isn't in the thesaurus.") >= 0 ) { if (responseFromServer.IndexOf("<PRE>") >= 0) { //suggestions StringParser suggestions_parser = new StringParser("<PRE>", "</PRE>", responseFromServer); string[] suggestions = suggestions_parser.ReadItemsList(">", "</a>"); foreach (string item in suggestions) { string part = item; string link = "html!<p><a href=\"" + host + "/{0}\" title=\"" + host + "/{0}\">{0}</a></p>"; link = string.Format(link, part); result.Translations.Add(link); } return; } else { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } } result.ArticleUrl = host + "/" + phrase; if (responseFromServer.Contains("One entry found.\n<br/>") || responseFromServer.Contains("One entry found.\n<br />")) { SetResult(result, responseFromServer, host + "/"); } else { if (responseFromServer.Contains("'list' value=\"va:")) { string count_str = StringParser.Parse("'list' value=\"va:", ",", responseFromServer); int count; if (int.TryParse(count_str, out count)) { result.MoreEntriesCount = count; } } StringParser parser = new StringParser("<ol class=\"results\"", "</ol>", responseFromServer); string[] items = parser.ReadItemsList("href=\"/" + bookName.ToLower() + "/", "\""); bool first = true; foreach (string item in items) { string part = item; string part_name = StringParser.RemoveAll("[", "]", part); if (string.Compare(part_name, phrase, true) == 0) { Result subres = serviceItem.CreateNewResult(part_name, languagesPair, subject); result.Childs.Add(subres); subres.ArticleUrl = host + "/" + part; if (first) { SetResult(subres, responseFromServer, host + "/"); first = false; } else { //get translation //jump=blood%5B1%2Cnoun%5D&book=Dictionary&quer=blood&list=45%2C1%2C3602592%2C0%3Bblood%5B1%2Cnoun%5D%3D113554%3Bblood%5B2%2Ctransitive+verb%5D%3D113572%3BABO+blood+group%3D2000002431%3Bbad+blood%3D2000074812%3Bblood-and-guts%3D2000113598%3Bblood-brain+barrier%3D2000113627%3Bblood+brother%3D2000113664%3Bblood+cell%3D2000113685%3Bblood+count%3D2000113697%3Bblood+doping%3D2000113725 /*string quer_value = StringParser.Parse("<input type='hidden' name='quer' value=\"", "\"", responseFromServer); * string list_value = StringParser.Parse("<input type='hidden' name='list' value=\"", "\"", responseFromServer); * string post_data_value = "jump={0}&book=" + bookName + "&quer={1}&list={2}"; * post_data_value = string.Format(post_data_value , * HttpUtility.UrlEncode(part), * HttpUtility.UrlEncode(quer_value), * HttpUtility.UrlEncode(list_value) * ); */ helper = new WebRequestHelper(result, new Uri(subres.ArticleUrl), networkSetting, WebRequestContentType.UrlEncodedGet); //helper.AddPostData(post_data_value); //helper.UseGoogleCache = true; responseFromServer = helper.GetResponse(); SetResult(subres, responseFromServer, host + "/"); } } } if (result.MoreEntriesCount != 0) { result.MoreEntriesCount -= result.Childs.Count; } } }