void InitPair(PersonPairNode pp)
 {
     pp.ExpandBranch = new UVMCommand(par => {
         if (pp.Male != null)
         {
             pp.MaleParentsPair = new PersonPairNode()
             {
                 X      = pp.X + 200,
                 Y      = pp.Y - 100,
                 Male   = pp.Male.Father,
                 Female = pp.Male.Mother
             };
             Pairs.Add(pp.MaleParentsPair);
             InitPair(pp.MaleParentsPair);
         }
         else
         {
             var person = CreatePersonDialogAsync(0);
             pp.Male    = (Person)person;
         }
         if (pp.Female != null)
         {
             pp.FemaleParentsPair = new PersonPairNode()
             {
                 X      = pp.X + 200,
                 Y      = pp.Y + 100,
                 Male   = pp.Female.Father,
                 Female = pp.Female.Mother
             };
             pairs.Add(pp.FemaleParentsPair);
             InitPair(pp.FemaleParentsPair);
         }
         RaisePropertyChanged("Pairs");
     });
 }
예제 #2
0
        public void Init()
        {
            for (int i = 0; i < Template.Length; i++)
            {
                // add in template characters
                char ch = Template[i];
                if (Elems.ContainsKey(ch))
                {
                    Elems[ch]++;
                }
                else
                {
                    Elems.Add(ch, 1);
                }
            }

            // add in pairs
            for (int i = 0; i < Template.Length - 1; i++)
            {
                var key = Template.Substring(i, 2);
                if (Pairs.ContainsKey(key))
                {
                    Pairs[key]++;
                }
                else
                {
                    Pairs.Add(key, 1);
                }
            }
        }
예제 #3
0
    public static Pairs <string, object> Parse(string s)
    {
        var ret = new Pairs <string, object>();

        s = s.Trim();

        //check for enclosing brackets
        if (!Regex.Match(s, @"^{.*}$").Success)
        {
            throw new InvalidOperationException("[Jsonizer] Bad json format while parsing '" + s + "'");
        }

        //remove enclosing brackets
        s = s.Substring(1);
        s = s.Substring(0, s.Length - 1);

        //magic regex to parse exluding commas
        var datas = Regex.Matches(s, @"([\""].+?[\""]|\S+)\s*:\s*([\(].+?[\)]|[^,]+)")
                    .Cast <Match>()
                    .Select(m => m.Value);

        foreach (var data in datas)
        {
            ret.Add(ParsePart(data.Trim()));
        }

        return(ret);
    }
 public PersonTreeViewModel()
 {
     RootPair = new PersonPairNode()
     {
         X    = 50,
         Y    = 100,
         Male = new GRAppLib.DB.Person()
         {
             FirstName_ = "Alpha",
             BirthDate  = DateTime.Now,
             Father     = new Person()
             {
                 FirstName_ = "AlphaF"
             },
             Mother = new Person()
             {
                 FirstName_ = "AlphaM"
             }
         },
         Female = new GRAppLib.DB.Person()
         {
             FirstName_ = "Beta", BirthDate = DateTime.Now
         }
     };
     Pairs.Add(RootPair);
     RootPair.ExpandBranch.Execute(null);
 }
예제 #5
0
        public override T Get(string name)
        {
            if (!Pairs.ContainsKey(name))
            {
                Pairs.Add(name, base.Get(name));
            }

            return(Pairs[name]);
        }
예제 #6
0
 public PairConfig this[string key]
 {
     get
     {
         if (!Pairs.ContainsKey(key))
         {
             Pairs.Add(key, new PairConfig());
         }
         return(Pairs[key]);
     }
 }
예제 #7
0
파일: IniReader.cs 프로젝트: tomshinton/UPT
        private void Parse()
        {
            string[] Lines = System.IO.File.ReadAllLines(CachedIniPath);

            foreach (string Line in Lines)
            {
                string[] SplitLine = Line.Split(DelimitingChar.ToCharArray());

                if (SplitLine.Length == 2)
                {
                    Pairs.Add(SplitLine[0], SplitLine[1]);
                }
            }
        }
        public void Add(SentencePair pair)
        {
            foreach (string e in pair.EWords)
            {
                EWords.Add(e);
            }

            foreach (string f in pair.FWords)
            {
                FWords.Add(f);
            }

            Pairs.Add(pair);
        }
예제 #9
0
        public override T Get(string name)
        {
            if (!Pairs.ContainsKey(name))
            {
                var t = base.Get(name);
                Pairs.Add(name, t);

                if (t is BaseDbContext dbContext)
                {
                    if (Configuration["migration:enabled"] == "true")
                    {
                        dbContext.Migrate();
                    }
                }
            }

            return(Pairs[name]);
        }
예제 #10
0
        /// <summary>Update this exchange's set of trading pairs</summary>
        protected override Task UpdatePairsInternal(HashSet <string> coins)        // Worker thread context
        {
            Model.DataUpdates.Add(() =>
            {
                // Create cross-exchange pairs for each coin of interest
                foreach (var cd in SettingsData.Settings.Coins.Where(x => x.CreateCrossExchangePairs))
                {
                    var sym = cd.Symbol;

                    // Find the exchanges that have this coin
                    var exchanges = Exchanges.Where(x => x.Coins.ContainsKey(sym)).ToArray();

                    // Create trading pairs between the same currencies on different exchanges
                    for (int j = 0; j < exchanges.Length - 1; ++j)
                    {
                        for (int i = j + 1; i < exchanges.Length; ++i)
                        {
                            // Check whether the pair already exists
                            var exch0 = exchanges[j];
                            var exch1 = exchanges[i];
                            var pair  = Pairs[sym, exch0, exch1];
                            if (pair != null)
                            {
                                continue;
                            }

                            // If not, add it
                            pair = new TradePair(exch0.Coins[sym], exch1.Coins[sym], this);
                            Pairs.Add(pair);

                            // Add the coins
                            Coins.Add(pair.Base.SymbolWithExchange, pair.Base);
                            Coins.Add(pair.Quote.SymbolWithExchange, pair.Quote);
                        }
                    }
                }
            });
            return(Task.CompletedTask);
        }
예제 #11
0
        /// <summary>
        /// Disects the literal command line.
        /// </summary>
        private void Disect()
        {
            var mcmd             = Regex.Match(Literal, "[!,//,a-z,A-Z,0-9]{1,}");
            var mquote           = Regex.Matches(Literal, "\"(?<value>[a-z,A-Z,0-9,\\s]{0,})\"");
            var arg              = Regex.Matches(Literal, " (?<value>[a-z,A-Z,0-9,#,_,-]{0,})");
            var valuepairs       = Regex.Matches(Literal, "(?<name>[a-z,A-Z,0-9]{1,})[\\s]{0,}=[\\s]{0,}(?<value>[a-z,A-Z,0-9]{1,})");
            var quotedvaluepairs = Regex.Matches(Literal, "(?<name>[a-z,A-Z,0-9]{1,})[\\s]{0,}=[\\s]{0,}\"(?<value>[a-z,A-Z,0-9,\\s]{1,})\"");
            var flags            = Regex.Matches(Literal, "/(?<name>[a-z,A-Z,0-9]{1,})");

            Command = mcmd.Value;

            // give preference to value pairs.
            for (int i = 0; i < valuepairs.Count; i++)
            {
                Pairs.Add(new CommandNameValuePair()
                {
                    Name = new CommandIndexedItem(valuepairs[i].Groups["name"]), Value = new CommandIndexedItem(valuepairs[i].Groups["value"])
                });
            }
            // then to quoted value pairs.
            for (int i = 0; i < quotedvaluepairs.Count; i++)
            {
                Pairs.Add(new CommandNameValuePair()
                {
                    Name = new CommandIndexedItem(quotedvaluepairs[i].Groups["name"]), Value = new CommandIndexedItem(quotedvaluepairs[i].Groups["value"])
                });
            }

            // then to flags.
            for (int i = 0; i < flags.Count; i++)
            {
                Flags.Add(new CommandFlag()
                {
                    Name = new CommandIndexedItem(flags[i].Groups["name"])
                });
            }

            // then to quoted arguments.
            for (int i = 0; i < mquote.Count; i++)
            {
                if (!IsInterpreted(mquote[i].Groups["value"].Index))
                {
                    Arguments.Add(new CommandArgument()
                    {
                        Value = new CommandIndexedItem(mquote[i].Groups["value"])
                    });
                }
            }

            // and then to unquoted arguments.
            for (int i = 0; i < arg.Count; i++)
            {
                if (!IsInterpreted(arg[i].Groups["value"].Index))
                {
                    Arguments.Add(new CommandArgument()
                    {
                        Value = new CommandIndexedItem(arg[i].Groups["value"])
                    });
                }
            }
        }
예제 #12
0
        public async Task SearchByAuthor(MoeItems imgs, string uid, SearchPara para, CancellationToken token)
        {
            var isIorM = para.Lv3MenuIndex == 0;
            var mi     = isIorM ? "illustrations" : "manga";
            var mi2    = isIorM ? "illusts" : "manga";
            var mi3    = isIorM ? "插画" : "漫画";

            Net.SetReferer($"{HomeUrl}/users/{uid}/{mi}");
            var allJson = await Net.GetJsonAsync($"{HomeUrl}/ajax/user/{uid}/profile/all", token);

            if ($"{allJson?.error}".ToLower() == "true")
            {
                Extend.ShowMessage($"搜索失败,网站信息:“{$"{allJson?.message}".ToDecodedUrl()}”", null, Extend.MessagePos.Window);
                return;
            }
            var picIds = new List <string>();
            var arts   = isIorM ? allJson?.body?.illusts : allJson?.body?.manga;

            foreach (var ill in Extend.GetList(arts))
            {
                picIds.Add((ill as JProperty)?.Name);
            }
            var picCurrentPage = picIds.OrderByDescending(i => i.ToInt()).Skip((para.PageIndex - 1) * para.Count).Take(para.Count).ToList();

            if (!picCurrentPage.Any())
            {
                return;
            }
            var pairs = new Pairs();

            foreach (var pic in picCurrentPage)
            {
                pairs.Add("ids[]".ToEncodedUrl(), pic);
            }
            pairs.Add("work_category", mi2);
            pairs.Add("is_first_page", "1");
            var picsJson = await Net.GetJsonAsync($"{HomeUrl}/ajax/user/{uid}/profile/illusts", token, pairs);

            var works = picsJson?.body?.works;

            foreach (var item in Extend.GetList(works))
            {
                dynamic illus = (item as JProperty)?.Value;
                if (illus == null)
                {
                    continue;
                }
                var img = new MoeItem(this, para);
                img.Urls.Add(1, $"{illus.url}", $"{HomeUrl}/users/{uid}/{mi}");
                img.Id              = $"{illus.id}".ToInt();
                img.Net             = Net.CloneWithOldCookie();
                img.Title           = $"{illus.title}";
                img.Uploader        = $"{illus.userName}";
                img.UploaderId      = $"{illus.userId}";
                img.UploaderHeadUrl = $"{illus.profileImageUrl}";
                img.Width           = $"{illus.width}".ToInt();
                img.Height          = $"{illus.height}".ToInt();
                img.DetailUrl       = $"{HomeUrl}/artworks/{img.Id}";
                img.ImagesCount     = $"{illus.pageCount}".ToInt();
                foreach (var tag in Extend.GetList(illus.tags))
                {
                    img.Tags.Add($"{tag}");
                }
                img.Date = GetDateFromUrl($"{illus.url}");
                if ($"{illus.illustType}" == "2")
                {
                    img.GetDetailTaskFunc = async() => await GetUgoiraDetailPageTask(img);
                }
                else
                {
                    img.GetDetailTaskFunc = async() => await GetDetailPageTask(img, para);
                }
                img.OriginString = $"{item}";

                imgs.Add(img);
            }
            Extend.ShowMessage($"该作者共有{mi3}{picIds.Count}张,当前第{para.Count * (para.PageIndex - 1) + 1}张", null, Extend.MessagePos.InfoBar);
        }
예제 #13
0
    public override async Task <SearchedPage> GetRealPageAsync(SearchPara para, CancellationToken token)
    {
        var net = GetCloneNet();

        var url = $"{HomeUrl}/";

        if (!para.Keyword.IsEmpty())
        {
            url += para.Keyword.Trim().Replace(" ", "+");
        }

        var pairs = new Pairs();

        if (para.OrderBy?.IsDefault == false)
        {
            switch (para.OrderBy?.Order)
            {
            case ImageOrderBy.Date:
                pairs.Add("s", "id");
                break;

            case ImageOrderBy.Popular:
                pairs.Add("s", "fav");
                break;
            }
        }

        pairs.Add("p", para.PageIndex.ToString());

        var doc = await net.GetHtmlAsync(url, pairs, true, token);

        // images
        var imgs  = new SearchedPage();
        var nodes = doc.DocumentNode.SelectSingleNode("//ul[@id='thumbs2']").SelectNodes(".//li");

        if (nodes == null)
        {
            return(null);
        }

        foreach (var imgNode in nodes)
        {
            var img = new MoeItem(this, para);
            var mo  = imgNode.SelectSingleNode(".//b")?.InnerText?.Trim();
            if (mo?.ToLower().Trim().Contains("members only") == true)
            {
                continue;
            }
            var strId = imgNode.SelectSingleNode("a").Attributes["href"].Value;
            var fav   = imgNode.SelectSingleNode("a/span")?.InnerText;
            if (!fav.IsEmpty())
            {
                img.Score = Regex.Replace(fav, @"[^0-9]+", "")?.ToInt() ?? 0;
            }
            var imgHref    = imgNode.SelectSingleNode(".//img");
            var previewUrl = imgHref?.Attributes["src"]?.Value;
            //http://s3.zerochan.net/Morgiana.240.1355397.jpg   preview
            //http://s3.zerochan.net/Morgiana.600.1355397.jpg    sample
            //http://static.zerochan.net/Morgiana.full.1355397.jpg   full
            //先加前一个,再加后一个  范围都是00-49
            //string folder = (id % 2500 % 50).ToString("00") + "/" + (id % 2500 / 50).ToString("00");
            var sampleUrl = "";
            var fileUrl   = "";
            if (!previewUrl.IsEmpty())
            {
                sampleUrl = previewUrl?.Replace("240", "600");
                fileUrl   = Regex.Replace(previewUrl, "^(.+?)zerochan.net/", "https://static.zerochan.net/")
                            .Replace("240", "full");
            }

            var resAndFileSize = imgHref?.Attributes["title"]?.Value;
            if (!resAndFileSize.IsEmpty())
            {
                foreach (var s in resAndFileSize.Split(' '))
                {
                    if (!s.Contains('x'))
                    {
                        continue;
                    }
                    var res = s.Split('x');
                    if (res.Length != 2)
                    {
                        continue;
                    }
                    img.Width  = res[0].ToInt();
                    img.Height = res[1].ToInt();
                }
            }

            var title = imgHref?.Attributes["alt"]?.Value;

            //convert relative url to absolute
            if (!fileUrl.IsEmpty() && fileUrl.StartsWith("/"))
            {
                fileUrl = $"{HomeUrl}{fileUrl}";
            }
            if (sampleUrl != null && sampleUrl.StartsWith("/"))
            {
                sampleUrl = HomeUrl + sampleUrl;
            }

            img.Description = title;
            img.Title       = title;
            img.Id          = strId[1..].ToInt();
예제 #14
0
 public void Add(Astronaut a)
 {
     Pairs.Add(a);
 }
예제 #15
0
    public override async Task <SearchedPage> GetRealPageAsync(SearchPara para, CancellationToken token)
    {
        if (!IsUserLogin)
        {
            Login();
        }
        if (!IsUserLogin)
        {
            throw new Exception("必须登录才能搜索");
        }
        var page = new SearchedPage();
        var net  = GetCloneNet();

        var pairs = new Pairs();
        var api   = "";

        switch (para.Lv2MenuIndex)
        {
        case 0:
            if (para.Keyword.Trim().Length > 0)
            {
                api = $"{SearchDeviationsApi}";
                pairs.Add(new ("q", para.Keyword.Trim().Replace(" ", "+")));
            }
            else
            {
                api = $"{NewDeviationsApi}";
            }

            break;

        case 1:
            api = $"{PopularDeviationsApi}";
            break;
        }

        if (!para.PageIndexCursor.IsEmpty())
        {
            pairs.Add("cursor", para.PageIndexCursor);
        }
        var json = await net.GetJsonAsync($"{HomeUrl}{api}", pairs, true,
                                          token);

        foreach (var devi in Ex.GetList(json.deviations))
        {
            if (!$"{devi.type}".Equals("image", StringComparison.OrdinalIgnoreCase))
            {
                continue;
            }
            var item       = new MoeItem(this, para);
            var orgfile    = $"{devi.media.baseUri}";
            var thumbToken = "";
            foreach (var t in Ex.GetList(devi.media.token))
            {
                thumbToken = $"{t}";
                if (thumbToken.IsEmpty())
                {
                    continue;
                }
                break;
            }

            var types = devi.media.types;
            item.DetailUrl = $"{devi.url}";
            var dlbool = false;
            var dl     = $"{devi.isDownloadable}";
            if (dl.Equals("true", StringComparison.OrdinalIgnoreCase))
            {
                var org = $"{orgfile}?token={thumbToken}";
                item.Urls.Add(DownloadTypeEnum.Origin, org, HomeUrl);
                dlbool = true;
            }

            foreach (var type in Ex.GetList(types))
            {
                var t = $"{type.t}";
                if (t.Contains("350"))
                {
                    //thumbContnent = $"/v1/fit/w_{type.w},h_{type.h},q_70,strp/{type.c}";
                    var thumbContnent = $"/{type.c}".Replace("<prettyName>", $"{devi.media.prettyName}");
                    var url           = $"{orgfile}{thumbContnent}?token={thumbToken}";
                    item.Urls.Add(DownloadTypeEnum.Thumbnail, url, HomeUrl);
                    continue;
                }

                if (t.Equals("preview", StringComparison.OrdinalIgnoreCase))
                {
                    var thumbContnent = $"/{type.c}".Replace("<prettyName>", $"{devi.media.prettyName}");
                    var url           = $"{orgfile}{thumbContnent}?token={thumbToken}";
                    item.Urls.Add(DownloadTypeEnum.Medium, url, HomeUrl);
                    continue;
                }

                if (t.Equals("fullview", StringComparison.OrdinalIgnoreCase))
                {
                    if ($"{type.c}".IsEmpty())
                    {
                        continue;
                    }
                    var thumbContnent = $"/{type.c}".Replace("<prettyName>", $"{devi.media.prettyName}");
                    var url           = $"{orgfile}{thumbContnent}?token={thumbToken}";
                    item.Urls.Add(DownloadTypeEnum.Large, url, HomeUrl);
                    if (!dlbool)
                    {
                        item.Urls.Add(DownloadTypeEnum.Origin, url, HomeUrl);
                    }
                }
            }


            item.Id = $"{devi.deviationId}".ToInt();

            item.Title        = $"{devi.title}";
            item.UploaderId   = $"{devi.author.userId}";
            item.Uploader     = $"{devi.author.username}";
            item.OriginString = $"{devi}";
            page.Add(item);
        }

        page.NextPageIndexCursor = $"{json.nextCursor}";
        return(page);
    }
예제 #16
0
 public void Add(string key, GGValue value)
 {
     Pairs.Add(key, value);
 }