コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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 />") + "&nbsp</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);
                }
            }
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        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);
        }
コード例 #7
0
 public static void AddTranslationCell(WebBrowser wBrowser, bool isClean, string dataCellHtml, ServiceItem serviceItem)
 {
     AddTranslationCell(wBrowser, isClean, dataCellHtml, serviceItem, false);
 }
コード例 #8
0
        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);
        }
コード例 #9
0
ファイル: WikiUtils.cs プロジェクト: cyotek/translateclient
        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) + "&nbsp</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);
        }
コード例 #10
0
 public ServiceItemData(ServiceItem serviceItem, LanguagePair languagePair, string subject) : base(serviceItem.FullName, subject)
 {
     this.languagePair = languagePair;
     this.ServiceItem  = serviceItem;
 }
コード例 #11
0
 public Result(ServiceItem serviceItem, string phrase, LanguagePair languagesPair, string subject) : base(serviceItem, languagesPair, subject)
 {
     this.phrase = phrase;
     childs      = new ResultCollection(this);
 }
コード例 #12
0
 public ServiceItemSetting(LanguagePair languagePair, string subject, ServiceItem serviceItem, NetworkSetting networkSetting) : base(serviceItem, languagePair, subject)
 {
     this.networkSetting = networkSetting;
 }
コード例 #13
0
 public static string GetServiceIconCellHtml(ServiceItem serviceItem)
 {
     return(GetServiceIconCellHtml(serviceItem, false));
 }
コード例 #14
0
        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("&nbsp;single words found") < 0)
                ||
                (responseFromServer.IndexOf("спросить в форуме</a>") >= 0 &&
                 responseFromServer.IndexOf("&nbsp; найдены отдельные слова") < 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);
                        }
                    }
                }
            }
        }
コード例 #15
0
        public static void InitServiceItem(ServiceItem serviceItem)
        {
            serviceItem.CharsLimit = 3000;

            serviceItem.AddSupportedSubject(SubjectConstants.Common);
        }
コード例 #16
0
        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);
                    }
                }
            }
        }
コード例 #17
0
        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());
                    }
                }
            }
        }
コード例 #18
0
        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("&nbsp;single words found") < 0)
                ||
                (responseFromServer.IndexOf("спросить в форуме</a>") >= 0 &&
                 responseFromServer.IndexOf("&nbsp; найдены отдельные слова") < 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);
                }
            }
        }
コード例 #19
0
        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());
                }
            }
        }
コード例 #20
0
        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;
                }
            }
        }