public override void MergeSlots(Pullenti.Ner.Referent obj, bool mergeStatistic = true) { base.MergeSlots(obj, mergeStatistic); PersonReferent p = obj as PersonReferent; m_SurnameOccurs.AddRange(p.m_SurnameOccurs); m_NameOccurs.AddRange(p.m_NameOccurs); m_SecOccurs.AddRange(p.m_SecOccurs); m_IdentOccurs.AddRange(p.m_IdentOccurs); if (p.m_PersonIdentityTyp != Pullenti.Ner.Person.Internal.FioTemplateType.Undefined) { m_PersonIdentityTyp = p.m_PersonIdentityTyp; } this.CorrectData(); }
public static BookLinkToken TryParseAuthor(Pullenti.Ner.Token t, Pullenti.Ner.Person.Internal.FioTemplateType prevPersTemplate = Pullenti.Ner.Person.Internal.FioTemplateType.Undefined) { if (t == null) { return(null); } Pullenti.Ner.ReferentToken rtp = Pullenti.Ner.Person.Internal.PersonItemToken.TryParsePerson(t, prevPersTemplate); if (rtp != null) { BookLinkToken re; if (rtp.Data == null) { re = new BookLinkToken(t, (rtp == t ? t : rtp.EndToken)) { Typ = BookLinkTyp.Person, Ref = rtp.Referent } } ; else { re = new BookLinkToken(t, rtp.EndToken) { Typ = BookLinkTyp.Person, Tok = rtp } }; re.PersonTemplate = (Pullenti.Ner.Person.Internal.FioTemplateType)rtp.MiscAttrs; for (Pullenti.Ner.Token tt = rtp.BeginToken; tt != null && tt.EndChar <= rtp.EndChar; tt = tt.Next) { if (!(tt.GetReferent() is Pullenti.Ner.Person.PersonPropertyReferent)) { continue; } Pullenti.Ner.ReferentToken rt = tt as Pullenti.Ner.ReferentToken; if (rt.BeginToken.Chars.IsCapitalUpper && tt != rtp.BeginToken) { re.StartOfName = Pullenti.Ner.Core.MiscHelper.GetTextValueOfMetaToken(rt, Pullenti.Ner.Core.GetTextAttr.KeepRegister); break; } return(null); } return(re); } if (t.IsChar('[')) { BookLinkToken re = TryParseAuthor(t.Next, Pullenti.Ner.Person.Internal.FioTemplateType.Undefined); if (re != null && re.EndToken.Next != null && re.EndToken.Next.IsChar(']')) { re.BeginToken = t; re.EndToken = re.EndToken.Next; return(re); } } if (((t.IsValue("И", null) || t.IsValue("ET", null))) && t.Next != null) { if (t.Next.IsValue("ДРУГИЕ", null) || t.Next.IsValue("ДР", null) || t.Next.IsValue("AL", null)) { BookLinkToken res = new BookLinkToken(t, t.Next) { Typ = BookLinkTyp.AndOthers }; if (t.Next.Next != null && t.Next.Next.IsChar('.')) { res.EndToken = res.EndToken.Next; } return(res); } } return(null); }