示例#1
0
        public override bool MoveNext()
        {
            if (MoveNextSublocality())
            {
                return(true);
            }

            if (!base.MoveNext())
            {
                return(false);
            }

            ExceptFor     = null;
            ExceptForKana = null;

            if (!string.IsNullOrEmpty(Locality) &&
                !string.IsNullOrEmpty(LocalityKana))
            {
                var cm = _Paren.Match(Locality);
                var km = _ParenKana.Match(LocalityKana);

                if (cm.Success && km.Success)
                {
                    var cem = _ExceptFor.Match(Locality);
                    var kem = _ExceptForKana.Match(LocalityKana);

                    if (cem.Success && kem.Success)
                    {
                        ExceptFor     = Locality.Substring(cm.Index + 1, Locality.Length - 5 - cm.Index);
                        ExceptForKana = LocalityKana.Substring(km.Index + 1, LocalityKana.Length - 7 - km.Index);
                    }
                    else
                    {
                        var cv = cm.Groups[1].Value;
                        var kv = km.Groups[1].Value;

                        var cs = _Split.Split(cv);
                        var ks = _SplitKana.Split(kv);

                        IEnumerable <SublocalityEntry> raws;

                        if (cs.Length == ks.Length)
                        {
                            raws = Enumerable.Range(0, cs.Length).Select(i => new SublocalityEntry(cs[i], ks[i]));
                        }
                        else
                        {
                            raws = new[] { new SublocalityEntry(cv, kv) };
                        }

                        _SublocalityIndex = 0;
                        _Sublocalities    = raws.SelectMany(e => e.Populate()).ToList();
                        MoveNextSublocality();
                    }
                    Locality     = Locality.Substring(0, cm.Index);
                    LocalityKana = LocalityKana.Substring(0, km.Index);
                }
            }

            return(true);
        }