Example #1
0
        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();
        }
Example #2
0
 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);
 }