Пример #1
0
 def process(self, kit: 'AnalysisKit') -> None:
     ad = kit.getAnalyzerData(self)
     models = TerminCollection()
     objs_by_model = dict()
     obj_by_names = TerminCollection()
     t = kit.first_token
     first_pass3158 = True
     while True:
         if first_pass3158: first_pass3158 = False
         else: t = t.next0_
         if (not (t is not None)): break
         its = WeaponItemToken.tryParseList(t, 10)
         if (its is None):
             continue
         rts = self.__tryAttach(its, False)
         if (rts is not None):
             for rt in rts:
                 rt.referent = ad.registerReferent(rt.referent)
                 kit.embedToken(rt)
                 t = (rt)
                 for s in rt.referent.slots:
                     if (s.type_name == WeaponReferent.ATTR_MODEL):
                         mod = str(s.value)
                         for k in range(2):
                             if (not str.isdigit(mod[0])):
                                 li = []
                                 wrapli2638 = RefOutArgWrapper(None)
                                 inoutres2639 = Utils.tryGetValue(
                                     objs_by_model, mod, wrapli2638)
                                 li = wrapli2638.value
                                 if (not inoutres2639):
                                     li = list()
                                     objs_by_model[mod] = li
                                 if (not rt.referent in li):
                                     li.append(rt.referent)
                                 models.addStr(mod, li, None, False)
                             if (k > 0):
                                 break
                             brand = rt.referent.getStringValue(
                                 WeaponReferent.ATTR_BRAND)
                             if (brand is None):
                                 break
                             mod = "{0} {1}".format(brand, mod)
                     elif (s.type_name == WeaponReferent.ATTR_NAME):
                         obj_by_names.add(
                             Termin._new117(str(s.value), rt.referent))
     if (len(objs_by_model) == 0 and len(obj_by_names.termins) == 0):
         return
     t = kit.first_token
     first_pass3159 = True
     while True:
         if first_pass3159: first_pass3159 = False
         else: t = t.next0_
         if (not (t is not None)): break
         br = BracketHelper.tryParse(t, BracketParseAttr.NO, 10)
         if (br is not None):
             toks = obj_by_names.tryParse(t.next0_, TerminParseAttr.NO)
             if (toks is not None
                     and toks.end_token.next0_ == br.end_token):
                 rt0 = ReferentToken(
                     Utils.asObjectOrNull(toks.termin.tag, Referent),
                     br.begin_token, br.end_token)
                 kit.embedToken(rt0)
                 t = (rt0)
                 continue
         if (not ((isinstance(t, TextToken)))):
             continue
         if (not t.chars.is_letter):
             continue
         tok = models.tryParse(t, TerminParseAttr.NO)
         if (tok is None):
             if (not t.chars.is_all_lower):
                 tok = obj_by_names.tryParse(t, TerminParseAttr.NO)
             if (tok is None):
                 continue
         if (not tok.is_whitespace_after):
             if (tok.end_token.next0_ is None
                     or not tok.end_token.next0_.isCharOf(",.)")):
                 if (not BracketHelper.isBracket(tok.end_token.next0_,
                                                 False)):
                     continue
         tr = None
         li = Utils.asObjectOrNull(tok.termin.tag, list)
         if (li is not None and len(li) == 1):
             tr = li[0]
         else:
             tr = (Utils.asObjectOrNull(tok.termin.tag, Referent))
         if (tr is not None):
             tit = WeaponItemToken.tryParse(tok.begin_token.previous, None,
                                            False, True)
             if (tit is not None and tit.typ == WeaponItemToken.Typs.BRAND):
                 tr.addSlot(WeaponReferent.ATTR_BRAND, tit.value, False, 0)
                 tok.begin_token = tit.begin_token
             rt0 = ReferentToken(tr, tok.begin_token, tok.end_token)
             kit.embedToken(rt0)
             t = (rt0)
             continue
Пример #2
0
 def tryAttachList(t: 'Token') -> typing.List['BlockTitleToken']:
     content = None
     intro = None
     lits = None
     tt = t
     first_pass2782 = True
     while True:
         if first_pass2782: first_pass2782 = False
         else: tt = tt.next0_
         if (not (tt is not None)): break
         if (tt.is_newline_before):
             btt = BlockTitleToken.tryAttach(tt, False, None)
             if (btt is None):
                 continue
             if (btt.typ == BlkTyps.INDEX):
                 content = btt
                 break
             if (btt.typ == BlkTyps.INTRO):
                 tt2 = btt.end_token.next0_
                 for k in range(5):
                     li = BlockLine.create(tt2, None)
                     if (li is None):
                         break
                     if (li.has_content_item_tail
                             or li.typ == BlkTyps.INDEXITEM):
                         content = btt
                         break
                     if (li.has_verb):
                         break
                     if (li.typ != BlkTyps.UNDEFINED):
                         if ((li.begin_char - btt.end_char) < 400):
                             content = btt
                             break
                     tt2 = li.end_token.next0_
                 if (content is None):
                     intro = btt
                 break
             if (btt.typ == BlkTyps.LITERATURE):
                 if (lits is None):
                     lits = list()
                 lits.append(btt)
     if (content is None and intro is None
             and ((lits is None or len(lits) != 1))):
         return None
     res = list()
     chapter_names = TerminCollection()
     t0 = None
     if (content is not None):
         res.append(content)
         cou = 0
         err = 0
         tt = content.end_token.next0_
         first_pass2783 = True
         while True:
             if first_pass2783: first_pass2783 = False
             else: tt = tt.next0_
             if (not (tt is not None)): break
             if (not tt.is_newline_before):
                 continue
             li = BlockLine.create(tt, None)
             if (li is None):
                 break
             if (li.has_verb):
                 if (li.end_token.isChar('.')):
                     break
                 if (li.length_char > 100):
                     break
             btt = BlockTitleToken.tryAttach(tt, True, None)
             if (btt is None):
                 continue
             err = 0
             if (btt.typ == BlkTyps.INTRO):
                 if (content.typ == BlkTyps.INTRO or cou > 2):
                     break
             cou += 1
             content.end_token = btt.end_token
             tt = content.end_token
             if (btt.value is not None):
                 chapter_names.addStr(btt.value, None, None, False)
         content.typ = BlkTyps.INDEX
         t0 = content.end_token.next0_
     elif (intro is not None):
         t0 = intro.begin_token
     elif (lits is not None):
         t0 = t
     else:
         return None
     first = True
     tt = t0
     first_pass2784 = True
     while True:
         if first_pass2784: first_pass2784 = False
         else: tt = tt.next0_
         if (not (tt is not None)): break
         if (not tt.is_newline_before):
             continue
         if (tt.isValue("СЛАБОЕ", None)):
             pass
         btt = BlockTitleToken.tryAttach(tt, False, chapter_names)
         if (btt is None):
             continue
         if (len(res) == 104):
             pass
         tt = btt.end_token
         if (content is not None and btt.typ == BlkTyps.INDEX):
             continue
         if (len(res) > 0 and res[len(res) - 1].typ == BlkTyps.LITERATURE):
             if (btt.typ != BlkTyps.APPENDIX and btt.typ != BlkTyps.MISC
                     and btt.typ != BlkTyps.LITERATURE):
                 if (btt.typ == BlkTyps.CHAPTER
                         and (res[len(res) - 1].end_char < (math.floor(
                             (len(tt.kit.sofa.text) * 3) / 4)))):
                     pass
                 else:
                     continue
         if (first):
             if ((tt.begin_char - t0.begin_char) > 300):
                 btt0 = BlockTitleToken(
                     t0, (t0 if t0.previous is None else t0.previous))
                 btt0.typ = BlkTyps.CHAPTER
                 btt0.value = "Похоже на начало"
                 res.append(btt0)
         res.append(btt)
         tt = btt.end_token
         first = False
     i = 0
     while i < (len(res) - 1):
         if (res[i].typ == BlkTyps.LITERATURE
                 and res[i + 1].typ == res[i].typ):
             del res[i + 1]
             i -= 1
         i += 1
     return res