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; }
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); }