示例#1
0
 public override Pullenti.Ner.Referent RegisterReferent(Pullenti.Ner.Referent referent)
 {
     Pullenti.Ner.Phone.PhoneReferent phone = referent as Pullenti.Ner.Phone.PhoneReferent;
     if (phone == null) 
         return null;
     string key = phone.Number;
     if (key.Length >= 10) 
         key = key.Substring(3);
     List<Pullenti.Ner.Phone.PhoneReferent> phLi;
     if (!m_PhonesHash.TryGetValue(key, out phLi)) 
         m_PhonesHash.Add(key, (phLi = new List<Pullenti.Ner.Phone.PhoneReferent>()));
     foreach (Pullenti.Ner.Phone.PhoneReferent p in phLi) 
     {
         if (p.CanBeEquals(phone, Pullenti.Ner.Core.ReferentsEqualType.WithinOneText)) 
         {
             p.MergeSlots(phone, true);
             return p;
         }
     }
     phLi.Add(phone);
     m_Referents.Add(phone);
     return phone;
 }
示例#2
0
 public static PhoneItemToken TryAttachAlternate(Pullenti.Ner.Token t0, Pullenti.Ner.Phone.PhoneReferent ph0, List <PhoneItemToken> pli)
 {
     if (t0 == null)
     {
         return(null);
     }
     if (t0.IsCharOf("\\/") && (t0.Next is Pullenti.Ner.NumberToken) && (t0.Next.EndChar - t0.Next.BeginChar) <= 1)
     {
         List <PhoneItemToken> pli1 = PhoneItemToken.TryAttachAll(t0.Next, 15);
         if (pli1 != null && pli1.Count > 1)
         {
             if (pli1[pli1.Count - 1].ItemType == PhoneItemType.Delim)
             {
                 pli1.RemoveAt(pli1.Count - 1);
             }
             if (pli1.Count <= pli.Count)
             {
                 int    ii;
                 string num = "";
                 for (ii = 0; ii < pli1.Count; ii++)
                 {
                     PhoneItemToken p1 = pli1[ii];
                     PhoneItemToken p0 = pli[(pli.Count - pli1.Count) + ii];
                     if (p1.ItemType != p0.ItemType)
                     {
                         break;
                     }
                     if (p1.ItemType != PhoneItemType.Number && p1.ItemType != PhoneItemType.Delim)
                     {
                         break;
                     }
                     if (p1.ItemType == PhoneItemType.Number)
                     {
                         if (p1.LengthChar != p0.LengthChar)
                         {
                             break;
                         }
                         num += p1.Value;
                     }
                 }
                 if (ii >= pli1.Count)
                 {
                     return new PhoneItemToken(t0, pli1[pli1.Count - 1].EndToken)
                            {
                                ItemType = PhoneItemType.Alt, Value = num
                            }
                 }
                 ;
             }
         }
         return(new PhoneItemToken(t0, t0.Next)
         {
             ItemType = PhoneItemType.Alt, Value = t0.Next.GetSourceText()
         });
     }
     if (t0.IsHiphen && (t0.Next is Pullenti.Ner.NumberToken) && (t0.Next.EndChar - t0.Next.BeginChar) <= 1)
     {
         Pullenti.Ner.Token t1 = t0.Next.Next;
         bool ok = false;
         if (t1 == null)
         {
             ok = true;
         }
         else if (t1.IsNewlineBefore || t1.IsCharOf(",."))
         {
             ok = true;
         }
         if (ok)
         {
             return new PhoneItemToken(t0, t0.Next)
                    {
                        ItemType = PhoneItemType.Alt, Value = t0.Next.GetSourceText()
                    }
         }
         ;
     }
     if ((t0.IsChar('(') && (t0.Next is Pullenti.Ner.NumberToken) && (t0.Next.EndChar - t0.Next.BeginChar) == 1) && t0.Next.Next != null && t0.Next.Next.IsChar(')'))
     {
         return new PhoneItemToken(t0, t0.Next.Next)
                {
                    ItemType = PhoneItemType.Alt, Value = t0.Next.GetSourceText()
                }
     }
     ;
     if ((t0.IsCharOf("/-") && (t0.Next is Pullenti.Ner.NumberToken) && ph0.m_Template != null) && Pullenti.Morph.LanguageHelper.EndsWith(ph0.m_Template, (((t0.Next.EndChar - t0.Next.BeginChar) + 1)).ToString()))
     {
         return new PhoneItemToken(t0, t0.Next)
                {
                    ItemType = PhoneItemType.Alt, Value = t0.Next.GetSourceText()
                }
     }
     ;
     return(null);
 }